版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第 2 2 页l提出问题提出问题提问:提问:打印打印10行行“*”,怎么编程?,怎么编程?回答:回答:写写10个个printf(“*” );语句。语句。提问:提问:打印打印500行,怎么编程?行,怎么编程?回答:回答:这个,嗯这个,嗯? 不会让我写不会让我写500个个.注意:注意:让我们换一个角度来看待这些问题,让我们换一个角度来看待这些问题, 以上问题实质是:将以上问题实质是:将printfprintf函数重复执行函数重复执行n n遍。遍。printf(“*” );第 3 3 页l循环循环 反复执行同一段程序,直到满足反复执行同一段程序,直到满足一定的条件后才停止执行该段程序。一定的条件后才
2、停止执行该段程序。lc语言中控制循环的语句:语言中控制循环的语句: while do-while do-while for for第 4 4 页lwhile语句格式语句格式while ( while ( 表达式表达式 ) ) 语句语句;说明:语句说明:语句部分可以是部分可以是简单语句简单语句,也可,也可以是以是复合语句复合语句。lwhilewhile语句的执行流程语句的执行流程表达式表达式?执行语句语句成立成立不成立不成立执行while循环之后的语句循环控制条件循环控制条件循环体循环体第 5 5 页l例例: : 从键盘输入从键盘输入1010个整数,求这个整数,求这1010个整数的和。个整数的和
3、。 #include #include main ( )main ( ) int count,num,total; int count,num,total; / /* * count: count:计数器,计数器,num:num:输入的整数输入的整数 * */ / count=0; count=0; total=0; total=0; / /* * total: total:存放累加和存放累加和 * */ / while while ( ( count10count10 ) ) / /* * 循环控制条件循环控制条件 * */ / count +; count +; / /* * 循环体循环体
4、 * */ / printf (enter the no.%d=, count); printf (enter the no.%d=, count); scanf (%d, &num); scanf (%d, &num); total += num; total += num; / /* * 计算累加和计算累加和 * */ / printf(total=%dn, total); printf(total=%dn, total); 第 6 6 页l例:例:分析程序的运行结果分析程序的运行结果 #include #include main ( )main ( ) int n=0;int n=0;w
5、hile ( n3 )while ( n3 )printf (printf (”n is %dnn is %dn”,n);,n);n+;n+;printf(printf(”thats all this program thats all this program does.ndoes.n”);); 结果:结果:程序将不停的打印程序将不停的打印“n is 0”,直至终止程序,直至终止程序l无法正常终止的程序,称为无法正常终止的程序,称为“死循环死循环”。结论:结论:在在while语句语句循环体循环体中,一定要有能够中,一定要有能够对循环控制对循环控制条件产生影响的语句条件产生影响的语句。避免出现
6、。避免出现“死循环死循环”现象。现象。第 7 7 页l例例1:分析下列程序段分析下列程序段 index=1;index=1;while ( while ( index index 5 ) 5 )printf(printf(”good morning!ngood morning!n”););分析:分析:程序段将无限制打印字符串。因为循环中没有任何程序段将无限制打印字符串。因为循环中没有任何语句可以改变循环控制变量语句可以改变循环控制变量index的初值的初值1l例例2:分析下列程序段分析下列程序段 index=1;index=1;while( while( - index index 5 ) 5
7、 )printf(printf(”good morning!ngood morning!n”););分析:分析:仍有问题,程序改变了仍有问题,程序改变了index的值,但方向错了。的值,但方向错了。在在index达到系统能够处理的最大负数时,将会产达到系统能够处理的最大负数时,将会产生下溢而终止程序。生下溢而终止程序。结论:结论:循环体中必须有能够使循环循环体中必须有能够使循环正常停止正常停止的条件。的条件。第 8 8 页l【例【例6.16.1】求】求1001nnmainmain()() int i int i,sumsum0;0; i=1 i=1; whilewhile(i i100100)
8、 sum=sum+i sum=sum+i; i=i+1i=i+1; printf printf(“d”d”,sumsum);); 第 9 9 页l【例【例6.26.2】求前】求前n n个数的平方的和:个数的平方的和:n1i2i根据上例写出程序如下:根据上例写出程序如下: mainmain()() int i=1 int i=1,sum=0sum=0,n n; scanf(“%d”,&n)scanf(“%d”,&n); whilewhile(i=ni=n) sum = sum + i sum = sum + i* *i i; i+i+; printf printf(“i=%d,n=%d,sum=
9、%dn”i=%d,n=%d,sum=%dn”,i,n,sumi,n,sum);); 第 1010 页 该例也可以写成如下:该例也可以写成如下: mainmain()() int i=1 int i=1,sumsum0 0,n n; scanf(“%d”,&n)scanf(“%d”,&n); whilewhile(n n) sum = sum + n sum = sum + n* *n n; n-n-; printf printf(“i=%d,n=%d,sum=%dn”i=%d,n=%d,sum=%dn”,i,n,sumi,n,sum);); 第 1111 页l【例【例6.36.3】将输入的字符
10、原样输出,以】将输入的字符原样输出,以“#”#”号结束。号结束。#include #include main()main() char c char c; c=getchar()c=getchar(); while(c!=#)while(c!=#) putchar putchar(c c);); c=getchar()c=getchar(); 第 1212 页上述程序也可以写为:上述程序也可以写为:#include “stdio.h”#include “stdio.h”main()main() char c char c; while(c=getchar()!=#)while(c=getcha
11、r()!=#) putchar putchar(c c);); 第 1313 页【例【例6.46.4】统计从键盘输入的以】统计从键盘输入的以nn结束的字符中英文结束的字符中英文字母的个数。字母的个数。 #include #include main()main() int n=0; int n=0; char c; char c; while(c=getchar()!=n) while(c=getchar()!=n) if(c=a&c=a&c=a&c=a&c=z) n+; n+; printf(%dn,n); printf(%dn,n); ab2!ab2!* *abab 4 4第 1414 页l
12、while使用注意使用注意 1.while (1.while (0 0) . ) . 由于循环的条件表达式恒由于循环的条件表达式恒等于等于0 0,循环体永远也不会执行。,循环体永远也不会执行。 2.while (2.while (1 1) . ) . 由于循环的条件表达式恒由于循环的条件表达式恒等于等于1 1,所以不可能通过循环控制条件来结束循环体,所以不可能通过循环控制条件来结束循环体的执行,称为的执行,称为“死循环死循环”。 3.3.为了保证循环正常运行,应该特别注意:为了保证循环正常运行,应该特别注意: 循环控制条件循环控制条件 控制条件的初始状态(初始值)控制条件的初始状态(初始值)
13、循环体内部对控制条件的影响循环体内部对控制条件的影响第 1515 页ldo-while语句格式语句格式 dodo 语句语句 while (while ( 表达式表达式 ) ) ;ldo-whiledo-while语句的执行流程语句的执行流程表达式表达式?执行语句语句成立成立不成立不成立执行while子句之后的语句循环控制条件循环控制条件循环体循环体第 1616 页ldo-while语句特点语句特点do-whiledo-while与与whilewhile的最大区别:的最大区别:do-whiledo-while语句语句先执行循环体先执行循环体然后然后再判断再判断循环循环控制条件控制条件,而,而wh
14、ilewhile却是先判断条件之后再执却是先判断条件之后再执行循环体。行循环体。使用使用do-whiledo-while构成的循环,循环体构成的循环,循环体至少要执至少要执行一次行一次;而采用;而采用whilewhile构成的循环,循环体有构成的循环,循环体有可能一次也不会执行。可能一次也不会执行。第 1717 页l【例【例6.66.6】用】用do-whiledo-while语句求语句求1001nnmain()main() int i,sum=0; int i,sum=0; i=1; i=1; do do sum = sum + i; sum = sum + i; i+; i+; while(
15、i=100); while(i=100); printf(“%d”,sum); printf(“%d”,sum); 第 1818 页/ /* *ex4-11-1.cex4-11-1.c* */ /#include #include main()main() int i,sum=0; int i,sum=0; scanf(%d,&i); scanf(%d,&i); do do sum+=i; sum+=i; i+; i+; while(i=10); while(i=10); printf(“sum=%d,sum); printf(“sum=%d,sum); / /* * ex4-11-2.c e
16、x4-11-2.c* */ /#include #include main()main() int i,sum=0; int i,sum=0; scanf(%d,&i); scanf(%d,&i); while(i=10) while(i=10) sum+=i; sum+=i; i+; i+; printf(“sum=%d,sum); printf(“sum=%d,sum); 1 sum=55sum=551 sum=55sum=5511 sum=11sum=1111 sum=0sum=0第 1919 页【例【例6.86.8】输入一个整数,计算它的位数】输入一个整数,计算它的位数. .并反向并反
17、向输出输出. .main( )main( ) long num long num; int count = 0int count = 0; printf(“printf(“输入一个整数:输入一个整数:”) ); scanf(“%ld”scanf(“%ld”,&num)&num); do printf(“%d”do printf(“%d”,num%10)num%10); num = num /10num = num /10; count+count+; while (num) while (num); printf(“printf(“该整数是该整数是 %d %d 位数位数.”,count).”,
18、count); 第 2020 页lfor语句格式语句格式for (for (表达式表达式1 1;表达式表达式2 2;表达式表达式3 3) ) 语句;语句;lforfor语句的执行流程语句的执行流程循环初始条件循环初始条件循环控制条件循环控制条件表达式表达式2?执行语句语句成立成立不成立不成立执行for循环之后的语句执行表达式表达式3执行表达式表达式1循环体循环体forfor语句等价于下列语句:语句等价于下列语句:表达式表达式1 1;while while (表达式表达式2 2) 语句语句; 表达式表达式3 3; 第 2121 页l例:例:求一个数的阶乘。求一个数的阶乘。 #include #i
19、nclude main ( )main ( ) long int jc=1; long int jc=1; int i,n; int i,n; scanf(“%d”,&n); scanf(“%d”,&n); forfor ( ( i = 1i = 1; ; i = ni = n; ; i+i+ ) ) jc = jc jc = jc * * i; i; printf ( %d! = %ldn, n, jc); printf ( %d! = %ldn, n, jc); lforfor语句最常用的形式语句最常用的形式for for (初值初值;控制条件控制条件;增量增量) 语句;语句;3 3 3!
20、= 6= 6第 2222 页lforfor语句的变化形式语句的变化形式forfor语句中的三个表达式中的任意一个都是可以省略语句中的三个表达式中的任意一个都是可以省略的,但是的,但是分号分号不能省略。不能省略。1.1.省略表达式省略表达式2 2,则:,则:forfor(表达式(表达式1 1; ;表达式;表达式3 3) 就形成了一个就形成了一个死循环死循环。2.2.省略表达式省略表达式1 1和表达式和表达式3 3,则:,则:forfor(;表达式(;表达式2 2;);) 就等同于:就等同于: whilewhile( 表达式表达式 ) 据此结论:所有用据此结论:所有用whilewhile语句实现的
21、循环都可以用语句实现的循环都可以用forfor语句实现。语句实现。3.3.表达式表达式1 1、2 2、3 3全省略全省略,则:,则:forfor ( ; ; )( ; ; ) 就等同于:就等同于: whilewhile (1)(1)第 2323 页【例【例6.96.9】输入】输入2020个个0 09 9的数字字符,计算有多少奇数,偶数和零。的数字字符,计算有多少奇数,偶数和零。 #define m 20main() int i,k,n1=0,n2=0,n3=0; char ch; printf(“输入数字字符输入数字字符20个:个:n”); for (k=1;k=m;k+) scanf(“%c
22、”,&ch); i=ch-0; if (i=0) n3+; /*零零*/ else if(i%2=0) n1+; /*偶数偶数*/ else n2+; /* 奇数奇数*/ printf(“有有 %2d 个偶数个偶数, %2d 个奇数个奇数, %2d 个零个零”,n1,n2,n3); 第 2424 页外层循环可包含两个以上内循环,但不能相互交叉l循环的嵌套循环的嵌套三种循环可互相嵌套三种循环可互相嵌套, ,层数不限层数不限内循环内循环外循环外循环相互交叉相互交叉的嵌套的嵌套第 2525 页的嵌套的嵌套【例【例6.23】打印九九表。】打印九九表。main()main() int i, j; int
23、 i, j; for(i=1; i10; i+) for(i=1; i10; i+) for(j=1; j=i; j+) for(j=1; j=i; j+) printf(%d printf(%d* *%d=%dt, j, i, i%d=%dt, j, i, i* *j);j); printf(n); printf(n); 第 2626 页的嵌套的嵌套【例【例6.106.10】写出运行结果。】写出运行结果。main()main() int i, j, k; int i, j, k; printf(i j kn); printf(i j kn); for (i=0; i2; i+) for (i
24、=0; i2; i+) for(j=0; j2; j+) for(j=0; j2; j+) for(k=0; k2; k+) for(k=0; k=100; j-) (j=999; j=100; j-) if if ( n%j( n%j=0 ) /0 ) /* * 若能够整除若能够整除j j,则,则j j是约数是约数 * */ / printf(”3 digits in %ld=%dn”, n, j ); printf(”3 digits in %ld=%dn”, n, j ); breakbreak; /; /* * 控制退出循环控制退出循环 * */ / 第 3333 页【例【例6.11】
25、求面积不大于】求面积不大于100的半径为自然数的圆面积。的半径为自然数的圆面积。r=1,area=3.14r=1,area=3.14r=2,area=12.57r=2,area=12.57r=3,area=28.27r=3,area=28.27r=4,area=50.27r=4,area=50.27r=5,area=78.54r=5,area=78.54第 3434 页lbreakbreak语句使用注意:语句使用注意:1 1、在嵌套循环中,、在嵌套循环中,breakbreak语句仅能退出一层语句仅能退出一层( (当前当前) )循环。循环。2 2、若在循环语句中包含了、若在循环语句中包含了swi
26、tchswitch语句,那么语句,那么switchswitch语句中的语句中的breakbreak语句仅能使控制退出语句仅能使控制退出switchswitch语句。语句。3 3、breakbreak语句并不是程序设计中必不可少的语句,语句并不是程序设计中必不可少的语句,可以通过改变程序的结构去掉。可以通过改变程序的结构去掉。第 3535 页lcontinue语句格式语句格式continuecontinue;lcontinuecontinue语句的功能语句的功能 continuecontinue语句仅能在循环语句中使用语句仅能在循环语句中使用. . 它的作用不是结束循环,而是开始一次新的循环。它
27、的作用不是结束循环,而是开始一次新的循环。 对于对于forfor语句,将控制转到语句,将控制转到执行表达式执行表达式3 3和和条件测条件测试试部分部分 对于对于whilewhile和和do-whiledo-while语句,将控制转到语句,将控制转到条件测试条件测试部分部分 从逻辑上讲,改变从逻辑上讲,改变ifif语句的条件表达式所表示的条语句的条件表达式所表示的条件,就可以不需要使用件,就可以不需要使用continuecontinue语句。语句。第 3636 页lcontinue语句的执行流程语句的执行流程表达式2?continue成立成立不成立不成立执行后续语句执行表达式3执行表达式1表达式
28、?continue成立成立不成立不成立执行后续语句表达式?continue成立成立不成立不成立执行后续语句第 3737 页l例:输入例:输入1010个整数,求其中正数的个数及平均值,精确到个整数,求其中正数的个数及平均值,精确到小数点后两位。小数点后两位。 main ( )main ( ) int i, count=0, j, sum=0; int i, count=0, j, sum=0; for for ( i=1; i=10; i+) ( i=1; i=10; i+) printf (input integer:); printf (input integer:); scanf (%d,
29、 &j); scanf (%d, &j); ifif (j=0) (j=0) continuecontinue; ; / /* * 结束本次循环,不进行后续操作结束本次循环,不进行后续操作 * */ / count +; count +; / /* * 计数器计数器 * */ / sum += j; sum += j; / /* * 求累加和求累加和 * */ / if if ( count )( count ) printf(plus numer:%d,average value:%.2f, printf(plus numer:%d,average value:%.2f, count, 1.
30、0 count, 1.0* *sum/count);sum/count); elseelse printf(plus numer: 0, average value: 0); printf(plus numer: 0, average value: 0); 改变改变ifif语句的语句的条件条件表达式表达式,可以,可以不需不需要使用要使用continuecontinue。第 3838 页【例【例6.126.12】 输出输出100200100200之间的不能被之间的不能被3 3整除的数。整除的数。main()main() int n; int n; for (n=100;n=200;n+) for
31、 (n=100;n=200;n+) if (n%3=0) if (n%3=0) continue; continue; printf(“%d ”,n); printf(“%d ”,n); 第 3939 页lgoto语句格式语句格式gotogoto 标号标号;lgotogoto语句的功能语句的功能1 1、将控制转移到标号所指定的语句处继续执行。、将控制转移到标号所指定的语句处继续执行。2 2、标号的唯一功能就是作为、标号的唯一功能就是作为gotogoto语句的目标。标语句的目标。标号的作用域是它所在的整个函数号的作用域是它所在的整个函数, ,标号必须是合法标号必须是合法的标识符。的标识符。lgo
32、togoto语句的使用说明语句的使用说明在在c c语言中,语言中,gotogoto语句并不是必不可少的,使用语句并不是必不可少的,使用gotogoto语句的地方都可以用语句的地方都可以用c c的其他控制流程语句改的其他控制流程语句改写。写。第 4040 页/ /* *ex4-8.cex4-8.c* */ /#include #include main()main() int i,sum=0; int i,sum=0; i=1; i=1;loop:loop: if(i=100) if(i=100) sum+=i; sum+=i; i+; i+; goto loop;goto loop; prin
33、tf(%d,sum); printf(%d,sum); sum=0+1sum=1+2=3sum=3+3=6sum=6+4sum=4950+100=5050循环初值循环初值循环变量增值循环变量增值循环条件循环条件例例 用用if 和和goto语句构成循环,求语句构成循环,求循环终值循环终值循环体循环体1001nn第 4141 页lretunrn语句格式语句格式格式一:格式一:returnreturn;格式二:格式二:return (return (表达式);表达式);lreturnreturn语句的功能语句的功能 1.1.returnreturn语句使程序从被调用函数中返回到语句使程序从被调用函数
34、中返回到调用函数的调用处继续运行。调用函数的调用处继续运行。 2.2.如果如果returnreturn后跟一表达式,则该表达式的后跟一表达式,则该表达式的值会从被调用函数中带回到调用它的函数,值会从被调用函数中带回到调用它的函数,称为称为返回值返回值。第 4242 页穷举法穷举法穷举法穷举法例例6.146.14】将】将2 2角钱换成角钱换成1 1分、分、2 2分和分和5 5分的硬币,列出所有可能的分的硬币,列出所有可能的换法。换法。main() main() int x int x,y y,z z,k= 0k= 0; for(z=0for(z=0;z=4 z=4 ;z+) z+) for(y=
35、0 for(y=0;y=(20-5y=3n=3)为求出第为求出第n n项的值,请编写程序。项的值,请编写程序。根据递推通项公式,可用根据递推通项公式,可用递推法递推法编写程序,计算第编写程序,计算第n n项的值。项的值。l递推法递推法:由初始的已知条件开始,由初始的已知条件开始,先计算出第先计算出第(n(n1)1)步的结果,步的结果,再再利用前面已知的利用前面已知的(n(n1)1)项结果,按照递项结果,按照递推公式(或遵照递推规则),推公式(或遵照递推规则),推出第推出第n n步结果步结果。递推法递推法是程序设计中最常用的方法之一,使用递推法是程序设计中最常用的方法之一,使用递推法必须有明确的
36、必须有明确的递推初始值递推初始值和和递推规则递推规则(递推公式)。(递推公式)。第 4444 页 main( )main( ) int n,i,un1,un2,un; int n,i,un1,un2,un; for for ( ( ; ; ; ) ) printf (input n=?); printf (input n=?); scanf (%d,&n); scanf (%d,&n); ifif ( n = 3 ) ( n = 3 ) breakbreak; ; / /* * 退出退出forfor循环循环 * */ / elseelse printf (ninput n is error !
37、n); printf (ninput n is error !n); / /* * 控制输入正确的控制输入正确的n n值值 * */ / un1 = un2 = 1; un1 = un2 = 1; / /* * 设置递推初始值设置递推初始值 * */ / forfor ( i=3; i=n; i+) ( i=3; i=n; i+) / /* * 用递推法计算第用递推法计算第n n项的值项的值 * */ / un = un1 + un2; un1 = un2; un2 = un; un = un1 + un2; un1 = un2; un2 = un; printf (no. %d is %dn, n, un); printf (no. %d is %dn, n, un); 第 4545 页)3()2(12)1(1112nfffnfnfnnn例例6.17 求求fibonacci斐波纳契数列斐波纳契数列 的前的前40个数个数第 4646 页辗转相除法辗转相除法main( ) main( ) int x,y,a,b,t; int x,y,a,b,t; p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 赢战月考 2026年秋季初一物理教科版上学期期中测试卷(含答案)
- 2027届宁夏回族自治区道德与法治初三冲刺提分卷(含答案)
- 冲刺期末 2026年秋季七年级语文部编版11月月考试卷(含答案)
- 全力冲刺 2027年中考江西省英语初三考前30天加分卷(含答案)
- 查漏补缺 2026年秋季初二道德与法治部编版上学期期中测试卷(含答案)
- 超越自我 2026-2027学年第一学期初三道德与法治部编版第六单元单元归类复习卷(含答案)
- 温故知新 2026-2027学年第一学期初二道德与法治部编版第四单元单元测试卷(含答案)
- 2026 河南事业编综合管理岗 历年真题试卷 含答案解析
- 2026年 财会岗面试真题汇编 含答案含解析
- 2026 水利岗事业单位面试易错题型分析 含答案
- 安利营销人员守则违规处分等级制度
- 生产经营单位安全生产事故应急救援预案
- GB/T 46164-2025金属和合金的腐蚀增材制造钛合金电化学临界局部腐蚀温度(E-CLCT)的测量
- 测绘地理信息安全保密管理制度
- 核反应堆核级机械设备检修工职业技能鉴定经典试题含答案
- 遗体火化师职业技能模拟试卷含答案
- 智慧健康养老智能产品应用
- 艾可慕(ICOM)IC-R5(R6)中文使用说明书
- 口腔科诊疗中晕厥的预防与处置
- 宫颈癌考试题及答案
- JJF1033-2023计量标准考核规范
评论
0/150
提交评论