计算机二级C语言程序设计第5讲.ppt

上传人:小飞机 文档编号:6606176 上传时间:2023-11-17 格式:PPT 页数:63 大小:837KB
返回 下载 相关 举报
计算机二级C语言程序设计第5讲.ppt_第1页
第1页 / 共63页
计算机二级C语言程序设计第5讲.ppt_第2页
第2页 / 共63页
计算机二级C语言程序设计第5讲.ppt_第3页
第3页 / 共63页
计算机二级C语言程序设计第5讲.ppt_第4页
第4页 / 共63页
计算机二级C语言程序设计第5讲.ppt_第5页
第5页 / 共63页
点击查看更多>>
资源描述

《计算机二级C语言程序设计第5讲.ppt》由会员分享,可在线阅读,更多相关《计算机二级C语言程序设计第5讲.ppt(63页珍藏版)》请在三一办公上搜索。

1、5.1 while语句5.2 do-while语句5.3 for 语句5.4 循环的嵌套5.5 break、continue和goto语句5.6 程序举例,第5讲 循环结构程序设计,2,C语言有while、do-while、for三种循环结构语句。前两个称为条件循环,即根据条件来决定是否继续循环;后一个称为计数循环,即根据设定的执行次数来执行循环。,5.1 while 语句及其循环结构,while 语句和格式及执行过程:格式:while(表达式)语句执行过程:先计算表达式之值,若为非0(即条件成立),执行后面的语句(称之为循环体)之后,再计算表达式之值进行判断,如此多次重复执行循环体;若表达式

2、之值为0(即条件不成立),跳出循环体语句,继续向下执行。,while 语句的流程图,表达式,语句(循环体),Y(非0),N(0),while(表达式)语句,例1 求1100之间所有整数的和,i=100,sum+=i;/*累加*/i+=1;/*计数器加1*/,Y(非0),N(0),i=1;sum=0;,printf(i=%d,sum=%dn,i,sum);,求1100之间整数和的程序,main()int i=1,sum=0;while(i=100)sum+=i;i+=1;printf(i=%d,sum=%dn,i,sum);,这是一个while语句,想一想,语句sum+=i;和语句i+=1;能否

3、改变位置?为什么?,想一想,如果在while语句之前对变量sum赋初值为1,是否可以?程序的哪些地方应作相应的改动?,求1100之间整数和的程序运行过程,main()int i=1,sum=0;while(i=100)sum+=i;i+=1;printf(i=%d,sum=%dn,i,sum);,这是一个while语句,程序执行的过程和结果如下:,i=101,sum=5050,注意:循环结束后,变量i 的值一定大于100。,想想这样的一段循环语句的执行结果:i=1;while(i=100)putchar(*);i+;,这个循环永远不会结束,因为循环控制变量i没有在循环体内被改变,i+;不属于循

4、环体。,应该改为:,i=1;while(i=100)putchar(*);i+;,循环语句中一定要注意表达式的值是否能在循环执行过程中被改变,以免造成死循环。,5.2 do-while 语句及其循环结构,dowhile 语句和格式及执行过程:格式:do 语句 while(表达式);执行过程:先执行语句(称之为循环体),然后计算表达式之值,若为非0(即条件成立),再执行语句(循环体)后计算表达式之值,如此多次重复执行循环体并判断条件;若表达式之值为0(即条件不成立),结束循环,继续向下执行。,dowhile 语句的流程图,表达式,语句(循环体),Y(非0),N(0),注意:while循环语句与d

