语言选择结构_第1页
语言选择结构_第2页
语言选择结构_第3页
语言选择结构_第4页
语言选择结构_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

语言选择结构(优选)语言第章选择结构if语句实现选择结构switch语句实现选择结构程序综合举例第3章(续)选择结构if语句实现选择结构if语句实现选择结构的举例if语句的一般形式嵌套的if语句用if语句实现选择结构举例#include<stdio.h>intmain(){inta,b,max; printf("pleaseenteraandb:"); scanf("%d,%d",&a,&b); if(a>=b)max=a; if(b>a)max=b; printf("max=%d\n",max);

return0;}max=a真假abmax=b真假b>apleaseenteraandb:67,95↙max=95if(a>=b)max=a;elsemax=b;

【例】输入两个整数a和b,输出其中较大值。

简单if语句(不含else)if(表达式)语句段

如:if(x>y)printf(”x>y”);if语句实现的选择结构语句段非0(真)表达式0(假)单分支结构【例】出门带伞问题,如果下雨,带伞后出门,否则直接出门。编程模拟。是否下雨是否带上雨伞出门#include<stdio.h>intmain(){intflag;//标志位,取1或0scanf(“%d”,&flag);if(flag==1)printf(“下雨带伞”);printf(“出门”);return0;}【例】检查一辆车的行驶速度,如果速度超过120km/h或低于40km/h,则发出警告。输入车牌号和速度速度≥120提示太快速度>120速度<40提示太慢是是否否#include<stdio.h>#defineHIGHLIMIT120#defineLOWLIMIT40intmain(){intidnum;doublespeed;printf(“请输入车牌号和速度:”);scanf(“%d%lf”,&idnum,&speed);if(speed>HIGHLIMIT)printf(“car%distoofast.”,idnum);if(speed<LOWLIMIT)printf(“car%distooslow.”,idnum);return0;}运行结果:请输入车牌号和速度:100250.7↙car100istoofast.运行结果:请输入车牌号和速度:11030↙car110istooslow.if语句实例

【例】输入a,b,c,求三个数中的最大数。算法设计:输入a,b,c将a,b,c中任一数作为max,如max=a;max依次与b,c比较,若有比max大的,对max重新赋值#include<stdio.h>intmain(){inta,b,c,max;scanf(“%d%d%d”,&a,&b,&c);max=a;//此处赋值可以用任意整数吗?if(max<b)max=b;if(max<c)max=c;printf(“max=%d”,max);return0;}【例】输入3个整数a,b,c,要求按由小到大的顺序输出。解题思路:若a>b,a和b对换

(a是a、b中的小者)若a>c,a和c对换

(a是三者中最小者)若b>c,b和c对换

(b是三者中次小者)输出a,b,c的值输入a,b,ca>b?交换a和b真假a>c?交换a和c真假b>c?真假交换b和c输出a,b,c实例流程图#include<stdio.h>intmain(){inta,b,c,t;printf("pleaseentera,b,c:");scanf("%d,%d,%d",&a,&b,&c);if(a>b){t=a;a=b;b=t;}/*实现ab互换*/if(a>c){t=a;a=c;c=t;}/*实现ac互换*/if(b>c){t=b;b=c;c=t;}/*实现bc互换*/printf("%d,%d,%d\n",a,b,c);return0;}pleaseentera,b,c:25,9,16↙9,16,25不借助中间变量的交换:a=a+b;b=a-b;a=a-b;if-else语句if(表达式)语句段1

else

语句段2if(x>y)printf(”x>y”);elseprintf(”x<y”);语句段2非0表达式0语句段1if语句实现的选择结构双分支结构注意c语言书写形式比较自由:可写在一行,也可写在多行。一般为了提高可读性,特别是语句较多时,会分多行书写,还会有缩进,以体现语句结构。单行书写多行书写有缩进if(a>b)max=a;elsemax=b;if(a>b)max=a;elsemax=b;if(a>b)max=a;elsemax=b;推荐写法,这样层次结构更清晰

【例】上完体育课,如果是上午最后一节课,下课后去食堂吃饭,否则进教室上课。上完体育课最后一节课是否到食堂吃饭进教室上课#include<stdio.h>intmain(){intflag;//非0为真;0为假scanf(“%d”,&flag);if(flag!=0)printf(“食堂吃饭”);elseprintf(“进教室上课”);return0;}if语句的使用说明if(a==b&&x==y)/*逻辑表达式*/printf(”a=b,x=y”);

