9-Switch语句,条件运算符及练习

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

2.下列程序段的输出结果是_____________。 int n='c'; switch(n++) { default: printf("error");break; case 'a': case 'A': case 'b': case 'B': printf("good");break; case 'c': case 'C': printf("pass"); case 'd': case 'D': printf("warn"); } 答案: passwarn 注解:开关语句的条件是n++,表达式的取值为字符'c',则执行 case 'c'后的子句,先输出pass,因为其后没有break子句,则继续 执行后面的子句,再输出warn,即最后的输出为passwarn。
}
4.5 条件运算符与条件表达式 条件运算符 C语言提供了一个特殊的三目运算符 “?:”,叫做条件运算符。它需要三 个运算量,结合方向ቤተ መጻሕፍቲ ባይዱ自右向左。 条件表达式 条件表达式是用条件运算符把 C 语言 表达式连接起来的式子。
一般形式 表达式1?表达式2:表达式3 功能 首先求解表达式1的值,若表达 式1的值为非0, 则取表达式2的值为条件 表达式的值;若表达式1的值为假,则取 表达式3的值为条件表达式的值。

注意: ( 1 )条件运算符的优先级高于赋值运算 符,但低于关系运算符和算术运算符。 a>b?c=a:c=b× a>b?(c=a):(c=b) (2) 条件运算符的结合性为右结合性的。 (3) 表达式1、表达式2和表达式3的类型 可以不同,若表达式 2和表达式 3 的类型 不同,则整个条件表达式值的类型为二 者中较高类型。
11.超市里卖电池,每个电池8角钱,若数量超过10个,则可 打75折。(由键盘输入数目,要求输出购物款) #include "stdio.h" main( ) { int i; float p; printf("请输入购买的个数:"); scanf("%d",&i); if(i>10) p = 0.8*i*0.75; else p = 0.8*i; printf("购物款为:%.2f元",p); }

例如:求 a 、b中的最大值的条件
表达式为: (a>b)?a:b 条件表达式中的表达式 1 、表达 式2、表达式3可以是数值表达式, 还可以是赋值表达式或函数表达 式。
条件表达式(a>b)?a:b 还可以改写成: (a>b) ? printf("%d",a):printf("%d",b); 相当于以下语句: if(a>b) printf("%d",a); else printf("%d",b);

