您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 第4章 选择结构程序设计
第4章选择结构程序设计本章要点:if语句if语句的嵌套条件运算符switch语句选择结构程序设计学习方法建议:学习本章内容应重点掌握if语句的执行过程,在此基础上,掌握if语句、switch语句格式及应用,学会编写选择结构程序。本章的难点是if语句的嵌套和switch语句的应用。4.1引例1.问题描述——学生助学金评定助学金是高等院校资助贫困学生的一项重要举措,一般助学金的评定要参考学生的学习成绩。假定助学金的评选规则为:综合平均成绩在90分及以上的同学可获一等助学金;在80分(包括80分)至90分之间的同学可获二等助学金;在60分(包括60分)至80的同学可获三等助学金;60分以下的同学不能获助学金。2.引例分析首先用最简单的方式处理评定结果:根据某位同学的成绩判断他能否获取助学金,输出不获得助学金的提示信息,算法的流程图如图4-1所示。开始结束输出“Nogrant!”输入成绩scorescore60NY3.程序代码实现引例算法的程序代码:#includestdio.hmain(){intscore;printf(inputscore:);scanf(%d,&score);if(score60)printf(Nogrant!\n);}4.2if语句4.2.1if语句1.第一种格式格式:if(表达式)语句1;功能:首先计算表达式的值,若值为“真”(非0),则执行语句1;表达式的值为“假”(0),则直接转到此if语句的下一条语句去执行。(1)if语句中的“表达式”必须用“()”括起来。(2)当if(表达式)后面的语句,仅由一条语句构成时,可不使用大括号,但是语句1由两条或两条以上语句构成,就必须用大括号“{}”括起来构成复合语句。语句1表达式0非0图4-2if语句第一种格式流程图main(){inta,b,x;scanf(a=%d,b=%d,&a,&b);if(ab){x=a;a=b;b=x;}/*交换a与b单元的内容*/printf(a=%d,b=%d,a,b);}第一次运行结果为:输入a=10,b=20↙a=20,b=10第二次运行结果为:输入a=30,b=5↙a=30,b=5【例4.1】比较两个数,按由大到小输出。if(表达式)语句1;else语句2;功能:计算表达式的值,若表达式的值为“真”(非0或T),则执行语句1;表达式的值为“假”(0或F),则执行语句2。2.第二种格式语句1表达式语句20非0【例4.2】由4.1节引例可知,当输入一个大于60分的成绩,程序无任何显示。因此,有必要进一步补充助学金评定结果的信息,无论结果如何,都给出提示信息。程序代码修改如下:#includestdio.hmain(){intscore;printf(inputscore:);scanf(%d,&score);if(score60)printf(Sorry!Youdon'tgetagrant.\n);elseprintf(Congratulations!Youmaygetgrantmoney.\n);}【例4.3】从两个数中找出较大的数。#includestdio.hmain(){inta,b,max;printf(inputtwoscores:);scanf(%d%d,&a,&b);if(ab)max=a;elsemax=b;printf(max=%d\n,max);}运行结果为:Pleaseinputthreenumbers:6,9,13↙max=13main(){intnum1,num2,num3,max;printf(Pleaseinputthreenumbers:);scanf(%d,%d,%d,&num1,&num2,&num3);if(num1num2)max=num1;elsemax=num2;if(num3max)max=num3;printf(Thethreenumbersare:%d,%d,%d\n,num1,num2,num3);printf(max=%d\n,max);}【例4.4】输入任意三个整数num1、num2、num3,求三个数中的最大值。if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式3)语句3;…elseif(表达式n)语句n;else语句n+1;3.第三种格式图4-3if语句第三种格式流程图【例4.5】使用if-else语句完善了助学金评定引例,实际上引例显示的信息仍然有限。我们希望依据某位同学的成绩,程序可以判断出他能否获取助学金,而且还可以详细地显示助学金的等级。引例的程序代码修改如下:#includestdio.hmain(){intscore;printf(inputascore(0~100):);scanf(%d,&score);if(score=100&&score=90)/*90分及以上为一等助学金*/printf(Grantgrade:1\n);elseif(score=80)/*80分(包括80分)至90分之间为二等助学金*/printf(Grantgrade:2\n);elseif(score=60)/*60分(包括60分)至80为三等助学金*/printf(Grantgrade:3\n);else/*60分以下不能获取助学金*/printf(Nogrant!\n);}【例4.6】输入一个字符,判定它的类别,比如是数字、小写字母、大写字母、控制字符或其他字符。#includestdio.hmain(){charc;printf(inputacharacter:);c=getchar();if(c32)/*判定是否为控制字符*/printf(Thisisacontrolcharacter\n);elseif(c='0'&&c='9')/*判定是否为数字字符*/printf(Thisisadigit\n);elseif(c='A'&&c='Z')/*判定是否为大写字母*/printf(Thisisacapitalletter\n);elseif(c='a'&&c='z')/*判定是否为小写字母*/printf(Thisisasmallletter\n);else/*判定是否为其他字符*/printf(Thisisanothercharacter\n);}if语句中又包含一个或多个if语句称为if语句的嵌套。一般形式为:if()if()语句1;else语句2;elseif()语句3;else语句4;4.2.2if语句的嵌套【例4.7】使用嵌套的if语句实现相同的功能,首先根据成绩的取值范围处理分为两种情况:有或者没有助学金,如果有则进一步判别等级是一等、二等或三等助学金。#includestdio.hmain(){intscore;printf(inputscorevaluebetween0and100:);scanf(%d,&score);if(score=60){if(score80)printf(Grantgrade:3\n);else{if(score90)printf(Grantgrade:2\n);elseprintf(“Grantgrade:1\n”);}}elseprintf(Nogrant!\n);}【例4.8】if语句的嵌套应用。#includestdio.hmain(){inta,b;printf(inputa,b=);scanf(%d,%d,&a,&b);if(ab)printf(ab\n);else/*此else与距离它最近的if(ab)配对*/if(ab)printf(ab\n);elseprintf(a=b\n);/*else与距离它最近if配对*/}条件运算符要求有3个操作对象,称三目(元)运算符。条件表达式的一般格式为表达式1?表达式2:表达式3如果“表达式1”的值为非0(即真),则运算结果等于“表达式2”的值;否则,运算结果等于“表达式3”的值。例如:x=ab?a:b当a=2b=1时,x=2条件运算符的优先级,高于赋值运算符,但低于关系运算符和算术运算符。其结合性为“从右到左”(即右结合性)。例如:x=ab?a:(cd?c:d)当a=1b=2c=3d=4时x=44.2.3条件运算符【例4.9】从键盘上输入一个字符,如果它是大写字母,则把它转换成小写字母输出;否则,直接输出。#includestdio.hmain(){charch;printf(Inputacharacter:);scanf(%c,&ch);/*输入一个字符*/ch=(ch='A'&&ch='Z')?(ch+32):ch;/*若是大写字母则转换成小写字母,否则直接输出*/printf(ch=%c\n,ch);}4.3switch语句C语言还提供了另一种用于多分支选择的switch语句,这种语句把一个表达式的值和一个整数或字符常量表中的元素逐一比较,发生匹配时,与匹配常数关联的语句被执行。switch语句的一般形式:switch(表达式){case常量表达式1:语句1;[break;]case常量表达式2:语句2;[break;]......case常量表达式n:语句n;[break;][default:语句n+1;[break;]]}【例4.10】使用swicth语句实现“助学金评定”引例的编程,完成助学金等级的判别。#includestdio.hmain(){intscore;printf(inputscorevaluebetween0and100:);scanf(%d,&score);switch(score/10){case10:case9:printf(Grantgrade:1\n);break;case8:printf(Grantgrade:2\n);break;case7:case6:printf(Grantgrade3\n);break;case5:case4:case3:case2:case1:case0:printf(Nogrant!\n);break;default:printf(Thescoreisoutofrange!\n);}}4.4程序设计举例【例4.11】有一函数,输入x值,输出对应的y值。main(){intx,y;printf(inputx:);scanf(%d,&x);if(x1)y=x;elseif(x10)/*此时x≥1在判断x10则相当于满足条件(1≤x10)*/y=2*x-1;elsey=3*x+1;/*前面判断x不小于1,也不小于10即满足条件x≥10*/printf(y=%d\n,y);}运行结果为:inputx:5↙y=910)x()101()1(1312xxxxxy【例4.12】已知三角形的三条边长a、b、c,求三角形面积。计算三角形面积的海伦公式为:,其中s=(a+b+c)/2。#includestdio.h#includemath.hmain(){floata,b,c,s,area;printf(Pleseinputthreesidesoftriangle:\n);scanf(%f,%f,%f,&a,&b,&c);/*输入三角形的三条边长a,b,c*/if(a+bc&&a+cb&&b+ca)/*是否满足三角形的条件*/{s=1.0/2*(a+b+c);/*计算三角形周长的一半*/area=sqrt(s*(s-a)*(s-b)*(s-c));/*利用海伦公式计算三角形面积*/printf(a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n,a,b,c,s);printf(area=%.2f\n,area);/*输出三角形面积*/}else/*如果不满足三角形条件,则输出三角形的边值出错*/printf(Thevalueoftrianglesideserror!);}))()((csbsassarea【例4.1
本文标题:第4章 选择结构程序设计
链接地址:https://www.777doc.com/doc-3399195 .html