第4章-选择结构程序设计

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(2) 第二、第三种形式的if语句中,在每个else前面有一 分号,整个语句结束处有一分号。例如: if (x>0) print ("%f",x); else 各有一个分号 printf("%f",-x); 这是由于分号是c语句中不可缺少的部分,这个分号 是if语句中的内嵌语句所要求的。如果无此分号,则 出现语法错误。
(5) 执行完一个case后面的语句后,流程控制转移到 下一个case继续执行。“case常量表达式”只是起 语句标号作用。在执行Switch语句时,根据Switch 后面表达式的值找到匹配的入口标号,就从此标 号开始执行下去,不再进行判断。例如,上面的 例子中,若grade的值等于‘A‟,则将连续输出: 84~100 70~84 60~69 <60 error
C) 3
D) 4
上机作业: 运输公司对用户计算运费,距离越远,每公里运费越 低。设每公里每吨货物的基本运费为p,货物重为w,距离 为s,折扣为d,则总运费f计算公式为f=p*w*s(1-d),编 写程序。公里数s与折扣率d的标准如下: s<250km d=0 250≤s<500 d=0.05 500≤s<1000 d=0.075 1000≤s<2000 d=0.1 2000≤s<3000 d=0.15 3000≤s d=0.2
说明: (1) switch后面括弧内的“表达式”, ANSI标准允许 它为任何类型。 (2) 当表达式的值与某一个case后面的常量表达式的值 相等时,就执行此case后面的语句,若所有的case中的 常量表达式的值都没有与表达式的值匹配的,就执行 default后面的语句。 (3) 每一个case的常量表达式的值必须互不相同,否则 就会出现互相矛盾的现象 . (4) 各个case和default的出现次序不影响执行结果。例 如,可以先出现“default:…”,再出现“case „D‟:…”,然后是“case „A‟:…”。
第4章
选择结构程序设计
大多数程序中都会包含选择结构。它的作用是,根据所 指定的条件是否满足,决定从给定的两组操作选择其一。 4.1 if语句
if语句是用来判定所给定的条件是否满足,根据 判定的结果(真或假)决定执行给出的两种操作之一。 4.1.1 if语句的三种形式 C语言提供了三种形式的if语句: 1. if(表达式) 语句; 例如: if(x>y) printf("%d",x); 这种if语句的执行过程见图4.1(a)。
图4.2
例如: if(number>400) else if(number>300) else if(number>100) else if(number>40) else
cost=0.14; cost=0.10; cost=0.074; cost=0.04; cost=0;
说明: (1) 三种形式的if语句中在if后面都有“表达式”,一般为逻辑表 达式或关系表达式。例如, if(a==b && x==y) printf(“a=b,x=y”); 在执行if语句时先对表达式求解,若表达式的值为0,按“假” 处理,若表达式的值为非0,按“真”处理,执行指定的语句。 假如有以下if语句: if(3) printf(“ok."); 是合法的,执行结果输出“ok.”,因为表达式的值为3, 按“真”处理。由此可见,表达式的类型不限于逻辑表达式, 可以是任意的数值类型(包括整型、实型、字符型、指针型数 据)。例如,下面的if语句也是合法的: if('a') printf("%d",'a'); 执行结果:输出‘a‟的ASCII码97。
练习题
1、设整型变量 X、y、Z均为 5 ,执行 X=(y>Z)?X+2:X-2,3,2后,X=______.
2、设a=1,b=2,c=3,d=4,则表达式a<b?a:c<d?a:d的值是: A) 4 B) 3 C) 2 D) 1
3、下面程序的输出结果是( )。 main( ) { int a,b,c ; int x=5,y=10; a=(- -y= =x++) ? - -y : ++x ; b=y++ ; c=x ; printf(“a=%d ,b=%d ,c=%d ”,a,b,c ); } A、a=6 , b=9 , c=7 B、a=6 , b=9 , c=6 C、a=7 , b=9 , c=6 D、a=7 , b=9 , c=7
最后一个分支(default)可以不加break语句。
如果grade的值为‘B‟,则只输出“70~84”。 流程图见图4.3。
图4.3
例2:见书P49 。
练 习 题 请 读 程 序 写 出 程 序 的 输 出 结 果
1、 #include<stdio.h> 答案:a=2,b=1 main( ) { int x=1,y=0,a=0,b=0; switch(x) { case 1: switch(y) { case 0: a++; break; case 1: b++; break; } case 2: a++;b++; break; } printf(“a=%d, b=%d”, a, b); }
2.见图4.1(b) if(表达式) 语句1; else 语句2; 例如: if (x>y) printf("%d",x); else printf("%d",y);
源自文库
图4.1
3. if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式3) 语句3; … else if(表达式m) 语句m; else 语句n; 流程图见图4.2。
练习题 1、若执行下面的程序时从键盘上输入 5 ,则输出是【 B 】 A) 7 B) 6 C) 5 D) 4 main() { int x; scanf("%d",&x); if(x++>5) printf("%d\n",x); else printf("%d\n",x--); }
2、以下不正确的if语句形式是( C )。 A)if(x>y&&x!=y); B)if(x==y) x+=y; C)if(x!=y) scanf(“%d”,&x) else scanf(“%d”,&y); D)if(x<y) {x++;y++;};
(3) 在if和else后面可以只含一个内嵌的操作语句(如上例),也 可以有多个操作语句,此时用花括号“{}”将几个语句 括起来成为一个复合语句。如: if (a+b>c && b+c>a && c+a>b) { s=0.4*(a+b+c); area=sqrt(S*(S-a)*(S-b)*(S-c)); printf(“area=%6.2f”,area); } else printf("it is not a trilateral"); 注意在第5行的花括号“}”外面不需要再加分号。因为 {}内是一个完整的复合语句,不需另附加分号。
因此,应该在执行一个case分支后,使流程跳出Switch 结构,即终止Switch语句的执行。可以用一个break语句来 达到此目的。将上面的Switch结构改写如下:
char grade; switch(grade) { case 'A':printf("84-100\n"); break; case 'B':printf("70-84\n");break; case 'C':printf("60-69\n");break; case 'D':printf("<60\n");break; default:printf("error\n"); }
4.3 Switch 语 句
Switch语句是多分支选择语句。用来实现如多分 支选择结构。if语句只有两个分支可供选择,而实际 问题中常常需要用到多分支的选择。例如,学生成绩 分类(90分以上为‘a‟等,80~89分为‘b‟等,70~79 分为‘c‟等……);人口统计分类(按年龄分为老、中、 青、少、儿童);工资统计分类;银行存款分类……。 当然这些都可以用嵌套的if语句来处理,但如果 分支较多,则嵌套的if语句层数多,程序冗长而且可 读性降低。
4.1.2 if语句的嵌套 在if语句中又包含一个或多个if语句称为if语句 的嵌套。一般形式如下:
if() if() 语句1 else 语句2 else if() 语句3 else 语句4 使用嵌套时注意事项:见P44
例4.1、编一个程序,输入三个单精度数,输出最小数。
解:设最小数存于变量min中,为求三个数中的最小 数,可分以下多步完成,先预置min为x,然后分 别将其余两个数逐一与min比较,当它们中的某个 值比存于min中的值更小时,就用它们更新min.
4.2 条件表达式
若在if语句中,在表达式为“真”和“假”时,且都只执行一 个赋值语句给同一个变量赋值时,可以用简单的条件运算符 来处理。例如,若有以下if语句: if (a>b) max=a; else max=b; 可以用下面的条件运算符来处理: max=(a>b)?a∶b; 其中“(a>b)?a∶b”是一个“条件表达式”。它是这样 执行的:如果(a>b)条件为真,则条件表达式取值a,否则取 值b。 条件运算符优先于赋值运算符,因此上面赋值表达式的 求解过程是先求解条件表达式,再将它的值赋给max。
3、以下程序的输出结果是(答案:100 ) main( ) { int a=100,x=10,y=20,ok1=5,ok2=0; if(x<y) if(y!=10) if (!ok1) a=1; else if(ok2) a=10; printf(“%d\n”,a); }
4、分析以下程序,结论是【 】。 main( ) { int x=5,a=0,b=0; if(x=a+b) printf("****\\n"); else printf("####\\n"); } A) 有语法错,不能通过编译 B) 能通过编译,但不能连接 C) 输出**** D) 输出 ####
2、有如下程序 main() { int a=2,b=-1,c=2; if(a<b) if(b<0) c=0; else c++; printf(“%d\n”,c); } 该程序的输出结果是 A) 0 B) 1 C) 2
D) 3
3、有以下程序 main() { int a=15,b=21,m=0; switch(a%3) { case 0:m++;break; case 1:m++; switch(b%2) { default:m++; case 0:m++;break; } } printf(“%d\n”,m); } A) 1 B) 2
条件运算符要求有3个操作对象,称三目(元)运 算符,它是c语言中唯一的一个三目运算符。条件 表达式的一般形式: 表达式1?表达式2∶表达式3。 它的执行过程见图4.1。
图4.1
注意: 条件运算符的结合方向为“自右至左”。如 果有以下条件表达式: a>b?a∶c>d?c∶d 相当于 a>b?a∶(c>d?c∶d)
程序如下:
# include main() { float x,y,z,min;/*变量定义*/ printf(“输入三个单精度浮点数”); scanf(“%f%f%f”, &x,&y,&z); min =x; if(min>y) min= y; if(min>z) min=z; printf(“浮点数%f,%f,%f中的最小值是%f\n”, x,y,z,min); }
C语言提供Switch语句直接处理多分支选择。 它的一般形式如下: switch(表达式) { case 常量表达式1:语句1; case 常量表达式2:语句2; … case 常量表达式n:语句n; default :语句n+1; }
例如,要求按照考试成绩的等级打印出百分制分数 段,可以用Switch语句实现: char grade; switch(grade) { case 'A':printf("84-100\n"); case 'B':printf("70-84\n"); case 'C':printf("60-69\n"); case 'D':printf("<60\n"); default:printf("error\n"); }
相关文档
最新文档