c语言的三种基本结构

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

§4.1C程序三种基本结构从结构化程序设计角度出发,程序只有三种结构:·顺序结构·选择结构·循环结构1.顺序结构表示ABAB先执行A,再执行B.2.选择结构表示为ABPTFBTPFA存在某条件P,若P为真,则执行A,否则执行B。另一种选择结构––多分支结构.KK=K1A1A2AiAn……K=K2K=Kn3.循环结构表示为PFTAAP为T(1)当型结构当P条件成立时(T),反复执行A,直到P为“假”时才停止循环.有两种结构:当型和直到型(2)直到型APTFA直到P为F先执行A,再判断P,若为F,再执行A,如此反复,直到P为F.已证明:上述三种结构组成的程序可以解决全部的问题,所以任何一种高级语言都具备上述三种结构。函数调用语句:如:printf(…);1.表达式语句赋值语句:如:i=i+1;i++;x+y;空语句:任何事情都不做。C程序语句可分为五大类:如:;4.2C语句2.控制语句––改变语句的执行顺序if()~else~(条件)for()~(循环)while()~(循环)do~while(循环)switch(多分支选择)()表示条件,~表示语句continue(结束本次循环)break(中止整个循环)return(函数返回)3.限定转向(无条件转向)语句5.终止程序运行语句4.无条件转移语句gotoexit6.复合语句(语句体)用{}括起来的一系列语句。如:{z=x+y;t=z/100;printf(%f,t);}1.if(表达式)语句一、if语句的三种形式执行过程:当表达式的值为“真”(非零)时,执行语句,否则,不执行语句。如:if(xy)z=x;4.3选择结构程序设计2.if(表达式)语句1else语句2执行过程:当表达式的值为“真”(非零)时,执行语句1,否则,执行语句2。如:if(xy)z=x;elsez=y;3.if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3:elseif(表达式m)语句melse语句n如:if(grade=85)level=‘A’;elseif(grade=70)level=‘B’;elseif(grade=60)level=‘C’;elselevel=‘D’;if语句说明:⑴if后面的表达式一般为逻辑表达式或关系表达式,也可以是任意数值类型表达式。该语句是合法的:if(3)printf(“ok!”);⑵if语句中的“语句”为一个简单语句或复合语句。如:下面程序段是否有错?if(x=0)printf(“Xispositive.”);x++;elseprintf(“Xisnegative.”);if(x=0){printf(“Xispositive.”);x++;}elseprintf(“Xisnegative.”);二、if语句的嵌套在if语句中又包含一个或多个if语句称为if语句的嵌套。一般形式:if(条件1)if(条件2)语句1else语句2elseif(条件3)语句3else语句4内嵌if内嵌if如:if(x0)if(y0)printf(x0,y0);elseprintf(“x0,y=0);elseif(y0)printf(“x=0,y0);elseprintf(“x=0,y=0”);说明:else与if的匹配原则是:一个else应与其之前距离最近且没有与其它else配对的if配对。if(n6)if(n12)printf(“6n12”);elseprintf(“n=6”);if(n6){if(n12)printf(“6n12”);}elseprintf(“n=6”);三、用if语句实现选择结构举例-1;x0例:求y=0;x=0输入x值,输出y值。1;x0main(){intx,y;scanf(%d,&x);if(x0)y=-1;elseif(x==0)y=0;elsey=1;printf(x=%dy=%d,x,y);}main(){floata,b,c;scanf(“%f%f%f”,&a,&b,&c);if(ab){t=a;a=b;b=t;}if(ac){t=a;a=c;c=t;}if(bc){t=b;b=c;c=t;}printf(“%5.2f,%5.2f,%5.2f”,a,b,c);}程序2:将程序1的if语句改为:/*exp52.c*/#includestdio.hmain(){intx,y;scanf(“%d,&x);if(x=0)if(x0)y=1;elsey=0;elsey=-1;printf(x=%d,y=%d\n,x,y);}程序1:/*exp51.c*/#includestdio.hmain(){intx,y;scanf(“%d,&x);if(x0)y=-1;elseif(x==0)y=0;elsey=1;printf(x=%d,y=%d\n,x,y);}程序4:将程序1的if语句改为:/*exp54.c*/#includestdio.hmain(){intx,y;scanf(“%d,&x);y=0;if(x=0)if(x0)y=1;elsey=-1;printf(x=%d,y=%d\n,x,y);}程序3:将程序1的if语句改为:/*exp53.c*/#includestdio.hmain(){intx,y;scanf(“%d,&x);y=-1;if(x!=0)if(x0)y=1;elsey=0;printf(x=%d,y=%d\n,x,y);}1.程序1和程序2是正确的。它们代表的函数为:2.程序3和程序4是错误的。它们代表的函数为:y=0(x0)–1(x=0)1(x0)y=–1(x0)0(x=0)1(x0)结论:§四switch多分支选择语句用if或if/else或它们的嵌套也可使程序实现多路分支,但容易出现下面的问题:可读性差破坏结构解决问题的方法:采用switch语句。switch(变量){case常量表达式1:语句体1case常量表达式2:语句体2case常量表达式n:语句体ndefault:语句体(n+1)}一般形式:根据表达式的取值,判断其与哪一个常量表达式相等。如=表达式i,则自语句i开始执行,直到语句n+1止。若与所有常量表达式值不相等,则从default后的语句开始执行。功能:注:default可有可无。例:根据成绩等级打印百分数段.switch(grade){case'A':printf(85~100\n);case'B':printf(70~84\n);case'C':printf(60~69\n);case'D':printf(60\n);default:printf(error\n);}程序如下:/*exp55.c*/#includestdio.hmain(){chargrade;scanf(%c,&grade);switch(grade){case'A':printf(85-100\n);case'B':printf(70-84\n);case'C':printf(60-69\n);case'D':printf(60\n);default:printf(Error\n);}}运行结果为:A程序运行结果不在预料之中!产生错误的原因:没有完全起到分支作用。85-10070-8460-6960Errorswitch(表达式){case常表1:语句1;break;case常表2:语句2;break;……case常表n:语句n;break;default:语句n+1;}一般形式为:解决办法:增加break语句,使之跳出switch结构。修改程序为:/*exp56.c*/#includestdio.hmain(){chargrade;scanf(%c,&grade);switch(grade){case'A':printf(85-100\n);break;case'B':printf(70-84\n);break;case'C':printf(60-69\n);break;case'D':printf(60\n);break;default:printf(Error\n);}}1.常量表达式的值必须互不相等,否则会有二异性。2.case顺序无关紧要。3.不一定非用break不可,有时几种情况合并执行一组语句。注意:switch(grade){case'A':case'B':case'C':printf(60\n);break;case'D':printf(60\n);break;}例如:§4.4循环结构•循环结构的特点是:•程序的流程是在给定条件时,反复执行,某个程序段。C语言中可以用以下语句来实现循环:⑴用goto语句和if语句构成循环;⑵用while语句;⑶用do_while语句;⑷用for语句。4.4.1goto语句和goto语句构成的循环一、goto语句goto语句为无条件转向语句,其作用为:使程序的执行无条件地转移到指定处。一般形式:goto语句标号;如:√gotolabel_1;╳goto123;执行过程:执行语句时,程序转移到以标号为前缀的语句处继续执行。如:p1:x++;...gotop1;说明:⑴C语言允许在任何语句前加一个语句标号,作为goto语句的目标。给语句加标号的形式:语句标号:语句⑵goto语句是一种非结构化语句,结构化程序设计方法不提倡使用goto语句,因为滥用goto语句将使程序流程无规律,可读性差。但也不是绝对禁止使用,只有在能够大大提高程序效率时才使用。且记:不要从循环体外跳到循环体内!二、用goto语句和if语句构成循环例:计算10!并输出结果。main(){inti=1,sum=1;loop:if(i=10){sum=sum*i;i++;gotoloop;}printf(“10!=%d\n”,sum);}运行结果:10!=24320本应是:10!=3628800main(){inti=1;longsum=1;loop:if(i=10){sum=sum*i;i++;gotoloop;}printf(“10!=%ld\n”,sum);}4.4.2while语句一般形式:while(表达式)语句执行过程:⑴先计算表达式的值;⑵若表达式的值为真(非0)时执行循环体中的语句,然后重复上面步骤。若表达式的值为假(0),则结束循环。例:将上面计算10!并输出结果的程序用while语句写出:main(){inti=1;longintsum=1;while(i=10){sum=sum*i;i++;}printf(“10!=%ld\n”,sum);}main(){inti=1;longintsum=1;loop:if(i=10){sum=sum*i;i++;gotoloop;}printf(“10!=%ld\n”,sum);}循环结构的术语1.循环条件:是循环结构中的测试表达式。如:while(i=10)2.循环体:是在每个循环周期均要执行一次的语句。语句可以是任何语句,简单语、复合语句、空语句均可以。如:上例while语句中用花括号括起来的复合语句。3.循环控制变量:是在循环条件中控制条件是真是假的变量。如:上例while语句中使用的变量i。注意:⑴循环条件中的表达式一般是逻辑表达式和关系表达式,也可以是算数表达式(非0为真,0为假)。一般表达式中应含有循环控制变量。while(3)和while(0)虽然从程序设计的角度上说是不合理的,但是合法的。while(3)语句表示无限循环while(0)语句表示不进入循环体⑵要写出一个正确的循环结构,对控制变量要做三方面工作:①控制变量赋初值;②把控制变量写入正确的循环条件;③控制变量的更新、调整。4.4.3do-while语句一般形式:do语句while(表达式);分号不能少执行过程:⑴执行循环体中的语句;⑵计算表达式,测试循环条件,为真(非0)则重复上面步骤,为假(0)结束循环。例:将上面计

1 / 72
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功