再上一篇:4 .3 .2 循环三要素
上一篇:4 .3 .3 循环的 3 种形式
主页
下一篇:第 5 章 使 用 数 组
再下一篇:5 .2 使用数组的 3 个步骤
文章列表

4 .3 .4 控制循环的执行

《程序设计基础》(基于C语言讲解) 石光华 编著 —北京: 清华大学出版社

使用循环语句,可以让程序做一件事情,一直做到满意为止。在循环的过程中,有时要提前中止循环,前面曾讲述的break语句可以用在这3种循环的循环体中,作用就是立即中止循环。

中止循环的基本格式为

break;

在循环过程中执行了break;语句后,则不论是否达到循环的条件表达式表达的结束条件,立即中止循环,执行循环语句后面的语句。例4-10的程序中,条件表达式表达的循环条件是i< = 10 000,可以循环10 000 次;但当 i= 20 时,条件 i%20 = = 0 成立,则break; 语句被执行。 break; 语句执行后, 程序不再进行循环, 而执行循环后面的printf(″%d″,i);语句,也就是说,跳出了循环。

【例4-11】 以下循环只执行20次。

#include < stdio .h>

void main()

{

int i=1;

while(i < =10000)

{

if(i%20= =0)

break;

i=i+1;

}

printf(″%d″,i);

}

50 程序设计基础

有时需要在一定条件下加快循环,使用continue 语句即可。continue 语句只能用在

循环体中,基本格式为

continue;

其语义是,不再执行循环体中continue语句之后的语句,立即转入对循环条件的判

断。需要特别注意的是,continue语句只是不再执行continue语句之后的语句,并不结束

循环,即

在whlie和do-whlie 语句中,执行continue语句后则立即执行对whlie 括号中的

条件表达式进行判断。

对for 语句,continue 语句在不执行其后的语句后,先求解表达式3,再求解表达

式2。

【例4-12】 使用continue语句的程序,程序将输出0~30的全部偶数。

#include < stdio .h>

void main()

{

int i=0;

while(i<30)

{

i=i+1;

if(i%2 !=0)

continue;

printf(″%d\n″,i);

}

}

使用continue语句,在循环时跳过奇数,只输出偶数。

双语精髓

The sequence control structure is the straightforward execution of one processing

step after another .It can be used to represent the first four basic computer operations:

to receive information,put out information,perform arithmetic,andassignvalues .

顺序控制结构是一步接一步地直接顺序执行一个程序。它可以用于完成4种基本操

作:接收信息、输出信息、完成算术运算和进行赋值。

第4章 程序的运行顺序 51

The selection control structure is the presentation of a condition and the choicebetween two actions . The choice depending on whether the condition is true or false .This construct represents the decision-making abilities of the computer, namely tocompare twovariablesand select one of twoalternateactions .

选择控制结构是表达一个条件并且在两个活动中进行选择。选择取决于条件是真还是假。这种结构使计算机具有了做决定的能力,也就是说,比较两个变量,然后在两个活动中选择一个。

The repetition control structure can be defined as the presentation of a set ofinstructions tobe performedrepeatedly,as longas acondition is true .The basic idea asrepetitive code is that a block of statement is executed again and again, until aterminatingcondition occurs .

循环控制结构可以定义为:当一个条件为真时,重复地完成一组指令。循环语句的基本思想是一遍又一遍地执行一组语句,直到有终止条件出现。

本章知识要点

程序的控制结构是本章的重点,也是编程的基础。以顺序执行结构为基本框架,通过选择控制结构,可以改变程序的执行路线,而通过循环结构,则可以让程序反复地做,直到满意为止。在一个程序中,3种结构可以不同时存在,但至少存在顺序执行结构。因此,如何在顺序执行结构的基础上,采用合适的控制结构,实现程序的意图,即设计合适的算法,是程序设计的重点。而要能够设计算法,必须掌握程序的基本框架,正确使用基本的选择、循环语句,掌握其格式和执行流程。即应该掌握如下知识。

(1) 顺序执行的C语言程序基本框架。

(2) if语句的两种典型形式及其执行流程,如何采用表达式表达条件。

(3) switch语句的作用、构成形式与运行过程,语句的终止和跳出条件。