if后面的表达式,一般为逻辑表达式或关系表达式,也可以是一个变量、常量或函数调用。if(1)printf(”O.K.”);/*表达式为常量*/if(a)printf(”%d”,a);/*表达式为变量*/if(isprime(a))…/*表达式为函数调用*/if语句的使用说明if(x>0)printf(”%f”,x);elseprintf(”%f”,-x);

if语句各子句若仅有一条语句,则每个内嵌语句遇分号结束。若内嵌语句包含多个语句时,必须用花括号“{}”括起来形成一个复合语句。if(a>b){t=a;a=b;b=t;}建议:内嵌语句无论一条或多条,都用“{}”括起来。if语句的使用说明if(x>0)printf(”%f”,x);elseprintf(”%f”,-x);

else子句不能单独使用,必须与if配对使用常见错误:

if(x>0);printf(“%f”,x);

if(x>0)printf(“x>0”);else(x<0)printf(“x<0”);x>0?输出x真假if语句的使用说明判断某数是偶数还是奇数。方法一:if(x%2==0)printf(“%d是偶数”,x);elseprintf(“%d是奇数”,x);方法二:if(x%2==0)printf(“%d是偶数”,x);if(x%2==1)printf(“%d是奇数”,x);比较两种结构,一样吗?哪种更好?if语句实例

【例】输入三角形的边长,

求三角形的面积。算法及流程图:输入三角形的边长;判断能够组成三角形,如是则继续,否则,输出提示“不构成三角形”;利用海伦公式求面积;输出三角形的面积;输入边长构成三角形?真海伦公式计算三角形面积输出面积输出提示结束假#include<stdio.h>#include<math.h>intmain(){doublea,b,c,s,area;printf("pleaseentera,b,c:");scanf("%lf,%lf,%lf",&a,&b,&c);if(a+b>c&&b+c>a&&c+a>b)/*能构成三角形*/{s=0.5*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));printf("area=%6.2f\n",area);}elseprintf(“Itisnotatriangle.\n”);/*不能构成三角形*/

return0;}pleaseentera,b,c:2,3,4↙area=2.90pleaseentera,b,c:2,3,6↙Itisnotatriangle.【例】输入实数x,求分段函数的值:#include<stdio.h>intmain(){floatx,y;//此处不能定义floatf(x)printf("请输入x:");scanf("%f",&x);if(x<0)y=2*x+1;elsey=2*x-1;printf("f(%.2f)=%.2f\n",x,y);return0;}请输入x:2↙f(2.00)=3.001.if(n>0)printf("%f",n)elseprintf("%f",-n);判一判:哪个表述正确?2.if(n>0){n=n+m;printf("%f",n);}elseprintf("%f",-n);3.if(n>0){n=n+m;printf("%f",n);};elseprintf("%f",-n);4.if(n>0)n=n+m;printf("%f",n);elseprintf("%f",-n);正确嵌套的if语句if语句中可以又包括另一个if语句,称为if语句的嵌套一般形式:if(){if()语句1}else{if()语句3}内嵌ifif或else子句中嵌套不具有else的if语句嵌套的if语句if()if()语句1else语句2elseif()语句3else语句4内嵌ifif或else子句中嵌套具有else的if语句嵌套的if语句

多层嵌套if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3elseif(表达式4)语句4

…else语句nif(expr1)if(expr2)statement1elsestatement2elseif(expr3)statement3elsestatement4内嵌if内嵌ifif(expr1)if(expr2)statement1elsestatement2内嵌ifif(expr1){if(expr2)statement1}elsestatement2

内嵌ifif(expr1)statement1elseif(expr2)statement2elsestatement3内嵌if嵌套的if语句嵌套的if语句【例】y=-1+2*xx>0真假y=-1+3*xy=-1输出yx<0真假输入x【例】分段函数(方法一)#include<stdio.h>intmain(){intx,y;printf(“inputx:”);

scanf(“%d”,&x);

if(x>0)y=-1+3*x;

elseif(x<0)

y=-1+2*x;

elsey=-1;printf(“y=%d\n“,y);

return0;}第一次运行:inputx:15↙y=44第二次运行:inputx:-1↙y=-3第三次运行:inputx:0↙y=-1#include<stdio.h>intmain(){intx,y;printf(“inputx:”);

scanf(“%d”,&x);

if(x>=0)if(x>0)

y=-1+3*x;elsey=-1;

elsey=-1+2*x;printf(“y=%d\n“,y);

