
《第3章 分支结构程序设计》由会员分享,可在线阅读,更多相关《第3章 分支结构程序设计(37页珍藏版)》请在文档大全上搜索。
1、C C语言程序设计语言程序设计(第(第3 3版)版) 张张 磊磊 编著编著 2121世纪高等学校规划教材世纪高等学校规划教材 清华大学出版社清华大学出版社u3.1 简单条件的分支程序u3.2 复合条件的分支程序 u3.3 用switch语句实现分支控制 u3.4 goto语句 u3.5 条件运算u3.6 分支结构应用举例l3.1.1判断优等生程序判断优等生程序 l3.1.2关系表达式关系表达式 l3.1.3 if语句语句 例例3-1 输入一个学生的两门课的成绩,若平均成绩不低于90分,则显示“优等生”,否则显示“要加油啊!”。1程序程序/* program e3-1.c */#includev
2、oid main() int a1,a2,ave; printf(输入两门课的成绩:); scanf(%d,%d,&a1,&a2); ave=(a1+a2)/2; /* 分支控制 */ printf(优等生!n); printf(要加油啊!n); 2程序解析程序解析l程序中的命令用于实现分支控制,是“”。当ave=90成立时,执行语句“printf(”优等生!n“);”,输出字符串“优等生!”;否则,执行语句“printf(”要加油啊!n“);”,输出字符串“要加油啊!”。l第一次执行结果输入两门课的成绩:88,96优等生!l第二次执行结果输入两门课的成绩:77,85要加油啊!
3、:由连接若干个算术表达式构成的式子。分支结构的条件部分,通常使用关系表达式表示。如,程序e3-1.c中if命令的分支处理条件“ave=90” 关系运算符含义实例 大于ave90=大于等于ave=90 小于ave90=小于等于ave=90=等于ave=90!=!=不等于ave!=90l if语句的一般形式l if语句的简单形式l if语句的嵌套结构l if-else if结构l结构 if(表达式) 语句组1 else 语句组2l其执行过程如果表达式的值为非0, 则执行“语句组1”,然后执行紧接“语句组2”之后的语句;否则,跳过语句组1而执行语句组2,然后继续向下执行。 1if语句的一般形式语句的
4、一般形式 计算分段函数的值。0)(x 25x 0)(x 25xy/* program e3-2.c */#includevoid main() int x,y; printf(X=); scanf(%d,&x); if(x0) y=x+25; else y=x-25; printf(Y=%dn,y); l if(表达式) 语句组l 若表达式的值非0(即真), 则执行语句组,然后继续执行if语句的下一个语句;否则,不执行语句组,而直接执行语句组之下的语句,即if语句的下一个语句。即: 输入一个学生两门课的成绩,若平均成绩不低于90分,则显示“优等生”。 程序实现程序实现 /* progr
5、am e3-3.c */#includevoid main()int a1,a2,ave;printf(输入两门课的成绩,数据之间用“,”分隔:);scanf(%d,%d,&a1,&a2);ave=(a1+a2)/2;if(ave=90) printf(优等生!n); 算法设计算法设计 输入一个整数x,若是偶数,则输出它。 程序实现程序实现 /* program e3-4.c */#includevoid main()int x;printf(Input x: );scanf(%d,&x);if(x%2=0)printf(%dn,x); 算法设计算法设计 例例3-53-
6、5 输入两个整数,输出其中的最大数。 程序实现程序实现 /* program e3-5.c */#includevoid main()int x,y,max;printf(Input x,y: ); scanf(%d,%d,&x,&y); max=x;if(maxy)max=y;printf(MAX=%dn,max); 算法设计算法设计 l当一个if语句的语句组内又使用了if语句时,就形成了if语句的嵌套结构。例例3-6 输入一个学生两门课的成绩,若平均成绩小于0,则显示“数据错误!”;否则,若平均成绩不低于90分,则显示“优等生”,否则显示“要加油啊!”。 l 算法设计算法设
7、计根据平均成绩的计算结果,将有两个大的分支: 平均成绩小于0,显示“数据错误!”;平均成绩不小于0,进一步进行小分支处理。 #includestdio.h#include void main()void main() intint a1,a2,ave; a1,a2,ave;printfprintf(输入两门课的成绩:输入两门课的成绩:););scanf(%d,%d,&a1,&a2);scanf(%d,%d,&a1,&a2);aveave=(a1+a2)/2;=(a1+a2)/2; printf printf(数据错误数据错误!n);!n); printf pri
8、ntf(优等生优等生!n); !n); else else printf printf(要加油啊要加油啊!n); !n); if(表达式表达式1) 语句组语句组1 else if(表达式表达式2) 语句组语句组2 else if(表达式表达式3) 语句组语句组3 . . . else if(表达式表达式n) 语句组语句组nelse 语句组语句组n+1 n 从上到下逐个对条件进行判断从上到下逐个对条件进行判断, 一旦发现条件一旦发现条件满足就执行与它有关的语句组,其下的所有条满足就执行与它有关的语句组,其下的所有条件都不再判断,当然它们的语句组也不被执行件都不再判断,当然它们的语句组也不被执行;
9、当任何一个条件都不满足时,执行最后一个;当任何一个条件都不满足时,执行最后一个语句组语句组n+1。 计算分段函数值计算分段函数值0)(x 265x. 10)(x 360)(x 85xy#includevoid main() float x,y; printf(Input: ); scanf(%f,&x); if(x0) y=5*x+8; else if(x=0) y=36; else y=1.5*x-26; printf(y=%fn,y);l3.2.1 使用新标准的优等生程序使用新标准的优等生程序 l3.2.2 逻辑表达式逻辑表达式 例例3-93-9 输入一个学生的两门课的成绩,若每门
10、课的成绩都不低于90分,则显示“优等生”,否则显示“要加油啊!”。 #includevoid main() int a1,a2; printf(输入课程成绩:); scanf(%d,%d,&a1,&a2); if() printf(优等生!n); else printf(要加油啊!n); 程序中的命令实现分支控制,分支处理的条件由逻辑表达式“”表示,这,其中的符号,它表示“a1=90”与“a2=90”都成立时,复合条件才成立。 逻辑运算符实现了多个关系表达式的连接,通过逻辑运算符将多个条逻辑运算符实现了多个关系表达式的连接,通过逻辑运算符将多个条件组合在一个表达式中,用于处理实
11、现多条件判断问题。件组合在一个表达式中,用于处理实现多条件判断问题。1 1逻辑运算符逻辑运算符3逻辑运算符的优先级和结合性逻辑运算符的优先级和结合性l执行过程首先计算switch后面表达式的值,然后与第一个case的“常量”进行比较,若不相等,则跳过其下的语句组,再与下一个case的“常量”进行比较;若与某一个case的“常量”相等,则从其下的语句组开始,依次向下执行各语句组的语句,直至遇到一个强制中断语句break或执行完最后一个语句组语句为止。当所有case都不符合要求时,执行default下的语句组语句。一般格式中的“default:”及其语句组允许缺省。 switch语句是专门用于多路
12、分支选择的语句,适用于if-else if式的结构。l switch语句格式switch(表达式) case 常量1: 语句组1 case 常量2: 语句组2 case 常量n: 语句组n default: 语句组n+1 l执行过程 #includevoid main()char result;scanf (%c,&result);switch(result) case A: case B: case C: printf (Good!n); break; case D: case E: printf (Bad!n); break; default: printf (Error!n);
13、用条件运算计算分段函数的值。0)(x 25x 0)(x 25xy3实现程序实现程序/* program e3-17.c*/#includevoid main()char ch1,ch2;printf(Input: );ch1=getchar();ch2=(ch1=A&ch1=Z)?ch1+32:ch1;printf(Output: %cn,ch2); l 3.6.1 闰年问题l 3.6.2 判断等边三角形l 3.6.3 求解一元二次方程l 3.6.4 学生成绩分等显示 2实现程序/* program e3-18.c */#includevoid main()int year;print
14、f(Input year: );scanf(%d,&year);printf(%d is a leap year.n,year);elseprintf(%d is not a leap year.n,year);/* program e3-19.c */#includevoid main()int a,b,c;loop: printf(a,b,c: ); scanf(%d,%d,%d,&a,&b,&c); if(a=0|b=0|c=0|a+bc|a+cb|b+ca) goto loop; printf(equilateral trianglen);elsepri
15、ntf(no equilateral trianglen); 0cbxax2 若有实根,则计算并输出实根若有实根,则计算并输出实根 程序的输入量为方程的系数程序的输入量为方程的系数a、b、c。 2a4acbbx21,2 程序中要使用数学函数程序中要使用数学函数sqrt(),要注意打开,要注意打开math.h文件。文件。#include#include void main() float a,b,c; float x1,x2,d; printf(Input a,b,c: ); scanf(%f,%f,%f,&a,&b,&c); d=b*b-4*a*c; if(d=0) x
16、1=(-b+sqrt(d)/(2*a); x2=(-b-sqrt(d)/(2*a); printf(x1=%f,x2=%fn,x1,x2); else printf(no real root.n); /* program e3-21.c */#includevoid main() int a,b; int ave; repeat: printf(Data(a,b): ); scanf(%d,%d,&a,&b); if(a0|b0) goto repeat; ave=(a+b)/2; switch(ave/10) case 10: case 9: printf(Result: e
17、xcellencen); break; case 8: printf(Result: all rightn); break; case 7: printf(Result: middlingn); break; case 6: printf(Result: passn); break; default: printf(Result: failn); 实现分支结构的控制语句主要是if语句和switch语句、goto语句,if语句适用于分支较少的情况,switch语句适用于分支较多的情况。 if语句有多种形式,任何一种if语句的语句体中都可以出现其他的if结构,这种结构称为if语句的嵌套结构。 switch语句专门用于多路分支选择,适用于if else if式的结构,而且更清晰。程序总是试图从满足条件的第一个case子句开始执行其后的所有语句,而不再对其后的case进行判断。因此,通常使用break语句中断switch语句的运行。 goto语句是一种无条件转移语句,主要用于控制程序的执行方向,也可以利用它反复地执行同一段程序。goto语句只有在特殊情况下才会使用,并且通常和if语句共同使用。 本章最后,通过闰年问题、判断等边三角形、求解一元二次方程和学生成绩分等显示等典型实例,详细介绍了分支结构程序设计的方法和过程。