C语言电子教案(五)_第1页
C语言电子教案(五)_第2页
C语言电子教案(五)_第3页
C语言电子教案(五)_第4页
C语言电子教案(五)_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

§5.4switch语句(开关语句、多分支选择语句)switch语句的格式:

switch(表达式)

{

case

常量1:

语句1;break;

case

常量2:

语句2;break;

case

常量3:

语句3;break;……

case

常量n:

语句n;break;

default:

语句n+1}执行过程:先计算表达式之值,如果与某个case语句中的常量的值匹配(即相同),则执行其后的语句;若所有的case语句中的常量的值都不能与之匹配,则执行default后的语句n+1。根据表达式的值找入口注意:则执行完入口语句后,则自动转到下一个case后面的语句执行;如果语句中有break;,则执行完一个入口语句后跳出switch选择结构。switch语句流程图(有break;语句)表达式语句1语句2语句3语句n=常量1=常量2=常量3=常量n语句n+1……=其它switch语句流程图(无break;语句)表达式语句1语句2语句3语句n=常量1=常量2=常量3=常量n语句n+1……=其它switch语句的使用举例1:求分段函数的值

1+xx=1

2*xx=2

x*xx=3x其它y=

求分段函数的值:main(){intx,y;scanf("%d",&x);switch(x){case1:y=1+x;break;case2:y=2*x;break;case3:y=x*x;break;default:y=x;}printf("x=%d,y=%d\n",x,y);}用switch语句求分段函数的值程序注意:关键字case后面一定要留空格,且case后面应为常量。程序运行后,如果从键盘上输入3<回车>,则程序运行的顺序和结果如下:x=3,y=9这是一个switch语句运行程序用switch语句求分段函数的值程序main(){intx,y;scanf("%d",&x);switch(x){case1:y=1+x;break;case2:y=2*x;break;case3:y=x*x;break;default:y=x;}printf("x=%d,y=%d\n",x,y);}程序运行后,如果从键盘上输入-3<回车>,则程序运行的顺序和结果如下:x=-3,y=-3这是一个switch语句switch语句的使用例2:输入分段成绩,打印出分数段main(){charc;printf("Pleaseenterachar\n");c=getchar();c=(c>='a'&&c<='z')?c-32:c;switch(c){case'A':printf("90~100\n");break;case'B':printf("80~89\n");break;case'C':printf("70~79\n");break;case'D':printf("60~69\n");break;default:printf("<60\n");}}/*为输入作提示*//*将c转换成大写*/注意:case后面应为字符常量'A'、'B'等,不能为变量A、B等。程序运行后,如果从键盘上输入b<回车>,则程序运行的顺序和结果如下:80~90运行程序switch语句使用说明各个语句后如果没有break;语句,则执行了相应的操作后,会自动转到下一个case后面的语句执行。可以使多个case共用同一组执行语句。case后面的表达式不能相同。各个case和default语句的顺序可以改变。switch选择结构中break语句的使用main(){charc;printf("Pleaseenterachar\n");c=getchar();c=(c>='a'&&c<='z')?c-32:c;switch(c){case'A':printf("90~100\n");case'B':printf("80~89\n");case'C':printf("70~79\n");case'D':printf("60~69\n");default:printf("<60\n");}}/*为输入作提示*//*将c转换成大写*/去掉break;语句,程序运行后,仍从键盘上输入b<回车>,则程序运行的顺序和结果如下:80~9070~7960~69<60运行程序switch语句应用例3:按运输距离计算运费距离s与运费折扣标准如下:

