




已阅读5页,还剩95页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章程序控制结构,1,主要内容,4.1C语言的执行语句4.2顺序结构4.3选择结构4.4循环结构,2,4.1C语言的执行语句,C语言的语句分为声明语句和执行语句。第3章介绍的变量定义语句是最常见的声明语句,声明语句在编译时处理,在程序运行时不产生相应的操作。执行语句的作用是在程序运行时向计算机系统发出操作命令,使计算机执行特定的操作.C语句:以“;”作结束符,编译后产生机器指令。C语句分类:表达式语句空语句控制语句复合语句,3,4.1.1表达式语句,表达式语句是在表达式的末尾加上分号构成的语句。z=x+sin(y);a-=a*a;赋值语句i+;自增1语句x=0,y=1;逗号表达式语句x+y;无意义printf(“ThisisaCprogram.n”);函数调用语句赋值语句和函数调用语句是使用最多的表达式语句,如:printf(ThisisaCstatement.);func(a,5);y=max(a,b);,4,4.1.2空语句,仅由一个“;”构成的语句只是在逻辑上起到一个语句的作用,在编译时不产生任何指令,在执行时不产生任何操作。作用:构成标号语句,标示流程的转向点;构成循环语句中空循环体。例如:while(getchar()!=n);只要从键盘上输入的字符不是回车则重新输入。,5,4.1.3复合语句,用括起来的一组语句。一般形式:执行语句;,说明:“”后不加分号其中最后一个语句后也要加分号语法上和单一语句相同复合语句可嵌套,如:z=x+y;t=z/100;printf(%f,t);,如:z=x+y;t=z/100;printf(%f,t);,6,4.1.4控制语句,控制语句:完成一定的控制功能。,如:if(xy)z=x;elsez=y;,7,4.2顺序结构,流程图流程图是表示算法的一种工具,用一些图框来表示各种操作。一个流程图包括以下几部分:表示相应操作的框;带箭头的流程线;框内外必要的文字说明。,8,顺序结构,常用的流程图符号:,N-S流程图:完全去掉了流程线,算法的每一步都用矩形框描述,把一个个矩形框按执行的次序连接起来就是一个完整的算法描述。,9,顺序结构,结构化程序的三种基本结构顺序结构:按书写顺序执行的语句构成的程序段,选择结构循环结构,10,例4.1输入任意两个整数,求它们的和及平均值。要求平均值取两位小数输出。,/例4.1#include#includevoidmain()intnum1,num2;floatsum,aver;printf(Pleaseinputtwointegers:n);scanf(%d,%d,运行情况:30000,5005sum=35005,aver=17502.50,11,例4.2给定一个三位正整数,分别输出其个位数、十位数和百位数。,#includevoidmain()intm,m0,m1,m2;printf(“Inputanumber(100999):”);scanf(%d,运行结果:Inputanumber(100999):263输出:3,6,2,12,例4.3取一个16位的二进制数a的7、6、5、4四个位,如图4-2中加阴影的部分。,voidmain()unsigneda,b,c,d;scanf(%x,/*以十六进制输出a和结果d*/,13,例4.4求ax2+bx+c=0方程的根。a,b,c由键盘输入,设。一元二次方程式的根为x1=x2=可以将上面的分式分为两项:p=,q=,则x1=p+q,x2=p-q。,顺序结构,14,#include#includevoidmain()floata,b,c,disc,x1,x2,p,q;scanf(a=%f,b=%f,c=%f,运行情况:输入:a=1,b=3,c=2输出:x1=-1.00 x2=-2.00,15,4.3选择结构,选择结构是指在程序执行过程中,根据指定条件的当前值在两条或多条路径中选择一条执行。C语言的选择控制语句有两条:条件选择语句:if语句开关分支语句:switch语句,16,4.3.1if语句,1、if格式(单分支语句)if(判断表达式)语句1;语句1可以是一条语句或复合语句。注意:满足条件时想要执行多条语句一定要用复合语句,当判断表达式值不为零(即”真”),则执行语句1,再执行其后继语句;否则,不执行语句1,执行其后继语句。,17,单分支语句,判断表达式应该是具有一定意义、有实用价值的表达式,因此,最常用关系表达式和逻辑表达式来表达,例如:if(a=b)if(a=0)等价于if(!a)if(a!=0)等价于if(a)if(a=5scanf(%d%d,20,例:输入三个数a,b,c,要求按由小到大的顺序输出。,Ifab将a和b对换Ifac将a和c对换Ifbc将b和c对换,单分支语句,21,单分支语句,#includevoidmain()floata,b,c,t;scanf(%f%f%f,必不可少,否则,会出现逻辑错误!,22,2、if(表达式)语句1else语句2,双分支if-else语句,例:if(xy)printf(“%d”,x);elseprintf(“%d”,y);,23,双分支if-else语句,说明:在if和else后面可以只含有一条语句,也可以含有用花括号括起来的复合语句。如:if(a+b)c,24,例:输入两个数并判断两数是否相等。,#includevoidmain()inta,b;printf(Enterintegera:);scanf(%d,运行结果:Enterintegera:12Enterintegerb:12a=b,运行结果:Enterintegera:12Enterintegerb:9a!=b,双分支if-else语句,25,分析以下程序的输出结果:,(1)#includevoidmain()inta,b;scanf(%d,(2)#includevoidmain()inta,b,t;scanf(%d%d,26,(3)#includevoidmain()intx,y;scanf(%d,(4)程序输出结果#includevoidmain()intx,y;scanf(%d,27,3.多分支语句,几种形式:,28,3、if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3elseif(表达式m)语句melse语句n,多分支语句,29,例:if(number500)cost=0.15;elseif(number300)cost=0.10;elseif(number100)cost=0.075;elseif(number50)cost=0.05;elsecost=0;,多分支语句,30,多分支语句,匹配规则:Else总是与它上面的,最近的,统一复合语句中的,未配对的if语句配对。,当if和else数目不同时,可以加花括号来确定配对关系。,例:if(a=b)if(b=c)printf(“a=b=c”);elseprintf(“a!=b”);,修改:if(a=b)if(b=c)printf(“a=b=c”);elseprintf(“a!=b”);,31,-1(x0)算法1:算法1:输入x输入x若x0,则y=1若x=0,则y=0输出y若x0,则y=1输出y,多分支语句,32,程序#includevoidmain()intx,y;scanf(“%d”,33,程序1:程序2:if(x=0)y=-1;if(x0)y=1;elseelsey=0;if(x=0)y=0;elsey=-1;elsey=1;程序3:程序4:y=-1;y=0;if(x!=0)if(x=0)if(x0)y=1;if(x0)y=1;elsey=0;elsey=-1;,正确,正确,上例中的程序段有四个,请判断哪个是正确的?,X=6)printf(%dn,n);elseprintf(%dn,+n);2对于整型变量a,赋值语句a=(a%3=0?1:0);与()语句不等价。(A)if(a%3=0)a=1;elsea=0;(B)if(a%3!=0)a=0;elsea=1;(C)if(a%3)a=0;elsea=1;(D)if(a%3)a=1;elsea=0;,52,课堂练习,3以下程序的运行结果是()。main()intn=c;switch(n+)default:printf(error);break;casea:caseb:printf(good);break;casec:printf(pass);cased:printf(warn);,53,循环结构,在许多问题中需要用到循环控制。循环结构是结构化程序设计的基本结构之一,它和顺序结构、选择结构共同作为各种复杂程序的基本构造单元。特点:当给定的条件成立时,反复执行某个程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体,它由C的语句构成。C语言提供了3种循环结构:while语句;do-while语句;for语句,54,4.4.1用while语句实现循环,while语句用来实现“当型”循环结构。一般形式:while(表达式)语句当表达式为非0值时,执行while语句中的内嵌语句。其特点是:先判断表达式,后执行语句。,(1)与if的区别,if只一次,while反复判断,反复执行;(2)while语句中通常有改变表达式的值的语句。,55,用while语句实现循环,例4.18计算1+2+100。main()inti=1,s=0;while(i9);/*空循环体,反复执行d=d/10*/printf(最高位是%d,d);,59,4.4.2用do-while实现循环,do-while语句的特点:先执行循环体,然后判断循环条件是否成立。一般形式:do循环体语句while(表达式);,执行过程:先执行一次指定的循环体语句,然后判别表达式,当表达式的值为非零(“真”)时,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时循环结束。,60,用do-while实现循环,用do-while计算:1+2+100。main()inti=1,s=0;dos=s+i;i+;while(i=100);printf(%d,%d,i,s);getch();,计算:1-3+5-7+101main()inti=1,s=0;ints=1,t=1;dos=s+t*i;i=i+2t=-t;while(i1e-6);pi=pi*4;printf(pi=%10.6fn,pi);,62,while和dowhile循环的比较,上述程序的功能是什么?比较:输入5和11时两个程序的输出结果如何?,#includevoidmain()inti,sum=0;scanf(%d,#includevoidmain()inti,sum=0;scanf(%d,当型循环最少执行次数是多少?直到型循环,最少执行次数是多少?,63,4.4.3用for语句实现循环,C语言中的for语句使用最为灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。一般形式:for(表达式1;表达式2;表达式3)循环体也可写作:for(循环变量赋初值;循环条件;循环变量增值)循环体,for语句等价于如下的while循环形式:表达式1;while(表达式2)语句表达式3;,64,用for语句实现循环,for语句的执行过程:(1)先求解表达式1。(2)求解表达式2,若其值为真(值为非0),则执行for语句中指定的内嵌语句,然后执行下面第(3)步。若为假(值为0),则结束循环,转到第(5)步。(3)求解表达式3。(4)转回上面第(2)步骤继续执行。(5)循环结束,执行for语句下面的一个语句,65,用for循环计算:1+2+100。main()inti,s=0;for(i=1;i=100;i+)/*注意括号后没有分号*/s=s+i;/*求和:1+2+3+100*/printf(%d,s);,变量i用于控制循环次数,我们称其为循环控制变量。,1.最后i的值是多少?2.从1加到10000或更多呢?,用for语句实现循环,66,说明:,表达式1,表达式2和表达式3之间必须用分号隔开,但表达式3后面不能加分号。循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。循环体有可能一次也不执行。循环体可以为空。表达式1和表达式3都可以为逗号表达式。(例)表达式1,表达式2和表达式3都可省略,但不鼓励省略表达式2和表达式3。(例:省略表达式1)for语句循环与while循环可以互相转换,但for循环的结构更简洁。,67,for语句的省略形式,例(1):i=1;for(;i100)break;,69,用for语句实现循环,例4.25求1!+2!+10!的值。voidmain()inti,n=10;longs,t;for(i=1,t=1,s=0;i=n;i+)t*=i;/*t为上一个数i-1的阶乘值,再乘以i,即i!=(i-1)!*i*/s+=t;/*累加i!*/printf(s=%ldn,s);,70,用for语句实现循环,例4.27编程输出“斐波那契数列”的前20项。“斐波那契数列”是意大利中世纪数学家列昂纳多斐波那契以兔子繁殖为例子而引入的,故又称为“兔子数列”。main()inti,x1=1,x2=1;for(i=1;i=10;i+)/*每次生成并输出两项,所以循环10次*/printf(%10d%10d,x1,x2);if(i%2=0)printf(n);/*当i为偶数时换行,即每四个换行*/x1=x1+x2;x2=x2+x1;,71,用for语句实现循环,最简单的写法:main()inti,j,k=10000;for(i=1,j=0;i=k;i=i+j,j=i-j)printf(%d,i);这里:i表示fibonacci(n)i=i+j;即第n项=第n-1项+第n-2项j=i-j;即第n-1项=第n项-第n-2项使i存放当前项,j存放前一项,程序运行结果为:11235813213455891442333776109871597258441816765,72,4.4.4continue语句和break语句,1.break语句(1)在while、for、dowhile语句的循环体或switch语句的语句组中,使用break语句可使程序立即退出该结构。故有中断语句之称。其语法格式如下:break;(2)功能:用在循环语句或switch语句中,使得跳出循环体或分支,提前结束循环或分支。,73,continue语句和break语句,#includevoidmain()inti;for(i=1;i+)if(!(512-i*15)%13)break;printf(%d+%d=512n,i*15,512-i*15);,例4.28将数字512表示成两个数的和,这两个数分别为15和13的倍数。,运行结果:135+377=512,74,continue语句和break语句,说明break只能终止并跳出最近一层的循环结构。break不能用于循环语句和switch语句之外的任何其它语句之中。在循环语句中,break总是与选择语句配合使用。,main()inti,s;s=0;for(i=1;i5)break;printf(%dn,s);,运行结果:13,75,continue语句和break语句,2.continue语句一般形式:continue;功能:用在循环语句中,使得结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。补充例题:for(i=1;i=10;i+)if(i%2=0)continue;printf(“%d”,i);该程序的功能是:只打印出单数,76,continue语句和break语句,说明:continue只能终止本次循环,而不是终止整个循环的执行。continue不能用于循环语句之外的任何其它语句之中.continue总是与选择语句配合使用。,/例4.29#includevoidmain()inti,n=0;for(i=100;i=200;i+)if(i%7!=0),例4.29输出100200之间所有能被7或9整除的数。,77,continue语句和break语句,补充例:计算输入的10个整数中正数的个数及正数平均值。main()inti,n,a;floats=0.0;printf(请输入10个整数:n);for(n=0,i=0;i0)下两句要加*/s+=a;n+;printf(共有%d个正数.其平均值为%f。n,n,s/n);,78,3.continue和break的区别:continue语句只是结束本次循环,而不是终止整个循环的执行,而break语句则是结束整个循环过程,不再判断条件是否成立。,79,continue语句和break语句,main()inti,a=0,b=0,c=0,d=0;for(i=1;i=4;i+)switch(i)case1:a=1;continue;case2:b=2;case3:c=3;break;case4:d=4;printf(%d%d%d%dn,a,b,c,d);,main()inti,s;s=0;for(i=1;i5)break;printf(%dn,s);,80,continue语句和break语句,main()intk=4,n=0;clrscr();for(;nk;)n+;if(n%3!=0)break;k-;printf(%d,%dn,k,n);,运行结果:4,1,将break改为continue运行结果:3,3,81,4.4.5循环的嵌套,循环的嵌套:一个循环体内又包含另一个完整的循环结构。多层循环:内嵌的循环中还可以嵌套循环。三种循环(while循环、do-while循环和for循环)可以互相嵌套,层数不限。循环嵌套形式举例:,(1)while()(2)do(3)for(;)while()dofor(;)while();while();,82,循环的嵌套,(4)while()(5)for(;)(6)dodowhile()for(;)while()while(),外层循环可包含两个以上内循环,但不能相互交叉。嵌套循环的执行流程例:for(i=1;i=n;i+)for(j=1;j=1;i-)/*总共要输出8行星号*/for(j=1;j=8-i;j+)printf();/*控制每行星号前面显示的空格*/for(k=1;k=2*i-1;k+)printf(*);/*控制每行星号的个数*/printf(n);/*控制输出每行星号后换行*/,84,循环的嵌套,例4.31改写例4.25求1!+2!+10!的程序,用嵌套的循环结构来实现。,main()inti,n=10,j;longs=0,t;for(i=1;i=n;i+)for(t=1,j=1;j=i;j+)t*=j;/*每次循环都重新计算i!*/s+=t;/*累加i!*/printf(s=%ldn,s);,85,程序举例穷举法,例4.32三位自方幂数又称水仙花数,用穷举法求出所有水仙花数。如:13+53+33=153,main()inti,j,k,m1,m2;printf(narcissusnumbersare:);for(i=1;i=9;i+)for(j=0;j=9;j+)for(k=0;k=9;k+)m1=i*100+j*10+k;m2=i*i*i+j*j*j+k*k*k;if(m1=m2)printf(%4d,m1);printf(n);,86,程序举例数的分离,例4.33编写一个程序,输入132767之间的整数,把这个整数显示为一系列数字,每组数字都是用两个空格分开。例如,整数1234应该显示为:1234。,main()inti,num,counter,temp;counter=1;printf(Enteraninteger:);scanf(%d,87,程序举例方程求根,例4.34用二分法求非线性方程f(x)=x3+1.1x2+0.9x-1.4=0的根。,voidmain()floatx,x1,x2,y1,y2,y;doprintf(Inputx1,x2:n);scanf(%f,%f,88,程序举例多项式计算,例4.35编程计算多项式的值。,voidmain()floatsum,term,x;intn,k,sign;printf(Inputn,x:n);scanf(%d,%f,89,程序举例数的判别,例4.36输入一个数,判断这个数是否为素数。,voidmain()intm,i,k;printf(Enteraninteger:n);scanf(%d,90,程序举例辗转相除法,例4.37用辗转相除法求两个数的最大公约数和最小公倍数。,voidmain()inta,b,m,n,temp,c,d;printf(Pleaseenter2integersn,m:n)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高项质量管理讲解
- 湖南体育职业学院《资本论选读》2023-2024学年第二学期期末试卷
- 2025至2031年中国摩托车灯头行业投资前景及策略咨询研究报告
- 2025至2031年中国大扁头自攻自钻钉行业投资前景及策略咨询研究报告
- 《员工培训与成长专题》课件
- 沟通有方法教育有温度-如何做好家校沟通经验分享发言稿
- 2025至2030年中国纬纱传感器数据监测研究报告
- 2025至2030年中国硬质合金可转位铣削刀具数据监测研究报告
- 2025至2030年中国电力调度自动化系统数据监测研究报告
- 2025标准版私人购房合同样式
- 铝加工(深井铸造)企业重点事项解读(米)
- 体育赛事管理课件
- 幼儿游戏与社会性的发展
- 大学生思想政治理论课研究性学习成果
- (医学课件)特应性皮炎
- 2024年安徽合肥文旅博览集团招聘笔试参考题库含答案解析
- 小学各年级 小学一年级 了解自己的优点和弱点 主题班会
- 产后出血预防与处理策略
- 酒店网络营销外文翻译文献
- 咽部肿瘤的诊治
- 情景题心理测试题目及答案
评论
0/150
提交评论