选择结构程序设计(C语句)_第1页
选择结构程序设计(C语句)_第2页
选择结构程序设计(C语句)_第3页
选择结构程序设计(C语句)_第4页
选择结构程序设计(C语句)_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

第5章选择结构程序设计§5.1关系运算符和关系表达式§5.2逻辑运算符和逻辑表达式§5.3if语句§5.4switch语句§5.5

程序举例§5.1关系运算符和关系表达式关系运算实际上是比较运算,两个值进行比较,判断比较的结果是否符合给定的条件,如果符合比较的结果为真,否则结果为假。用将两个表达式(可以是算术表达式、关系表达式、逻辑表达式、赋值表达式、字符表达式)连接起来的式子叫。关系运算符与其它运算符的。关系运算符关系表达式优先次序§5.2逻辑运算符和逻辑表达式用将关系表达式或逻辑量连接起来就是。逻辑运算符与其它运算符的。在逻辑表达式的求解中,并不是所有的逻辑运算都被执行.优先次序逻辑运算符逻辑表达式§5.3if语句①

if(表达式)语句if语句是用来判定所给定的条件是否满足,根据判定的结果(真或假)决定执行给出的两种操作之一.if语句的三种形式:>③if(表达式1)语句1

elseif(表达式2)语句2

elseif(表达式3)语句3

......

elseif(表达式n)语句n

else

语句n+1②

if(表达式)语句1else

语句2>>if语句的嵌套if()

if()语句1

else语句2

else

if()语句3

else语句4if()

if()语句1

else

if()语句2

else语句3

内嵌if内嵌if内嵌ifif()

{if()语句1}

else

{if()语句2

else语句3

}

-1(x<0)

例如y=0(x=0)

1(x>0)1.main(

)

{intx,y;scanf("%d",&x);

if(x<0)y=-1;

elseif(x==0)y=0;

elsey=1;

printf("x=%d,y=%d\n",x,y);}2.

if(x>=0)

if(x>0)y=1;

elsey=0;

elsey=-1;x>=0y=-1x>0y=1y=0

x<0Y=-1

