版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章选择结构本章要点关系运算符与关系表达式逻辑运算符与逻辑表达式条件运算符与条件表达式if语句switch语句本章难点if语句的嵌套switch语句的使用
1C语言程序设计教程第2版第5章2C语言程序设计教程第2版第5章5.1关系运算符和关系表达式
6种关系运算符:
①<(小于)②<=(小于或等于)③>(大于)④>=(大于或等于)⑤==(等于)⑥!=(不等于)5.1.1关系运算符优先级相同(高)优先级相同(低)结合性:自左向右3C语言程序设计教程第2版第5章关系运算符的优先次序
与其它运算符优先级的比较:算术运算符关系运算符赋值运算符(高)(低)例如:c=d>a+b等效于:c=(d>(a+b))4C语言程序设计教程第2版第5章1.什么是关系表达式?5.1.2关系表达式如:(a>b)>(b<c)、‘a’<‘b’、x>y、s+f>d2.关系表达式的值运算结果∶逻辑值1——“真”,0——“假”如:设a=3,b=2,c=1求下面关系表达式的值:c>b(a-b)==1b+c<a值为0值为1值为0如果关系运算对象的类型不同,也要先进行类型转换。5C语言程序设计教程第2版第5章关系表达式的应用。 main() { charc=’k’; inti=4,j=2,k=5; floatx=3e+5,y=7.56; printf(“%d,%d\n”,’a’+3<c,-i-2*j>=k+1); printf(“%d,%d\n”,i+j==-3*j,k==j==i+7); printf(“%d,%d\n”,x<y-3,y!=x+5); } 该程序的运行结果为: 1,0 1,1 0,0 1,16C语言程序设计教程第2版第5章5.2逻辑运算符和逻辑表达式
3种逻辑运算符:
①!(逻辑非)②&&(逻辑与)③||(逻辑或)5.2.1逻辑运算符优先级(高)(低)如:!aa为真,则!a为假。a||ba、b之一为真,则a||b为真。a&&ba、b同时为真,则a&&b为真。7C语言程序设计教程第2版第5章与其它运算符优先级的比较:(高)(低)
!
算术运算符
关系运算符
&&和||
赋值运算符例如:c=d>a+b&&a>b等效于:c=((d>(a+b))&&(a>b))8C语言程序设计教程第2版第5章1.什么是逻辑表达式?5.2.2逻辑表达式用逻辑运算符将逻辑运算对象连结起来的式子。如:(a>b)&&(b<c)、!a||a>b2.逻辑表达式的值运算结果∶逻辑值(只有假为0、真为1两种取值)如:5>3&&2||8<4‘b’&&’d’值为1值为1运算对象∶以数值非0为真、0为假9C语言程序设计教程第2版第5章注意事项:(1)代数式不等式0<x<5必须写成(x>0)&&(x<5),而不能直接写成0<x<5。(2)C语言允许直接对数或字符进行逻辑运算。例如!5,结果为0。5&&‘c’,结果为1。因为字符‘c’的ASCII为非0值,非0值与非0值作与运算,结果为真。10C语言程序设计教程第2版第5章5.3选择结构语句单分子选择if(表达式)语句5.3.1if语句执行过程:当表达式的值为“真”(非零)时,执行语句,否则,不执行语句。如:if(x>y)z=x;11C语言程序设计教程第2版第5章2.双分子语句if(表达式)语句1else语句2执行过程:当表达式的值为“真”(非零)时,执行语句1,否则,执行语句2。如:
if(x>y)z=x;
elsez=y;12C语言程序设计教程第2版第5章3.多分子语句if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3:elseif(表达式m)语句melse语句n如:if(grade>=85)level=‘A’;elseif(grade>=70)level=‘B’;elseif(grade>=60)level=‘C’;elselevel=‘D’;13C语言程序设计教程第2版第5章
if语句说明:
⑴if后面的表达式一般为逻辑表达式或关系表达式,也可以是任意数值类型表达式。该语句是合法的:if(3)printf(“ok!”);⑵if语句中的“语句”为一个简单语句或复合语句。
如:下面程序段是否有错?if(x>=0)printf(“Xispositive.”);x++;elseprintf(“Xisnegative.”);if(x>=0){printf(“Xispositive.”);x++;}elseprintf(“Xisnegative.”);14C语言程序设计教程第2版第5章4.if语句的嵌套
在if语句中又包含一个或多个if语句称为if语句的嵌套。一般形式:if(条件1)if(条件2)语句1else语句2elseif(条件3)语句3else语句4内嵌if内嵌if如:if(x>0)if(y>0)printf("x>0,y>0");elseprintf(“x>0,y<=0");elseif(y>0)printf(“x<=0,y>0");elseprintf(“x<=0,y<=0”);15C语言程序设计教程第2版第5章说明:else与if的匹配原则是:一个else应与其之前距离最近且没有与其它else配对的if配对。
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”);16C语言程序设计教程第2版第5章缩排
#inclde<stdio.h>main(){intx;scanf(“%d”,&x);if(x>0){printf(“Xispositive.”);x=x+1;}elseprintf(“Xisnegative.”);}缩进缩进缩进17C语言程序设计教程第2版第5章用if语句实现选择结构举例
-1;x<0例:求y=0;x=0输入x值,输出y值。1;x>0main(){intx,y;scanf("%d",&x);if(x<0)y=-1;elseif(x==0)y=0;elsey=1;printf("x=%dy=%d",x,y);}18C语言程序设计教程第2版第5章例:托运行李计费。用f代表收费,w代表重量,并将它们定义成实型数。则有关系:
w*0.205 (0<=w<=50)f=w*0.313 (50<w<=200)(w-120)*0.413+10*0.23 (w>200)main(){
floatf,m; printf(“inputweight:”); scanf(“%f”,&w); if(w>200) f=(w-120)*0.413+10*0.23; elseif(w>50) f=w*0.313; else f=w*0.205; printf(“w=%f,f=%f\n’,w,f);}19C语言程序设计教程第2版第5章5.3.2条件运算符1.条件运算符与条件表达式条件表达式的一般形式:表达式1?表达式2∶表达式3如:max=(a>b)?a:b;
若a=3,b=2,则max=?如:(a>b)?a:b
目的∶简化if语句。
if(a>b)max=a;elsemax=b;等效于:20C语言程序设计教程第2版第5章条件运算符的优先级:
算数运算符=>关系运算符=>逻辑运算符(除!)赋值运算符<=条件运算符如:x=a+b>c&&c>d?a+b:d等效于:x=((((a+b)>c)&&(c>d))?(a+b):d)条件运算符的结合方向:自右至左
如:a>b?a:c>d?c:d等效于:a>b?a:(c>d?c:d)21C语言程序设计教程第2版第5章2.条件表达式与if语句的比较
当if语句中嵌套的语句是赋值语句,而且两个分支都给同一个变量赋值时,条件表达式能替代if语句
。如下面的写法是错误的:a>0?printf(“abs(a)=%d\n”,a):printf(“abs(a)=%d\n”,(-1)*a);
此语句的本意是:if(a>0)printf(“abs(a)=%d\n”,a);elseprintf(“abs(a)=%d\n”,(-1)*a);可以改写为:printf(“abs(a)=%d\n”,a>0?a:(-1)*a);22C语言程序设计教程第2版第5章例:把输入字符中的小写字符转换成大写并输出
。#include<stdio.h>main(){charch;scanf("%c",&ch);ch=(ch>='a'&&ch<='z')?ch-32:ch;printf(“%c”,ch);}输入数据:b输出结果:B23C语言程序设计教程第2版第5章main(){inta,b,c,t,max;scanf("%d%d%d",&a,&b,&c);t=(a>b)?a:b;max=(t>c)?t:c;printf("max=%d\n",max);}24C语言程序设计教程第2版第5章5.3.3switch语句一般形式:switch(表达式){case常量表达式1:语句序列1[]case常量表达式2:语句序列2[break;]:case常量表达式n:语句序列n[break;][default:语句序列n+1]}此处break用于退出switch语句break;25C语言程序设计教程第2版第5章执行过程:26C语言程序设计教程第2版第5章例如:switch(grade){case‘A’:printf(“85~100”); case’B’:printf(“70~84”); case’C’:printf(“60~69”);case‘D’:printf(“<60”); default:printf(“error”);}若grade=‘A’,输出结果是什么?85~10070~8460~69<60error
27C语言程序设计教程第2版第5章用break语句处理后的程序段:switch(grade){case‘A’:printf(“85~100”);break; case’B’:printf(“70~84”);break; case’C’:printf(“60~69”);break;case‘D’:printf(“<60”);break; default:printf(“error”);}若gread=‘A’,输出结果又是什么?85~10028C语言程序设计教程第2版第5章完整程序:main(){chargrade;printf(“Inputgrade(A,B,C,D):”);scanf(“%c”,&grade);switch(grade){
case‘A’:printf(“85~100”);break;case’B’:printf(“70~84”);break;case’C’:printf(“60~69”);break;case‘D’:printf(“<60”);break;default:printf(“error!”);}}29C语言程序设计教程第2版第5章流程图为:
grade输出“85-100”输出“<60”输出“60-69”输出“error”输出“70-84”30C语言程序设计教程第2版第5章5.3.4标号语句和goto标号语句一般形式:语句标号:语句例如:end:,该标志符就成了语句标号,但标号不能用数值表示,例如:12:,3:,5:都是错误的。标号可以与变量同名。
goto语句一般形式:goto语句标号;
goto语句的作用是使程序改变原来的执行顺序,而跳到指定的语句上执行。例如:gotosd;sd:printf(“thisisacat!\n”);31C语言程序设计教程第2版第5章说明:⑴C语言允许在任何语句前加一个语句标号,作为goto语句的目标。给语句加标号的形式:
语句标号:语句⑵goto语句是一种非结构化语句,结构化程序设计方法不提倡使用goto语句,因为滥用goto语句将使程序流程无规律,可读性差。但也不是绝对禁止使用,只有在能够大大提高程序效率时才使用。且记:不要从循环体外跳到循环体内!32C语言程序设计教程第2版第5章main(){ inti,sum=0; i=1;loop:if(i<100) { sum=sum+1; i++; gotoloop; printf(“%d”,sum); }}一、例用if语句和goto语句构成循环求
1+2+3+……+100。33C语言程序设计教程第2版第5章二、用goto语句和if语句构成循环计算10!并输出结果。
main(){inti=1,sum=1;loop:if(i<=10){sum=sum*i;i++;gotoloop;}printf(“10!=%d\n”,sum);}运行结果:10!=24320本应是:10!=3628800
main(){inti=1;longsum=1;loop:if(i<=10){sum=sum*i;i++;gotoloop;}printf(“10!=%ld\n”,sum);}34C语言程序设计教程第2版第5章5.4选择结构程序设计举例
例1写程序,判断某一年是否闰年。设:leap代表闰年信息,leap=1闰年,leap=0非闰年不能被4整除非闰年被4整除,但不能被100整除闰年被100整除,又能被400整除闰年其他,非闰年非闰年35C语言程序设计教程第2版第5章main(){intyear,leap=0;scanf(“%d”,&year);/*输入年份值*/if((year%4==0&&year%100!=0)||(year%400==0))leap=1;elseleap=0;if(leap==1)printf(“%disleap”,year);elseprintf(“%disnotleap”,year);
}36C语言程序设计教程第2版第5章main(){intyear,leap=0;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==1)printf(“%disleap”,year);elseprintf(“%disnotleap”,year);
}37C语言程序设计教程第2版第5章例已知基本运费、货重,以及路程(s)和折扣的关系标准如下:
s<250km没有折扣250≤s<500%2折扣500≤s<10005%折扣1000≤s<20008%折扣2000≤s<300010%折扣3000≤s15%折扣算法:先按距离的250倍数进行分类,求每类的折扣,再按公式计算。编程序,计算运费。设基本运费p、货物重量w、距离s和折扣d。则总运费的计算公式为:f=p*w*s*(1-d)38C语言程序设计教程第2版第5章250500100020003000s0161412108642折扣的变化点都是250的倍数.c=s/250代表250的倍数。124812c总运费的计算公式为:f=p*w*s*(1-d)39C语言程序设计教程第2版第5章程序为:main(){intc,s;floatp,w,d,f;scanf(“%f,%f,%d”,&p,&w,&s);if(s>=3000)c=12;elsec=s/250;/*按250分类*/switch(c){case0:d=0;break;/*s<250*/case1:d=2;break;/*250≤s<500*/case2:/*500≤s<750*/case3:d=5;break;/*750≤s<1000*/case4:/*1000≤s<1250*/case5:/*1250≤s<1500*/40C语言程序设计教程第2版第5章
case6:/*1500≤s<1750*/
case7:d=8;break;/*1750≤s<2000*/
case8:/*2000≤s<2250*/
case9:/*2250≤s<2500*/
case10:/*2500≤s<2750*/
case11:d=10;break;/*2750≤s<3000*/
case12:d=15;break;/*3000≤s*/
}f=p*w*s*(1-d/100.0);printf(“freight=%15.4f”,f);}运行情况:输入:100,20,300↙
结果:freight=588000.000041C语言程序设计教程第2版第5章若用if语句实现上述功能,程序为:main(){ints;floatp,w,d,f;scanf(“%f,%f,%d”,&p,&w,&s);if(s>=3000)d=15;elseif(s>=2000&&s<3000)d=10;elseif(s>=1000&&s<2000)d=8;elseif(s>=500&&s<1000)d=5;elseif(s>=250&&s<500)d=2;elsed=0;f=p*w*s*(1-d/100.0);printf(“freight=%15.4f”,f);}42C语言程序设计教程第2版第5章例求ax2+bx+c=0方程的解1、a=0,方程不是二次方程2、b2-4ac=0,有两个相等的实根3、b2-4ac>0,有两个不相等的实根4、b2-4ac<0,有两个共轭复根5、如何判断实数为零(或大于零,或小于零)
特殊条件的处理43C语言程序设计教程第2版第5章#include<math.h>main()elseif(disc>1e-6){floata,b,c,d,disc,x1,x2,realpart,imapart;{x1=(-b+sqrt(disc))/(2*a);scanf(“%f,%f,%f”,&a,&b,&c);x2=(-b-sqrt(disc))/(2*a);printf(“Theequation”);}if(fabs(a)<=1e-6)elseprintf(“isnotaquadratic”);{realpart=-b/(2*a);elseimagpart=sqrt(-disc)/(2*a);disc=b*b-4*a*c;printf(“hascomplexroots:\n”);if(fabs(disc)<=1e-6)打印虚根;}}printf(“hastwoequalroots:%7.4f\n”,-b/(2*a));
有问题吗?44C语言程序设计教程第2版第5章习题给一个不多于5位的正整数,要求:①求出它是几位数;②分别打印出每一位数字;③按逆序打印出各位数字,例如原数为321,应输出123。#include<stdio.h>main(){longintnum;intn1,n2,n3,n4,n5,bits;scanf(“%ld”,&num);if(num>9999)bits=5elseif(num>999)bits=4;elseif(num>99)bits=3;elseif(num>9)bits=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖北省黄冈市宝塔中学2026届学业水平考试化学试题模拟卷(十一)含解析
- 2026届山东省临沂市临沭县第五初级中学中考模拟试卷(4)生物试题含解析
- 内蒙古呼和浩特市实验教育集团2026年初三下学期期中试卷化学试题含解析
- 2026年劳动防护用品配备发放与报废标准
- 2026年幸福房来宝等试点产品条款设计与领取方式详解
- 2026年农村集体经营性建设用地入市收益分配机制设计方案
- 2026年北京等地康养机构批量引入第五代大头阿亮机器人
- 2026年可信数据空间架构实现医疗数据资产流通基础
- 2025年临床执业《外科》专项练
- 传媒教育机构行政总监助理如何处理公关问题研究分析报告
- 化工企业安全隐患排查表
- 《地下水数值模拟》课件
- 《所见》课件教学课件
- 设备部年终总结与明年计划
- 2024年医院医德医风管理制度模版(三篇)
- 网络与信息安全管理责任制度
- 分布式光伏经济评价规范
- 中国城市建设史(全套课件)
- 软装窗帘布艺成品工艺生产验收质检标准
- 呼吸慢病管理及策略
- 客运企业安全管理
评论
0/150
提交评论