5、o-while循环语句的区别。,用do-while语句求100以内正整数的和,main()int i=1,sum=0;do sum+=i;i+=1;while(i=100);printf(i=%d,sum=%dn,i,sum);,i=101,sum=5050,从键盘上输入10个整数,求总和及平均值,main()int x,sum=0,i=1;float aver;while(i=10)scanf(%d,从键盘上输入若干个整数,求总和及平均值,输入-1结束,main()int x,sum=0,i=1;float aver;while()sum+=x;i+;scanf(%d,scanf(%d,x!

6、=-1,5.3 for 语句,格式:for(表达式1;表达式2;表达式3)语句执行:(1)先求解表达式1的值。(2)再求解表达式2的值,若值为非0(条件成立),则执行语句(循环体)后执行下面的(3);若表达式2的值为0(条件不成立),则转向(5)。(3)求解表达式3的值。(4)转回执行(2)。(5)执行for语句后面的语句。,for 语句执行流程图,表达式2,语句(循环体),Y(非0),N(0),表达式1,表达式3,for(表达式1;表达式2;表达式3)语句,求1100之间的整数之和(for语句),main()int i,sum;for(i=1,sum=0;i=100;i+)sum+=i;pr

7、intf(i=%d,sum=%dn,i,sum);,i=101,sum=5050,求1100之间的整数之和(for语句),main()int i,sum;for(;i=100;i+)sum+=i;printf(i=%d,sum=%dn,i,sum);,i=101,sum=5050,表达式1可缺省,放在循环之前,但for语句中的第一个分号不能省略,i=1;sum=0;,求1100之间的整数之和(for语句),main()int i,sum;for(;i=100;)sum+=i;printf(i=%d,sum=%dn,i,sum);,i=101,sum=5050,表达式3可缺省,放在循环体之中,但

8、for语句中的第二个分号不能省略,i=1;sum=0;,i+;,求1100之间的整数之和(for语句),main()int i,sum;for(i=1,sum=0;i=100;sum+=i,i+)printf(i=%d,sum=%dn,i,sum);,i=101,sum=5050,循环体中的内容可以放在表达式3中,但要在花括号的后面加一个空语句,;,for语句的一般格式,在for语句中,一般表达式1用来为变量赋初值;表达式2一般用来设置循环结束条件;表达式3一般用于循环变量增值。,故 for 语句的一般格式为:for(变量赋初值;执行循环体的条件;循环变量增值)语句,例:求 1/100+2/9

9、9+1,分析:用变量i从1开始循环,每次增加1;用变量j从100开始循环,每次减少1。累加i/j的值到s中。当ij时结束循环(即i=j时继续循环)。最后输出s。,#includemain()int i,j;float s=0;for(i=1,j=100;i=j;i+,j-)s=s+(float)i/j;printf(“ns=%f”,s);,例:任意输入一个自然数,把它反序输出。(如:原数为123,输出321)。,分析:此题不确定循环执行的次数,也不涉及一个规律变化的变量,一般用while或do-while来编写。又由于第一次就要判断输入的是否是自然数,通常用while来实现。算法步骤如下:,1

10、.定义整型变量a用于存储输入的自然数,定义t初值为0用于存放a的反序数,定义i用于依次存放求出的a的每一位的数值。2.输入一个自然数赋值给变量a3.若a0,执行第4步,否则执行第7步4.i=a%105.t=t*10+i6.a=a/10,并返回第3步7.输出t,程序:,#includemain()long a,i,t=0;scanf(“%ld”,1、有以下程序main()int i;for(i=1;i=40;i+)if(i+%5=0)if(+i%8=0)printf(%d,i);printf(n);执行后的输出结果是 A)5 B)24 C)32 D)40,2006-9,2、若变量已正确定义,有以

11、下程序段i=0;doprintf(%d,i);while(i+);printf(%dn,i);其输出结果是A)0,0B)0,1C)1,1D)程序进入无限循环3、有以下程序#includemain()inty=9;for(;y0;y-)if(y%3=0)printf(%d,-y);程序的运行结果是A)741B)963C)852D)875421,2007-9,2007-9,4、以下程序的输出结果是()#includemain()intn=12345,d;while(n!=0)d=n%10;printf(%d,d);n/=10;5、有以下程序段,且变量已正确定义和赋值for(s=1.0,k=1;k=

12、n;k+)s=s+1.0/(k*(k+1);printf(s=%fnn,s);请填空,使下面程序段的功能与之完全相同s=1.0;k=1;while(_)s=s+1.0/(k*(k+1);_;printf(s=%fnn,s);,2007-954321,2007-9k=nk+,6、以下程序的输出结果是()#includemain()inti;for(i=a;if;i+,i+)printf(%c,i-a+A);printf(n);,2007-9ACE,7、有以下程序#include main()intx=8;for(;x0;x-)if(x%3)printf(%d,x-);continue;print

13、f(%d.,-x);程序运行的结果是 A)7,4,2,B)8,7,5,2,C)9,7,6,4,D)8,5,4,2,2008-4,8、以下不构成无限循环的语句或语句组是A)n=0;B)n=0;do+n;while(n=0);while(1)n+;C)n=10;D)for(n=0,i=1;i+)n+=i;while(n);n-;15、若有定义:intk;,以下程序段的输出结果是(#2#4)for(k=2;k6;k+,k+)printf(#%d,k);,2008-4,9、有以下程序#includemain()inti=5;doif(i%3=1)if(i%5=2)printf(*%d,i);break

14、;i+;while(i!=0);printf(n);程序的运行结果是A)*7B)*3*5C)*5D)*2*6,2008-9,10、设变量已正确定义,以下不能统计出一行中输入字符个数(不包含回车符)的程序段是A)n=0;while(ch=getchar()!=n)n+;B)n=0;while(getchar()!=n)n+;C)for(n=0;getchar()!=n;n+);D)n=0;for(ch=getchar();ch!=n;n+);,2009-3,11、有以下程序#includemain()charc1,c2;scanf(%c,程序运行输入65回车后,能否输出结果,结束运行(请回答能或