return0;}方法二if-else的匹配规则:缺省{}时,else总是和它上面离它最近的未配对的if配对。if(……)if(……)if(……)else…...else…...else…...if(n>6)if(n<12)printf(“6<n<12”);elseprintf(“n<=6”);if(n>6){if(n<12)printf(“6<n<12”);}elseprintf(“n<=6”);

#inclde<stdio.h>main(){intx;scanf(“%d”,&x);if(x>0){printf(“Xispositive.”);x=x+1;}elseprintf(“Xisnegative.”);}缩进缩进缩进【例】促销时对购买货物多的顾客有优惠:凡买50件以上的优惠5%,买100件以上的优惠7.5%,买300件以上的优惠10%,买500件以上的优惠15%。输入购买的数量和单价,输出应付货款。嵌套的if语句if(number>=50&&number<100)

cost=0.05;if(number>=100&&number<300)cost=0.075;if(number>=300&&number<500)cost=0.1;if(number>=500)cost=0.15;方法一:注意存在问题:对于每个number,程序都要进行区间的判断,效率不高;折扣15%真假件数500件数300真假折扣10%件数100真假折扣7.5%件数50真假折扣5%无折扣嵌套的if语句方法二:N-S图#include<stdio.h>#include<math.h>intmain(){intnumber;doublecost,price,total;printf(“enternumberandprice:");scanf("%d,%lf",&number,&price);if(number>=500)cost=0.15;elseif(number>=300)cost=0.10;elseif(number>=100)cost=0.075;elseif(number>=50)cost=0.05;elsecost=0;total=number*price*(1-cost);printf(“Total=%10.2f\n”,total);

return0;}enternumberandprice:512,821.5↙Total=357516.80if(number>=500)cost=0.15;elseif(number>=300)cost=0.10;elseif(number>=100)cost=0.075;elseif(number>=50)cost=0.05;elsecost=0;【例】判定学生成绩,实现从键盘输入一个百分制的成绩,输出相应的等级,优([90,100])、良([80,90))、中等([70,80))、及格([60,70))、差([0,60))。intmain(){intscore;printf(“inputscores:\n”);scanf(“%d”,&score);if(score<0||score>100)printf(“error\n”);elseif(score<60)printf(“差\n”);elseif(score<70)printf(“及格\n”);elseif(score<80)printf(“中等\n”);elseif(score<90)printf(“良\n”);elseprintf(“优\n”);return0;}switch语句实现的选择结构多分支可以使用嵌套的if语句处理,但如果分支较多,嵌套的if层数增多,程序冗长,降低了可读性。C语言提供switch语句直接处理多分支问题。switch语句实现的选择结构switch语句的一般形式:switch(表达式){case常量表达式1:语句1case常量表达式2:语句2

┇case常量表达式n:语句n[default:语句n+1]}如:switch(n){case2:f=a+b;break;case4:f=a-b;break;case6:f=a*b;break;case8:f=a/b;break;default:printf(“error");}开关表达式说明:switch后的表达式的值必须是整型、字符型或枚举型。case后的表达式又称为分支标号,它是常量表达式,不允许包含变量和表达式,且每个常量表达式的值不能相同。每个case代表一个分支,可包含多个语句,且不必加{}多个case可共用一组执行语句switch后的表达式找到相匹配的case后,并以此标号为入口,顺序执行后续的程序,直到遇到break语句为止。default是可选项,代表所有case标号之外的那些标号,可出现在语句体中任何位置上。

如:case‘A’:case‘B’:case‘C’:printf(“score>60\n”);break;switch语句实现的选择结构

允许:case3+4:但不允许:

x=3;y=4;…casex+y:【例】执行下列程序段,当分别输入A、C时,求k的值。charc;intk=2;c=getchar();//输入单字符switch(c-’A’)

{case0:k++;case1:k+=2;break;default:k*=k;case4:k*=3;}printf(“k=%d”,k);运行1:A↙k=5运行2:C↙k=12grade输出A90-10080-89输出B输出C输出D输出E60-69<60switch语句实现的选择结构70-79switch(grade/10){case10:case9:printf(”A\n”);case8:printf(”B\n”);case7:printf(”C\n”);case6:printf(”D\n”);default:printf(”E\n”);}break;break;break;break;switch语句实现的选择结构switch语句实现的选择结构【例】:输入一个数字,如果该数字是1~7,则分别输出星期一~星期日的英文单词,否则,提示输出错误。#include<stdio.h>intmain(){intday;printf(“Inputintegernumber:");scanf("%d",&day);switch(day){case1:printf("Monday\n");case2:printf("Tuesday\n");case3:printf("Wednesday\n");case4:printf("Thursday\n");case5:printf("Friday\n");case6:printf("Saturday\n");case7:printf("Sunday\n");default:printf("error\n");}return0;}运行结果:Inputintegernumber:6↙SaturdaySundayerror//修改后程序switch(day){case1:printf("Monday\n");break;case2:printf("Tuesday\n");break;……case6:printf("Saturday\n");break;case7:printf("Sunday\n");break;default:printf("error\n");}【例】输入一个字符,如果是Y或y,N或n,则分别输出相应提示,如果是其他字母则输出其它提示。#include<stdio.h>intmain(){charch;printf(“pleaseinputacharacter:”);scanf(“%c”,&ch);//也可以用ch=getchar()switch(ch){case‘y’:case‘Y’:printf(“thisisYory”);break;case‘n’:case‘N’:printf(“thisisNorn”);break;default:printf(“thisisotherchar.”);}return0;}嵌套的switch结构intmain(){inti=1,j=2;switch(i)//嵌套的switch结构{case1:printf("case1inouter\n");case2:printf("case2inouter\n");switch(j)

{case1:printf("case1ininner\n"); case2:printf("case2ininner\n"); }case3:printf("case3inouter\n");}return0;}运行结果:case1inoutercase2inoutercase2ininnercase3inouterif和switch结构的比较switch语句只能对等值进行测试,若测试值涉及某个较大的范围,if语句适用。