X==0Y=0Y=1真假真假真真假假{3.y=-1;if(x!=0)

if(x>0)y=1;elsey=0;真真假假x>0y=1y=0x>=0y=-14.y=0;

if(x>=0)

if(x>0)y=1;

elsey=-1;真真假假x>0y=1y=-1X!=0y=0真真假假x>0y=1y=-1x!=0y=0y=-1真假假x>0y=1y=0x>=0真5.3.3条件运算符?:表达式1?

表达式2:表达式3

条件表达式max=(a>b)?a:b相当于

if(a>b)max=a;elsemax=b;说明:条件运算符的执行顺序条件运算符的优先级别,仅高于赋值运算条件运算符的结合方向为右结合性条件表达式不能取代一般if语句条件表达式中的表达式类型可以不同

§5.4switch语句switch语句是多分支选择语句

switch

(grade)

{case

'A':printf("85~100\n");

case

'B':printf("70~84\n");

case

'C':printf("60~79\n");

case

'D':printf("<60\n");

default

:printf("error\n");

}表达式常量表达式执行语句改为switch(grade)

{case'A':printf("85~100\n");break;

case'B':printf("70~84\n");break;

case'C':printf("60~79\n");break;

case'D':printf("<60\n");break;

default:printf("error\n");

}§5.5程序举例例5.5main(){intyear,leap;scanf("%d",&year);if(year%4==0){if(year%100==0){if(year%400==0)leap=1;elseleap=0;}elseleap=1;}elseleap=0;if(leap)

printf("%dis",year);else

printf("%disnot",year);printf("aleapyear.\n");}Year被4整除YNYear被100整除YNYNYear被400整除leap=1leap=0leap=1leap=0leapYN输出闰年输出非闰年例5.7计算运费s<250km没有折扣250<=s<5002%折扣500<=s<10005%折扣1000<=s<20008%折扣2000<=s<300010%折扣3000<=s15%折扣p(price),w(weight),s(distance),d(discount)f=p*w*s*(1-d)c=s/250c<1无折扣1<=c<22%2<=c<45%4<=c<88%8<=c<1210%c>1215%2501000200030002%5%8%10%15%0例5.7main(){intc,s,d;floatp,w,t,f;scanf("%f%f%d",&p,&w,&s);if(s>=3000)c=12;elsec=s/250;switch(c){case0:d=0;break;case1:d=2;break;case2:case3:d=5;break;case4:case5:

case6:case7:d=8;break;case8:case9:case10:case11:d=10;break;case12:d=15;break;}f=p*w*s*(1-d/100.0);printf("freight=%15.4f",f);}x1=x2=b2-4ac=0a=0YN输出"非二次方程输出两相等实根-b/2ab2-4ac>0YN实部p=虚部q=输出两个实根输出两个复根p+qip-qiNYY例5.6解一元二次方程#include<math.h>main(){floata,b,c,d,disc,x1,x2,realpart,imagpart;

scanf("%f,%f,%f",&a,&b,&c);

printf("Theequation");if(fabs(a)<=1e-6)printf("isnotaquadratic");else{disc=b*b-4*a*c;

if(fabs(disc)<=1e-6)

printf("hastwoequalroots:%8.4\n",-b/(2*a));

elseif(disc>1e-6){x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);

printf("hasdistinctrealroots:%8.4fand%8.4f\n",x1,x2);}

else{realpart=-b/(2*a);

imagpart=sqrt(-disc)/(2*a);

printf("hascomplexroots:\n");

printf(%8.4f+%8.4fi\n",realpart,imagpart);

printf(%8.4f+%8.4fi\n",realpart,imagpart);}}}第5章结束C语言提供六种关系运算符①<小于②<=小于等于③>大于④>=大于等于⑤==等于⑥!=不等于双目运算,左结合性.如:a>b,(a+b)>(b+c),(a=3)>(b=5),(a>b)>ca>b>c,赋值表达式:x=a>by=a>b>c关系表达式的值是一个逻辑值,即真或假。运算时以1代表真,以0代表假。的值为真,表达式的值为1的值为真,表达式的值为1,的值为假,表达式的值为0,例如:若a=3,b=2,c=1,则a>b(a>b)==cb+c<a优先次序:1.前四种的优先级相同,后两种的优先级相同,且前高后低.2.关系运算符低于算术运算符.3.关系运算符高于赋值运算符.如:c>a+b算术运算符高

a>b!=ca==b<c关系运算符

a=b>c

赋值运算符低①&&和¦¦是双目运算符,!是单目运算符.如:(a>b)&&(x>y)

(a>b)

¦¦(x>y)

!(a>b)②左结合性.逻辑运算符:&&

逻辑与

¦¦

逻辑或

!逻辑非如:!a&&b¦¦x>y&&c等效((!a)&&b)¦¦((x>y)&&c)

(a>b)&&(x>y)等效

a>b&&x>y(a==b)¦¦(x==y)等效a==b¦¦x==y(!a)¦¦(a>b)等效!a¦¦a>b

!(非)

高算术运算符关系运算符&&¦¦

赋值运算符

低优先次序如图所示:逻辑表达式逻辑表达式的值应该是一个逻辑量"真"或"假",以数值"1"或"0"表示.而在判断一个量是否为"真"时,以"0"代表假,以非"0"代表真.如:若a=4,则!a等于0

若a=4,b=5,则a&&b等于1

若a=0,b=5,则a¦¦

b等于1

若a=4,b=5,则!a¦¦

b等于14&&0¦¦

2,等于15>3&&2¦¦

8<4-!0,值等于1a&&b&&c只有前一个量非0时,才需要判断

下一个量.a¦¦b¦¦c只要前一个量为真,就不必判断下一个量.a=1,b=2,c=3,d=4m=1,n=1;(m=a>b)&&(n=c>d)n的值不是0,仍为1满足下列一个条件即为闰年:①能被4整除,不能被100整除②能被4整除,又能被400整除.(year%4==0&&year%100!=0)¦¦year%400==0!((year%4==0&&year%100!=0)¦¦year%400==0)(year%4!=0)¦¦(year%100==0&&year%400!=0)打印万年历

内容:

地球绕太阳一周的时间是365天5小时46秒,为了使一年的天数为整数,将一年的天数定为365天,余下的时间积累起来,四年就是23小时15分4秒,将近一天,把这一天加在某年的二月而成29天,该年称为闰年,其它年称为平年。但四年加一天又多用了44分56秒,这个数积满400年为三天。因此400年中只能有97个闰年,所以凡能被400整除,或不能被100整除但能被4整除的年份为闰年。已知2000年1月1日为星期六,请输入任一年的年份后,打印该年的年历.

要求:

1、年份标题用字母组合成大字;

2、每行输出二或三个月,月份可输出在月历之上,或之左;

示例如下:

$$$$$$$$$$$$$$$$$$$$$$$$

$$$$$$$$

$$$$$$$$

$$$$$$$$$$$$$$$$$$$$$$$$$

12

------------------------------------------------------

sunmon

tuewedthu

frisatsunmon

tuewedthu

frisat

------------------------------------------------------

112345

23456786789101112

910111213141513141516171819

1617181920212220212223242526

23242526272829272829

3031

例如:if(x>y)printf("%d",x);

这种if语句的执行过程见图:可以是一个语句也可以是复合语句一般为逻辑表达式或关系表达式.理论上可以是任意数值类型if(a)printf("Hello,world");x>yprint("%d",x);假真例如:if(x>y)printf("%d",x);elseprintf("%d",y);x>yprintf("%d",x);printf("%d",y)真假注意注意比较两个数,先大后小的输出例如:开始输入两个数a>bt=a;a=b;b=t输出a,b结束真假开始输入三个数a>ba>cb>ca=ba=c输出a结束a=c假真真假真假输出三个数中最大的:表达式1条件表达式取表达式2的值条件表达式取表达式3的值真(非0)假(0)高于赋值运算符。低于关系运算符和逻辑运算符max=(a>b)?a:b可以写成

max=a>b?a:b

有a>b?a:b+1相当于

a>b?a:(b+1)而不是(a>b?a:b)+1有自右至左a>b?a:c>d?c:d

相当于

a>b?a:(c>d?c:d)

而不是

(a>b?a:c)>d?c:d

若a=1;b=2;c=3;d=4;

求表达式的值不能替代如:if(a>=b)max=a;elsemin=b;if(a>=b)max=a;else

printf("变量a不是最大");可替代如:if(a>b)printf("%d",a);

elseprintf("%d",b);替代为:

p

温馨提示

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

最新文档

评论

0/150

提交评论