15、不能)【】,2009-3,不能,12、以下程序运行后的输出结果是【】#includemain()intk=1,s=0;doif(k%2)!=0)continue;s+=k;k+;while(k10);printf(s=%dn,s);,2009-3,s=0,13、下列程序运行时,若输入labcedf2df输出为【】#includemain()chara=0,ch;while(ch=getch()!=n)if(a%2!=0,2009-3,1AbCeDf2dF,14、有以下程序#includemain()intc=0,k;for(k=1;k3;k+)switch(k)default:c+=k;cas

16、e2:c+;break;case4:c+=2;break;printf(%dn,c);程序运行后的输出结果是A)3 B)5 C)7 D)9,2009-9,15、有以下程序#includemain()intn=2,k=0;while(k+程序运行后的输出结果是A)02 B)13C)57 D)12,2009-9,16、以下程序运行后的输出结果是【】#includemain()inta=1,b=7;dob=b/2;a+=b;while(b1);printf(%dn,a);,2009-9,5,17、有一下程序#includemain()intf,f1,f2,i;f1=0;f2=1;printf(%d%

17、d,f1,f2);for(i=3;i=5;i+)f=f1+f2;printf(%d,f);f1=f2;f2=f;printf(n);程序运行后的输出结果是【0 1 123】,2009-9,5.4 循环嵌套,一个循环体中又包含了另一个完整的循环结构,叫做循环的嵌套。三种循环结构可以互相嵌套。循环嵌套的执行过程是:外循环执行一次,内循环执行一个全过程。,循环嵌套举例:输出一个图形,main()int i,j;for(i=1;i=4;i+)for(j=1;j=3;j+)printf(*);printf(n);,*,/*外循环控制输出图形的行数*/,/*内循环控制每行输出的数量*/,循环嵌套语句,第一

18、个语句是循环语句,实现输出3个*号,第二个语句是简单语句,输出一个换行符,main()printf(*n);printf(*n);printf(*n);printf(*n);,main()int i,j;for(i=1;i=4;i+)printf(*n);,循环嵌套举例:输出一个图形,main()int i,j;for(i=1;i=4;i+)for(j=1;j=i;j+)printf(*);printf(n);,*,/*外循环控制输出图形的行数*/,/*内循环控制每行输出的数量*/,循环嵌套语句,第一个语句是循环语句,实现输出若干个*号,第二个语句是简单语句,输出一个换行符,5.5 break

19、语句和continue语句,break 语句格式:break;功能:提前结束循环,从循环体中无条件跳转到循环语句后面执行。可用于switch语句和循环结构中。,continue语句格式:continue;结束本次循环,即在本次循环中,不再执行循环体中continue后面的语句。只能用于循环结构。,break语句的使用,#define PI 3.14159main()int r;float area;for(r=1;r100)break;printf(r=%dtarea=%.2fn,r,area);,计算半径为110的圆面积,面积大于100时停止。,r:1,area:3.14,r:2,area:

20、12.57,r:3,area:28.27,r:4,area:50.27,r:5,area:78.54,r:6,area:113.10,定义一个符号常量PI,观察r 和area的值,r=1 area=3.14,r=2 area=12.57,r=3 area=28.27,r=4 area=50.27,r=5 area=78.54,带有break;语句的for循环就有两个出口即 r 10 或者 area 100。,continue语句的使用,输出 17 之间所有不能被3整除的整数。,main()int n;for(n=1;n=7;n+)if(n%3=0)continue;printf(%5d,n);

21、,n:1,观察 n 的值,n:2,n:3,n:4,n:5,n:6,n:7,n:8,1,2,4,5,7,5.6 循环结构程序举例:,连续级数求和 Fibonacci数列问题 判断一个数是否为素数 求出100200之间的所有素数,求的近似值,求的近似值,直到最后一项绝对值小于10-6 1 1 1=1-+-4 3 5 7,求的近似值算法流程图,定义变量pi(和),n(分母),s(符号),t(项值)0pi,1 n,1 s,1 t,Y,N,求的近似值,直到最后一项绝对值小于10-6 1 1 1=1-+-4 3 5 7,求的近似值程序,main()int s=1;long n=1;float pi=0,t