s<250没有折扣250≤s<5002%折扣500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣按运输距离计算运费算法分析s折扣d(%)250500100020003000246810121416124812c注意到:折扣点的变化都是250的整倍数。可以将s按每250分作一个段赋给变量c,简化case的入口情况。002581015按运输距离计算运费程序main(){ints,c,w;floatp,f,d;scanf("%d,%d,&f,",&s,&w,&p);c=s/250;switch(c){case0:d=0;break;case1:d=0.02;break;case2:case3:d=5.0/100;break;case4:case5:case6:case7:d=8.0/100;break;case8:case9:case10:case11:d=10.0/100;break;default:d=15.0/100;}f=s*(1-d)*w*p;printf("s=%d,w=%d,f=%.2f\n",s,d,f);注意:要表示百分之二必须用0.02或者2.0/100等表示方法,切不可用2%表示。/*将s的值分段,分段结果放入c中*/可以多个case共用一组执行语句运行程序按运输距离计算运费程序运行过程main(){ints,c,w;floatp,f,d;scanf("%d,%d,%f",&s,&w,&p);c=s/250;switch(c){case0:d=0;break;case1:d=0.02;break;case2:case3:d=5.0/100;break;case4:case5:case6:case7:d=8.0/100;break;case8:case9:case10:case11:d=10.0/100;break;default:d=15.0/100;}f=s*(1-d)*w*p;printf("s=%d,w=%d,f=%.0f\n",s,w,f);}如果从键盘上输入1300,1000,1.2,则程序运行的过程及结果如下:s=1300,w=1000,f=1435200判断闰年算法分析输出year不是闰年Yyear%100!=0N输出year是闰年Yyear%400!=0N输出year不是闰年YN输出year是闰年year%4!=0§5.4选择结构程序举例判断闰年求一元二次方程的根小学生做算术题数字拆分三个数的排序三个数中求最大数收费和个人所得税计算分段函数值的计算判断字母、数字例1用多层选择结构判断闰年程序#include"stdlib.h"main(){intyear;

scanf("%d",&year);

if(year%4!=0)

printf("%disnotaleapyear\n",year);

elseif(year%100!=0)

printf("%disaleapyear\n",year);

elseif(year%400!=0)printf("%disnotaleapyear\n",year);

elseprintf("%disaleapyear\n",year);

}这是一个多层选择结构运行程序用多层选择结构判断闰年程序运行过程#include"stdlib.h"main(){intyear;

scanf("%d",&year);

if(year%4!=0)

printf("%disnotaleapyear\n",year);

elseif(year%100!=0)

printf("%disaleapyear\n",year);

elseif(year%400!=0)printf("%disnotaleapyear\n",year);

elseprintf("%disaleapyear\n",year);

}这是一个多层选择结构如果从键盘上输入2000,则程序运行的过程及结果如下:用多层选择结构判断闰年程序运行过程#include"stdlib.h"main(){intyear;

scanf("%d",&year);

if(year%4!=0)

printf("%disnotaleapyear\n",year);

elseif(year%100!=0)

printf("%disaleapyear\n",year);

elseif(year%400!=0)printf("%disnotaleapyear\n",year);

elseprintf("%disaleapyear\n",year);

}这是一个多层选择结构如果从键盘上输入1900,则程序运行的过程及结果如下:用多层选择结构判断闰年程序运行过程#include"stdlib.h"main(){intyear;

scanf("%d",&year);

if(year%4!=0)

printf("%disnotaleapyear\n",year);

elseif(year%100!=0)

printf("%disaleapyear\n",year);

elseif(year%400!=0)printf("%disnotaleapyear\n",year);

elseprintf("%disaleapyear\n",year);

}这是一个多层选择结构如果从键盘上输入2001,则程序运行的过程及结果如下:用多层选择结构判断闰年程序执行过程

#include"stdlib.h"main(){intyear;

scanf("%d",&year);

if(year%4!=0)

printf("%disnotaleapyear\n",year);

elseif(year%100!=0)

printf("%disaleapyear\n",year);

elseif(year%400!=0)printf("%disnotaleapyear\n",year);

elseprintf("%disaleapyear\n",year);

}这是一个多层选择结构如果从键盘上输入1968,则程序运行的过程及结果如下:多层选择结构判断闰年程序(使用一个标志变量)#include"stdlib.h"main(){intyear,leap;scanf("%d",&year);

if(year%4!=0)leap=0;elseif(year%100!=0)leap=1;elseif(year%400!=0)leap=0;elseleap=1;if(leap)printf("%disaleapyear\n",year);elseprintf("%disnotaleapyear\n",year);}这是一个多层选择结构这是一个双边结构运行程序例2求一元二次方程的根程序#include<amth.h>main(){floata,b,c,disc,x1,x2,real,imag;scanf("%f,%f,%f",&a,&b,&c);if(

a==0)printf("DataError!\n");else{disc=b*b-4*a*c;if(disc==0)printf("onerealrootis:%8.4f\n",-b/(2*a);elseif(disc>1e-6){x1=(-b+sqrt(disc))/(2*a);

x2=(-b-sqrt(disc))/(2*a);printf("tworealrootsare:%8.4fand%8.4f",x1,x2);}else{real=-b/(2*a);imag=sqrt(-disc)/(2*a);printf("complexrootsare:\n");printf("%8.4f+%8.4fi\n",real,imag);

printf("%8.4f+%8.4fi\n",real,imag);}}}求一元二次方程的根程序#include<amth.h>main(){floata,b,c,disc,x1,x2,real,imag;scanf("%f,%f,%f",&a,&b,&c);if(fabs(a)<=1e-6)printf("DataError!\n");else{disc=b*b-4*a*c;if(fabs(disc)<=1e-6)printf("onerealroolis:%8.4f\n",-b/(2*a);elseif(disc>1e-6){x1=(-b+sqrt(disc))/(2*a);

