1、第四章 选择结构程序设计,内蒙古科技大学实训中心,条件选择控制语句,1、if 语句(单分支语句),if (条件表达式)语句;,if (条件表达式)语句块,或,2、 if - else 语句(Two-way selection statement),if(条件表达式)语句1;else语句2;,例5 将百分制成绩转成五级记分(A、 B、 C、 D、E)。,if(cj=90) grade=A;,if(cj=80,if(cj=70,if(cj=60&cj70) grade=D,if(cj60) grade=E;,cj 等级90分以上 A 80-90 B70-80 C60-70 D60分以下 E,程序结
2、构:,输入,计算,输出,键盘输入一个实数给变量cj,等级grade,scanf(“%f”,&cj),输出等级,printf(“等级=%cn”,grade);,if(cj=60&cj=70&cj=80&cj=90) grade=A,例6:键盘输入三个整数,按从大到小的顺序排序。,程序结构:,输入,计算,输出,键盘输入三个整数给变量a,b,c,从大到小排序,scanf(“%d%d%d”,&a,&b,&c),输出排序后的a,b,c,排序前: a,b,c4,5,8 排序后: 8,5,4,printf(“a=%d,b=%d,c=%dn”,a,b,c);,如果ab a,b值交换 如果ac a,c值交换 如
3、果bc b,c值交换,if(ab) t=a;a=b;b=t; if(ac) t=a;a=c;c=t; if(bc) t=b;b=c;c=t;,#include”stdio.h” void main() int a,b,c,t; scanf(“%d%d%d”, ,例6:键盘输入三个整数,按从大到小的顺序排序。,If语句的嵌套,格式:,在if语句中又包含一个或多个if语句称为if语句的嵌套。,if( )if( ) 语句1else 语句2else,if( )elseif( ) 语句3else 语句4,if( )if( ) 语句1else 语句2elseif( ) 语句3else 语句4,注意:if与
4、else的配对关系,if ()if ( ) 语句1else if( ) 语句2else 语句3,这种表达与原意不符:else总是与上边最近的if配对,因此,把“if ()语句1”加上“ ”才能实现原意,即 if () 语句1 。,程序段1: int x = 20;if ( x = 0)if ( x =0 且 x=0 且 x=50*/,分析下面两个程序段的输出结果,程序段2:int x = 20;if ( x = 0) if ( x 50) /*该 if 不可见*/printf(“ x is okn”);elseprintf(“ x is not okn”);,cj 等级90分以上 A 80-9
5、0 B70-80 C60-70 D60分以下 E,例5 将百分制成绩转成五级记分(A、 B、 C、 D、E)。,cj=90,grade=A,N,Y,grade=B,cj=80,cj=70,grade=C,grade=D,N,N,Y,Y,cj=60,grade=E,Y,N,例5 将百分制成绩转成五级记分(A、 B、 C、 D、E)。,输入成绩cj,输出等级,例5 将百分制成绩转成五级记分(A、 B、 C、 D、E)。,if (cj=90) grade=A; else if (cj=80) grade=B; else if (cj=70) grade=C; else if (cj=60) grad
6、e=D; else grade=E,#include”stdio.h” void main() float cj;char grade;scanf(“%f”, ,3. 多分支选择switch语句,语句格式:switch (表达式)case 常量表达式1:语句组1; case 常量表达式2:语句组2; case 常量表达式n:语句组n; default: 语句组n+1;,(1) case后可以是常量表达式, 常量表达式的值必须互不相同, 否则 会出现二义性。 (2) 常量表达式可以是任何类型,一般为整型、 字符型等。 (3) 每个case 和default的出现次序不影响执行结果。 (4) ca
7、se 只起语句标号作用,不进行条件的判断。执行完一个case后面的语句,接着执行下一个case。(5)一种情况处理完后, 一般应使程序的执行流程跳出switch结构, 终止switch语句的执行, 这可借助break语句完成。,说明:,(6) 最后一种情况处理中可以不加break语句。 (7) 当多个常量代表一种情况时, 出现在前面case中的情况处理无语 句, 这实际上也是多个case共用一组执行语句。 (8) 可以没有default子句。,Break语句的使用,break语句形式为:break;,一般使用了break语句的switch语句形式为:,switch (选择表达式) case 常
8、量1: 语句体1 break; case 常量2: 语句体2 break; case 常量n: 语句体n break; default: 语句体n+1,90100分 A8089分 B7079分 C6069分 D59分以下 E,例5: 根据分数给出考试成绩的等级,注意选择表达式的构造:,9 、10 A8 B7 C6 D 1、2、3、4、5 E,int(cj/10),#include main() char grade; float score;printf(“please input a scoren”);scanf(“%f”, ,本节作业,1、从键盘输入某一学生的百分制成绩,给出相应的等级。9
9、0分以上为“Excellent”;8089分为“Very Good”;7079分为“Good!”;6069分为“Pass!”;60分以下为“Fail”,试用switch语句和if语句分别来实现。2、从键盘输入三个正整数,按从大到小的顺序输出。3、输入一个字符,如果是大写字母,将其转换为小写字母, 如果是小写字母转换为大写字母,然后输出。4、键盘输入一个字符判断其为数字字符还是字母字符,或是其他字符。5、从键盘输入一个正整数,判断该数是偶数还是奇数。,例7:根据考试成绩的等级输出百分制分数段。,main() char grade;scanf(“%c”, /最后可省略break ,t-Turbo
10、Cb-Borland Cm-Microsoft Cv-Visual C,例 8 根据输入的字符, 输出相应的字符串。,main( ) char ch; scanf(%c, ,main() char c1;scanf(“c1=%c”, ,程序设计:输入一个字符,如果是大写字母,将其转换为小写字母, 如果是小写字母,将其原样输出。,goto语句,格式: goto 语句标号; 功能: 将程序的执行流程无条件转移至语句标号所标识的位置处执行。,说明: C语言的语句标号用标识符表示, 它仅仅表示goto语句转移的目标地址。 带有标号的语句称为标号语句, 标号与语句之间用冒号分隔。 标号语句仅对goto语
11、句有意义。goto语句往往与if 语句配套使用构成一种远距离的转移。,(4) if语句加goto语句还可构成循环。 例如:x=0; flag: if(x10) x+; goto flag; (5) 不允许使用goto语句把程序控制转移到其它函数内部, 不允许使用goto语句把程序控制转向数据说明语句。 (6) 尽量少使用goto语句, 即使使用, 一般也不要将程序执行流程向后转移。,例 13 两个数的+、 -、 *、 / 简易计算器程序。,数据分析:输入量: 两个数x、 y, float运算符op, char输出量: 计算结果j, float 算法提示: 运算选择通过开关语句处理。 除法运算时
12、要考虑被除数为0的情况。,main( ) float x, y,j; char op; printf(输入两个数: ); scanf(%f, %f, ,运行结果: 输入两个数: 3, 6输入运算符: *结果= 18.0000,某商场销售商品,实行按比例优惠,优惠率 如下,货款在200元以下不优惠,200元以上优惠7。5%,300元以上优惠10%,400元以上优惠15%,500元以上优惠20%。求应付货款。,hk=500,cost=0.2,N,Y,cost=0.15,hk=400,hk=300,cost=0.1,cost=0.075,N,N,Y,Y,hk=200,cost=0,Y,N,hk=hk
13、*(1-cost),程序结构:,输入,计算,输出,键盘输入一个数给变量hk,根据优惠求实际所付的货款,scanf(“%f”,&hk),输出实际所付的货款,printf(“hk=%fn”,hk);,#include void main() float cost; float hk;scanf(“%f“, ,某商场销售商品,实行按比例优惠,优惠率 如下,货款在200元以下不优惠,200元以上优惠7。5%,300元以上优惠10%,400元以上优惠15%,500元以上优惠20%。求应付货款。,某商场销售商品,实行按比例优惠,优惠率 如下,货款在200元以下不优惠,200元以上优惠7。5%,300元以上
14、优惠10%,400元以上优惠15%,500元以上优惠20%。求应付货款。,=500 cost=0.2,用switch语句完成注意选择表达式的构造:,0,1 cost=02 cost=0.0753 cost=0.14 cost=0.15 5,6,7, cost=0.2,int(hk/100),#include void main() float cost; float hk;printf(“please input a scoren“);scanf(“%f“, ,征税问题:价格高于10000元的税为5%,高于5000元税为3%,高于1000元税为2%,低于1000元不征税。请输入货物价格,输出税
15、金。,提示:各段采用不同税率进行征收。如:贷款为53000元,其中43000元以上按5%征收,s剩下的10000元 中,5000元按3%征收。然后剩下的5000中高于1000元按2%, 1000元以下不征税,作业3:,#includemain() float price,tax=0;printf(“input price:n”);scanf(“%f”, ,作业4 通讯录管理主控程序。,通讯录管理程序 Add-追加数据 Modify-修改数据 Delete-删除数据 Print-打印数据 Quit-退出程序 请选择(A/M/D/P/Q):,要求:先在屏幕上输出主控界面,然后接收来自用户的响 应,并在屏幕上输出该用户所选功能的字样。 例如:用户输入“P”字符,则程序能够在屏幕上输出 “打印数据”字样。,/*主控界面*/,main( ) char ch; /*选择变量*/clrscr( ); printf(%sn, 通讯录管理程序); printf(%sn, Add-追加数据 Modify-修改数据); printf(%sn, Delete-删除数据 Print-打印数据); printf(%sn, Quit-退出程序); printf(请选择(A/M/D/P/Q): ); scanf(%c, ,谢 谢 大 家!,