5.1 引例
【例5.1】计算人口有规律增长的数量(流程图及代码运行结果)
【例5.2】使用while循环有规律累加值为止的编写程序(流程图及代码运行结果)
5.2 使用for语句实现循环结构
5.2.1 for语句的基本语法
for语句的一般形式为:
for(表达式1;表达式2;表达式3)
循环题语句;
大部分情况下,循环体语句为一复合语句。
注意,表达式1只是在进入循环之前计算一次。表达式2、循环体语句和表达式3将会重复执行。
1、可以应用于计数型的循环
格式如下:
for(循环变量赋初值‘循环条件;循环变量增量)
循环体语句;
【例5.3】输入一个正整数,求累加n阶乘的值(流程图及代码运行结果)
【例5.4】输入一个正整数,求累加n阶乘的值(流程图及代码运行结果)
2、for语句的一般形式中省略表达式1
格式如下:
for( ;表达式2;表达式3)
循环体语句;
说明:省略表达式1时,可以将循环变量赋初值放在for之前。注意,此时不能省略第一个“;”。
3、for语句的一般形式中省略表达式2
格式如下:
for(表达式1; ;表达式3)
循环体语句;
说明:省略表达式2时,表示不对循环体进行控制,这时如果没有其他处理的话,会形成死循环。应避免这样的for结构。
4、for语句的一般形式中省略表达式3
格式如下:
for(表达式1; ;表达式3)
循环体语句;
说明:省略表达式3时,可以在循环体语句中加入修改循环变量的值的语句。
5、for语句的一般形式表达式1和表达式3也可以式逗号表达式
6、for语句的一般形式中表达式2的值只要非0,就执行循环体
7、for语句的一般形式中循环体语句可以省略
由以上7种应用可以看出,for循环控制结构功能强大,在解决实际问题中起着非常重要的作用。
5.2.2 for循环使用示例
【例5.5】 编写程序,计算有规律的前n项之和(流程图及代码执行结果)
【例5.6】编写程序,输入10个数,输出其中最大数(流程图及代码执行结果)
【例5.7】编写程序,输入相应的水仙花数。(流程图及代码执行结果)
【例5.8】编写程序,由键盘输入一个正整数,判断该数是否为完数(流程图及代码执行结果)
【例5.9】统计由键盘中输入的若干个字符中,大写英文字母,小写英文字母,数字字符和其他字符的个数(流程图及代码及执行结果)
【例5.10】任意输入一行小写字母,将他们转换成大写字母后输出(流程图及代码执行结果)
【例5.11】由键盘输入3个数字,将其组合成一个整型数并输出(流程图及代码执行结果)
【例5.12】编写程序,由键盘输入一个正整数,判断其是否为素数(流程图及代码执行结果)
5.3 使用while语句实现循环结构
5.3.1 while语句的基本语法
while语句在使用时,总是先要判断一个条件,所以可以用while语句实现“当型”循环。while语句的一般形式如下:
while(表达式)
循环体;
注意,while语句的特点是先判断循环条件,后执行循环体。
5.3.2 while循环使用示例
【例5.13】计算1-100的累加和的值(流程图及代码执行结果)
【例5.14】输入一个正整数n,计算n!(流程图及代码执行结果)
【例5.15】由键盘输入一串字符,分别统计输入字符中数字字符,字母字符集其他字符的个数(流程图及代码执行结果)
5.4 使用do-while语句实现循环结构
5.4.1 do-while语句的基本语法
do-while语句在使用时,首先执行循环体语句,然后再判断条件。所以可以用do-while语句实现“直到型”循环。do-while语句一般形式如下:
do
循环体
while(表达式);
注意,do-while语句的特点是先执行循环体,后判断循环条件。因此,do-while循环至少执行一次循环体。
5.4.2 do-while循环使用示例
【例5.16】使用do-while语句计算1-100累加的值(流程图及代码执行结果)
【例5.17】求两个自然数的最大公约数和最小公倍数(流程图及代码执行结果)
【例5.18】输入一个整数,统计该数的位数(流程图及代码执行结果)
5.5 改变循环结构的跳转语句
5.5.1 break语句
break语句用在循环语句和switch语句中,在switch语句中的用法第4章已经介绍,这里介绍其在循环语句中的用法。
break语句的一般形式如下:
break;
当break语句用于循环语句中时,可使程序终止循环而转去执行循环语句的后继语句。通常break语句总是与if语句一起配合使用,即满足条件时跳出循环。
【例5.19】分析下面程序的运行结果(流程图及代码执行结果)
【例5.20】编写程序,由键盘输入一个正整数,判断其是否为素数(流程图及代码执行结果)
【5.21】从键盘输入一批学生的成绩(以负数作为结束标志),计算平均分,并统计不及格成绩的个数(流程图及代码执行结果)
5.5.2 continue语句
【例5.22】把1-100之间能被7整除的数,以每行5个的形式在屏幕输出(流程图及代码执行结果)
【例5.23】分析下面程序的运行结果(流程图及代码执行结果)
5.5.3 goto语句
除了前面介绍的3种循环控制语句,即for循环语句,while循环语句及do-while循环语句之外,在c语言中,还有一种可以实现循环控制的语句,即goto语句。
goto语句的一般形式如下:
goto语句标号;
说明:语句标号是一个有效的标识符,使用时在语句标号的后面跟一个“:”出现在函数中某语句的前面。程序执行到goto语句,会控制跳转到该语句标号处,达到控制循环的目的。
【例5.24】使用goto语句计算1-100的累加的值(流程图及代码执行结果)
5.6 循环嵌套
当一个循环的循环体内又包含了另一个完整的循环结构时,称为循环的嵌套或者是二重循环。根据问题的需要,可以构成三重及以上的循环嵌套结构,但一般情况下最多使用到三重循环。
使用for语句,while语句及do-while语句相互嵌套,构成的嵌套结构有以下几种。
1、for语句中嵌套for语句 2、for语句中嵌套while语句
3、while语句中嵌套while语句 4、do-while语句中嵌套for语句
5、do-while语句中嵌套do-while语句 6、while语句中嵌套do-while语句
【例5.25】求1-10阶乘的和(流程图及代码执行结果)
【例5.26】编程程序,输出乘法口诀(流程图及代码执行结果)
【例5.27】求100以内的素数,要求每行输出10个(流程图及代码执行结果)
【例5.28】将10-20之间的正整数分解质因数(流程图及代码执行结果)
5.7 典型算法举例
5.7.1 递推法
【例5.29】猴子吃桃问题(流程图及代码执行结果)
【5.30】用递推法求解的典型应用(流程图及代码执行结果)
5.7.2 迭代法
【例5.31】用牛顿迭代法求一元二次方程的解(流程图及代码执行结果)
5.7.3 穷举法
【例5.32】搬砖问题(流程图及代码执行结果)
【例5.33】编程程序,判断1,2,3,4四个数组成多少个互不相同且无重复的三位数(流程图及代码执行结果)
5.8 循环程序设计示例
【例5.34】编程输出金字塔型字符串(流程图及代码执行结果)
【例5.35】猜数字游戏(流程图及代码执行结果)
【例5.36】编写程序输出100-1000内的回文素数(流程图及代码执行结果)
【例5.37】在所有三位整数中找出平方数中有连续的三位数字是该数本身的数(流程图及代码执行结果)