x2=(-b-sqrt(disc))/(2*a);printf("tworealrootsare:%8.4fand%8.4f",x1,x2);}else{real=-b/(2*a);imag=sqrt(-disc)/(2*a);printf("complexrootsare:\n");printf("%8.4f+%8.4fi\n",real,imag);

printf("%8.4f-%8.4fi\n",real,imag);}}}运行程序例3小学生解100以内加法问题#include<stdlib.h>main(){inta,b,c;a=rand()%100;b=rand()%100;

scanf("%d",&c);if(c==a+b)printf("Youareright!\n");elseprintf("Youarewrong!\n");}/*产生一个0~99之间的随机数*//*再产生一个0~99之间的随机数*//*为学生显示题目*/运行程序/*学生输入答案*/printf("%d+%d=?",a,b);randomize();小学生解100以内减法问题#include<stdlib.h>main(){inta,b,c,t;a=rand()%100;b=rand()%100;

if(a<b){t=a;a=b;b=t;}printf("%d-%d=?",a,b);scanf("%c",&c);if(c==a-b)printf("Youareright!\n");elseprintf("Youarewrong!\n");}/*产生一个0~99之间的随机数*//*再产生一个0~99之间的随机数*//*为学生显示题目*//*考虑a,b的大小关系*/randomize();例4将一个三位数进行拆分1main(){intm,a,b,c;printf("Pleaseenteraninteger(<100):");scanf("%d",&m);

a=m%10;b=(m/10)%10;c=m/100;printf("%d%d%d\n",c,b,a);}/*将个位数拆分出来*//*将十位数拆分出来*//*将百位数拆分出来*/将一个三位数进行拆分1main(){intm,a,b,c;printf("Pleaseenteraninteger(<100):");scanf("%d",&m);

a=m%10;b=(m/10)%10;c=m/100;printf("%d%d%d\n",c,b,a);}/*123%10的结果是3*//*(123/10)%10=12%10=2*//*123/100的结果是1*/当m=123时,程序运行的情况如下:运行程序将一个三位数进行拆分2main(){intm,a,b,c;printf("Pleaseenteraninteger(<1000):");scanf("%d",&m);

c=m/100;b=(m-c*100)/10;a=m%100;printf("%d%d%d\n",c,b,a);}/*将百位数拆分出来*//*将十位数拆分出来*//*将个位数拆分出来*/将一个三位数进行拆分2main(){intm,a,b,c;printf("Pleaseenteraninteger(<1000):");scanf("%d",&m);

c=m/100;b=(m-c*100)/10;a=m%100;printf("%d%d%d\n",c,b,a);}/*123/100的结果是1*//*(123-1*100)/10的结果是2*//*123%10的结果是3*/当m=123时,程序运行的情况如下:运行程序将一个四位数进行拆分main(){intm,a,b,c,d;printf("Pleaseenteraninteger(<10000):");scanf("%d",&m);

d=m/1000;

c=(m-d*1000)/100;b=(m-d*1000-c*100)/10;a=m%100;printf("%d%d%d\n",c,b,a);}/*1234/1000的结果是1*//*(1234-1*1000)/100的结果是2*//*(1234-1*1000-2*100)/10的结果是3*/当m=1234时,程序运行的情况如下:/*1234%10的结果是4*/运行程序例5对三个数进行升序排序对三个数a,b,c进行排序的程序设计的思路为:1.先将a,b进行比较,将二者之中的较小者放入变量a中,较大者放入c中,这样a中就是a,b中较小数。2.再将变量a与变量c进行比较,将a,c中的较小者放到a中,较大者放到b中,这样,变量a中存放的就一定是三个数中的最小数。3.最后将b和c进行比较,将二者之中较小者放入变量b中,较大者放入变量c中,就完成了对三个数的升序排序。也就是说,对三个数进行排序,需要进行3次比较。对三个数进行升序排序程序流程图输入a>bNYb>cN输出a>cNYYa与b交换a与c交换b与c交换对三个数进行升序排序main(){inta,b,c,t;scanf("%d,%d,%d",&a,&b,&c);if(a>b)

{t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(b>c){t=b;b=c;c=t;}printf("%d,%d,%d\n",a,b,c);}想一想,3个if语句是嵌套关系呢还是3个独立的单边结构?想一想,如果要对4个数进行排序,需要比较多少次?5个数呢?运行程序

例6从三个数中找出最大的数在三个数a,b,c中找出最大数的程序设计的思路为:先将a,b进行比较,将二者之中的大数放入变量a中,小数放入b中,这样a中就是a,b中的最大数。再将变量a与变量c进行比较,将a,c中的大数放到a中,小数放到c中,这样,变量a中存放的就一定是三个数中的最大数。从三个数中找出最大数的程序main(){inta,b,c,t;scanf("%d,%d,%d",&a,&b,&c);printf("%d,%d,%d\n",a,b,c);if(a>b)

{t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}printf("%d\n",a);}运行程序例7输入一个份,打印出该月有几天(switch)main(){intmonth,day;scanf("%d",&month);switch(month){case2:day=28;break;case4:case6:case9:case11:day=30;break;default:day=31;}printf("month=%d,day=%d\n",month,day);}运行程序输入一个份,打印出该月有几天(多层)main(){intmonth,day;scanf("%d",&month);if(month==2)day=28;elseif(month<=7)

day=(month%2==0)?30:31;elseday=(month%2==0)?31:30;printf("month=%d,day=%d\n",month,day);}运行程序航空公司收费标准如下:旅游旺季(5,7~10月份):购票20张(含)以上:优惠率15%

购票20张以下:优惠率5%旅游淡季(1~4,6,11~12月份):购票20张(含)以上:优惠率30%

购票20张以下:优惠率20%请编写一程序,根据月份和订票数量,

计算购票优惠率。例8航空公司收费标准航空公司收费优惠率计算程序main(){intmonth,n;floatc;scanf("%d%d",&month,&n);if(month>=5&&month<=10&&month!=6)if(n>=20)c=15;elsec=5;else

if(n>=20)c=30;elsec=20;printf("month=%d,n=%d,c=%.2f\n",month,n,c/100);}运行程序航空公司收费优惠率计算程序(if)main(){intmonth,n;floatc;scanf("%d%d",&month,&n);if(month>=7&&month<=10||month==6)if(n>=20)c=15;elsec=5;else

if(n>=20)c=30;elsec=20;printf("month=%d,n=%d,c=%.2f\n",month,n,c/100);}航空公司收费优惠率计算程序(switch)main(){intmonth,n;floatc;scanf("%d%d",&month,&n);switch(month){case5:case7:case8:case9:case10:if(n>=20)c=15;elsec=5;break;default:if(n>=20)c=30;elsec=20;}

printf("month=%d,n=%d,c=%.2f\n",month,n,c/100);}运行程序航空公司收费优惠率计算程序(switch)main(){intmonth,n;floatc;scanf("%d%d",&month,&n);if(n>=20)k=1;elsek=0;switch(k){case0:if(month>=7&&month<=10||month==5)c=5;elsec=20;break;default:if(month>=7&&month<=10||month==5)c=15;elsec=30;}

printf("month=%d,n=%d,c=%.2f\n",month,n,c/100);}在屏幕上输出大写字母A,写出尽可能多的方法printf("A");putchar('A');putchar(65);c='A';putchar(c);c='A';printf("%c",c);printf("%c",'A');printf("%c",65);例9计算分段函数的值

0x=0x0≦x<20

20≦x<100x2

其它y=

求分段函数的值:计算分段函数的程序#include<math.h>main(){intx;floaty;printf("Pleaseenterx:");scanf("%d",&x);if(x==0)y=0;elseif(x>=0&&x<20)y=x;elseif(x>=20&&x<100)y=sqrt((int)x);elsey=x*x;printf("x=%d,y=%f\n",x,y);}#include<math.h>main(){intx;floaty;printf("Pleaseenterx:");scanf("%d",&x);if(x==0)y=0;elseif(x<20)y=x;elseif(x<100)y=sqrt((int)x);elsey=x*x;printf("x=%d,y=%f\n",x,y);}计算分段函数的程序例10计算个人所得税main(){intx,t;floattax;printf("Pleaseentersalary:");scanf("%d",&x);t=(x-1)/400;switch(t){case0:case1:tax=0;case2:tax=(x-800)*0.05;case3:case4:tax=(1200-800)*0.05+(x-1200)*0.10;default:

tax=(1200-800)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论