《高级语言程序设计教学课件》第3章选择结构_第1页
《高级语言程序设计教学课件》第3章选择结构_第2页
《高级语言程序设计教学课件》第3章选择结构_第3页
《高级语言程序设计教学课件》第3章选择结构_第4页
《高级语言程序设计教学课件》第3章选择结构_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

1、第三章选择结构,C语言程序设计,2,学习目标,if语句switch语句关系运算与逻辑运算,3,3.1选择结构概述,【例3-1】输入x的值,求分段函数y=f(x)的值,函数表示如下:,if(x0)y=x*x;elsey=0;,4,#includevoidmain(void)intx,y;printf(请输入x的值:);scanf(%d,请输入x的值:0y=0Pressanykeytocontinue,选择结构,5,3.2关系运算与逻辑运算,学习运算符应注意的问题功能运算量要求运算量个数(单目运算符?双目运算符?)要求运算量类型(整型?实型?其它类型?)优先级别(优先级高?优先级低?)结合方向(从

2、左向右?从右向左?)结果的类型,6,3.2.1关系运算,种类:=!=结合方向自左向右优先级别关系表达式的值是逻辑值真或假,用1和0表示,例ca+bab!=ca=bc,例inta=3,b=2,c=1,d,f;ab(ab)=cb+cbf=abc,/*32,结果为1*/*1=1,结果为1*/*b+c=3,a=3,结果为0*/*ab结果为1;d=1*/*f=0*/,c(a+b)(ab)!=ca=(bc),7,注意,应避免对实数作相等或不等的判断注意区分=与=,inta=0,b=1;if(a=b)printf(aequaltob);elseprintf(anotequaltob);,1.0/3.0*3.

3、0=1.0结果为将x=a的判断修改为:|x-a|可改写为:fabs(1.0/3.0*3.0-1.0)=1e-6,/应该为a=b,假,8,【例3-3】x是float型变量,判断x是否等于1/3,#include#includevoidmain(void)floatx;x=1/3.0;if(x=1/3.0)printf(x等于1/3n);elseprintf(x不等于1/3n);,x不等于1/3,x等于1/3,(fabs(x-1/3.0)=1e-6),?,应避免对实数作相等或不等的判断,9,3.2.3逻辑运算,种类:!b=5;!aaprintf(%d,%dn,!x*y,x,-5,02,1,11,0

4、,0,如果表达式x+的逻辑值为1则不用再计算y+因此c=1x=x+1,+x:先执行x=x+1,再将x的值作为表达式+x的值。x+:先将x的值作为表达式x+的值,再执行x=x+1。,如果表达式x+的逻辑值为0则不用再计算y+因此c=0 x=x+1,14,【常用的条件判断表达式】,(1)intx;判断x是偶数:x%2=0;(2)charc;判断c是否为数字:c=0,15,3.3两个分支的if语句,ifelse语句的基本形式格式if(表达式)语句1else语句2执行过程,16,说明:if后面的表达式类型任意语句可以是任意类型的语句,最好使用复合语句,考虑下面程序的输出结果:#includemain(