switch语句只能对整型数进行测试,如果对浮点数进行测试,需要if语句。若测试一个整型变量取几个不同值的情况,则用switch语句结构比较简明。2f\n",x,y);y=-1+3*x;elsey=-1;elseif(score<90)printf(“良\n”);printf(“4.elseleap=1;//能被4整除,不能被100整除if(表达式)语句段【例】输入实数x,求分段函数的值:y=-1+2*x;式,也可以是一个变量、常量或函数调用。return0;scanf("%lf%c%lf",&a,&oper,&b);┇┇┇doublecost,price,total;printf(“k=%d”,k);程序综合举例【例】编写程序,判断某年是否为闰年。解题思路:闰年判定:①能被4整除但不能被100整除;②能被400整除;可以设定标志位leap,若是闰年,则leap=1;否则leap=0;#include<stdio.h>intmain() {intyear,leap;/*leap为标志变量*/printf("enteryear:");scanf("%d",&year);if(year%4==0)//能被4整除if(year%100==0) if(year%400==0)leap=1;elseleap=0; //能被100整除,不能被400整除elseleap=1;//能被4整除,不能被100整除elseleap=0;if(leap)printf("%disaleapyear.",year);elseprintf("%disnotleapyear.",year);}if(year%4!=0)leap=0;elseif(year%100!=0)leap=1;elseif(year%400!=0)leap=0;else

leap=1;if((year%4==0&&year%100!=0)||(year%400==0))leap=1;elseleap=0;case1:printf("Monday\n");if(b>c){intidnum;scanf(“%d%lf”,&idnum,&speed);printf("pleaseentera,b,c:");}intmain()elseif(score<90)printf(“良\n”);简单if语句(不含else)if(number>=100&&number<300)printf(“error\n”);case‘Y’:printf(“thisisYory”);break;#include<stdio.if语句中可以又包括另一个if语句,称为if语句的嵌套case9:printf(”A\n”);程序综合举例【例】编写程序,实现四则运算的简单计算器功能。如输入10+5,则输出10+5=15#include<stdio.h>intmain(){doublea,b,c;charoper;//定义操作符

printf("输入a、运算符和b:\n");scanf("%lf%c%lf",&a,&oper,&b);switch(oper){case'+':c=a+b;break;case'-':c=a-b;break;case'*':c=a*b;break;case'/':if(fabs(b)>0.001)c=a/b;break;}printf("%.1f%c%.1f=%.1f",a,oper,b,c);return0;}运行结果:输入a、运算符和b:2.0+3.0↙2.0+3.0=5.0【例】运输公司对用户计算运费,运输距离越远,单位运费越低。

标准如下:

s<250没有折扣250≤s<5002%折扣500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣程序综合举例设每吨每千米货物的基本运费为p,货物重为w,距离为s,折扣为d总运费f的计算公式为f=p×w×s×(1-d)01234567891011#include<stdio.h>intmain(){ints;doublep,w,d,f;printf("请输入单价、重量和距离:");scanf("%lf,%lf,%d",&p,&w,&s);switch(s/250){case0:d=0;break;case1:d=2;break;case2:case3:

温馨提示

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

评论

0/150

提交评论