控制结构与语句.ppt

上传人:laozhun 文档编号:2765791 上传时间:2023-02-24 格式:PPT 页数:127 大小:2.32MB
返回 下载 相关 举报
控制结构与语句.ppt_第1页
第1页 / 共127页
控制结构与语句.ppt_第2页
第2页 / 共127页
控制结构与语句.ppt_第3页
第3页 / 共127页
控制结构与语句.ppt_第4页
第4页 / 共127页
控制结构与语句.ppt_第5页
第5页 / 共127页
点击查看更多>>
资源描述

《控制结构与语句.ppt》由会员分享,可在线阅读,更多相关《控制结构与语句.ppt(127页珍藏版)》请在三一办公上搜索。

1、控制结构与语句,张建海,控制结构与语句,1 算法与程序 2 结构化程序设计 3 顺 序 结 构 4 选 择 结 构 5 循 环 结 构 6 多重循环结构 7 实际应用举例 小结,1 算法与程序,一、算法的概念 算法+数据结构=程序 算法:进行操作的方法和操作步骤二、算法的特点有穷性确定性输入和输出三、算法的组成要素 操作:高级语言中提供的运算符 控制结构,对大部分程序来讲,都不外于3个大步骤:输入根据输入进行处理输出处理结果,2 结构化程序设计,2.1 程序的三种基本结构 结构化程序设计基本思想:任何程序都可以用三种基本结构表示,限制使用无条件转移语句(goto)结构化程序:由三种基本结构反复

2、嵌套构成的程序叫优点:结构清晰,易读,提高程序设计质量和效率三种基本结构顺序结构:由若干块组成,按各块的排列顺序依次执行。选择结构:又称分支结构,根据给定的条件,从两条或者多条路径中选择下一步要执行的操作路径。循环结构:根据一定的条件,重复执行给定的一组操作。,算法的描述 用自然语言表示 用流程图表示 传统流程图描述算法,处理框,起止框,判断框,输入输出框,连接点,流程线,A,B,顺序结构,条件,A,B,选择结构,Y,N,条件,A,Y,N,循环结构,例:求10000之内偶数之和,开始,0 sum,1 t,t被2整除,sum+t sum,Y,t+1 t,N,t10000,Y,N,输出sum,结束

3、,例:求ax2+bx+c=0 的根,开始,输入a,b,c,a为0,Y,N,b2-4ac d,d0,N,Y,N,解为-c/b,d为0,实根-b/2a,两不同实根,无解,结束,Y,N,用N-S流程图描述算法顺序结构:先执行A操作,再执行B操作选择结构:根据条件,选择所要执行的语句循环结构:当型循环:先判别循环条件,再执行语句直到型循环:先执行语句,再判别循环条件,当p为真,A,当p为真,A,例:求10000之内偶数之和,开始,0 sum,1 t,t被2整除,sum+t sum,Y,t+1 t,N,t10000,Y,N,输出sum,结束,0 sum,1 t,t10000,t被2整除,真,假,sum+

4、t sum,t+1 t,输出sum,例:判别m是否素数,读入m,k=m的平方根,i=2,当i=k,m被i整除,真,假,用break结束循环,i=i+1,ik,真,假,输出:m是素数,m不是素数,开始,m不是素数,k=m的平方根,i=2,ik,m被i整除,i=i+1,ik,Y,N,Y,N,Y,N,m是素数,输入m,判别闰年,输入年份 y,y被4整除,Y,N,输出y非闰年,y被100整除,N,Y,输出y是闰年,y被400整除,Y,N,输出y是闰年,输出y非闰年,用伪代码表示算法 例:求1000之内的完数(因子之和等于该数本身)开始 置t的初值为1 当t1000,执行下面操作 置a的初值为1,置su

5、m的初值为0 当at,执行下面操作 如果t能被a整除,则sum=sum+a a=a+1(循环到此结束)如果sum与t相同,输出t的因子 t=t+1(循环到此结束)结束,用计算机语言表示算法 例:求1000之内的完数(因子之和等于该数本身)main()int t,sum,a;for(t=1;t=1000;t+)a=1;sum=0;while(at)if(t%a=0)sum=sum+a;a=a+1;if(sum=t)printf(“%d 是完数,因子为:”);for(a=1;at;a+)if(t%a=0)printf(“%d,”);printf(“bn”);,2.2 程序设计过程 程序设计的过程:

