您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > C语言程序的控制结构.
第三章程序的控制结构3.1程序的基本结构3.2简单语句与复合语句3.3选择结构3.4循环结构3.5编译预处理3.1程序的基本结构程序的基本结构有三种:顺序结构、分支结构、循环结构前面的例子都是顺序结构,大量的实际问题需要通过各种控制流程来解决。分支和循环结构的控制语句有:条件语句:if语句开关语句:switch语句循环语句:for语句、while语句、dowhile语句转移语句:break、continue、goto语句33.1程序的基本结构图3.4while型循环结构入口假出口SA图3.5do-while型循环结构入口假出口AS真53.2简单语句和复合语句•简单语句:均是以“;”结尾的语句。z=x+y;c=getchar();•复合语句:复合语句是用花招号“{}”把“说明”和若干个有序的简单语句组合在一起而构成的语句集合。其一般形式是:{内部数据说明语句表}63.2简单语句和复合语句•复合语句实例:{inti,j,k;i=i+1;j=j*2;}•空语句:空语句的含义是什么动作都不执行,语句本身仅有一个分号。while(putchar(getchar())!='\n');空语句问题提出:计算分段函数:y=3-xx≤02/xx0解题的步骤:输入xx≤0是y=3-xy=2/x否输出y的值C语言提供的选择结构有两种:if语句、switch语句。3.3选择结构3.3.1if语句if语句:对所给条件进行判定,根据判定结果决定是否执行程序段。语句形式:if(表达式){语句};语句执行流程:表达式语句真(非0)假(0)例3-1:读程序,理解数值作为if表达式#includestdio.hvoidmain(){inti=10,m=3;if(i!=0)printf(“iisnot0\n”);if(m)printf(“misnot0\n”);}程序运行结果:iisnot0misnot0例3-2:读程序,理解”==”与”=”的作用及区别#includestdio.hvoidmain(){intm=10;if(m==100)printf(“m==%d”,m);if(m=100)printf(“misassigned%d\n”,m);}程序运行结果:misassigned100if(表达式){语句1;}else{语句2;}表达式语句1真(非0)假(0)语句23.3.2if-else语句if-else语句适合于解决双分支选择问题语句形式:语句执行流程:例3-3:输入一个整数,判断该整数的奇偶性#includestdio.hvoidmain(){intm;printf(“inputm:”);scanf(“%d”,&m);if(m%2==0)printf(“%d是偶数\n”,m);elseprintf(“%d是奇数\n”,m);}输入mm%2==0偶数结束真假奇数例3-4:读程序,理解浮点数的运算与比较#includestdio.hvoidmain(){floatf;f=1.0;f=f/13.0;f=f*13.0;if(f==1.0)printf(“fisstill1.0\n”);elseprintf(“fisn’tstill1.0\n”);}程序运行结果:fisn’t1.0注意:有的if-else语句可以用条件运算符(?:)来实现if(ab)max=a;elsemax=b;max=(ab)?a:b;例3-5:输入一个英文字符,若为大写则改为小写,输出得到的字符。#includestdio.hvoidmain(){charzm;scanf(“%c”,&zm);zm=(zm=‘A’&&zm=‘Z’)?(zm+32):zm);printf(“%c”,zm);}程序运行结果:Bbif(表达式1)语句1;elseif(表达式2)语句2;……elseif(表达式n)语句n;else语句n+1;3.3.3嵌套的if-else语句语句形式:表达式1语句1真(非0)假(0)语句2表达式2真(非0)表达式2语句n语句n+1假(0)假(0)语句执行流程:例3-6:将0~100分的百分制换算成A~E的五级学分制。#includestdio.hvoidmain(){ints;scanf(“%d”,&s);if(s=90)printf(“scoreisA\n”);elseif(s=80)printf(“scoreisB\n”);程序运行结果:84Belseif(s=70)printf(“scoreisC\n”);elseif(s=60)printf(“scoreisD\n”);elseprintf(“scoreise\n”);}例3.7:计算分段函数:假输入xX0真X=0y=1y=0y=-1假真y=-1(x0)0(x=0)1(x0)#includestdio.hvoidmain(){intx,y;scanf(%f,&x);if(x0)y=-1;elseif(x==0)y=0;elsey=1;printf(x=%d,y=%d\n,x,y);}语句形式:switch(表达式){case常量1:语句1;case常量2:语句2;case常量3:语句3;.......case常量n:语句n;default:语句n+1;}根据表达式的不同值,选择不同的程序分支,又称开关语句。整型或字符型常量表达式的值必须互不相同,否则执行时将出现矛盾,即同一个开关值,将对应多种执行方案。千万不能接(;)号3.3.4switch语句语句执行流程:指语句的最后一条是否为break简单语句或复合语句breakbreak有无break有无有计算表达式常量1常量2常量n=语句1…===语句2语句n其它=语句n+1无值case语句出现的次序并不影响执行结果。例3-8:按照考试成绩等级打印出百分制分数段。程序运行结果:B80~89#includestdio.hvoidmain(){chargrade;scanf(%c,&grade);switch(grade){case‘A’∶printf(”90~100\n”);break;case‘B’∶printf(”80~89\n”);break;case‘C’∶printf(”70~79\n”);break;case‘D’∶printf(”60~69\n”);break;case‘E’∶printf(”0~59\n”);break;default∶printf(“error\n”);}}switch的嵌套:switch语句允许嵌套,即switch本身可以作为另一个层switch语句的一部分switch(i){case0:switch(j){case0:printf(“i==j”);break;case1:printf(“ij”);}break;case1:…….}switch几个注意点1、if语句能测试关系和逻辑表达式,而switch只能测试相等。2、switch语句的每个case后面的常数必须是整型或字符型,在使用字符常量时,自动转换成整数。3、switch语句中每个case常数必须不同。已知:inta,b;下列switch语句中,()是正确的。(A)switch(a)(B)switch(a+b){{casea:a++;break;case1:a++;caseb:b++;break;case2:b++;}}(C)switch(a*b)(D)switch(a/10+b){{case1,2:a+b;casea+b:++a;break;case3,4:a-b;casea-b:--b;}}B#includestdio.hvoidmain(){inta=2,b=-1,c=2;if(ab)if(bc)c=0;elsec+=1;printf(%d,c);}上面程序的运行结果是()。(A)3(B)2(C)1(D)0√以下()为不正确的if语句。(A)if(xy);(B)if(x==y)x+=y;(C)if(x!=y)x=x*xelsex+=1;(D)if(xy){x++;y++;}C在C语言中有三种循环结构:while,do-while和for循环,利用有关的运算符构造表达式,以控制循环的执行。3.4循环结构循环:就是在给定的条件成立时反复执行某一程序段,被反复执行的程序段称为循环体。1、while语句的形式:while(表达式){循环体;}3.4.1while语句2、while语句常称为“当型”循环语句。真(非零)循环体假(零)表达式3、说明:先判断表达式,后执行语句。表达式同if语句后的表达式一样,可以是任何类型的表达式。循环体多于一句时,用一对{}括起。while循环结构常用于循环次数不固定,根据是否满足某个条件决定循环与否的情况。例:分析下列程序段的循环次数i=1;while(i=100)putchar(‘*’);i++;i=1;while(i=100){putchar(‘*’);i++;}例3-9:用while编程实现1~100的和。#includestdio.hvoidmain(){inti,sum;i=1;sum=0;while(i=100){sum=sum+i;i++;}printf(″%d\n″,sum);}程序运行结果:5050例3-10:用while语句计算n!。#includestdio.hvoidmain(){intn,m,temp;scanf(“%d”,&n);m=1;temp=n;while(n=1){m=m*n;n--;}printf(“%d!=%d\n”,temp,m);}程序运行结果:55!=120注意表达式在判断前,必须要有明确的值。循环体中一般有改变条件表达式的语句。while(表达式)后面没有分号。3.4.2do--while语句1、do--while的形式:do{循环体;}while(表达式);2、do--while语句常称为“直到型”循环语句。真(非零)表达式循环体假(零)例3-10:用do-while编程实现1~100的和。#includestdio.hvoidmain(){inti,sum=0;i=1;do{sum=sum+i;i++;}while(i=100);printf(″%d\n″,sum);}程序运行结果:5050例3-11:用while语句计算5!。#includestdio.hvoidmain(){intt=1,i=2;do{t=t*i;i++;}while(i=5);printf(“5!=%d\n”,t);}程序运行结果:55!=1203、说明:do-while语句先执行语句,后判断表达式。第一次条件为真时,while,do-while等价;第一次条件为假时,二者不同。voidmain(){inti,sum=0;scanf(%d,&i);do{sum+=i;i++;}while(i=10);printf(%d,sum);}voidmain(){inti,sum=0;scanf(%d,&i);while(i=10){sum+=i;i++;}printf(%d,sum);}在if、while语句中,表达式后面都没有分号,而在do-while语句的表达式后面则必须加分号。do-while和while语句相互替换时,要注意修改循环控制条件。3.4.3for语句1、for的形式:for(初始表达式1;条件表达式2;循环表达式3){循环体;}表达式1:用于循环开始前为循环变量设置初始值。表达式2:控制循环执行的条件,决定循环次数表达式3:循环控制变量修改表达式。循环体语句:被重复执行的语句。表达式3计算表达式1循环体判断表达式2零非零for的下一条语句2、执行过程例3-13:用for语句编程实现1~100的和。#includestdio.hvoidmain(){inti,sum=0;for(i=1;i=100;i++)sum=sum+i;printf(“%d\n”,sum);}程序运行结果:50
本文标题:C语言程序的控制结构.
链接地址:https://www.777doc.com/doc-2908963 .html