5、)intx,y;scanf(%d,%d,CompileError!,if(a=b,errorC2181:illegalelsewithoutmatchingif,17,【例3-4】随机输入两个数,输出其中的大数,#includevoidmain(void)inta,b;printf(inputtwonumbers:);scanf(%d%d,inputtwonumbers:033是最大数Pressanykeytocontinue,18,【例3-5】输入三角形的三边的边长,输出三角形的面积,三角形面积公式,19,#include#includevoidmain(void)floata,b,c,p,

6、s;printf(请输入三角形的三边:n);scanf(%f%f%f,三角形三边定理及推论:三角形任意两边之和大于第三边,任意两边之差小于第三边。,顺序结构,20,【例3-5】输入三角形的三边的边长,输出三角形的面积,#include#includevoidmain(void)floata,b,c,p,s;printf(请输入三角形的三边:n);scanf(%f%f%f,请输入三角形的三边:345area=6.000000Pressanykeytocontinue,请输入三角形的三边:123输入数据错误!Pressanykeytocontinue,21,3.4一个分支的语句,if语句格式if(

7、表达式)语句执行过程,22,【例3-6】从键盘上随机的输入三个数,输出最大数,10,62,313456722,23445676,323238,max,a,b,c,max,max,23,【例3-6】从键盘上随机的输入三个数,输出最大数,#includevoidmain(void)inta,b,c,max;printf(输入三个数:);scanf(%d%d%d,输入三个数:3588是最大数Pressanykeytocontinue,24,【例3-7】从键盘上随机的输入三个数,从大到小输出三个数,a,b,c,ifababifacacifbcbcabt=a;a=b;b=t;,A,B,T,25,【例3-

8、7】从键盘上随机的输入三个数,从大到小输出三个数,#includevoidmain(void)inta,b,c,t;printf(输入三个数:);scanf(%d%d%d,输入三个数:3577,5,3Pressanykeytocontinue,26,3.5多个分支的if语句,ifelseif语句的形式if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3else语句n执行过程,27,【例3-8】从键盘上输入一个字符,判断该字符是数字、大写字母、小写字母或其它字符。,ASCII码表09为数字AZ为大写字母az为小写字母,0c948c57AcZ65c90acz97c12

9、2,c=0printf(请输入一个字符:);c=getchar();if(c=0,请输入一个字符:bb是小写字母Pressanykeytocontinue,scanf(“%c”,29,【例3-9】从键盘上输入学生的成绩,输出学生成绩的等级,#includestdio.hvoidmain(void)intscore;printf(请输入学生的成绩:);scanf(%d,请输入学生的成绩:88良好Pressanykeytocontinue,elseif(score=80),思考对于score100和score0的情况,可以认为是输入数据错误。那么程序将如何改写?,30,3.6if语句的嵌套,在if

10、语句中又包含一个或多个if语句,称为if语句嵌套一般形式,if(表达式1)if(表达式2)语句1else语句2elseif(表达式3)语句3else语句4,31,if.else配对原则当缺省时,else总是与前面最近的未配对的if配对,if(exp1)if(exp2)statement1elsestatement2,if(exp1)if(exp2)statement1elsestatement2,if(exp1)if(exp2)statement1elsestatement2,32,y=0;if(b!=0)if(a!=0)y=a/b;elseprintf(数据错误b=0!);,y=0;if(b

11、!=0)if(a!=0)y=a/b;elseprintf(数据错误b=0!);,y=0;if(b!=0)if(a!=0)y=a/b;elseprintf(数据错误b=0!);,计算机理解为,改写为,【例】计算y=a/b的值,33,书写程序的缩进规则,同一级别的语句要对齐else语句应与其配对的if语句垂直对齐。大括号放在单独的一行中,以表明其包含的语句是一个语句块。每行只放一条语句。,34,总结,if语句的语法规则表达式必须用括号括起来通常是逻辑表达式或关系表达式,但也可以是其它任意表达式。非0即为真,0则为假else子句,必须与if配对使用语句可以为五种语句中的任何一种,if(表达式)语句1

12、else语句2,35,If语句常见的编程错误,在不该出现分号的地方加了分号复合语句的花括号后不应再加分号,否则将会画蛇添足对于复合语句,忘记加花括号。,if(xy);printf(xislargerthany.n);,if(ba)t=a;a=b;b=t;,推荐都使用复合语句,36,if(表达式)语句1else语句2,if(表达式)语句,if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3else语句n,if语句格式小结,两个分支一个分支多分支,37,格式执行过程,switch(表达式)caseE1:语句组1;caseE2:语句组2;.caseEn:语句组n;def

13、ault:语句组n+1;,3.7switch语句,default子句可以省略不用,38,要每次只执行一个分支使用break语句,switch(表达式)caseE1:语句组1;break;caseE2:语句组2;break;.caseEn:语句组n;break;default:语句组n+1;break;,39,注意,switch语句的使用规则E1,E2,En是整型或字符型的常量表达式,且值必须互不相同case语句起到标号的作用,必须用break跳出case后可包含多个可执行语句,且不必加switch可嵌套多个case可共用一组执行语句,caseA:caseB:caseC:printf(score

14、=60n);break;.,40,【例3-10】输入数字(1-7),输出对应的英文单词MondaySunday,#includevoidmain(void)inta;printf(inputintegernumber(1-7):);scanf(%d,41,switch(a)case1:printf(Mondayn);case2:printf(Tuesdayn);case3:printf(Wednesdayn);case4:printf(Thursdayn);case5:printf(Fridayn);case6:printf(Saturdayn);case7:printf(Sundayn);d

15、efault:printf(Errorn);,inputintegernumber:5FridaySaturdaySundayError,break;break;break;break;break;break;break;break;,inputintegernumber:5Friday,42,【例3-11】计算器程序。用户输入两个运算数和一个四则运算符,输出计算结果,#include#includevoidmain(void)floata,b;charc;printf(输入表达式:运算数运算数n);scanf(%f%c%f,43,switch(c)case+:printf(%fn,a+b);

16、break;case-:printf(%fn,a-b);break;case*:printf(%fn,a*b);break;case/:if(fabs(b)=1e-6)printf(数据错误,除数不能为0!n);elseprintf(%fn,a/b);break;default:printf(运算符只能是+,-,*,/!n);,输入表达式:运算数运算数3.5+5.69.100000,输入表达式:运算数运算数10%3运算符只能是+,-,*,/!,输入表达式:运算数运算数2.5/0数据错误,除数不能为0!,输入表达式:运算数运算数5/2.52.000000,44,【例3-12】从键盘上输入百分制的

17、学生成绩,输出学生成绩的等级(优秀、良好、中等、及格、不及格),#includevoidmain(void)intscore;printf(请输入学生的成绩:);scanf(%d,/*利用switch语句判断并输出成绩的等级*/,45,if(score=0,方案一:,switch(表达式)caseE1:语句组1;caseE2:语句组2;.caseEn:语句组n;default:语句组n+1;,46,switch(score)case100:case99:case98:case97:case96:case95:case94:case93:case92:case91:case90:printf(优秀n);break;case89:,方案二:,47,最优方案:,if(score=0,case10:printf(优秀n);break;case9:printf(优

温馨提示

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

评论

0/150

提交评论