switch语句:
(1)一般形式
switch(表达式) { case 常量表达式1:语句1 break; case 常量表达式2:语句2 break; …… case 常量表达式n:语句n break; default:语句n+1 break;}
(2)功能:实现多路分支选择。 A、首先计算表达式的值, B、然后将此值与case后面的常量表达式的值相 比较 如果某个常量表达式的值与它相等,则执行 该case后面的语句; 如果表达式的值与所有常量表达式的值都不 相等,则执行default后的语句。 当执行完某一个case语句块后遇到break或执 行完default语句时,就跳出switch语句。
break语句在switch语句中的应用:
• 位置:位于每个case分支的最后面 • 作用:控制程序跳出switch语句,继续执行 switch后面的第一条语句。 switch(表达式) { case 常量1:……;break; case 常量2:……;break; ……} printf(“the first statement after switch\n”);
#include "stdio.h" main() { float a,b; char c; printf("请输入第1个数:");scanf("%f",&a); 课后练习4.7 printf("请输入第2个数:"); scanf("%f",&b); getchar(); printf("请输入运算符:"); scanf("%c",&c); switch(c) { case '+': printf("结果为:%f\n",a+b);break; case '-': printf("结果为:%f\n",a-b);break; case '*': printf("结果为:%f\n",a*b);break; case '/': if(b==0) printf("除数不能为0\n"); else printf("结果为:%f\n",a/b); break; default: printf("错误的运算符\n");break; } }
多个case可以共用一组语句。
scanf(“%c”,&grade);
switch(grade) { default:printf(“error!!\n”);break; case „a‟: case „A‟:printf(“90-100”);break; case „b‟: case „B‟:printf(“80-89”);break; ……
#include "stdio.h" 课后练习4.10 main() { int n,h,t,i,p; printf("请输入0~999之间的整数:"); scanf("%d",&n); if(n>99) p=3; else if(n>9) p=2; else p=1; printf("%d为%d位数!\n",n,p); h=n/100; t=(n-h*100)/10; i=n-h*100-t*10; switch(p) { case 3:printf("正序为:%d%d%d,反序为:%d%d%d\n",h,t,i,i,t,h); break; case 2:printf("正序为:%d%d,反序为:%d%d\n",t,i,i,t);break; case 1:printf("正序为:%d,反序为:%d\n",i,i);break; } }
(3)说明:
(1) switch、case、default都是关键字,不能作 为标识符。 (2)switch后面的表达式可以是任何类型。 (3) case后面只能是常量表达式,不允许这种 常量表达式中包含有变 量或函数调用。如: case x*y:…或case f(a):…都是错误的。 (4 ) switch 语句的各 case 分支中不允许出现常 量表达式的值相等的情况。
课后练习4.4
#include "stdio.h" main() { char ch1; printf("请输入一个字母:"); scanf("%c",&ch1); if(ch1>='A' && ch1<=„Z') printf("%c\n",ch1+32); else printf("%c\n",ch1); }
课后练习4.5
#include "stdio.h" main() { float x,y; printf("请输入x的值:"); scanf("%f",&x); if(x<=0) y=x+1; else if(x>0 && x<=1) y=x; else y=x-1; printf("y=%f\n",y); }
( 5 ) 各 case分支中的 break 语句是控制程序退出 switch
结构,若没有break则程序将继续执行下面一个case中 的语句。 (6) 当表达式的值与一个case中的常量表达式的值相 等时,就执行此case后面的语句,若所有的case中的 常量表达式的值都没有与表达式的值匹配时,就执 行default后面的语句。 (7) default通常出现在最后部分,但这不是规定,它 可以出现在任意位置。而且各case分支的顺序也不是 固定的。 (8) 多个case可以共用一个语句。
程序设计举例
例1: 编写一个程序,判别输入的某一年 year是否是闰年?
(year%4==0&&year%100!=0)||
(year%400==0)
main() { int year,leap; scanf(“%d”,&year); leap=(year%4==0&&year%100!=0)|| (year%400==0); if(leap) printf(“%d is a leap year\n”,year); else printf(“%d is not a leap year\n”,year); }
12.输入三角形的三边,判断它是否是直角三角形。 分析:(1)先判断用户输入的数据是否能够构成三角形; (a>0)and(b>0)and(c>0)and(a+b>c)and(b+c>a)and(c+a>b) (2)再判断它是不是直角三角形。 (a*a+b*b=c*c)or(b*b+c*c=a*a)or(c*c+a*a=b*b)
( 4 )只有在 if 子句和 else 子句中只有一条语句 (若为赋值语句,必须给同一个变量赋值)的 情况下,条件表达式才能替换if语句。例如下面 两种if语句均不能使用条件表达式替换。 if (a>b) if (a>b) {printf("a="); max=a; printf("%d",a);} else else min=a; {printf("b="); printf("%d",b);}

课后题4.1(3)(4) 练习
1.如下程序的输出结果是( ) main( ) { int x=1,a=0,b=0; switch(x) { case 0:b++; case 1:a++; case 2:a++;b++; } printf("a=%d,b=%d\n",a,b); } A、a=2,b=1 B、a=1,b=1 C、a=1,b=0 D、a=2, b=2 答案:A 注解:x的值为1,第二个case子句符合条件,从此入口执行后 面的语句,因为没有break,所以第三个case子句同样执行,即a 自增两次,最后的值为2,b自增一次,最后的值为1。
课后练习4.3
#include "stdio.h" main() { char ch1,ch2,c; printf("请输入两个小写字母:"); scanf("%c%c",&ch1,&ch2); if(ch1<ch2) printf("%c%c\n",ch1,ch2); else printf("%c%c\n",ch2,ch1); }
课后练习4.6 #include "stdio.h" main() { int y,m,d,yt,mt,dt,age; printf("请输入生日,输入格式为yyyy-mm-dd:"); scanf("%d-%d-%d",&y,&m,&d); printf("请输今天的日期,输入格式为yyyy-mm-dd:"); scanf("%d-%d-%d",&yt,&mt,&dt); age=yt-y; if(mt<m) age--; else if(mt==m && dt<d) age--; printf("年龄为%d岁!",age); }
(3)以下程序的运行结果是 。 #include <stdio.h> 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\n",a,b); } A.a=2,b=1 B. a=1,b=1 B.C. a=1,b=0 D. a=2,b=2 【答】A
10.输入一个整数a,判断是否为偶数。(是输出"yes"否 则输出"no")。
#include "stdio.h" main( ) { int a; printf("请输入一个整数:"); scanf("%d",&a); if(a%2==0) printf("yes\n"); else printf("no\n"); }
相关文档
最新文档