第4章流程控制.ppt

上传人:夺命阿水 文档编号:740707 上传时间:2023-11-03 格式:PPT 页数:61 大小:1.04MB
返回 下载 相关 举报
第4章流程控制.ppt_第1页
第1页 / 共61页
第4章流程控制.ppt_第2页
第2页 / 共61页
第4章流程控制.ppt_第3页
第3页 / 共61页
第4章流程控制.ppt_第4页
第4页 / 共61页
第4章流程控制.ppt_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《第4章流程控制.ppt》由会员分享,可在线阅读,更多相关《第4章流程控制.ppt(61页珍藏版)》请在课桌文档上搜索。

1、,C语言程序设计(The C Programming Language),第四章 流程控制,4-1 结构化程序设计4-2 C语句概述4-3 选择语句4-4 循环语句4-5 辅助控制语句4-6 习题,第四章 流程控制,结构化程序设计思想算法传统流程图表示的三种结构N/S方框图表示的三种结构小结,4-1 结构化程序设计,4.1.1 结构化程序设计思想任何程序都可以用三种基本结构表示,即用顺序(Composition)、选择(Alternation)和循环(Iteration)结构来表示。这三种结构反复组合、嵌套构成的程序称为结构化程序。顺序结构的程序流程是按照语句的顺序依次执行;选择结构是根据给定

2、的条件进行判断,由判断结构决定执行两支或多支程序段中的一支;循环结构是在给定条件成立的情况下,反复执行某个程序段。优点结构化程序层次分明、结构清晰、有效地改善了程序的可靠性,从而大大地提高了程序设计的质量和效率。,4-1 概述,4-1 结构化程序设计,自顶向下,逐步求精,4.1.2 算法“算法”是为解决一个具体问题而采取的确定的有限的操作步骤。(数据结构)(算法)程序 NWirth 算法的表示方法:传统的流程图N/S方框图自然语言伪码问题求解图(PAD),4-1 结构化程序设计,4.1.3 传统流程图表示的三种结构,4-1 结构化程序设计,4.1.3 传统流程图表示的三种结构顺序结构(Comp

3、osition),4-1 结构化程序设计,4.1.3 传统流程图表示的三种结构 选择结构(Alternation),4-1 结构化程序设计,4.1.3 传统流程图表示的三种结构循环结构(Iteration),(1)当型,(2)直到型,4-1 结构化程序设计,实例1:计算1+2+3+100的值,4-1 结构化程序设计,这是一款意大利生产的多功能厨具|请猜价格!,600,答案是:720,低了!,800,750,700,高了!,高了!,正确!,这是一款瑞士生产的多功能刀具|请猜价格!,600,高了!,500,高了!,时间到!1个商标,720,低了!,答案是:428,4-1 结构化程序设计,实例2:幸

4、运52,“幸运52”的传统流程图,传统流程图的优缺点优点:形象直观,各种操作一目了然,不会产生“歧义性”,便于理解,算法出错时容易发现,并可直接转化为程序。缺点:所占篇幅较大,由于使用流程线,过于灵活,不受约束,使用者可使流程线任意转移,从而造成程序阅读和修改的困难,不利于结构化程序的设计。,4-1 结构化程序设计,4.1.4 N/S方框图N/S方框图是由美国学者INassi和BSchneiderman 于1973年提出的。N/S方框图的重要特点就是完全取消了流程线,这样,算法被迫只能顺序执行,从而避免了流程的任意转向,保证了程序的质量。尤其适合结构化程序的设计。N/S方框图的另一个优点是既形

5、象直观,又节省篇幅。,4-1 结构化程序设计,4-1 结构化程序设计,4.1.4 N/S方框图顺序结构(Composition),4-1 结构化程序设计,4.1.4 N/S方框图选择结构(Alternation),4-1 结构化程序设计,4.1.4 N/S方框图循环结构(Iteration),(1)当型,(2)直到型,实例1的N/S方框图,4-1 结构化程序设计,表达式语句 表达式;赋值语句 i=10;函数调用语句 printf(Hello!n);流程控制语句 选择 ifelse,elseif,switchcase 循环 for,while,dowhile 辅助控制 break,continu