6、分析问题、设计算法、实现程序。自顶向下,逐步细化,模块化设计,结构化编程。例:三数中取大数(1)基本解题思路 s1:输入三数a,b,c s2:从a,b,c中找出最大数赋给max s3:输出max(2)算法细化 s1:调用scanf()函数 s2:设计一个函数max3()求三数中的最大数 s3:调用printf()函数(3)设计主函数,main()float a,b,c,max;float max3(float,float,float);scanf(“%f%f%f”,(4)设计max3的算法 设3个参数为x,y,z s2.1:从x与y中取大数送m中 s2.2:从m与z中取大数送m中 s2.3:返

7、回m给主调函数 用C语言写出max3,float max3(float x,float y,float z)float m;if(xy)m=x;else m=y;if(mz)m=z;return m;,例:百钱买百鸡(1)基本解题思路 cocks:公鸡数,hens:母鸡数,chicks:小鸡数 根据题意,有公式 cocks+hens+chicks=100 cocks*5+hens*3+chicks/3=100 得到三个变量的取值范围 cocks:119,hens:133,chicks:199 解题思路:依次取cocks值域中的一个值,然后求其余两数,合乎题意者为解。s1:cocks=1 s2:

8、当cocks=19,则进行如下操作 s2.1:找满足题意的hens、chicks,找到后输出 s2.2:cocks加1,(2)对s2.1细化 思路:在每个给定的cocks下,面对hens的取值范围内的各个值依次测试,以找出满足公式的hens 及chicks s2.1.1:hens=1 s2.1.2:当hens=33,则执行下列操作 s2.1.2.1:找满足题意的chicks s2.1.2.2:hens加1(3)对s2.1.2.1细化 因此时cocks及hens已确定,根据公式,可得出 chicks=100-cocks-hens,如此三数满足公式,则为解,将其打印出来 s2.1.2.1.1:ch

9、icks=100-cocks-hens s2.1.2.1.2:如果cocks*5+hens*3+chicks/3为100 输出cocks、hens、chicks,(4)C语言程序#include main()int cocks,hens,chicks;cocks=1;printf(“cockst hens t chicksn”);while(cocks=19)hens=1;while(hens=33)chicks=100-cocks-hens;if(cocks*5+hen*3+chicks/3=100)if(chicks%3=0)printf(“%dt%dt%dn”,cocks,hens,ch

10、icks);hens=hens+1;cocks=cocks+1;,例 从键盘重输入100个整数,对其中的正整数和负整数分别进行累加,最后输出两种累加结果。算法:自然语言描述(1)输入一个数;(2)如果该数0,将它加到正累加和中,否则将它加到负累加和中;(3)如果还没有输完100个数,转步骤(1);(4)输入完100个数后,输出累加和。,伪代码(类程序设计语言)描述开始 置0 sp,0 sn 置1 count 当count=100,执行下面操作:读入一个数 x IF x 为正 使 sp+x sp ELSE 使 sn+x sn 使 count+1 count 输出 sp 和 sn 的值结束,重复1

11、00次,程序流程图:,N-S流程图:,用C语言程序实现:,#include void main()int x;int count;int sp,sn;count=sp=sn=0;do count+;scanf(“%d”,程序准备工作,工作变量定义,工作变量定义初始化,每输入一个数,记一下数,输入一个数,判断输入数0否,x0,累加到正累加和中,否则,累加到负累加和中,未输完100个数,则重复,输出结果,3 顺 序 结 构,C语句:以“;”作分隔符,编译后产生机器指令.表达式语句:表达式加分号构成。如 total=total+limit;a=3;func();printf(“Hello,world

12、!n”);复合语句:用 括起来的一组语句一般形式:数据说明部分;执行语句部分;说明:“”后不加分号语法上和单一语句相同复合语句可嵌套,例 输入华氏温度,将其转换成摄氏温度输出。转换公式为:#include void main()float f,c;printf(输入一个华氏温度n);scanf(%f,例 计算如下多项式:y=5x3+4x2-3x+21分析:为了便于程序的实现,把多项式改写为:y=(5x+4)x-3)x+21#include void main()int x,y;scanf(%d,例 输入两个变量的值,交换它们的值。,#include main()int x,y,temp;sca

