计算机二级 程序控制结构精选文档.ppt
计算机二级 程序控制结构本讲稿第一页,共二十八页1C语言的语句C语句可分为以下五类:语句可分为以下五类:1.表达式语句表达式语句 2.函数调用语句函数调用语句 3.控制语句控制语句 4.复合语句复合语句 5.空语句空语句 本讲稿第二页,共二十八页21.表达式语句表达式语句 表达式语句由表达式加上分号表达式语句由表达式加上分号“;”组成。组成。其一般形式为:其一般形式为:表达式;表达式;执行表达式语句就是计算表达式的值执行表达式语句就是计算表达式的值。例如:x=y+z;赋值语句y+z;加法运算语句,但计算结果不能保留,无实际意义i+;自增1语句,i值增1 本讲稿第三页,共二十八页32.函数调用语句函数调用语句 由函数名、实际参数加上分号“;”组成。其一般形式为:函数名(实际参数表);执行函数语句就是调用函数体并把实际参数赋予函数定义中的形式参数,然后执行被调函数体中的语句,求取函数值。本讲稿第四页,共二十八页43.控制语句控制语句 控制语句用于控制程序的流程,以实现程序的各种结构方式。它们由特定的语句定义符组成。语言有九种控制语句。可分成以下三类:(1)(1)条件判断语句条件判断语句ifif语句,语句,switchswitch语句语句(2)(2)循环执行语句循环执行语句do whiledo while语句,语句,whilewhile语句,语句,forfor语句语句(3)(3)转向语句转向语句breakbreak语句,语句,gotogoto语句,语句,continuecontinue语句,语句,returnreturn语句语句 本讲稿第五页,共二十八页54.复合语句复合语句 把多个语句用括号把多个语句用括号括起来组成的一个语句称复合语句。括起来组成的一个语句称复合语句。在程序中应把复合语句看成是单条语句,而不是多条语句在程序中应把复合语句看成是单条语句,而不是多条语句 x=y+z;x=y+z;x=y+z;x=y+z;a=b+c;a=b+c;a=b+c;a=b+c;printf(“%d%d”printf(“%d%d”printf(“%d%d”printf(“%d%d”,x x x x,a)a)a)a);是一条复合语句。复合语句内的各条语句都必须以分号“;”结尾,在括号在括号“”外不能加分号。外不能加分号。本讲稿第六页,共二十八页65.空语句空语句 只有分号只有分号“;”组成的语句称为空语句组成的语句称为空语句。空语句是什么也不执行的语句。在程序中空语句可用来作空循环体。例如例如 while(getchar()!=n)while(getchar()!=n);本语句的功能是,只要从键盘输入的字符不是回车则重新输入。本语句的功能是,只要从键盘输入的字符不是回车则重新输入。这里的循环体为空语句。这里的循环体为空语句。本讲稿第七页,共二十八页7【例3.1】#include#include float triangle_area(float a,float b,float c)float l;l=(a+b+c)/2.0;return sqrt(l*(l-a)*(l-b)*(l-c);main()float a,b,c,area;printf(“请输入三角形三条边的边长:”);scanf(“%f%f%f”,&a,&b,&c);area=triangle_area(a,b,c);printf(“该三角形的面积是:%6.2fn”,area);函数调用语句主函数在后主函数在后,自定义函数在前自定义函数在前的格式的格式本讲稿第八页,共二十八页8【例3.2】#include#include main()float triangle_area(float a,float b,float c);float a,b,c,area;printf(“请输入三角形三条边的边长:”);scanf(“%f%f%f”,&a,&b,&c);area=triangle_area(a,b,c);printf(“该三角形的面积是:%6.2fn”,area);float triangle_area(float a,float b,float c)float l;l=(a+b+c)/2.0;return sqrt(l*(l-a)*(l-b)*(l-c);本讲稿第九页,共二十八页9顺序结构按书写顺序执行的语句构成的程序段按书写顺序执行的语句构成的程序段【例3.3】输入任意三个整数,求它们的和及平均值main()int num1,num2,num3,sum;float aver;printf(Please input three numbers:);scanf(%d%d%d,&num1,&num2,&num3);sum=num1+num2+num3;aver=sum/3.0;printf(num1=%d,num2=%d,num3=%dn,num1,num2,num3);printf(sum=%d,aver=%7.2fn,sum,aver);这两部分语句的顺序能调换吗?本讲稿第十页,共二十八页10【例3.4】从键盘输入一个小写字母,要求用大小写字母形式输出该字母及对应的ASCII码值#include main()char c1,c2;printf(Input a lowercase letter:);c1=getchar();putchar(c1);printf(%dn,c1);c2=c1-32;printf(%c,%dn,c2,c2);这两部分语句的顺序能调换吗?本讲稿第十一页,共二十八页11在顺序结构程序中,一般包括以下几个部分:1.程序开头的编译预处理命令。在程序中要使用标准函数(又称库函数),除printf()和scanf()外,其它的都必须使用编译预处理命令,将相应的头文件包含进来。2.顺序结构程序的函数体中,是完成具体功能的各个语句和运算,主要包括:a)变量类型的说明;b)提供数据语句;c)运算部分;d)输出部分。本讲稿第十二页,共二十八页12【例例3.5】#include main()float a,b,c,l,area;printf(“请输入三角形三条边的边长:请输入三角形三条边的边长:”);scanf(“%f%f%f”,&a,&b,&c);l=(a+b+c)/2.0;area=sqrt(l*(l-a)*(l-b)*(l-c);printf(“该三角形的面积是:该三角形的面积是:%6.2fn”,area);本讲稿第十三页,共二十八页13分支结构根据输入数据或中间结果的不同选择不同的语句组执行,此时需要一个变量或表达式的值来作为判定的依据。两种分支结构条件分支(if和if else):根据给定的条件进行判断,决定执行某个分支的程序段;开关分支(switch):根据给定整型表达式的值进行判断,决定执行多路分支中的一支。本讲稿第十四页,共二十八页14if结构结构结构一:单路选择结构结构一:单路选择结构if(表达式)语句组【例3.6】main()int i;printf(“Please input an integer:”);scanf(“%d”,&i);if(i0)i=-i;printf(“The absolute value is:%dn”,i);本讲稿第十五页,共二十八页15【例3.7】输入两个数字将较大的送入x中,较小送入y中,并输出.算法分析:E1:输入输入x,y值值E2:两者中较大者存入两者中较大者存入x中中,较小存入较小存入y中中E3:输出输出X,YE2.1IF xy THENE2.2交换交换x,yE2.2.1将将x值存入临时变量值存入临时变量TEMP中中E2.2.2将将y值存入值存入x中中E2.2.3将将TEMP中的值存入中的值存入y中中#include main()int x,y,temp;printf(输入两个整数输入两个整数!);scanf(%d,%d,&x,&y);if(x=90)printf(“The grade is:An”);else if(a=80)printf(“The grade is:Bn”);else if(a=70)printf(“The grade is:Cn”);else if(a=60)printf(“The grade is:Dn”);else printf(“The grade is:En”);从键盘上输入一个百分制成绩score,按下列原则输出其等级:90score,等级为A;80score90,等级为B;70score80,等级为C;60score70,等级为D;score60,等级为E。输入:95运行结果:The grade is:A 输入:75运行结果:The grade is:C本讲稿第二十页,共二十八页20if后面都有“表达式”,一般为逻辑表达式或关系表达式,也可以为任意的数值类型,系统对表达式的值进行判断,若为0,按“假”处理,否则按“真”处理。在if 和else 后面可以只含一个操作语句,也可以有多个操作语句,此时用 将几个语句括起来成为一个复合语句。在 后面不需要加括号。本讲稿第二十一页,共二十八页21if语句的嵌套在if语句中又包含一个或多个if语句if ()if()语句组1else 语句组2else if()语句组3else 语句组4本讲稿第二十二页,共二十八页22if()if()语句1elseif()语句2else 语句3if()if()语句1 else if()语句2else 语句3if与else的配对关系:1.从最内层开始,else总是与它上面最近(未曾配对)的if配对;2.如果if与else的数目不一样,为实现程序设计者的企图,可以加 来确定配对关系。if()if()语句1 else if()语句2 else 语句3本讲稿第二十三页,共二十八页23switch结构一般的格式:switch(表达式)case 常量表达式1:语句组1 break;case 常量表达式2:语句组2 break;case 常量表达式n:语句组n break;default:语句组n+1执行过程:1.当switch后面“表达式”的值,与某个case后面的“常量表达式”的值相同时,就执行该case后面的语句(组);2.当执行到break语句时,跳出switch语句,转向执行switch语句的下一条。3.如果没有任何一个case后面的“常量表达式”的值,与“表达式”的值匹配,则执行default 后面的语句(组)。然后,再执行switch语句的下一条。(注:方括号表示可选项)本讲稿第二十四页,共二十八页24switch结构本讲稿第二十五页,共二十八页25说明说明1.switch后面的后面的“表达式表达式”,可以是整型、字符型和枚举型中的一种。,可以是整型、字符型和枚举型中的一种。2.每个每个case后面后面“常量表达式常量表达式”的值,必须各不相同,否则会出现相互矛盾的现的值,必须各不相同,否则会出现相互矛盾的现象(即对表达式的同一值,有两种或两种以上的执行方案)。象(即对表达式的同一值,有两种或两种以上的执行方案)。3.case后面的常量表达式仅起语句标号作用,并不进行条件判断。系统一旦后面的常量表达式仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,所以必须加上找到入口标号,就从此标号开始执行,不再进行标号判断,所以必须加上break语句,以便结束语句,以便结束switch语句。语句。4.各各case及及default子句的先后次序,不影响程序执行结果。子句的先后次序,不影响程序执行结果。5.多个多个case子句,可共用同一语句(组)。子句,可共用同一语句(组)。6.用用switch语句实现的多分支结构程序,完全可以用语句实现的多分支结构程序,完全可以用if语句或语句或if语句的嵌套来语句的嵌套来实现。实现。本讲稿第二十六页,共二十八页26【例3.9】main()int score,grade;printf(“Input a score(0100):”);scanf(“%d”,&score);grade=score/10;switch(grade)case 10:case 9:printf(“grade=An”);break;case 8:printf(grade=Bn);break;case 7:printf(grade=Cn);break;case 6:printf(grade=Dn);break;case 5:case 4:case 3:case 2:case 1:case 0:printf(“grade=En”);break;default:printf(“The score is out of range!n”);例3.6 从键盘上输入一个百分制成绩score,按下列原则输出其等级:90score,等级为A;80score90,等级为B;70score80,等级为C;60score70,等级为D;scorey&x!=y);x+=y;if(x!=y)scanf(%d,&x);else scanf(%d,&y);if(x5)printf(%dn,a);else printf(%dn,a-);(a)7 (b)4 (c)5 (d)6本讲稿第二十八页,共二十八页28