(精品)C语言C语言第五讲.ppt

上传人:hyn****60 文档编号:70945755 上传时间:2023-01-29 格式:PPT 页数:54 大小:840.50KB
返回 下载 相关 举报
(精品)C语言C语言第五讲.ppt_第1页
第1页 / 共54页
(精品)C语言C语言第五讲.ppt_第2页
第2页 / 共54页
点击查看更多>>
资源描述

《(精品)C语言C语言第五讲.ppt》由会员分享,可在线阅读,更多相关《(精品)C语言C语言第五讲.ppt(54页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、 1 C语言电子教案(五)语言电子教案(五)l 第五讲第五讲 第五章第五章 逻辑运算和判断选取控制逻辑运算和判断选取控制l 主要内容:主要内容:l 5.4 5.4 switchswitch语句语句l 5.5 5.5 选择结构程序举例选择结构程序举例l 2 5.4 switch 语句语句(开关语句、多分支选择语句开关语句、多分支选择语句)lswitch 语句的格式语句的格式:l switch(表达式表达式)l case 常量常量1:语句语句1;break;lcase 常量常量2:语句语句2;break;lcase 常量常量3:语句语句3;break;l lcase 常量常量n:语句语句n;bre

2、ak;ldefault :语句语句n+1 执行过程:执行过程:先计算先计算表达式表达式之值之值,如果与某个如果与某个case语句中的常量的值匹配语句中的常量的值匹配(即相同),则执行其后的语句;若所有的(即相同),则执行其后的语句;若所有的case语句中的常语句中的常量的值都量的值都 不能与之匹配,则执行不能与之匹配,则执行default后的语句后的语句n+1。注意注意:则执行完入口语句后则执行完入口语句后,则自动转到下一个则自动转到下一个case后面的语句执行;如果语句中有后面的语句执行;如果语句中有break;,则则执行完一个入口语句后跳出执行完一个入口语句后跳出switch选择结构。选择

3、结构。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 x 其它其它y=求分段函数的值:求分段函数的值:6 main()int x

4、,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,则程序,则程序运行的顺序和结果如下:运行的顺序和结果如下:x=3,y=9这是一个这是一个switch语句语句运行程序运行程序 7 用用sw

5、itch语句求分段函数的值程序语句求分段函数的值程序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这是一个这是一个switch语句语句 8 switch语句的使用例语句的使用例2:输入分段成绩,打印出分数段:输入分段成绩,打印出分数段main()cha

6、r 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 :printf(60n);/*为输入作提示为输入作提示*/*将将c转换成大写转换成大写*/注意:注意:case后面应为字符常量后面应为字符常量A、B等,不能为等,不能为变量变量A、B等。等。程序运行后,如果从键盘

7、上输入程序运行后,如果从键盘上输入b,则程序,则程序运行的顺序和结果如下:运行的顺序和结果如下:8090运行程序运行程序 9 switch 语句使用说明语句使用说明l各个语句后如果没有各个语句后如果没有break;break;语句,则执行了语句,则执行了相应的操作后,会自动转到下一个相应的操作后,会自动转到下一个casecase后面后面的语句执行。的语句执行。l可以使多个可以使多个casecase共用同一组执行语句。共用同一组执行语句。lcasecase后面的表达式不能相同。后面的表达式不能相同。l各个各个casecase和和defaultdefault语句的顺序可以改变。语句的顺序可以改变。

8、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(7079n);case D :printf(6069n);default :printf(60n);/*为输入作提示为输入作提示*/*将将c转换成大写转换成大写*/去掉去掉break;语句,程序运行后,仍从键盘上输入语句,程序运行后,仍从键盘上输入

9、b,则程序运行的顺序和结果如下:,则程序运行的顺序和结果如下:80907079606960运行程序运行程序 11 switch语句应用例语句应用例3:按运输距离计算运费:按运输距离计算运费距离距离s与运费折扣标准如下:与运费折扣标准如下:s250 没有折扣没有折扣250s500 2%折扣折扣500s1000 5%折扣折扣1000s2000 8%折扣折扣2000s3000 10%折扣折扣3000s 15%折扣折扣 12 按运输距离计算运费算法分析按运输距离计算运费算法分析s折扣折扣d(%)250500100020003000246810121416124812c注意到:折扣点的变化都是注意到:折

10、扣点的变化都是250的整倍数。可以将的整倍数。可以将s按按每每250分作一个段赋给变量分作一个段赋给变量c,简化简化case的入口情况。的入口情况。002581015 13 按运输距离计算运费程序按运输距离计算运费程序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;break;case 4:case 5:case 6:case 7:d=8.0/100;break;case 8:cas

11、e 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);注意:要表示百分之二必须用注意:要表示百分之二必须用0.02或者或者2.0/100等表示方法,切不可用等表示方法,切不可用2%表示。表示。/*将将s的值分段,分段结果放入的值分段,分段结果放入c中中 */可以多个可以多个case共用共用一组执行语句一组执行语句运行程序运行程序 14 按运输距离计算运费程序运行过程按运输距离计算运费程序运行过程main()int s,c,w;float p,f,

