
3.3 循环结构程序设计
学习目标
1)掌握循环结构的内涵。
2)掌握while循环语句的结构和应用。
3)掌握循环结构程序中break和continue语句的用法。
4)掌握for循环语句结构的内涵。
5)掌握for循环语句的结构和执行过程。
6)掌握do-while循环语句结构的内涵。
7)掌握do-while循环语句的结构和执行过程。
8)掌握循环结构程序中break和continue语句的用法。

实例15
实例15 while循环语句——求1+2+…+100的值
实例任务
用while语句求1+2+3+…+100的值。程序运行结果如图3-14所示。

图3-14 程序运行结果
程序代码


相关知识
1.循环结构程序设计
循环结构是结构程序的3种基本结构之一,它和顺序结构、选择结构共同作为各种复杂程序的基本构造单元。循环结构的特点是:在给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。C语言的循环体语句有while语句、do-while语句、for语句。
2.while语句
while语句用于实现“当”型循环结构。其一般形式如下:

其执行过程是当表达式为非0值时,执行循环体。循环体内语句可以是空语句,可以是一条语句,可以是多条语句。如果为空语句或一条语句,可略去{}。
循环执行过程中,如果参与表达式判断的变量值不能改变,则循环不会结束,称为死循环。
课堂精练
1)统计从键盘输入的一系列字符的个数。程序运行结果如图3-15所示。

图3-15 程序运行结果(1)
根据程序运行结果,请将下面的程序补充完整并调试。

2)求n!的值。程序运行结果如图3-16所示。

图3-16 程序运行结果(2)
根据程序运行结果,请将下面的程序补充完整并调试。


实例16
实例16 for循环语句——统计大写字母和小写字母的个数
实例任务
编写一个程序,用于接收用户输入的10个字符,统计其中大写字母和小写字母的个数,并比较大写字母与小写字母的个数,显示相应的消息。程序运行结果如图3-17所示。

图3-17 程序运行结果
程序代码


相关知识
1.for语句
for语句是C语言中最灵活、功能最强的循环语句。它不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况。for语句完全可以代替while语句。for语句的一般形式为:

for语句的执行过程是:运行之初先求解表达式1,然后进行表达式2的条件判断,如果条件成立,则执行循环体,如果条件不成立,则退出循环。在执行循环体后,再计算表达式3,之后转去执行表达式2的条件判断,如果成立,继续执行循环体,否则退出循环。首次执行循环体后,按计算表达式3、判断表达式2的顺序循环执行,直到条件不成立为止,结束循环。
2.表达式说明
表达式1通常用来给循环变量赋初值,一般是赋值表达式。也可以在for语句外给循环变量赋初值,此时可以省略该表达式。表达式1在整个循环过程中只执行一次。
表达式2通常是循环条件,一般为关系表达式或逻辑表达式。
表达式3通常可以用来修改循环变量的值,一般是赋值语句。如果想省略表达式3,可以把相应语句放到循环体中完成。
这3个表达式都可以是逗号表达式,即每个表达式都可以由多个表达式组成。3个表达式都是任选项,都可以省略。但要注意,在省略表达式的同时,两个分号必须保留,因为语句要求用两个分号将3个表达式分开。如以下语句:


3.for语句中的逗号表达式
逗号运算符的主要应用就在for语句中。表达式1和表达式3常为逗号表达式,求解它们时可完成多个表达式(往往为赋值表达式、自增自减表达式)的一次求值。如下列表示方式:

从上面几种表达方式可以看出,C语言中的for语句功能强大。可以把循环体和一些与循环控制无关的操作也作为表达式1或表达式3出现,这样程序可以短小简洁。但过分地利用这一特点会使for语句显得杂乱,可读性降低,建议不要把与循环控制无关的内容放到for语句中。
课堂精练
1)把100~200之间的整数中不能被3整除的数输出,要求每行输出5个,最后1行除外。程序运行结果如图3-18所示。

图3-18 程序运行结果(1)
根据程序运行结果,请将下面的程序补充完整并调试。


2)判断一个整数是否为素数(素数是指只能被1和它本身整除的数)。判断方法是看m能否被之间的整数整除,即如果m不能被
中的任何一个整数整除,则m是素数;只要m能被
中的某一个整数整除,则m为非素数。程序运行结果如图3-19所示。

图3-19 程序运行结果(2)
根据程序的运行结果,请将下面程序补充完整并调试。


实例17
实例17 do-while循环语句——求1+2+…+100和12+22+…+302的值
实例任务
用do-while语句求s1=1+2+3+…+100和s2=12+22+32+…+302的值。程序运行结果如图3-20所示。

图3-20 程序运行结果
程序代码


相关知识
1.do-while语句
do-while语句的特点是先执行循环体,然后判断循环条件是否成立。其一般形式为:

其执行过程是先执行一次指定的循环体语句,然后进行条件判断,也就是先计算表达式的值,当表达式的值为非零(“真”)时,返回重新执行循环体语句。如此反复,直到表达式的值等于0为止,此时循环结束。
2.while语句和do-while语句的区别
while语句执行时,先进行条件判断,条件成立的情况下才执行循环体。do-while语句是先执行一次循环体,再进行条件判断,直到表达式不成立时终止循环。
3.break语句和continue语句
在switch语句中,可用break语句终止switch语句的执行以跳出该switch语句。同样,在3种循环语句中可用break语句终止该循环语句的执行而跳出,它的一般形式是:

continue语句用于结束本次循环,即跳过循环体中在continue语句后面的尚未执行的其他语句,而执行下一次循环,它的一般形式是:

课堂精练
1)求s=1+2+3+…+100的值。程序运行结果如图3-21所示。

图3-21 程序运行结果(1)
根据程序运行结果,请将下面的程序补充完整并调试。

2)求s=1+1/2+1/4+…+1/50的值。程序运行结果如图3-22所示。

图3-22 程序运行结果(2)
根据程序运行结果,请将下面的程序补充完整并调试。


实例18
实例18 循环的嵌套结构——百钱买百鸡问题
实例任务
中国古代数学家张丘建在他的《算经》中提出了著名的“百钱百鸡问题”:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何?编写程序解决此问题,程序运行结果如图3-23所示。

图3-23 程序运行结果
程序代码

相关知识
1.循环嵌套
在一个循环体内又完整地包含了另一个循环,称为循环嵌套。前面介绍的3种类型的循环都可以互相嵌套,循环的嵌套可以是多层的,但每一层循环在逻辑上必须是完整的。在编写程序时,循环嵌套的书写要采用缩进的形式,如本实例程序中所示,内循环中的语句应该比外循环中的语句有规律地向右缩进2~4列,这样编写的程序层次分明,易于阅读。
2.百钱买百鸡问题解析
百钱买百鸡是一道用C语言程序解决数学方程运算问题的典型试题,用到了程序中的典型方法——穷举法。假设x、y、z分别为鸡翁、鸡母、鸡雏的只数,依题意可得出联立方程组如下:

3个未知数,只有两个方程式,所以x、y、z可能有多组解,因此,可用“穷举法”列举x、y、z可能满足要求的组合,最后把符合上述两个方程的x、y、z的值输出。
课堂精练
1)输出一个空心菱形图案,程序运行结果如图3-24所示。
根据程序运行结果,请将下面的程序补充完整并调试。

图3-24 程序运行结果(1)


2)输出九九乘法表,程序运行结果如图3-25所示。

图3-25 程序运行结果(2)
根据程序运行结果,请将下面的程序补充完整并调试。