(4) while,do-while和for 3种循环结构的构成形式、运行流程。

(5) break,continue语句的作用。

典型试题分析

【例4-13】 选择正确的选项。

在与switch语句配套的case语句中所使用的表达式 。

52 程序设计基础

A .只能是常量

B .可以是变量或常量

C .只能是常量或常量表达式

D .无论是常量还是变量,只要在执行时已经有确定的值就可以

试题分析 本题考核了case语句的规定。正确答案是C。

【例4-14】 选择正确的选项。

if语句中用来作为判断条件的表达式是 。

A .逻辑表达式

B .关系表达式

C .算术表达式

D .以上3种表达式

试题分析 在if 语句中,表达式作为分支的判断条件,判断为真还是假的依据是表

达式的值:0为真、非0为假。正确答案是D。

【例4-15】 分析下面程序中的错误。

#include < stdio .h>

void main()

{

float fprice=0;

printf(″Please input price:\n″);

scanf(″%f″,&fprice);

if(fprice=300)

printf(″Buy it !″);

}

这个程序无论输入什么价格,都会输出“Buy it !”。错误出在if 语句中,fprice=300

进行的是赋值运算,而不是想要的比较相等的关系运算。

程序员在写程序时最容易犯的是逻辑错误。如果在条件表达式中进行赋值运算,则

可能把逻辑错误隐藏起来,导致程序不正常,这是要特别注意的地方。

【例4-16】 分析下面程序中的错误。

#include < stdio .h>

void main()

{

int result[10] ={0},iindex=0;

while (iindex<9)

第4章 程序的运行顺序 53

{

result[iindex] =20;

printf(″%d″,result[iindex]);

}

}

这个程序是一个死循环,程序将一直不停地在屏幕上输出20。解决的办法是在循环体内增加语句,改变循环变量iindex的值,使其最后达到条件为真。

练习题

1 .找出生活中10种必须满足一定条件才能做的事情,然后按格式改写成:如果 条件 做某件事,再分别把其中的条件和做某件事写成C表达式,最后写成C语句。例如,

(1) 气温高于30℃,可以开空调了。

(2) 如果 条件 做某件事。

(3) 如果 气温高于30℃ 开空调。

(4) if (temperature>30) printf( Turnon!”);

2 .讨论条件的表达方式在程序中有何特点,需要同时满足多个条件时如何用语言表达,在C程序中又如何表达。

3 .写出生活中10种反复做直到满足一定条件才停止的事情,然后按格式改写成:做事情 直到满足条件,再分别把其中的条件和事情写成C 表达式,最后写成 C 语句。例如,

(1) 把水烧开为止。

(2) 做 事情 直到满足 条件

(3) 做 烧水 直到满足 水开了

(4) do temperature= temperature+1;while ( !(t >100));

4 .讨论如何用变量表达烧水这样的事情,及条件的表达方式如何与所做事情相匹配。

5 .讨论3种循环表达形式的不同与相同之处。

6 .使用do-while语句编写的程序与while 语句编写的程序可以相互改写吗? 如果可以,请给出改写的例子。

7 .在以下程序中,显示的数字一共有 个。

#include < stdio .h>

void main()

54 程序设计基础

{

int iloop=0;

for(iloop=0;iloop<20;iloop=i+1)

{

if(i %2= =0)

continue;

printf(″%d\n″,i);

}

}

A .20

B .19

C .10

D .19

8 .写出完整的程序,实现:如果输入的价格iprice>200,则把iprice 的值变为50,并

在屏幕上输出iprice 的值。

9 .写出完整的程序,实现:如果我有空而且有超过50元的钱,就去看电影,否则就去

图书馆。要求“有空”用ifree输入, 钱”用fmoney输入。

10 .写出完整的程序,实现:输入奖学金等级,输出奖学金金额。奖学金共分为4 等,

一等1 000元,二等500元,三等200元,其他为0。等级用ilevel 输入,要求用switch语

句实现。

11 .写出完整的程序,实现:输入密码,如果等于8848则显示“loading ...”,并退出循

环;否则显示“input again!”。如果输入超过3次,则退出循环并结束程序。要求密码用

ikeyword输入,用icount记录输入次数。