12、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;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,则程,

13、则程序运行的过程及结果如下:序运行的过程及结果如下:s=1300,w=1000,f=1435200 15 判断闰年算法分析判断闰年算法分析输出输出year不是不是闰年闰年Yyear%100!=0N输出输出year是是闰年闰年Yyear%400!=0N输出输出year不是不是闰年闰年YN输出输出year是是闰年闰年year%4!=0 16 5.4 选择结构程序举例选择结构程序举例l判断闰年判断闰年l求一元二次方程的根求一元二次方程的根l小学生做算术题小学生做算术题l数字拆分数字拆分l三个数的排序三个数的排序l三个数中求最大数三个数中求最大数l收费和个人所得税计算收费和个人所得税计算l分段函数值的

14、计算分段函数值的计算l判断字母、数字判断字母、数字 17 例例1 用多层选择结构判断闰年程序用多层选择结构判断闰年程序#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 is a leap yearn,year

15、);这是一个这是一个多层选择多层选择结构结构运行程序运行程序 18 用多层选择结构判断闰年程序运行过程用多层选择结构判断闰年程序运行过程#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 is a leap y

16、earn,year);这是一个这是一个多层选择多层选择结构结构如果从键盘上输入如果从键盘上输入2000,则程,则程序运行的过程及结果如下:序运行的过程及结果如下: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

17、 not a leap yearn,year);else printf(%d 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

18、 leap yearn,year);else if(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 l

19、eap 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);这是一个这是一个多层选择多层选择结构结构如果从键盘上输入如果从键盘上输入1968,则程,则程序运行的过程及结果如下:序运行的过程及结果如下:22 多层选择结构判断闰年程序(使用一个标志变量)多层选择结构判断闰年程序(使用一个标志变量)#include stdlib.h main

20、()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()float a,b,c,