22、=1;,/*s存放符号,n 存放分母*/,while(fabs(t)1e-6)pi=pi+t;n=n+2;s=-s;t=(float)s/n;,/*实现s的+1和-1交替出现*/,pi=pi*4;printf(pi=%fn,pi);,/*累加*/,=,/*分母加2*/,pi=3.141594,/*pi存放和,t 存放项值*/,/*计算下一个项值*/,掌握在循环体中实现正负相间的技巧,判断整数m是否为素数,素数即为质数,如果一个整数只能被1或者它本身整除,这个数就称为是素数。判断素数的算法是:让m被2m-1之间所有的整数整除,如果m能被2m-1之中的任何一个整数整除,则提前结束循环,此时m一定不

23、是素数;如果在2m-1之间不存在能被m整除的整数,则终止循环,此时循环变量的值一定大于或者等于m。,判断整数m是否为素数算法流程图,定义变量m(被判断数),i(循环变量)输入m的值,N,N,Y,结束,i=m,Y,N,for循环,不是素数,是素数,判断整数m是否为素数程序,main()int m,i;scanf(%d,for(i=2;im;i+)if(m%i=0)break;,if(i=m)printf(n%d是素数n,m);else printf(n%d不是素数n,m);,判断整数m是否为素数程序2,#include main()int m,i,k;scanf(%d,for(i=2;i=k;i

24、+)if(m%i=0)break;,if(i k)printf(n%d是素数n,m);else printf(n%d不是素数n,m);,判断整数m是否为素数程序3,main()int m,i,k,flag;scanf(%d,for(i=2;i=k;i+)if(m%i=0)flag=0;break;,if(!(flag=0)printf(n%d是素数n,m);else printf(n%d不是素数n,m);,/*定义变量flag作为标志变量*/,/*变量 flag 赋初值1*/,/*如果m是素数,flag 赋0*/,例:求3150中所有素数的和。,算法分析:1.用变量a从3到150循环,每次值增

25、加1 2.用变量i从2到a-1循环,每次值增加1 3.若a%i=0,结束i的循环,执行第4步 4.若i=a,把a累加到s上。5.输出s的值,注意:此题中执行第4步时有两种情况。第一种:在第3步中发现了满足a%i=0的情况,直接跳出了i的循环,此时的i一定是在2到a-1中间的一个值,而且a不是素数。第二种:一直没有发现满足a%i=0的i,在i=a时,不再满足i循环的执行条件,i循环结束,此时的a是素数!,程序:,#includemain()int a,s=0,i;for(a=3;a=a)s=s+a;printf(“n%d”,s),1、有以下程序#includemain()inti,j,m=55;

26、for(i=1;i=3;i+)for(j=3;j=i;j+)m=m%j;printf(%dn,m);程序的运行结果是A)0 B)1 C)2 D)3,2007-9,2、有以下程序#includemain()inti,j;for(i=3;i=1;i-)for(j=1;j=2;j+)printf(%d,i+j);printf(n);程序的运行结果是A)234B)432C)23D)453 455433434 4 5 2 3,2008-9,3、以下程序的输出结果是【8】#includemain()inti,j,sum;for(i=3;i=1;i-)sum=0;for(j=1;j=i;j+)sum+=i*

27、j;printf(%dn,sum);,2008-9,1,4、以下程序段中的变量已正确定义for(i=0;i4;i+,i+)for(k=1;k3;k+);printf(*);程序段的输出结果是A)*B)*C)*D)*,2009-3,题库练习,while循环累和问题:1-1,32-1,48-2累积问题:47-2,63-2累和累积:2-3计算:37-2,45-2最大公约数:4-2素数:31-2/及%应用:5-1(评分死板),51-1,26-1,44-1,96-2,题库练习,do while循环累和及累积:68-1,68-3,70-1/及%应用:10-2迭代法求方程根:18-3Fibonacci数列:48-3,题库练习,for循环累和问题:2-1(评分死板),13-2,21-3,31-1,33-2,65-2,66-3,71-3,73-3,91-2,97-3,累积问题:95-3累和累和:40-3,75-3,96-3累和累积:67-1,67-3(答案不好),69-1,72-3,98-3素数:57-2其他:85-2,61-3(求n位数据的后n-1位),题库练习,多重循环素数:18-2、71-1、74-3、92-2其它:67-2(摸球问题),

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号