《c语言(第5章循环结构程序设计)(1)》由会员分享,可在线阅读,更多相关《c语言(第5章循环结构程序设计)(1)(42页珍藏版)》请在金锄头文库上搜索。
1、 第5章 循环控制 goto语句 while语句 do-while语句 for语句 break语句 continue语句 15.1 概述循环: 反复执行称为“循环体”的程序段循环控制常用于数学迭代、对象遍历等问 题的求解,几乎所有实用程序都包含循环 C语言中用如下语句实现循环: 1、用goto语句和if语句构成循环。 2、用while语句。 3、用do-while语句。 4、用for语句。25.2 goto语句一般形式: goto 语句标号 作 用: 无条件转向“语句标号”处执行。 “语句标号”是一个标识符,它表示程序指令的 地址,它的定名规则和变量名一样,由字母数 字或下划线组成,第一个字母
2、为字母或下划线 ,不能使用整数来做标号 3 结构化程序设计方法主张限制使用goto 语句,滥用goto语句将使程序流程无规 律,可读性比较差 goto语句有两种用途,一是与if语句一 起构成循环结构,另一是从循环体中跳 转到循环体外4例5.1 用if语句和goto语句构成循环,求 main() int i,sum=0; i = 1; loop: if (i max) max = x;else if (x100,用i+语句来达到这个目 的,如果无此语句,则i的始终不变,循环就永 不结束95.4 do-while语句一般形式: do 语句while (表达式) 特点:“直到型”循环结构,先执行循环
3、体,然后判 断循环条件是否成立先执行一次“语句”,后判“表达式”,当“表达 式”非0,再执行“语句”,直到“表达式”为0,循 环结束。直到P为假语 句语句条件P非0010例5.5 用do-while语句求 。 main() int i,sum=0; i = 1; do sum = sum + i; i+; while (i100”,这两者是等同的。 2、一般情况下,同一个问题,既可以用while循环处理, 也可以用do-while循环处理i=1,sum=0直到i100sum=sum+i i=i+1sum=sum+i i=i+1i0) ;printf (“%ld是%d位数n” , m, n);g
4、etch(); 12求e的近似值。直到某一项的值小于或等于10-7为止。main() int n; float sum, t, m;n=1; sum=1; m=1;do t = 1/m;sum+=t; n+;m=m*n; while(t1e-7);printf(“e = %f n” , sum);getch(); 例5.7135.5 for语句 for语句常用于循环次数已知的循环控制;也可以用于循环次数不确定而只给出循环结束条件的情况, 它完全可以代替while语句。 一般形式:for(表达式1;表达式2;表达式3) 语句执行过程: (1)求表达式1; (2)求表达式2,若为“真”,执行“语句
5、”;若为假,转第(5)步。 (3)求表达式3。 (4)转第(2)步。 (5)执行for语句下面的语句。循环初始条件判别循环条件 修改循环条件14也可以写成while的形式: 表达式1; while(表达式2) 语句;表达式3; for语句最简单的应用形式也就是最易于 理解的如下形式: for(循环变量赋初值;循环条件;循环变量增值) 例:for(i=1;i100) break;236.三个表达式都可省略 如:for( ; ;) 语句; 相当于while(1) 语句; 即不设初值,不判断条件,循环变量不 增值,无终止的执行循环体24例5.8求s=1!+2!+3!+n! , 其中n小于30。 ma
6、in() long s, t;int i, n;printf(“input n:“);scanf(“%d“, s=0; t=1;for(i=1; i0)n+;printf(“n=%dn“, n);getch(); 31几种循环的比较 四种循环都可以用来处理同一问题,一般情况下 可以互相代替,但不提倡goto循环 while和dowhile循环,只在while后面指定循环 条件,在循环体中应包含使循环趋于结束的语句 ;for循环可以在表达式3中包含使循环趋于结束 的操作,也可以将循环体中的操作全部放到表达 式3中 凡是用while循环能完成,用for循环都可以实现32 用while和dowhil
7、e循环时,循环变量的初始 化的操作应在while和dowhile语句之前完成 ,而for语句可以在表达式1中实现循环变量的 初始化 while,dowhile和for循环,可以用break语 句跳出循环,用continue语句结束本次循环335.8 break语句和continue语句 一、break语句 作用:跳出所在的多分支switch语句,跳出所在的 while,do-while,for循环语句(提前结束循环)。 例 #define PI 3.14 main() int r; float area; for (r=1;r 100) break;printf(“%d,%6.2fn“,r,a
8、rea); printf(“%d,%6.2fn“,r,area); 当r=6时,area100,执行break语句, 提前结束循环,不再计算 r =710的area。运行结果: 1 3.14 2 12.57 3 28.27 4 50.27 5 78.54 6 113.10 34二、continue语句 作用:提前结束本次循环体的执行,接着进行下 一次循环条件的判别。例5.13 把100200之间不能被3整除的数输出。 main () int n; for (n=100; n= 1E-6) pi = pi + t; n = n + 2; s = -s; t = s/n; pi = pi * 4;
9、 printf(“pi=%10.6fn“,pi); 运行结果:pi=3.14159438例5.14:判断m是否是素数 让m被2到sqrt(m)除,如果被其中任何一个整数 整除,则提前结束循环 #include “math.h“ main() int m,i,k; scanf(“%d“, k=sqrt(m+1); /*为了避免在求sqrt(m)时出现的误差*/ for(i=2;i=k+1) printf(“%d is a prime numbern“,m); else printf(“%d is not a prime numbern“,m); getch(); 39例5.15:求100200间
10、的全部素数#include “math.h“ main() int m,k,i,n=0; for(m=101;m=k+1) printf(“%4d“,m);n=n+1; if(n%10=0) printf(“n“); printf(“n“); getch(); n的作用是累计输出素数 的个数,控制每行输出 10个数据40例5.16:译密码:为使电文保密,往往按一定 规律将其转换成密码,收报人再按约定的规律将 其译回原文。将字母A变成E,a变成e,即变成其后的第4 个字母,W变成A,X变成B,Y变成C,Z变成D ,字母按上述规律转换,非字母字符不变,如 “China”转换成“Glmre”41 #include “stdio.h“ main() char c; while(c=getchar()!=n) if(c=a printf(“%c“,c); getch(); 42