13、nf(“%d%d”,例 输入三角形的三个边长,计算并输出三角形的面积。根据三条边的边长,计算三角形面积的公式如下:#include#include void main()float x,y,z,s,dime;scanf(%f%f%f,3 选择结构,if语句(条件选择语句)if语句的三种形式形式一:格式:if(表达式)语句执行过程:,例:if(xy)printf(“%d”,x);,形式二:格式:if(表达式)语句1 else 语句2执行过程:,例:if(xy)max=x;else max=y;,形式三:格式:,if(表达式1)语句1else if(表达式2)语句2else if(表达式3)语句3

14、.else 语句n,执行过程:,例:if(salary1000)index=0.4;else if(salary800)index=0.3;else if(salary600)index=0.2;else if(salary400)index=0.1;else index=0;,例 输入一个学生的成绩,根据成绩输出“Pass”或“Fail”。#include void main()int score;printf(请输入成绩n);scanf(%d,程序运行:请输入成绩98成绩 98:Pass,例 输入被除数和除数x,y,计算x除以y的商。#include void main()float x,

15、y,z;printf(Please input x、y:n);scanf(%f%f,例 编程,输入一个x值,求f(x)的值。#includevoid main()float x,y;printf(请输入数据n);scanf(%f,例 输入三个数,按大小顺序输出main()float a,b,c,t;scanf(“%f%f%f”,/*例d2*/#include main()int x=4,y=5,i=1;if(x+=5)5 5 1,程序运行:X=5,y=5,i=1,例d3 判断输入字符的种类,即区分英文字母、数字字符、空格、回车和其它字符。#include void main()char c;p

16、rintf(“Please input a character:n”);c=getchar();if(c=|c=n)printf(“This is a blank or enter.”);else if(c=0,程序运行:Please input a character:3This is a digit.,如:if(a=b,说明:if后面的表达式类型任意,语句可以是复合语句 if(x)if(x!=0)if(!x)if(x=0),例 考虑下面程序的输出结果:#include main()int x,y;scanf(“%d,%d”,Compile Error!,if 结构的嵌套在if语句中又包含一

17、个或多个if语句称为if语句的嵌套,注意:因else部分可选,要注意else与if的配对关系,从最内层开始,else与前面最接近的无else匹配的if 相匹配。,例 有一函数,编程序,输入x,输出y-1(x0)以下几个程序是否正确?,main()int x,y;scanf(“%d”,将if语句改为 if(x=0)if(x0)y=1;else y=0;else y=-1;,将if语句改为 y=-1;if(x!=0)if(x0)y=1;else y=0;,将if语句改为y=0;if(x=0)if(x0)y=1;else y=-1;,例 编程,输入a、b,然后按值的大小次序从小到大输出。#inclu

18、de void main()float a,b,temp;scanf(%f%f,例 根据输入的成绩,将其转换成“Excellent”、“Good”、“Pass”、“Fail”输出。转换规则:100-90:“Excellent”;89-70:“Good”69-60:“Pass”;59-0:“Fail”#includevoid main()int score;printf(Please input score:n);scanf(%d,程序运行:Please input score:81 Good,例 编程序,输入x,y计算下面的函数值。#includevoid main()float x,y,z;

19、printf(please input x,y:n);scanf(%f%f,例:#include main()int ok1=1,ok2=2,ok3=3,x=15;if(!ok1)x-;else if(ok2)if(ok3)x=3;else x=4;printf(“x=%dn”,x);,程序运行:x=3,例 下列三个程序是否能够输出变量x、y、z中的最大值。,程序#includevoid main()float x,y,z,max;scanf(%f%f%f,程序#includevoid main()float x,y,z,max;scanf(%f%f%f,程序#includevoid main

20、()float x,y,z,max;scanf(%f%f%f,递缩格式不能决定if的嵌套问题,例 求一元二次方程 ax2+bx+c=0 的根,开始,输入a,b,c,a为0,Y,N,b2-4ac d,d0,N,Y,N,解为-c/b,d为0,实根-b/2a,两不同实根,虚根,结束,Y,N,#include#include void main()float a,b,c,x1,x2,dalt;printf(请输入方程系数a、b、cn);scanf(%f%f%f,else/*else与if(a=0)配对*/,dalt=b*b-4*a*c;if(dalt=0)printf(x1=%fn,(-b+sqrt(

21、dalt)/(2*a);printf(x2=%fn,(-b-sqrt(dalt)/(2*a);else printf(x1=%f%+fin,-b/2/a,sqrt(-dalt)/(2*a);printf(x2=%f%+fin,-b/2/a,-sqrt(-dalt)/(2*a);,程序运行:请输入方程系数a、b、c1 5 4x1=1.0 x2=4.0,程序运行:请输入方程系数a、b、c1 4 5x1=2.0+1.0ix2=2.01.0i,例判别闰年,输入年份 y,y被4整除,Y,N,输出y非闰年,y被100整除,N,Y,输出y是闰年,y被400整除,Y,N,输出y是闰年,输出y非闰年,#incl

22、ude main()int y,leap;scanf(“%d”,例 考虑下面程序输出结果:#include main()int x=100,a=10,b=20;int v1=5,v2=0;if(ab)if(b!=15)if(!v1)x=1;else if(v2)x=10;x=-1;printf(“%d”,x);,程序运行:-1,2.2 switch,switch为多分支选择语句,一般形式:switch(表达式)case 常量表达式1:语句组 1;break;case 常量表达式2:语句组 2;break;.case 常量表达式n:语句组 n;break;default:语句组 n+1;brea

23、k;,执行过程:,说明:常量表达式,指表达式中不含变量,且值必须互不相同语句标号作用,必须用break跳出case后可包含多个可执行语句,且不必加 switch可嵌套多个case可共用一组执行语句,如:case A:case B:case C:printf(“score60n”);break;.,注意:switch中的case或default子句只相当于语句 标号,本身并不改变控制流程,满足前面条件的语 句被执行后,不离开switch语句,此后将不再与随 后的情况常量进行比较,而是按顺序执行随后的 各个语句,若要想在执行的中途离开switch语句,可使用break或return语句,例 swi

24、tch(score)case 5:printf(“Very good!”);case 4:printf(“Good!”);case 3:printf(“Pass!”);case 2:printf(“Fail!”);default:printf(“data error!”);,运行结果:score为5时,输出:Very good!Good!Pass!Fail!data error!,例:求程序输出结果 main()int i=1;char c=b;switch(c+1-a)case 1:i+=1;case 2:i+=2;case 3:i+=3;default:i+=4;printf(i=%dn,

25、i);,程序运行:i=10,例 输入一个n,计算1+2+3+.+n的值,n6。如果n超过6,值7*n23。#includevoid main()int n,y=0;printf(请输入n:n);scanf(%d,程序运行:请输入n:4y=10,程序运行:请输入n:7y=340,例 设计一个简易的计算器程序,可进行两个实数的+、*、/运算。如:8*5。#include/exit(0)函数的头文件#includevoid main()float a,b,d;char p;printf(输入计算式:n);scanf(%f%c%f,程序运行:请输入计算式7*4=28.00,程序运行:请输入计算式7%4

26、the operator or the data is error,例成绩转换,也可用switch实现 4.12d1。#include#includevoid main()float score;printf(Please input score:n);scanf(%f,例 编程,输入年份、月份后,输出该年该月的天数。#include main()int year,month,day;printf(“请输入年份、月份:n);scanf(%d%d,/*例:求从1月1日到某月某日的天数*/#include stdio.hmain()int year,month,day,d;printf(Enter

27、 year/month/day:);scanf(%d/%d/%d,例:main()int x=1,y=0,a=0,b=0;switch(x)case 1:switch(y)case 0:a+;break;case 1:b+;break;case 2:a+;b+;break;case 3:a+;b+;printf(a=%d,b=%dn,a,b);,运行结果:a=2,b=1,例:运费计算 f=p*w*s*(1-d)f总运费,p每吨货物基本运费,w货物重量,s距离,d折扣率,标准如下:s250km 没有折扣 250s500km 2%折扣 500s1000km 5%折扣 1000s2000km 8%折

28、扣 2000s3000km 10%折扣 s3000km 15%折扣,main()int c,s;float p,w,d,f;printf(“Input p w s:”);scanf(“%f%f%d”,5 循环结构,概述C语言可实现循环的语句:用goto 和 if 构成循环while 语句do while 语句for 语句4.5.1 goto语句goto语句一般格式:,goto 语句标号;.标号:语句;,功能:无条件转移语句说明:不能用整数作标号只能出现在goto所在函数内,且唯一只能加在可执行语句前面限制使用goto语句,/*例4.13*/#include main()int i,sum=0;

29、i=1;loop:if(i=100)sum+=i;i+;goto loop;printf(%d,sum);,sum=0+1sum=1+2=3sum=3+3=6sum=6+4sum=4950+100=5050,例 计算1+2+3+100的值。,5.2 while语句,一般形式:,while(表达式)循环体语句;,执行流程:,特点:先判断表达式,后执行循环体说明:循环体有可能一次也不执行循环体可为任意类型语句下列情况,退出while循环条件表达式不成立(为零)循环体内遇break,return,goto无限循环:while(1)循环体;,例:循环的运用。i=0;while(i3)printf(“%

30、d“,i+);,执行过程,例:计算1+2+3+100的值。,/*例4.13d1*/#include main()int i,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%d,sum);,例编程序,输入100个数,求它们的和并输出。#include void main()float x,sum=0;int i=0;printf(please input data:n);while(i100)/while循环体是复合语句,必须用花括号括起 scanf(%f,例 使从终端输入的正整数各位都颠倒一下#include main()int numb,right_di

31、git;printf(“Please input a number:n”);scanf(“%d”,程序运行:Please input a number:12344321,正整数各位都颠倒一下的循环过程,例 译密码.输入一行字符,输出其相应的密码(变成其后的第四个字母)#include main()char c;while(c=getchar()!=n)if(c=a,例如 Hello,world!译成密码:Lipps,asvph!,while结构使用说明:while结构是先判别、后执行的循环结构数据输入可放入while语句中 例:while(scanf(“%d”,后x与i 的值,结果x=0,i=

32、-1,5.3 do-while语句,一般形式:,do 循环体语句;while(表达式);,执行流程:,特点:先执行循环体,后判断表达式说明:至少执行一次循环体dowhile可转化成while结构,例:计算1+2+3+100的值。,/*例4.13*/#include main()int i,sum=0;i=1;do sum+=i;i+;while(i=100);printf(%d,sum);,用do-while语句同样可以完成例4.13中的程序4.13d3。#include void main()float x,sum=0;int i=0;printf(please input data:n);

33、do/do循环体是复合语句 scanf(%f,例 输入一个正整数,计算它是一个几位数。#include#includevoid main()long x;int n=0;printf(please input x:n);scanf(%ld,程序运行:2346543x的位数是:7,程序运行:0 x的位数是:1,对例,为了得到一个正确的x,修改程序如下4.15d1#includevoid main()long x;int n=0;do printf(please input x:n);scanf(%ld,例 译密码.输入一行字符,输出其相应的密码(变成其后的第四个字母)#include main(

34、)char c;do c=getchar();if(c=a,例如 Hello,world!译成密码:Lipps,asvph!,5.4 for 语句,一般形式:,for(表达式1;表达式2;表达式3)循环体语句;,执行流程:,for语句一般应用形式:,for(循环变量赋初值;循环条件;循环变量增值)循环体语句;,说明:for语句中表达式1,表达式2,表达式3 类型任意,都可省略,但分号;不可省无限循环:for(;)for语句可以转换成while结构,表达式1;while(表达式2)循环体语句;表达式3;,用for循环完成例4.14的例子,“输入100个数,求它们的和并输出”,4.14d3。#in

35、clude void main()float x,sum=0;int i;printf(please input x:n);for(i=0;i100;i+)scanf(%f,for结构使用说明表达式1可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的表达式例:for(sum=0,i=1;i=100;i+)例:for(pro();t=readnum();pro()表达式2一般是关系表达式或逻辑表达式,可以是其它类型的表达式,只要其值非0,就执行循环体 例:for(i=0;(c=getchar()!=n;i+=c)条件检验总是在头部进行的,当开始时条件即为 假,则循环体可能一次也不执行例

36、:for(x=10;x10;-x)printf(%4d,x);表达式1、表达式2、表达式3或循环体可以缺省,例:#include main()int i;for(i=0;i10;i+)putchar(a+i);,运行结果:abcdefghij,例:#include main()int i=0;for(;i10;i+)putchar(a+i);,例:#include main()int i=0;for(;i10;)putchar(a+(i+);,例:#include main()int i=0;for(;i10;putchar(a+i),i+);,例输入一串以回车键结束的字符,累加这些字符的AS

37、CII码值,比较以下三种程序的结果。,#include main()int sum=0;char ch;while(ch=getchar()!=n)sum+=ch;printf(“%dn”,sum);,#include main()int sum=0;char ch;do ch=getchar();sum+=ch;while(ch!=n);printf(“%dn”,sum);,#include main()int sum=0;char ch;for(;(ch=getchar()!=n;sum+=ch);printf(“%dn”,sum);,例 输入10个数,输出其中的最大值。#include

38、void main()float x,max;int i;printf(请输入第一个数:n);scanf(%f,例4.16d3 从输入的若干正数中选出最小值。分析:具体实现方法(1)先输入数据个数n,然后陆续输入n个数据,用n来控制循环次数。(2)以特殊数据来作为正常输入的结束,如本题可输入一个负数作结束标志。以上两种方法相比较,方法(2)更具灵活性。,循环程序实现要点:(1)找出什么要反复执行 循环体(2)重复到何时结束 循环控制条件,因循环次数未知,可考虑用while语句#include main()float x,min;scanf(“%f”,循环前x必须先输入一个确定值,输入新数据,用

39、do-while语句实现#include main()float x,min;scanf(“%f”,用for语句实现#include main()float x,min;scanf(“%f”,5.5 单重循环程序举例,例4.17 输入一串以回车键结束的字符,分别统计字母个数、数字字符个数和其他字符个数。#includevoid main()char ch;int digit,others,alph;digit=others=alph=0;/计数器初始化 ch=getchar();while(ch!=n)if(ch=0,例 编程,输入一个自然数,判断该数是否为素数,如果是素数,输出“yes”,否

40、则输出“no”。素数:是除1以外的只能被1或其自身整除的自然数。如2、3、5、7、11、13都是素数。即自然数n,如果n不能被2n1中的任何数整除,则n是素数。#include void main()long n;int i,flag=1;printf(please input n:n);scanf(%ld,例 编程,按下面的幂级数展开式计算e的值。要求误差小于10-5。e=1+1/1!+1/2!+1/3!+.+1/n!+.,#includevoid main()float t=1,e=1;int i=0;while(t=1e-5)i+;t*=1.0/i;e+=t;printf(%fn,e);

41、,例 用pi/4=1-1/3.+1/5.-1/7.+.公式求pi的近似值,直到最后一项的绝对值小于1e-6为止#include“math.h”#include“stdio.h”main()int s;float n,t,pi;t=1;pi=0;n=1.0;s=1;while(fabs(t)=1e-6)pi=pi+t;n=n+2;s=-s;t=s/n;pi=pi*4;printf(pi=%10.6fn,pi);,t=1,pi=0,n=1,s=1,当|t|=1e-6,pi=pi+t,n=n+2,s=-s,t=s/n,pi=pi*4,输出pi,初值,循环变化,循环维持条件,每项符号,*例 编程序,由

42、序列 2x|x=1、3y|y=1组成一个新序列2x,3y|x=1,y=1。要求按从小到大的排列次序输出新序列的前30项,按每行8个数输出(如:2,3,4,8,9,16,27,32)。#includevoid main()long m2,m3;int i=0;m2=2;m3=3;while(i30)if(m2=m3)printf(%-8ld,m2);m2*=2;/将m2修改为原序列的后续项else printf(%-8ld,m3);m3*=3;/将m3修改为原序列的后续项 i+;if(i%8=0)putchar(n);,5.6 break语句与continue语句,break语句的格式、功能格式

43、:break;break语句可以使流程跳出switch语句,也可以用来从循环体内跳出循环体,例:for(r=1;r100)break;printf(%f,area);,语句s1break;语句s2,非0,表达式,0,while结构,语句s1break;语句s2,表达式,非0,0(假),do-while结构,求解表达式3,求解表达式1,表达式2,假,for语句的下一语句,语句s1break;语句s2,真,for 结构,break 语句在循环语句中的执行流程,例 编程序,求1+2+3+n之和500的最小n及总和。#includevoid main()int n,s=0;for(n=1;n+)/省略

44、“表达式2”,即循环条件为永真 s+=n;if(s=500)break;/当s=500时,跳出循环。转循环后续语句 printf(s=%d,n=%dn,s,n);,对例输入一个自然数,判断该数是否为素数。若在程序的循环体中使用break语句,可以减少循环执行次数4.18d1#include#include void main()long n;int i;scanf(%ld,continue语句的格式、功能一般形式:continue;结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定,例4.22d1 把100200之间的不能被3整除的数输出main()int n;f

45、or(n=100;n=200;n+)if(n%3=0)continue;printf(%d,n);,语句s1continue;语句s2,非0,表达式,0,while结构,语句s1continue;语句s2,表达式,非0,0(假),do-while结构,求解表达式3,求解表达式1,表达式2,假,for语句的下一语句,语句s1continue;语句s2,真,for 结构,continue 语句在循环语句中的执行流程,例 输入10个数,将这10个数中非0数相乘,计算其乘积,并统计非0数据个数。#include void main()int i,n=0;float x,y=1;for(i=1;i=10

46、;i+)scanf(%f,6 多重循环结构,一个循环体内又包含另一个完整的循环结构三种循环可互相嵌套,层数不限外层循环可包含两个以上内循环,但不能相互交叉,(1)while()while().,(2)do do while();.while();,(3)while()do while();.,(4)for(;)do while();while().,嵌套循环的执行流程嵌套循环的跳转禁止:从外层跳入内层跳入同层的另一循环向上跳转,main()int i=0,j;while(i=5)j=0;while(j=i)printf(“*”);j+;i+;printf(“n”);,main()int i=0

47、,j;for(i=0;i=5;i+)for(j=0;j=i;j+)printf(“*”);printf(“n”);,main()int i=0,j;do j=0;while(j=i)printf(“*”);j+;i+;printf(“n”);while(i=5);,例:嵌套循环,程序运行:*,程序执行情况,例g4-33x 打印九九表,/4.23d1#include main()int i,j;for(i=1;i10;i+)printf(%4d,i);printf(n-n);for(i=1;i10;i+)for(j=1;j10;j+)printf(j=9)?%4dn:%4d,i*j);,for(

48、i=1;i10;i+)for(j=1;j10;j+)printf(j=9)?%4dn:%4d,i*j);,6.1 多重循环程序举例,例4.23 编程,每行10个,输出1500中所有的素数。#include#include void main()int n,i,flag,count=0;for(n=2;n=500;n+)flag=1;for(i=2;i=sqrt(n);i+)if(n%i=0)flag=0;break;if(flag=1)/根据flag判断n是否素数 printf(%5d,n);/输出素数 count+;/统计输出素数个数 if(count%10=0)printf(“n”);/输

49、出换行,for(n=2;n=500;n+)判断n是否是素数 若n是素数,输出n,例 百钱买百鸡问题。公鸡5元1只,母鸡3元1只,小鸡1元买3只,问100元钱买100只,有几种买法?分析:这是组合问题,公鸡、母鸡、小鸡的取值范围均为0100,各种鸡的取值与其它鸡无关,对每一种鸡的取值要反复地试,将百钱买百鸡的组合取出来。,#include void main()int cock,hen,chick;for(cock=0;cock=100;cock+)for(hen=0;hen=100;hen+)for(chick=0;chick=100;chick+)if(cock*5+hen*3+chick/

50、3=100,程序执行情况,上述程序是个三重循环,做了大量的无用功,因公鸡数不会超过20只,母鸡数不会超过33只;另外,确定了公鸡、母鸡的数目后,小鸡的只数应该是:100-公鸡数-母鸡数,程序修改如下:,#include void main()int cock,hen,chick;for(cock=0;cock=20;cock+)for(hen=0;hen=33;hen+)chick=100-cock-hen;if(cock*5+hen*3+chick/3=100,程序执行情况,例 计算1!+2!+3!+10!。#include void main()int i,n;float s=0,y;/阶

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号