《C程序设计第4章选择结构程序设计课件》由会员分享,可在线阅读,更多相关《C程序设计第4章选择结构程序设计课件(34页珍藏版)》请在金锄头文库上搜索。
1、1高级语言程序设计 南京邮电大学传媒技术学院第第4 4章章 选择结构程序设计选择结构程序设计2高级语言程序设计 南京邮电大学传媒技术学院单分支:单分支:if(表达式表达式)语句;语句;其他语句;其他语句;双分支:双分支:if(表达式表达式)语句语句1;else语句语句2;其他语句;其他语句;多分支:多分支:if(if(表达式表达式1 1) 语句语句1 1; else if(else if(表达式表达式2 2) 语句语句2 2; else if( else if(表达式表达式n n) 语句语句n n; else else 语句语句n+1n+1; 3高级语言程序设计 南京邮电大学传媒技术学院4.1
2、4.1引言引言输出两个数中的较大值?输出两个数中的较大值?#include #include int main()int main() int a, b; int a, b; scanf(“%d%d”, &a, &b); scanf(“%d%d”, &a, &b); printf(“%d”, xxx); printf(“%d”, xxx); return 0; return 0; 4高级语言程序设计 南京邮电大学传媒技术学院4.2 关系运算符和关系表达式1、关系运算符、关系运算符、=、= 、!=2、关系表达式、关系表达式用关系运算符连接起来的式子。用关系运算符连接起来的式子。53、5=3、53
3、、5b)printf(“Thebiggerisa=%dn”,a);elseprintf(“Thebiggerisb=%dn”,b);常用常用“”表示表示“a大于大于b”这样的条件:这样的条件:条件成立时,条件成立时,ab为非零,执行受为非零,执行受if控制的语句;控制的语句;条件不成立时,条件不成立时,ab为零,执行受为零,执行受else控制的语句;控制的语句;11高级语言程序设计 南京邮电大学传媒技术学院inta,b;scanf(“%d%d”,&a,&b);if(ab)printf(“Thebiggerisb=%dn”,a);elseprintf(“Thebiggerisa=%dn”,a);
4、常用常用“”表示表示“a小于于小于于b”这样的条件:这样的条件:条件成立时,条件成立时,ab为非零,执行受为非零,执行受if控制的语句;控制的语句;条件不成立时,条件不成立时,a=b)if(ac)printf(“Thebiggestisa=%dn”,a);elseprintf(“Thebiggestisc=%dn”,c);elseif(bc)printf(“Thebiggestisb=%dn”,b);elseprintf(“Thebiggestisc=%dn”,c);ifif语句的嵌套语句的嵌套13高级语言程序设计 南京邮电大学传媒技术学院3、多分支选择多分支选择if语句语句 语句形式:语句形
5、式:if(if(表达式表达式表达式表达式11)语句语句语句语句11;elseelseif(if(表达式表达式表达式表达式22)语句)语句)语句)语句22;elseelseif(if(表达式表达式表达式表达式nn)语句语句语句语句nn;elseelse语句语句语句语句n+1n+1;if-elseif-else匹配原匹配原则:就近匹配则:就近匹配14高级语言程序设计 南京邮电大学传媒技术学院例:计算分段函数。例:计算分段函数。#includevoidmain()floatx,y;printf(enterx:);scanf(%f,&x);elseif(x=1)y=x+5;elseif(xb&ac)p
6、rintf(“Thebiggestisa=%dn”,a);if(ba&bc)printf(“Thebiggestisb=%dn”,b);if(ca&cb)printf(“Thebiggestisc=%dn”,c);16高级语言程序设计 南京邮电大学传媒技术学院当多个条件之一成立,即可做某些事情,要借助于当多个条件之一成立,即可做某些事情,要借助于当多个条件之一成立,即可做某些事情,要借助于当多个条件之一成立,即可做某些事情,要借助于“|”|”|”|”运算符来组合各条件成为一个大条件。运算符来组合各条件成为一个大条件。运算符来组合各条件成为一个大条件。运算符来组合各条件成为一个大条件。intti
7、me;scanf(“%d”,&time);if(time=100|time=-1)printf(“you完蛋了完蛋了!”);elseprintf(“you还有希望,努力改造!还有希望,努力改造!”);17高级语言程序设计 南京邮电大学传媒技术学院&|!等等逻逻辑辑运运算算符符常常用用来来表表示示由由多多个个条条件件组组合合而成的大条件;而成的大条件;原则:大条件成原则:大条件成立,逻辑表达式的值为非零;立,逻辑表达式的值为非零;大条件不成立,逻辑表达式的值为零;大条件不成立,逻辑表达式的值为零;(判断闰年)(判断闰年)18高级语言程序设计 南京邮电大学传媒技术学院【例例例例4-34-3】从键盘
8、输入一个字符,判别它的类别从键盘输入一个字符,判别它的类别从键盘输入一个字符,判别它的类别从键盘输入一个字符,判别它的类别由由由由ASCIIASCII码表可知:码表可知:码表可知:码表可知:ASCIIASCII值小于值小于值小于值小于3232的为控制字符的为控制字符的为控制字符的为控制字符ASCIIASCII值在值在值在值在 00和和和和 99之间的为数字之间的为数字之间的为数字之间的为数字ASCIIASCII值在值在值在值在 AA和和和和 ZZ之间为大写字母之间为大写字母之间为大写字母之间为大写字母 ASCIIASCII值在值在值在值在 aa和和和和 zz之间为小写字母之间为小写字母之间为小
9、写字母之间为小写字母其余则为其它字符其余则为其它字符其余则为其它字符其余则为其它字符19高级语言程序设计 南京邮电大学传媒技术学院程序:程序:#include#includevoidmain()voidmain()charc;charc;printf(Inputacharacter:);printf(Inputacharacter:);c=getchar();c=getchar();if(c32)printf(Thisisacontrolcharactern);if(c=0&c=0&c=A&c=A&c=a&c=a&c=z)printf(This isasmalllettern);isasmal
10、llettern);elseprintf(Thisisanothercharactern);elseprintf(Thisisanothercharactern); 20高级语言程序设计 南京邮电大学传媒技术学院【例例4-4】比较两个数的大小关系,有三种比较两个数的大小关系,有三种结果:大于、小于和等于,采用结果:大于、小于和等于,采用if语句的嵌语句的嵌套结构来完成。套结构来完成。#include#includevoidmain()voidmain()inta,b;inta,b;printf(pleaseinputa,b:);printf(pleaseinputa,b:);scanf(%d%
11、d,&a,&b);scanf(%d%d,&a,&b);if(a!=b)if(a!=b)if(ab)printf(abn);if(ab)printf(abn);elseprintf(abn);elseprintf(abn);elseprintf(a=bn);elseprintf(a=bn); 21高级语言程序设计 南京邮电大学传媒技术学院4.5 多分支选择语句语句一般形式:语句一般形式:switch(表达式)表达式)case常量常量1:语句语句1;case常量常量2:语句语句2;case常量常量3:语句语句3;.case常量常量n:语句语句n;default:语句语句n+1;根据表达式的不同值,
12、根据表达式的不同值,根据表达式的不同值,根据表达式的不同值,选择不同的程序分支,选择不同的程序分支,选择不同的程序分支,选择不同的程序分支,又称开关语句又称开关语句又称开关语句又称开关语句。常量表达式的值必须常量表达式的值必须互不相同,否则执行互不相同,否则执行时将出现矛盾,即同时将出现矛盾,即同一个开关值,将对应一个开关值,将对应多种执行方案。多种执行方案。千万不能千万不能接接(;)号号执执行行过过程程?22高级语言程序设计 南京邮电大学传媒技术学院【例例4-6】输入一个数字,输出对应的星期输入一个数字,输出对应的星期几的英文单词。几的英文单词。#include#includevoidmai
13、n()voidmain()inta;inta;printf(inputintegernumber:);printf(inputintegernumber:);scanf(%d,&a);scanf(%d,&a);switch(a)switch(a)case1:printf(Mondayn);case1:printf(Mondayn);case2:printf(Tuesdayn);case2:printf(Tuesdayn);case3:printf(Wednesdayn);case3:printf(Wednesdayn);case4:printf(Thursdayn);case4:printf(
14、Thursdayn);case5:printf(Fridayn);case5:printf(Fridayn);case6:printf(Saturdayn);case6:printf(Saturdayn);case7:printf(Sundayn);case7:printf(Sundayn);default:printf(errorn);default:printf(errorn); 程序运行结果:程序运行结果:程序运行结果:程序运行结果:inputintegernumber:5inputintegernumber:5 FridayFridaySaturdaySaturdaySundaySun
15、dayerrorerror23高级语言程序设计 南京邮电大学传媒技术学院4.5.2break语句在多分支选择结构中的应用语句在多分支选择结构中的应用breakcasecase语句后加上语句后加上语句后加上语句后加上breakbreak语句;语句;语句;语句;每当执行到每当执行到每当执行到每当执行到breakbreak语句时,立即跳出语句时,立即跳出语句时,立即跳出语句时,立即跳出switchswitch语句体。语句体。语句体。语句体。24高级语言程序设计 南京邮电大学传媒技术学院将上面的例将上面的例4-4-6 6修改如下:修改如下:#includestdio.hvoidmain()inta;p
16、rintf(inputintegernumber:);scanf(%d,&a);switch(a)case1:printf(Mondayn);break;case2:printf(Tuesdayn);break;case3:printf(Wednesdayn);break;case4:printf(Thursdayn);break;case5:printf(Fridayn);break;case6:printf(Saturdayn);break;case7:printf(Sundayn);break;default:printf(Errorn);程序运行结果:程序运行结果:55Friday F
17、riday 25高级语言程序设计 南京邮电大学传媒技术学院【例例4-7】学生分数成绩转换为相应的等级成绩学生分数成绩转换为相应的等级成绩程序流程图程序流程图: : 26高级语言程序设计 南京邮电大学传媒技术学院程序源代码及运行结果程序源代码及运行结果#include#includevoidmain()voidmain()ints;ints;printf(Inputascore:);printf(Inputascore:);scanf(%d,&s);/sscanf(%d,&s);/s中存放学生的成绩中存放学生的成绩中存放学生的成绩中存放学生的成绩 printf(Yourscore:%d,s);p
18、rintf(Yourscore:%d,s);switch(s/10)/switch(s/10)/巧妙利用整除,把一个区间段范围的值对应到一个数据上巧妙利用整除,把一个区间段范围的值对应到一个数据上巧妙利用整除,把一个区间段范围的值对应到一个数据上巧妙利用整除,把一个区间段范围的值对应到一个数据上case10:case10:case9:s=A;break;case9:s=A;break;case8:s=B;break;case8:s=B;break;case7:s=C;break;case7:s=C;break;case6:s=D;break;case6:s=D;break;default:s=
19、E;default:s=E;printf(%cn,s);printf(%cn,s); 程序运行结果:程序运行结果:程序运行结果:程序运行结果:Inputascore:65Inputascore:65 Yourscore:65DYourscore:65D 1 1、多个、多个casecase语句可以语句可以共用一组执行语句。共用一组执行语句。2 2、各、各casecase子句的先后子句的先后顺序可以变动,而不会顺序可以变动,而不会影响程序执行结果。影响程序执行结果。 27高级语言程序设计 南京邮电大学传媒技术学院4.6 应用举例【例例例例4-84-8】输入三个整数,输出最大数和最小数。输入三个整数
20、,输出最大数和最小数。输入三个整数,输出最大数和最小数。输入三个整数,输出最大数和最小数。算法分析:算法分析:算法分析:算法分析:l l首先比较首先比较首先比较首先比较a a,b b的大小,把大数装入的大小,把大数装入的大小,把大数装入的大小,把大数装入maxmax,小数装,小数装,小数装,小数装入入入入minmin中中中中l l接下来接下来接下来接下来maxmax和和和和minmin再与再与再与再与c c比较,若比较,若比较,若比较,若maxmax小于小于小于小于c c,则把,则把,则把,则把c c赋予赋予赋予赋予maxmax;如果;如果;如果;如果c c小于小于小于小于minmin,则把,
21、则把,则把,则把c c赋予赋予赋予赋予minmin,因,因,因,因此此此此maxmax内总是最大数,而内总是最大数,而内总是最大数,而内总是最大数,而minmin内总是最小数。内总是最小数。内总是最小数。内总是最小数。l l最后输出最后输出最后输出最后输出maxmax和和和和minmin的值即可。的值即可。的值即可。的值即可。28高级语言程序设计 南京邮电大学传媒技术学院程序源代码及运行结果程序源代码及运行结果#include#includevoidmain()voidmain()inta,b,c,max,min;inta,b,c,max,min;printf(inputthreenumber
22、s:);printf(inputthreenumbers:);scanf(%d%d%d,&a,&b,&c);scanf(%d%d%d,&a,&b,&c);if(ab)max=a;min=b;if(ab)max=a;min=b;elsemax=b;min=a;elsemax=b;min=a;if(maxc)max=c;if(maxc)min=c;elseif(minc)min=c;printf(max=%dnmin=%d,max,min);printf(max=%dnmin=%d,max,min); 程序运行结果:程序运行结果:程序运行结果:程序运行结果:inputthreenumbers:34
23、5inputthreenumbers:345 max=5max=5min=3min=329高级语言程序设计 南京邮电大学传媒技术学院例例:企企业业发发放放的的奖奖金金根根据据利利润润提提成成。从从键键盘盘输输入入当当月利润,求应发放奖金总数?月利润,求应发放奖金总数? 30高级语言程序设计 南京邮电大学传媒技术学院利润xx=1010x2020x4040x6060x100100x (int )x/10 常量常量0,11,22,3,44,5,66,7,8,9,1010以上用这种方法转换后,用这种方法转换后,n n出现了在不同区域有重复数字出现了在不同区域有重复数字的情况。解决的方法有很多,其中一种
24、是可以采用当的情况。解决的方法有很多,其中一种是可以采用当x x为为1010的整数倍时,将计算出的的整数倍时,将计算出的n n值减值减1 1。 使用使用switchswitch解题的解题的关键,关键,通过分通过分析找到析找到表达式,表达式,将问题将问题分成几分成几种情况。种情况。31高级语言程序设计 南京邮电大学传媒技术学院#includestdio.hvoidmain()floatx,y;intn;scanf(%f,&x);n=(int)x/10;if(int)x/10=x/10)n-;switch(n)case0:y=x*0.1;break;case1:y=x*0.12;break;cas
25、e2:case3:y=x*0.14;break;case4:case5:y=x*0.16;break;case6:case7:case8:case9:y=x*0.18;break;default:y=x*0.2;printf(y=%.2fn,y);源程序:源程序:32高级语言程序设计 南京邮电大学传媒技术学院【例例4-11】任意输入三个数,代表三角形任意输入三个数,代表三角形的三条边长,判断能否构成三角形的三条边长,判断能否构成三角形#include#includevoidmain()voidmain()floata,b,c;floata,b,c;scanf(%f,%f,%f,&a,&b,&c
26、);scanf(%f,%f,%f,&a,&b,&c);if(a+b)c&(a+cb)&(b+ca)if(a+b)c&(a+cb)&(b+ca)if(a=b)&(b=c)if(a=b)&(b=c)printf(equalateraltriangle.n);printf(equalateraltriangle.n);elseif(a=b)|(a=c)|(b=c)elseif(a=b)|(a=c)|(b=c)printf(isoscelestriangle.n);printf(isoscelestriangle.n);elseprintf(othertriangle.n);elseprintf(ot
27、hertriangle.n); elseprintf(cannotn);elseprintf(cannotn); 程序运行结果:程序运行结果:5,5,55,5,5equalateral triangle.equalateral triangle.33高级语言程序设计 南京邮电大学传媒技术学院小结l l关系运算符、逻辑运算符、关系表达式。关系运算符、逻辑运算符、关系表达式。关系运算符、逻辑运算符、关系表达式。关系运算符、逻辑运算符、关系表达式。l这些表达式常作为条件选择语句的判断条件。这些表达式常作为条件选择语句的判断条件。这些表达式常作为条件选择语句的判断条件。这些表达式常作为条件选择语句的判
28、断条件。l lC C语言的条件选择语句有两种:语言的条件选择语句有两种:语言的条件选择语句有两种:语言的条件选择语句有两种:if if语句和语句和语句和语句和switchswitch语句语句语句语句l lif if语句有三种形式:语句有三种形式:语句有三种形式:语句有三种形式:l l单分支选择单分支选择单分支选择单分支选择if if语句语句语句语句l l双分支选择双分支选择双分支选择双分支选择if if语句语句语句语句l l多分支选择多分支选择多分支选择多分支选择if if语句语句语句语句l lswitchswitch语句联合语句联合语句联合语句联合breakbreak语句构成了一种多分支选择结语句构成了一种多分支选择结语句构成了一种多分支选择结语句构成了一种多分支选择结构,并且形式上比用构,并且形式上比用构,并且形式上比用构,并且形式上比用ifif语句的嵌套清晰易读。语句的嵌套清晰易读。语句的嵌套清晰易读。语句的嵌套清晰易读。34高级语言程序设计 南京邮电大学传媒技术学院第一次第一次 P52: P52: 4.14.14.14.1、4.44.44.44.4、4.84.84.84.8第二次第二次 P52: P52: 4.64.64.64.6、4.104.104.104.10 作业作业