21、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,x2);else real=-b/(2*a);imag=sqrt(-disc)/(2*a

22、);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);else disc=b*b-4*a*c;if(fabs(disc)1e-6)x1=(-b+sqrt(disc)/(2*a);x2=(-b-sq

23、rt(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以内加法问题以内加法问题#include main()int a,b,c;a=rand()%100;b=rand()%100;scanf(%d,&c);

24、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以内减法问题以内减法问题#include main()int a,b,c,t;a=rand()%100;b=rand()%100;if(ab)t=a;a=b;b=t;printf(%d-%d=

25、?,a,b);scanf(%c,&c);if(c=a-b)printf(You are right!n);else printf(You are wrong!n);/*产生一个产生一个099之间的随机数之间的随机数*/*再产生一个再产生一个099之间的随机数之间的随机数*/*为学生显示题目为学生显示题目*/*考虑考虑a,b的大小关系的大小关系*/randomize();27 例例4 将一个三位数进行拆分将一个三位数进行拆分1main()int m,a,b,c;printf(Please enter an integer(100):);scanf(%d,&m);a=m%10;b=(m/10)%1

26、0;c=m/100;printf(%d%d%dn,c,b,a);/*将个位数拆分出来将个位数拆分出来 */*将十位数拆分出来将十位数拆分出来 */*将百位数拆分出来将百位数拆分出来 */28 将将一个三位数进行拆分一个三位数进行拆分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);/*123%10 的结果是的结果是 3 */*(123/10)%10=12%10=2*/*123/100 的结果是的结果是 1 *

27、/当当m=123时,程序运行的情况如下:时,程序运行的情况如下:运行程序运行程序 29 将将一个三位数进行拆分一个三位数进行拆分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);/*将百位数拆分出来将百位数拆分出来 */*将十位数拆分出来将十位数拆分出来 */*将个位数拆分出来将个位数拆分出来 */30 将将一个三位数进行拆分一个三位数进行拆分2main()int m,a,b,c;printf(Pl

28、ease enter an integer(1000):);scanf(%d,&m);c=m/100;b=(m-c*100)/10;a=m%10;printf(%d%d%dn,c,b,a);/*123/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交换

29、交换a与与c交换交换b与与c交换交换 34 对三个数进行升序排序对三个数进行升序排序main()int a,b,c,t;scanf(%d,%d,%d,&a,&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;printf(%d,%d,%dn,a,b,c);想一想,想一想,3个个if 语句是嵌套关系语句是嵌套关系呢还是呢还是3个独立的单边结构?个独立的单边结构?想一想,如果要对想一想,如果要对4 4个数进行排序,需个数进行排序,需要比较多少次?要比较多少次?5 5个数呢?个数呢?运行程序运行程序 35 例例6 从三个数中找出最

30、大的数从三个数中找出最大的数l在三个数在三个数a,b,ca,b,c中找出最大数的程序设计的思路为:中找出最大数的程序设计的思路为:l先将先将a,ba,b进行比较,将二者之中的大数放入变量进行比较,将二者之中的大数放入变量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 从三个数中找出最大数的程序

31、从三个数中找出最大数的程序main()int a,b,c,t;scanf(%d,%d,%d,&a,&b,&c);printf(%d,%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;defa

32、ult :day=31;printf(month=%d,day=%dn,month,day);运行程序运行程序 38 输入一个份,打印出该月有几天(多层)输入一个份,打印出该月有几天(多层)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 航空公司收费优惠率计算程序(航空公司收费优惠率计算程序

33、(if)main()int month,n;float c;scanf(%d%d,&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)

34、c=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=30;printf(month=%d,n=%d,c=

35、%.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=求分段函数的值:求分段函数的值:46 计算分段函数的程序计算分段函数的程序#include main()int x;float y;printf(Please enter x:)

36、;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()in

37、t x,t;float tax;printf(Please enter salary:);scanf(%d,&x);t=(x-1)/400;switch(t)case 0:case 1:tax=0;case 2:tax=(x-800)*0.05;case 3:case 4:tax=(1200-800)*0.05+(x-1200)*0.10;default:tax=(1200-800)*0.05+(2000-1200)*0.10+(x-2000)*0.15;printf(x=%d,tax=%.2fn,x,tax);运行程序运行程序 49 计算个人所得税计算个人所得税main()int x,t;f

38、loat tax,m,n;m=(1200-800)*0.05;n=(2000-1200)*0.10;printf(Please enter salary:);scanf(%d,&x);t=(x-1)/400;switch(t)case 0:case 1:tax=0;case 2:tax=(x-800)*0.05;case 3:case 4:tax=m+(x-1200)*0.10;default:tax=m+n+(x-2000)*0.15;printf(x=%d,tax=%.2fn,x,tax);50 例例11 从键盘上输入一个字符判断是数字、字母或其它从键盘上输入一个字符判断是数字、字母或其它

39、#include main()char c;c=getchar();if(c=65&c=0&c=9)printf(digitn);else printf(othern);运行程序运行程序 51 从从键盘上输入一个字符判断是数字、字母或其它键盘上输入一个字符判断是数字、字母或其它#include main()char c;c=getchar();if(c=65&c=97&c=0&c=9)printf(digitn);else printf(othern);52 从从键盘上输入一个字符判断是数字、字母或其它键盘上输入一个字符判断是数字、字母或其它#include main()char c;c=ge

40、tchar();if(c=A&c=a&c=0&c=9)printf(digitn);else printf(othern);运行程序运行程序 53 例例12 从键盘上输入从键盘上输入5个整数个整数,求总和及平均值求总和及平均值main()int a,b,c,d,e,sum;float aver;scanf(%d%d%d%d%d,&a,&b,&c,&d,&e);sum=a+b+c+d+e;aver=sum/5;printf(sum=%d,average=%.2fn,sum,aver);运行程序运行程序 54 例例13 输入一个实数,将整数部分和小数部分拆分开输入一个实数,将整数部分和小数部分拆分开main()float x,y;int z;scanf(%f,&x);z=(int)x;y=x-z;printf(%f,%d,%fn,x,z,y);运行程序运行程序

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com