6、e,goto,return 空语句;什么也不干 for(i=1;i5000;i+);延时 for(i=0;i100;ai+=0);语法要求 复合语句 多个简单句 语法上等同于一个简单语句 可以嵌套使用 分程序,数据说明一定要在所有执行语句之前。,4-2 C语句概述,4-3 选择语句,输入三个数,按从小到大输出main()float a,b,c,t;scanf(%f%f%f,4.3.1 if 语句 格式:if(表达式)语句;说明:一般语言,if 后是关系或逻辑表达式,而C无要求 if 只是测试表达式的值,当表达式的值为非0时,执行语句 if(表达式)if(表达式!=0)if(!表达式)if(表达

7、式=0)“语句”为一条语句或复合语句,4-3 选择语句,4.3.2 ifelse 语句 格式:if(表达式)语句1;else 语句2;说明:表达式仍为一般表达式,当表达式非0时,执行语句1,否则,执行语句2“语句1”、“语句2”均为一条语句或复合语句,4-3 选择语句,根据需要交换两个变量的值#include main()int a,b,x,ch;printf(Enter two integers:);scanf(%d%d,加上就行了!if(n0)if(ab)z=a;else z=b;,4-3 选择语句,要想在n=0时执行z=b;怎么办呢?,给你出个难题?现有程序段if(n0)if(ab)z=

8、a;else z=b;什么时候执行z=b;?,太简单了!else总是与其上最近的且未与其他else配对的if 配对,因此n0并且a=b时执行z=b;,4.3.3 分支嵌套else 总与其上最近的且未与其他else配对的if 配对 要想与其他if匹配加书写形式不能代替逻辑关系,4-3 选择语句,4.3.4 else-if 语句 格式:if(表达式1)语句1;else if(表达式2)语句2;.else if(表达式n)语句n;else 语句n+1;功能:逐个判断表达式的值,对首次为真者执行其后的语句,然后继续执行n+1条语句后的语句,全不为真时执行else 后的语句。,main()int mag

9、ic=200,guess;printf(“Please guess a magic number:”);scanf(%d,4-3 选择语句,main()int magic=200,guess;printf(“Please guess a magic number:”);scanf(%d,猜数数游戏:由计算机“想”一个数请人猜,若猜对了则给出提示“Right”,否则提示“Wrong”,并告诉人是大还是小了?,4-3 选择语句,输入学号及成绩,并根据成绩定等级main()int score,snum;char grade;scanf(%d%d,4-3 选择语句,4.3.5 开关分支switchca

10、se 格式:switch(表达式)case 值1:语句组1;break;case 值2:语句组2;break;.case 值n:语句组 n;break;default:语句组n+1;break;功能:根据表达式的值与各个case判断值的比较情况决定执行哪个语句组。,4-3 选择语句,4.3.5 开关分支switchcase 注意:表达式的值可为任意类型,但一般为整型或字符型数据,判断值的类型与其要一致case判断值必须为常量或常量表达式,且判断值必须互不相同default缺省时,当所有case判断不符时,则直接自动退出 switch当break语句不缺省时,case和default的顺序可以任

11、意break语句缺省时,系统将继续执行下一条case 语句组,可以使用case 重叠 共用一个语句组,4-3 选择语句,运输公司计算运费的原则是距离越远,每公里收费越低 s=3000 15%p-单价 w-重量 d-折扣 f 运费 p*W*S*(1-d)main()int s;float p,w,d,f;scanf(%f%f%d,4-3 选择语句,统计输入的一行字符中的英文各元音字母的个数(不区分大小写)#include main()int na,ne,ni,no,nu;char c;na=ne=ni=no=nu=0;while(c=getchar()!=n)switch(c)case A:ca

12、se a:na+;break;case E:case e:ne+;break;case I:case i:ni+;break;case O:case o:no+;break;case U:case u:nu+;break;printf(na=%d,ne=%d,ni=%d,no=%d,nu=%dn,na,ne,ni,no,nu);,4-3 选择语句,输入学号及成绩,并根据成绩定等级main()int score,snum;char grade;scanf(%d%d,4-4 循环语句,循环就是反复执行一段程序,被反复执行的程序段称为循环体。循环必须能结束,通常需要循环变量来控制循环。,4.4.1

13、while语句 当型 格式:while(表达式)循环体语句;说明:进入循环前要作初始化工作循环体中应有使条件向假方向变化的语句表达式为常数(非O)是无限循环,需配合其他语句加以控制循环体可以是空语句,4-4 循环语句,4-4 循环语句,计算1+2+3+100的值main()int sum=0,i=1;while(i=100)sum+=i+;/*sum+=i;i+;*/printf(“sum of 1-100 is:%dn”,sum);求个位数为6且能被3整除的5位数共有多少个?main()int i=0;long m=10006;while(m=99996l)if(m%3=0)/*if(m/3

14、)*3=m)*/i+;m+=10;printf(“It is%d n”,i);,4-4 循环语句,求出200800之间所有既能被7又能被11整除的整数main()int i=0,m=200;while(m=800)if(m%7=0,4.4.2 do while语句格式:do 循环体 while(表达式);说明:先执行一次循环体,再判表达式在不知道循环次数,且又必须执行一次循环体时,4-4 循环语句,4-4 循环语句,计算1+2+3+100的值main()int sum=0,i=1;do sum+=i;i+;while(i=100);printf(“sum of 1-100 is:%dn”,su

15、m);某数用3除余2,用5余3,用7余2)main()int i=0;do i+;while(!(i%3=2,4.4.3 for 语句 格式:for(表达式1;表达式2;表达式3)循环体;执行顺序:(1)执行表达式1(2)判断表达式2,如果表达式2成立,则执行循环体,如果表达式2不成立,则执行(4)(3)再执行表达式3,然后回到(2)(4)说明:表达式均可省略,分号不能省略 for(;)表达式1和3可为逗号表达式 for(i=0,j=100;ij;i+,j-);表达式2多为关系或逻辑表达式for(;low=high),4-4 循环语句,4-4 循环语句,计算1+2+3+100的值eg.main

16、()int sum=0,i;for(i=1;i=100;i+)sum+=i;printf(“sum of 1-100 is:%dn”,sum);,4-4 循环语句,4.4.4 循环的嵌套 多重循环在C语言中,当一个循环结构的循环体内有另一个循环结构时,称为多重循环或循环嵌套,前面介绍的三种循环结构可以相互嵌套。当一个循环的循环体仅是另一个单一的循环结构时,外层循环不需要使用大括号包围它的循环体。,打印乘法口诀表for(i=1;i=9;i+)for(j=1;j=9;j+)printf(“%5d”,i*j);printf(“n”);,1 2 3 4 5 6 7 8 9 2 4 6 8 10 12

17、14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81,1 2 4 3 6 9 4 8 12 16 5 10 15 20 25 6 12 18 24 30 36 7 14 21 28 35 42 49 8 16 24 32 40 48 56 64 9 18 27 36 45 54

18、 63 72 81,1 2 3 4 5 6 7 8 9 4 6 8 10 12 14 16 18 9 12 15 18 21 24 27 16 20 24 28 32 36 25 30 35 40 45 36 42 48 54 49 56 63 64 72 81,4-5 辅助控制语句,4.5.1 break语句功能:中断循环过程,退出循环体从包含它的switch退出说明:强行退出仅退出一层循环或一层switch4.5.2 continue语句 功能:使本次循环短路,继续执行下一次循环,4-5 辅助控制语句,跳过负元素,求为正元素之和main()int n,sum=0;while(1)scanf

19、(“%d”,printf(sum=%dn,sum),4-5 辅助控制语句,4.5.3 转向语句goto 格式:goto 标号;error:.for()if()goto error;.goto破坏结构化,不用!4.5.4 返回语句 return格式:return 值;return(值);,4-6 习题,简单应用 见书(谭)例题枚举法求最小公倍数找出100999之间的所有水仙花数,各位立方和=本身(153等)百钱买百鸡、百马运百货 求素数 编程序找出1000之内的所有完数,一个数恰好等于其因子之和如 6=1+2+3,4-6 习题,递推法公式类1!+2!+3!+20!1+1/1!+1/2!+1/10

20、!/4=1-1/3+1/5-1/7+1/9+10-6 求a+aa+aaa+aaaa a=2,n=7 2+22+222+2222+22222+222222+2222222其它猴子吃桃珠穆朗玛峰皮球落地,最小公倍、最大公约,main()int a,b,bei;printf(Please enter two integers:);scanf(%d%d,main()int a,b,bei,chu,yu;printf(Please enter two integers:);scanf(%d%d,水仙花数,main()int i,j,k,m,n;for(i=1;i=9;i+)for(j=0;j=9;j+)

21、for(k=0;k=9;k+)m=i*100+j*10+k;n=i*i*i+j*j*j+k*k*k;if(m=n)printf(%5d,m);,main()int m,i,j,k;for(m=100;m=999;m+)i=m/100;j=(m-i*100)/10;/*j=m%100/10;*/k=m%10;if(i*i*i+j*j*j+k*k*k=m)printf(%5d,m);,百钱买百鸡、百马拉百货,main()int i,j,k;for(i=1;i20;i+)for(j=1;j=33;j+)k=100-i-j;if(5*i+3*j+k/3=100,main()int i,j,k;for(

22、i=1;i34;i+)for(j=1;j50;j+)for(k=2;k100;k+=2)if(i*3+j*2+k/2=100,素数,判断一个数是否为素数#include main()long m;int i,sqrtm;printf(Please enter a numbers:);scanf(%ld,素数,求一个区间中所有的素数#include void main(void)long a,b,m;int i,sqrtm,count=0;printf(Please enter two numbers:);scanf(%ld%ld,完数,main()int i,j,s,n=0;printf(“1

23、000之内的完数:”);for(i=1;i=1000;i+)s=0;for(j=1;ji;j+)if(i%j=0)s+=j;if(s=i)printf(%5d,i);n+;if(n%10=0)printf(n);,/4=1-1/3+1/5-1/7+1/9+求,#include main()int s=1;long n=1;double pi=0,t=1;/*double pi=0,s=1,t=1,n=1;*/while(fabs(t)=1e-6)pi+=t;n+=2;s=-s;t=(double)s/n;/*t=s/n;*/pi*=4;printf(“PI=%fn,pi);,1!+2!+3!+

24、20!,main()int i;float s=0,t=1;for(i=1;i=20;i+)t*=i;s+=t;printf(“Result:%fn,s);,1+1/2!+1/3!+1/10!,main()int i;long t=1;float s=0;for(i=1;i=10;i+)t*=i;s+=1.0/t;printf(“Result:%fn,s);,a+aa+aaa+aaaa,main()int i,a,n;double t=0,s=0;printf(“%d%d”,猴子吃桃,main()int i,n;for(i=9,n=1;i=1;i-)n=(n+1)*2;printf(“The

25、first day have%d.n,n);,猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天又将剩下的桃子吃了一半,并多吃了一个,以后每天早上都这样,第十天想再吃时,只剩一个桃子,求第一天共摘多少桃子,珠穆朗玛峰,main()double high=0.00009;int n=0;while(high8848)n+;high*=2;printf(“对折%d次。n,n);,假设有一张足够大的纸,厚度为0.09毫米,将纸不断对折。编制程序,求将纸对折多少次后,可以达到珠穆朗玛峰的高度(8848米)。,皮球落地,main()float high=100,s=0;int i;f

26、or(i=1;i=10;i+)s+=high;high/=2;s+=high;s-=high;printf(“第10次落地共经过%f米,第10次反弹%f米n”,s,high);,一球从100米高度自由落下,每次落地后反弹回原高度的一半,再落下。求它在第10次落地时,共经过多少米?第10次反弹多高?,作 业,编程设计一个简单的计数器程序,要求根据用户从键盘输入的表达式:操作数1 运算符 操作数2,计算表达式的值。指定运算为+,-,*,/。例如输入:2.5+3 输出为:2.500000+3.000000=5.500000例如输入:5/2 输出为:5.000000/2.000000=2.500000

27、书第120页6.2、6.5求1-1/2+1/3-1/4+1/5+1/99-1/100编程输出以下图形,行数及每行个数由用户输入决定,*,作 业,编写猜数程序,程序中预先给定某个整数,从键盘反复输入整数进行猜数,每次输入数未猜中时,提示输入数过大或过小。猜中时显示猜的次数,最多允许猜20次。编写程序,从键盘输入一个正整数,计算该数的各个位数字之和,并显示结果。例如输入3257,结果为17。思考题:水手分椰子。五个水手在一个岛上发现了一堆椰子,现由第一个水手把椰子分为等量的5堆,剩下的1个给猴子,并自己藏起1堆,然后由第二个水手把剩下的4堆混合后重新分为等量的5堆,剩下的1个给猴子,并自己藏起一堆。以后第三、四个水手同样处理。最后第五个水手把剩下的椰子混合后分为等量的5堆,同样剩下1各给猴子。问原来这堆椰子至少有多少个。,

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

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


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号