计算机二级第3章程序控制结构.ppt
1,第3章 程序控制结构,3.1 C语言的语句3.2 顺序结构3.3 分支结构,2,C语言的语句,C语句可分为以下五类:1.表达式语句 2.函数调用语句 3.控制语句 4.复合语句 5.空语句,3,1.表达式语句,表达式语句由表达式加上分号“;”组成。其一般形式为:表达式;执行表达式语句就是计算表达式的值。例如:x=y+z;赋值语句y+z;加法运算语句,但计算结果不能保留,无实际意义i+;自增1语句,i值增1,4,2.函数调用语句,由函数名、实际参数加上分号“;”组成。其一般形式为:函数名(实际参数表);执行函数语句就是调用函数体并把实际参数赋予函数定义中的形式参数,然后执行被调函数体中的语句,求取函数值。,例:,5,3.控制语句,控制语句用于控制程序的流程,以实现程序的各种结构方式。它们由特定的语句定义符组成。语言有九种控制语句。可分成以下三类:(1)条件判断语句if语句,switch语句(2)循环执行语句do while语句,while语句,for语句(3)转向语句break语句,goto语句,continue语句,return语句,6,4.复合语句,把多个语句用括号括起来组成的一个语句称复合语句。在程序中应把复合语句看成是单条语句,而不是多条语句 x=y+z;a=b+c;printf(“%d%d”,x,a);是一条复合语句。复合语句内的各条语句都必须以分号“;”结尾,在括号“”外不能加分号。,7,5.空语句,只有分号“;”组成的语句称为空语句。空语句是什么也不执行的语句。在程序中空语句可用来作空循环体。例如 while(getchar()!=n);本语句的功能是,只要从键盘输入的字符不是回车则重新输入。这里的循环体为空语句。,8,【例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”,函数调用语句,back,主函数在后,自定义函数在前的格式,9,【例3.2】#include#include main()float triangle_area(float a,float b,float c);float a,b,c,area;printf(“请输入三角形三条边的边长:”);scanf(“%f%f%f”,10,顺序结构,按书写顺序执行的语句构成的程序段【例3.3】输入任意三个整数,求它们的和及平均值main()int num1,num2,num3,sum;float aver;printf(Please input three numbers:);scanf(%d%d%d,这两部分语句的顺序能调换吗?,11,【例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);,这两部分语句的顺序能调换吗?,12,在顺序结构程序中,一般包括以下几个部分:程序开头的编译预处理命令。在程序中要使用标准函数(又称库函数),除printf()和scanf()外,其它的都必须使用编译预处理命令,将相应的头文件包含进来。顺序结构程序的函数体中,是完成具体功能的各个语句和运算,主要包括:变量类型的说明;提供数据语句;运算部分;输出部分。,13,【例3.5】#include main()float a,b,c,l,area;printf(“请输入三角形三条边的边长:”);scanf(“%f%f%f”,14,分支结构,根据输入数据或中间结果的不同选择不同的语句组执行,此时需要一个变量或表达式的值来作为判定的依据。两种分支结构条件分支(if和if else):根据给定的条件进行判断,决定执行某个分支的程序段;开关分支(switch):根据给定整型表达式的值进行判断,决定执行多路分支中的一支。,15,if结构,结构一:单路选择结构if(表达式)语句组【例3.6】main()int i;printf(“Please input an integer:”);scanf(“%d”,16,【例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,17,结构二:双路选择结构if(表达式)语句组1else 语句组2,18,结构三:多路选择if(表达式1)语句1else if(表达式2)语句2else if(表达式3)语句3else if(表达式m)语句melse 语句n,19,多路选择结构(4分支),20,【例3.8】main()int a;printf(Please input the score:);scanf(“%d”,从键盘上输入一个百分制成绩score,按下列原则输出其等级:90score,等级为A;80score90,等级为B;70score80,等级为C;60score70,等级为D;score60,等级为E。,输入:95运行结果:The grade is:A 输入:75运行结果:The grade is:C,21,if后面都有“表达式”,一般为逻辑表达式或关系表达式,也可以为任意的数值类型,系统对表达式的值进行判断,若为0,按“假”处理,否则按“真”处理。在if 和else 后面可以只含一个操作语句,也可以有多个操作语句,此时用 将几个语句括起来成为一个复合语句。在 后面不需要加括号。,22,if语句的嵌套在if语句中又包含一个或多个if语句,if()if()语句组1else 语句组2else if()语句组3else 语句组4,23,if()if()语句1elseif()语句2else 语句3,if()if()语句1 else if()语句2else 语句3,if与else的配对关系:从最内层开始,else总是与它上面最近(未曾配对)的if配对;如果if与else的数目不一样,为实现程序设计者的企图,可以加 来确定配对关系。,if()if()语句1 else if()语句2 else 语句3,24,switch结构,一般的格式:switch(表达式)case 常量表达式1:语句组1 break;case 常量表达式2:语句组2 break;case 常量表达式n:语句组n break;default:语句组n+1,执行过程:当switch后面“表达式”的值,与某个case后面的“常量表达式”的值相同时,就执行该case后面的语句(组);当执行到break语句时,跳出switch语句,转向执行switch语句的下一条。如果没有任何一个case后面的“常量表达式”的值,与“表达式”的值匹配,则执行default 后面的语句(组)。然后,再执行switch语句的下一条。(注:方括号表示可选项),25,switch结构,26,说明switch后面的“表达式”,可以是整型、字符型和枚举型中的一种。每个case后面“常量表达式”的值,必须各不相同,否则会出现相互矛盾的现象(即对表达式的同一值,有两种或两种以上的执行方案)。case后面的常量表达式仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,所以必须加上break语句,以便结束switch语句。各case及default子句的先后次序,不影响程序执行结果。多个case子句,可共用同一语句(组)。用switch语句实现的多分支结构程序,完全可以用if语句或if语句的嵌套来实现。,27,【例3.9】main()int score,grade;printf(“Input a score(0100):”);scanf(“%d”,例3.6 从键盘上输入一个百分制成绩score,按下列原则输出其等级:90score,等级为A;80score90,等级为B;70score80,等级为C;60score70,等级为D;score60,等级为E。,输入:85运行结果:grade=B输入:45运行结果:grade=E,28,以下是等级考试中的选择题,对于整型变量x,下述if 语句()与赋值语句:x=x%2=0?1:0;不等价。if(x%2!=0)x=0;else x=1;if(x%2)x=1;else x=0;if(x%2=0)x=1;else x=0;if(x%2=1)x=0;else x=1;以下的语句中,无内嵌执行语句的if语句是()。if(x=y)x+=y;if(xy,以下程序运行时,若从键盘输入5,则输出结果是()。main()int a;scanf(%d,(a)7(b)4(c)5(d)6,