版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 1 C语言电子教案(五)语言电子教案(五) l 第五讲第五讲 第五章第五章 逻辑运算和判断选取控制逻辑运算和判断选取控制l 主要内容:主要内容:l 5.4 switch5.4 switch语句语句l 5.5 5.5 选择结构程序举例选择结构程序举例l 2 5.4 switch 语句语句(开关语句、多分支选择语句开关语句、多分支选择语句)l switch 语句的格式语句的格式:l switch (表达式表达式)l case 常量常量1 : 语句语句1; break;lcase 常量常量2 : 语句语句2; break;lcase 常量常量3 : 语句语句3; break;l lcase 常量常
2、量n : 语句语句n;break;ldefault : 语句语句n+1 执行过程:执行过程:先计算先计算表达式表达式之值之值,如果与某个如果与某个case语句中的常量的值匹配语句中的常量的值匹配(即相同),则执行其后的语句;若所有的(即相同),则执行其后的语句;若所有的case语句中的常语句中的常量的值都量的值都 不能与之匹配,则执行不能与之匹配,则执行default后的语句后的语句n+1。根据表达式的值找入口根据表达式的值找入口注意注意:则执行完入口语句后则执行完入口语句后,则自动转到下一个则自动转到下一个case后面的语句执行;如果语句中有后面的语句执行;如果语句中有break;,则执行,
3、则执行完一个入口语句后跳出完一个入口语句后跳出switch选择结构。选择结构。 3 switch 语句流程图(有语句流程图(有break;语句)语句)表达式表达式语句语句1语句语句2语句语句3语句语句n=常量常量1=常量常量2=常量常量3=常量常量n语句语句n+1=其它其它 4 switch 语句流程图(无语句流程图(无break;语句)语句)表达式表达式语句语句1语句语句2语句语句3语句语句n=常量常量1=常量常量2=常量常量3=常量常量n语句语句n+1=其它其它 5 switch语句的使用举例语句的使用举例1:求分段函数的值:求分段函数的值 1+x x=1 2*x x=2 x*x x=3
4、x 其它其它y= 求分段函数的值:求分段函数的值: 6 main( ) int x,y; scanf(%d,&x); switch(x) case 1: y=1+x; break; case 2: y=2*x; break; case 3: y=x*x; break; default : y=x; printf(x=%d,y=%dn,x,y); 用用switch语句求分段函数的值程序语句求分段函数的值程序注意:关键字注意:关键字case后面一定要留空格,且后面一定要留空格,且case后面后面应为常量。应为常量。程序运行后,如果从键盘上输入程序运行后,如果从键盘上输入3,则程序,则程序运
5、行的顺序和结果如下:运行的顺序和结果如下:x=3,y=9这是一个这是一个switch语句语句 7 用用switch语句求分段函数的值程序语句求分段函数的值程序main( ) int x,y; scanf(%d,&x); switch(x) case 1: y=1+x; break; case 2: y=2*x; break; case 3: y=x*x; break; default : y=x; printf(x=%d,y=%dn,x,y); 程序运行后,如果从键盘上输入程序运行后,如果从键盘上输入-3,则程,则程序运行的顺序和结果如下:序运行的顺序和结果如下:x=-3,y=-3这是
6、一个这是一个switch语句语句 8 switch语句的使用例语句的使用例2:输入分段成绩,打印出分数段:输入分段成绩,打印出分数段main( ) char c; printf(Please enter a charn); c=getchar( ); c=(c=a & c=z)?c-32:c; switch(c) case A : printf(90100n); break; case B : printf(8089n); break; case C : printf(7079n); break; case D : printf(6069n); break; default : pri
7、ntf(60n); /*为输入作提示为输入作提示*/* 将将c转换成大写转换成大写 */注意:注意:case后面应为字符常量后面应为字符常量A、B等,不能为等,不能为变量变量A、B等。等。程序运行后,如果从键盘上输入程序运行后,如果从键盘上输入b,则程,则程序运行的顺序和结果如下:序运行的顺序和结果如下:8090 9 switch 语句使用说明语句使用说明l 各个语句后如果没有各个语句后如果没有break;break;语句,则执行了语句,则执行了相应的操作后,会自动转到下一个相应的操作后,会自动转到下一个casecase后面后面的语句执行。的语句执行。l 可以使多个可以使多个casecase共
8、用同一组执行语句。共用同一组执行语句。l casecase后面的表达式不能相同。后面的表达式不能相同。l 各个各个casecase和和defaultdefault语句的顺序可以改变。语句的顺序可以改变。 10 switch选择结构中选择结构中break语句的使用语句的使用main( ) char c; printf(Please enter a charn); c=getchar( ); c=(c=a & c=z)?c-32:c; switch(c) case A : printf(90100n); case B : printf(8089n); case C : printf(707
9、9n); case D : printf(6069n); default : printf(60n); /*为输入作提示为输入作提示*/* 将将c转换成大写转换成大写 */去掉去掉break;语句,程序运行后,仍从键盘上输入语句,程序运行后,仍从键盘上输入b,则程序运行的顺序和结果如下:,则程序运行的顺序和结果如下:80907079606960 11 switch语句应用例语句应用例3:按运输距离计算运费:按运输距离计算运费距离距离s与运费折扣标准如下:与运费折扣标准如下: s250 没有折扣没有折扣250s500 2%折扣折扣500s1000 5%折扣折扣1000s2000 8%折扣折扣20
10、00s3000 10%折扣折扣3000s 15%折扣折扣 12 按运输距离计算运费算法分析按运输距离计算运费算法分析s折扣折扣d(%)250500100020003000246810121416124812c注意到:折扣点的变化都是注意到:折扣点的变化都是250的整倍数。可以将的整倍数。可以将s按每按每250分作一个段赋给变量分作一个段赋给变量c,简化,简化case的入口情况。的入口情况。002581015 13 按运输距离计算运费程序按运输距离计算运费程序main( ) int s,c,w; float p,f,d; scanf(%d,%d,&f,&s,&w,&
11、;p); c=s/250; switch( c ) case 0: d=0; break; case 1: d=0.02; break; case 2: case 3: d=5.0/100; break; case 4: case 5: case 6: case 7: d=8.0/100;break; case 8: case 9: case 10: case 11: d=10.0/100; break; default : d=15.0/100; f=s*(1-d)*w*p; printf(s=%d,w=%d,f=%.2fn,s,d,f);注意:要表示百分之二必须用注意:要表示百分之二必须用
12、0.02或者或者2.0/100等表示方法,切不可用等表示方法,切不可用2%表示。表示。/* 将将s的值分段,分段结果放入的值分段,分段结果放入c中中 */可以多个可以多个case共用一组执行语句共用一组执行语句 14 按运输距离计算运费程序运行过程按运输距离计算运费程序运行过程main( ) int s,c,w; float p,f,d; scanf(%d,%d,%f,&s,&w,&p); c=s/250; switch( c ) case 0: d=0; break; case 1: d=0.02; break; case 2: case 3: d=5.0/100;
13、break; case 4: case 5: case 6: case 7: d=8.0/100; break; case 8: case 9: case 10: case 11: d=10.0/100; break; default : d=15.0/100; f=s*(1-d)*w*p; printf(s=%d,w=%d,f=%.0fn,s,w,f); 如果从键盘上输入如果从键盘上输入1300,1000,1.2,则程,则程序运行的过程及结果如下:序运行的过程及结果如下:s=1300,w=1000,f=1435200 15 判断闰年算法分析判断闰年算法分析输出输出year不是不是闰年闰年Yy
14、ear%100!=0N输出输出year是是闰年闰年Yyear%400!=0N输出输出year不是不是闰年闰年YN输出输出year是是闰年闰年year%4!=0 16 5.4 选择结构程序举例选择结构程序举例l 判断闰年判断闰年l 求一元二次方程的根求一元二次方程的根l 小学生做算术题小学生做算术题l 数字拆分数字拆分l 三个数的排序三个数的排序l 三个数中求最大数三个数中求最大数l 收费和个人所得税计算收费和个人所得税计算l 分段函数值的计算分段函数值的计算l 判断字母、数字判断字母、数字 17 例例1 用多层选择结构判断闰年程序用多层选择结构判断闰年程序 #include stdlib.h
15、main() int year; scanf(%d,&year); if(year%4!=0) printf(%d is not a leap yearn,year); else if(year%100!=0) printf(%d is a leap yearn,year); else if(year%400!=0) printf(%d is not a leap yearn,year); else printf(%d is a leap yearn,year); 这是一个这是一个多层选择多层选择结构结构 18 用多层选择结构判断闰年程序运行过程用多层选择结构判断闰年程序运行过程 #i
16、nclude stdlib.h main( ) int year; scanf(%d,&year); if(year%4!=0) printf(%d is not a leap yearn,year); else if(year%100!=0) printf(%d is a leap yearn,year); else if(year%400!=0) printf(%d is not a leap yearn,year); else printf(%d is a leap yearn,year); 这是一个这是一个多层选择多层选择结构结构如果从键盘上输入如果从键盘上输入2000,则程,
17、则程序运行的过程及结果如下:序运行的过程及结果如下: 19 用多层选择结构判断闰年程序运行过程用多层选择结构判断闰年程序运行过程 #include stdlib.h main( ) int year; scanf(%d,&year); if(year%4!=0) printf(%d is not a leap yearn,year); else if(year%100!=0) printf(%d is a leap yearn,year); else if(year%400!=0) printf(%d is not a leap yearn,year); else printf(%d
18、is a leap yearn,year); 这是一个这是一个多层选择多层选择结构结构如果从键盘上输入如果从键盘上输入1900,则程,则程序运行的过程及结果如下:序运行的过程及结果如下: 20 用多层选择结构判断闰年程序运行过程用多层选择结构判断闰年程序运行过程 #include stdlib.h main( ) int year; scanf(%d,&year); if(year%4!=0) printf(%d is not a leap yearn,year); else if(year%100!=0) printf(%d is a leap yearn,year); else i
19、f(year%400!=0) printf(%d is not a leap yearn,year); else printf(%d is a leap yearn,year); 这是一个这是一个多层选择多层选择结构结构如果从键盘上输入如果从键盘上输入2001,则程,则程序运行的过程及结果如下:序运行的过程及结果如下: 21 用多层选择结构判断闰年程序执行过程用多层选择结构判断闰年程序执行过程 #include stdlib.h main( ) int year; scanf(%d,&year); if(year%4!=0) printf(%d is not a leap yearn,
20、year); else if(year%100!=0) printf(%d is a leap yearn,year); else if(year%400!=0) printf(%d is not a leap yearn,year); else printf(%d is a leap yearn,year); 这是一个这是一个多层选择多层选择结构结构如果从键盘上输入如果从键盘上输入1968,则程,则程序运行的过程及结果如下:序运行的过程及结果如下: 22 多层选择结构判断闰年程序(使用一个标志变量)多层选择结构判断闰年程序(使用一个标志变量) #include stdlib.h main(
21、) int year,leap; scanf(%d,&year); if(year%4!=0) leap=0; else if(year%100!=0) leap=1; else if(year%400!=0) leap=0; else leap=1; if (leap) printf(%d is a leap yearn,year); else printf(%d is not a leap yearn,year); 这是一个这是一个多层选择多层选择结构结构这是一个这是一个双边结构双边结构 23 例例2 求一元二次方程的根程序求一元二次方程的根程序#include main( ) f
22、loat a,b,c,disc,x1,x2,real,imag; scanf(%f,%f,%f,&a,&b,&c); if ( a=0 ) printf(Data Error!n); else disc=b*b-4*a*c; if ( disc = 0 ) printf(one real root is:%8.4fn,-b/(2*a); else if( disc 1e-6) x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); printf( two real roots are: %8.4f and %8.4f,x1,x
23、2); else real=-b/(2*a); imag=sqrt(-disc)/(2*a); printf(complex roots are:n); printf(%8.4f+%8.4fin,real,imag); printf(%8.4f+%8.4fin,real,imag); 24 求一元二次方程的根程序求一元二次方程的根程序#include main( ) float a,b,c,disc,x1,x2,real,imag; scanf(%f,%f,%f,&a,&b,&c); if( fabs(a)=1e-6) printf(Data Error!n); els
24、e disc=b*b-4*a*c; if(fabs(disc)1e-6) x1=(-b+sqrt(disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); printf( two real roots are: %8.4f and %8.4f,x1,x2); else real=-b/(2*a); imag=sqrt(-disc)/(2*a); printf(complex roots are:n); printf(%8.4f+%8.4fin,real,imag); printf(%8.4f-%8.4fin,real,imag); 25 例例3 小学生解小学生解100以内加法
25、问题以内加法问题#include main( ) int a,b,c; a=rand( )%100; b=rand( )%100; scanf(%d,&c); if( c=a+b) printf(You are right!n); else printf(You are wrong!n); /* 产生一个产生一个099之间的随机数之间的随机数 */* 再产生一个再产生一个099之间的随机数之间的随机数 */* 为学生显示题目为学生显示题目 */* 学生输入答案学生输入答案 */printf(%d + %d = ?,a,b);randomize( ) ; 26 小学生解小学生解100以内
26、减法问题以内减法问题#include main( ) int a,b,c,t; a=rand( )%100; b=rand( )%100; if(ab) t=a;a=b;b=t; printf(%d - %d = ?,a,b); scanf(%c,&c); if( c=a-b) printf(You are right!n); else printf(You are wrong!n); /* 产生一个产生一个099之间的随机数之间的随机数 */* 再产生一个再产生一个099之间的随机数之间的随机数 */* 为学生显示题目为学生显示题目 */* 考虑考虑a,b的大小关系的大小关系 */r
27、andomize( ) ; 27 例例4 将一个三位数进行拆分将一个三位数进行拆分1main( ) int m,a,b,c; printf(Please enter an integer (100): ); scanf(%d,&m); a=m%10; b=(m/10)%10; c=m/100; printf(%d %d %dn,c,b,a); /* 将个位数拆分出来将个位数拆分出来 */* 将十位数拆分出来将十位数拆分出来 */* 将百位数拆分出来将百位数拆分出来 */ 28 将一个三位数进行拆分将一个三位数进行拆分1main( ) int m,a,b,c; printf(Please
28、 enter an integer (100): ); scanf(%d,&m); a=m%10; b=(m/10)%10; c=m/100; printf(%d %d %dn,c,b,a); /* 123%10 的结果是的结果是 3 */* ( 123/10)%10=12%10=2 */* 123/100 的结果是的结果是 1 */当当m=123时,程序运行的情况如下:时,程序运行的情况如下: 29 将一个三位数进行拆分将一个三位数进行拆分2main( ) int m,a,b,c; printf(Please enter an integer (1000): ); scanf(%d,
29、&m); c=m/100; b=(m-c*100)/10; a=m%100; printf(%d %d %dn,c,b,a); /* 将百位数拆分出来将百位数拆分出来 */* 将十位数拆分出来将十位数拆分出来 */* 将个位数拆分出来将个位数拆分出来 */ 30 将一个三位数进行拆分将一个三位数进行拆分2main( ) int m,a,b,c; printf(Please enter an integer (1000): ); scanf(%d,&m); c=m/100; b=(m-c*100)/10; a=m%100; printf(%d %d %dn,c,b,a); /*1
30、23/100 的结果是的结果是1 */* (123-1*100)/10的结果是的结果是 2 */* 123%10的结果是的结果是 3 */当当m=123时,程序运行的情况如下:时,程序运行的情况如下: 31 将一个四位数进行拆分将一个四位数进行拆分main( ) int m,a,b,c,d; printf(Please enter an integer (bNYbcN输出输出acNYYa与与b交换交换a与与c交换交换b与与c交换交换 34 对三个数进行升序排序对三个数进行升序排序main( ) int a,b,c,t; scanf(%d,%d,%d,&a,&b,&c);
31、 if(ab) t=a;a=b;b=t; if(ac) t=a;a=c;c=t; if(bc) t=b;b=c;c=t; printf(%d,%d,%dn,a,b,c); 想一想,想一想,3个个if 语句是嵌套关系语句是嵌套关系呢还是呢还是3个独立的单边结构?个独立的单边结构?想一想,如果要对想一想,如果要对4 4个数进行排序,需个数进行排序,需要比较多少次?要比较多少次?5 5个数呢?个数呢? 35 例例6 从三个数中找出最大的数从三个数中找出最大的数l 在三个数在三个数a,b,ca,b,c中找出最大数的程序设计的思路为:中找出最大数的程序设计的思路为:l 先将先将a,ba,b进行比较,将二
32、者之中的大数放入变量进行比较,将二者之中的大数放入变量a a中,小数放入中,小数放入b b中,这样中,这样a a中就是中就是a,ba,b中的最大数。中的最大数。l 再将变量再将变量a a与变量与变量c c进行比较,将进行比较,将a a,c c中的大数放中的大数放到到a a中,小数放到中,小数放到c c中,这样,变量中,这样,变量a a中存放的就一中存放的就一定是三个数中的最大数。定是三个数中的最大数。 36 从三个数中找出最大数的程序从三个数中找出最大数的程序main( ) int a,b,c,t; scanf(%d,%d,%d,&a,&b,&c); printf(%d
33、,%d,%dn,a,b,c); if(ab) t=a;a=b;b=t; if(ac) t=a;a=c;c=t; printf(%dn,a); 37 例例7 输入一个份,打印出该月有几天输入一个份,打印出该月有几天(switch)main( ) int month,day; scanf(%d,&month); switch(month) case 2: day=28;break; case 4: case 6: case 9: case 11: day=30; break; default : day=31; printf(month=%d,day=%dn,month,day); 38
34、输入一个份,打印出该月有几天(多层)输入一个份,打印出该月有几天(多层)main( ) int month,day; scanf(%d,&month); if (month=2) day=28; else if(month=5&month=20) c=15; else c=5; else if(n=20) c=30; else c=20; printf(month=%d,n=%d,c=%.2fn,month,n,c/100); 41 航空公司收费优惠率计算程序(航空公司收费优惠率计算程序(if)main( ) int month,n; float c; scanf(%d%d,&
35、amp;month,&n); if (month=7&month=20) c=15; else c=5; else if(n=20) c=30; else c=20; printf(month=%d,n=%d,c=%.2fn,month,n,c/100); 42 航空公司收费优惠率计算程序航空公司收费优惠率计算程序(switch)main( ) int month,n; float c; scanf(%d%d,&month,&n); switch(month) case 5: case 7: case 8: case 9: case 10: if(n=20) c
36、=15; else c=5; break; default : if(n=20) c=30; else c=20; printf(month=%d,n=%d,c=%.2fn,month,n,c/100); 43 航空公司收费优惠率计算程序航空公司收费优惠率计算程序(switch)main( ) int month,n; float c; scanf(%d%d,&month,&n); if(n=20) k=1; else k=0; switch(k) case 0: if(month=7&month=7&month=10|month=5) c=15; else c
37、=30; printf(month=%d,n=%d,c=%.2fn,month,n,c/100); 44 在屏幕上输出大写字母在屏幕上输出大写字母A,写出尽可能多的方法,写出尽可能多的方法printf(A);putchar(A);putchar(65);c=A; putchar (c);c=A; printf(%c,c);printf(%c,A);printf(%c,65); 45 例例9 计算分段函数的值计算分段函数的值 0 x=0 x 0 x20 20 x100 x2 其它其它y= 求分段函数的值:求分段函数的值:x 46 计算分段函数的程序计算分段函数的程序#include main()
38、 int x;float y; printf(Please enter x:); scanf(%d,&x); if(x=0) y=0; else if(x=0 & x=20&x100) y=sqrt(int)x); else y=x*x; printf(x=%d,y=%fn,x,y); 47 #include main( ) int x;float y; printf(Please enter x:); scanf(%d,&x); if(x=0) y=0; else if( x20) y=x; else if( x100) y=sqrt(int)x); else y=x*x; printf(x=%d,y=%fn,x,y); 计算分段函数的程序计算分段函数的程序 48 例例10 计算个人所得税计算个人所得税main( ) int x,t;float tax; printf(Please enter salary:); scanf(%d,&x); t=(x-1)/400; switch( t ) case 0: case 1: tax=0; case
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025 小学六年级语文下册 标点知识 破折号声音延长课件
- 跨境电商独立站域名备案技术协议2025年
- 口罩生产供应协议2025年出口版
- 2025年百货商场电子价签系统服务
- 居家养老陪护服务合同2025年
- 考导游证面试题及答案
- 深度解析(2026)《GBT 39358-2020中国森林认证 非木质林产品经营》
- 深度解析(2026)《GBT 39273-2020滚动轴承和关节轴承 电子媒体查询结构 用特性词汇标识的特征和性能指标》(2026年)深度解析
- 生态环保省考面试题目及答案
- 深度解析(2026)《GBT 34638-2017无损检测 超声泄漏检测方法》
- 2026年内蒙古商贸职业学院单招综合素质考试题库附答案详解
- 2026年青岛航空科技职业学院单招职业适应性考试题库含答案详解
- 事业编财会面试题及答案
- 《医保支付资格管理》培训考核题库及答案
- (2025年)福建能化集团招聘笔试题附答案
- 计调年终总结汇报
- 江苏省专升本2025年食品科学与工程食品工艺学试卷(含答案)
- 具身智能+物流智能仓储解决方案分析报告
- 人行道维修施工方案
- TOP TOY潮玩集合品牌盲盒营销现状及对策研究
- 第16课 祖国我为您自豪(教学课件)小学二年级上册 统编版《道德与法治》新教材
评论
0/150
提交评论