《幻灯片-c语言程序设计视频教程-徐红波-第6章》由会员分享,可在线阅读,更多相关《幻灯片-c语言程序设计视频教程-徐红波-第6章(25页珍藏版)》请在金锄头文库上搜索。
1、C程序设计,讲师:徐红波 Email: x_h_,第6章 循环控制 6.1 概述,在许多问题中需要用到循环控制。例如,要输入全校学生成绩;求若干个数之和;迭代求根等。绝大多数的应用程序都包含循环。循环结构是结构化程序设计的基本结构之一,它和顺序结构、选择结构共同作为各种复杂程序的基本构造单元。,6.2 goto语句以及用goto语句构成循环,goto语句为无条件转向语句,它的一般形式为: goto 语句标号; 语句标号用标识符表示。例如: goto label_1; 结构化程序设计方法主张限制使用goto语句,因为滥用goto语句将使程序流程无规律、可读性差。但不是绝对禁止使用goto语句。一
2、般来说,有两种用途: (1)与if语句一起构成循环结构。 (2)从循环体中跳转到循环体外。,例6.1用if语句和goto语句构成循环, 求1+2+100,#include void main() int i, sum=0; i=1; loop: if(i=100) sum=sum+i; i+; goto loop; printf(“%dn”, sum); ,6.3 用while语句实现循环,while语句用来实现“当型”循环结构。一般形式如下: while (表达式) 语句,例6.2用while语句构成循环求1+2+100,6.4 用dowhile语句实现循环,dowhile语句的特点是先执行
3、循环体,然后判断循环条件是否成立。一般形式为: do 循环体语句 while (表达式);,例6.3用dowhile语句求1+2+100,例6.4while和dowhile循环的比较,#include void main() int sum=0, i; scanf(“%d”, ,#include void main() int sum=0, I; scanf(“%d”, ,6.5 用for语句实现循环,C语言中的for语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。 for语句的一般形式为: for(语句
4、1;语句2;语句3) 语句,for语句最简单的应用形式: for(循环变量赋初值;循环条件;循环变量增值) 语句 for语句的一般形式可以改写为while循环的形式: 表达式1; while (表达式2) 语句 表达式3; ,说明:,(1)for语句的一般形式中的“表达式1”可以省略,此时应在for语句之前给循环变量赋初值。 (2)如果表达式2省略,即不判断循环条件,循环无终止地进行下去。 (3)表达式3也可以省略,但此时程序设计者应另外设法保证循环能正常结束。 (4)可以省略表达式1和表达式3,只有表达式2,即只给循环条件。 (5)3个表达式都可省略。 (6)表达式1可以是设置循环变量初值得
5、赋值表达式,也可以是与循环变量无关的其他表达式。 (7)表达式2一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要其值为非零,就执行循环体。,6.6 循环的嵌套,一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。 3种循环(while循环、dowhile循环和for循环)可以相互嵌套。,6.7 几种循环的比较,(1)4种循环都可以用来处理同一问题,一般情况下它们可以相互替代。但一般不提倡用goto型循环。 (2)在while循环和dowhile循环中,只在while后面的括号内指定循环条件,因此为了使循环能正常结束,应在循环体
6、中包含使循环趋于结束的语句(如i+或i=i+1等)。 (3)用while和dowhile循环时,循环变量初始化的操作应在while和dowhile语句之前完成。而for语句可以在表达式1中实现循环变量的初始化。 (4)while循环、dowhile循环和for循环,可以用break语句跳出循环,用continue语句结束本次循环。而对用goto语句和if语句构成的循环,不能用break语句和continue语句进行控制。,6.8 break语句和continue语句 6.8.1 break语句,用break语句可以使流程跳出switch结构,继续执行switch语句下面的一个语句。break还
7、可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句。,6.8.2 continue语句,其作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。,例6.5把100200之间的不能被3整除的数输出,#include void main() int n; for(n=100; n=200; n+) if(n%3=0) continue; printf(“%d “, n); printf(“n”); ,6.9 程序举例 例6.6用/41-1/3+1/5-1/7+公式求的近似值,直到某一项的绝对值小于10-6为止,例6.7求Fibonacci数列前4
8、0个数。这个数列有如下特点:第1、2两个数为1、1。从第3个数开始,该数是其前面两个数之和,例6.8判断m是否素数 例6.9求100200间的全部素数,例6.10译密码。为使电文保密,往往按一定规律将其转换成密码,受保人再按约定的规律将其译回原文,例如,可以按一下规律将电文变成密码: 将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D。 字母按上述规律转换,非字母字符不变。例如“China!”转换为“Glmre!”。,习题,6.2 输入一行字符,分别统计出其中英文字母、空格、数字和其他字母的个数。 6.3 求Sn=a+aa+aaa+aaa之值,其中a是一个数字,n表示a的位数,例如: 2+22+222+2222+22222(此时n=5) 6.4 求1!+2!+3!+4!+20!,6.6 输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是一个水仙花数,因为153=13+53+33 6.8 有一分数序列2/1,3/2,5/3,8/5,13/8,21/13,求出这个数列的前20项之和,6.14 输出以下图案 * * * * * * * * * * * * * * * * * * * * * * * * *,