2010年自考医学类工程心理学复习笔记第4章_第1页
2010年自考医学类工程心理学复习笔记第4章_第2页
2010年自考医学类工程心理学复习笔记第4章_第3页
2010年自考医学类工程心理学复习笔记第4章_第4页
2010年自考医学类工程心理学复习笔记第4章_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

第四章选择结构程序设计,天津工业大学计算机科学与软件学院,主讲:孙连坤slk300,公告,下周二上课改为上机,地点c210,选择结构程序设计,学习的意义,第3章讨论,本章讨论,第5章讨论,在编制程序时,有时并不能保证程序一定执行某些指令,而是要根据一定的外部条件来判断哪些指令要执行。这就是选择结构。程序总是为解决某个实际问题而设计的,而问题往往包含多个方面,不同的情况需要有不同的处理,所以选择结构在我们的实际应用程序中可以说是无处不在,离开了选择结构很多情况将无法处理,因此,正确掌握选择结构程序设计方法对于我们编写实际应用程序尤为重要。,爱我别走,如果你说你不爱我,学习目标,选择结构程序设计,理解选择结构的含义;掌握关系运算符、逻辑运算符和条件运算符的用法;掌握关系运算符、逻辑运算符和条件运算符与其它运算符的优先级关系和结合性;掌握if、switch语句的使用方法。,选择结构程序设计,学习内容,关系运算符、逻辑运算符、条件运算符,关系运算符,关系表达式,用关系运算符连接起来的式子称为关系表达式。关系表达式的一般形式为:表达式关系运算符表达式,关系运算符与关系表达式,关系表达式的值:是逻辑值“真”或“假”,用1和0表示,例inta=3,b=2,c=1,d,f;ab(ab)=cb+cbf=abc,/表达式值1,/表达式值1,/表达式值0,/d=1,/f=0,例如:ca+b等价于:ab!=c等价于:a=bc等价于:a2b|c等价于:,c(a+b),(ab)!=c,a=(bc),(a2)b)|c,已知:a=1;b=2;c=3;问:d=a!=c=abc;的值?,答:d的值为1。等价于:d=(a!=c)=(a78在C中是允许的,值为,0,例a0结果为A100结果为,1,0,例应避免对实数作相等或不等的判断如1.0/3.0*3.0=1.0结果为可改写为:fabs(1.0/3.0*3.0-1.0)=0)?x:-x(c=axy,值为1.5,条件运算符优先于赋值运算符,条件运算符可以嵌套,条件运算符是右结合性,总体上讲,单目运算符都是同等优先级的,具有右结合性,并且优先级比双目运算符和三目运算符都高。三目运算符的优先级比双目运算符要低,但高于赋值运算符和逗号运算符。逗号运算符的优先级最低,其次是赋值运算符。只有单目运算符、赋值运算符和条件运算符具有右结合性,其它运算符都是左结合性。双目运算符中,算术运算符的优先级最高,逻辑运算符的优先级最低。,到现在为止,我们已经学习了30多个运算符。掌握它们的优先级关系特别重要。优先级的记忆规则:,关系运算符、逻辑运算符、条件运算符,运算符的优先级和结合性,详细内容见附录c,选择结构程序设计,学习内容,选择结构程序设计,选择结构程序设计,简单if语句形式,格式:if(表达式)语句;,例如:下面的程序段是输入两个整数,输出其中的大数。inta,b,max;printf(inputtwonumbers:);scanf(%d%d,选择结构程序设计,例如:下面的程序段同样是输出两个整数中的最大数。inta,b;printf(inputtwonumbers:);scanf(%d%d,if_else形式,格式:if(表达式)语句1;else语句2;,选择结构程序设计,if_else_if形式,格式:if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式3)语句3;else语句n;,选择结构程序设计,例如:下面的程序段是判断输入字符的种类。charc;printf(Enteracharacter:);c=getchar();if(c=0,例:体型判断按“体指数”对肥胖程度进行划分:体指数t=w/h2(体重w单位为公斤,身高h单位为米)当t18时,为低体重;当18t25时,为正常体重;当25t27时,为超重体重;当t27时,为肥胖。编程从键盘输入你的身高h和体重w,判断你的体重属于何种类型。,选择结构程序设计,#includemain()floath,w,t;printf(Pleaseenterh,w:);scanf(%f,%f,选择结构程序设计,选择结构程序设计,if语句注意事项,if语句后面的表达式必须用括号括起来。,表达式通常是逻辑表达式或关系表达式,但也可以是其它任何表达式,如赋值表达式等,甚至也可以是一个变量。只要表达式非零时,表达式的值就为真,否则就是假。,if(a=5)语句;/表达式的值永远为非0,所以其后的语句总是要执行的if(b)语句;/等价于if(b!=0)语句;,选择结构程序设计,在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用括起来组成一个复合语句。但要注意的是在之后不能再加分号。,选择结构程序设计,在简单的if语句中(即只有if,没有else),如果在满足条件时执行的是多条语句,原则上应用括起来,但如果没用括起来,尽管不会产生编译错误,但程序的逻辑将出现异常。,运行结果:x4,y2,运行结果:x2,y0,选择结构程序设计,在if语句中,如果表达式是一个判断两个数是否相等的关系表达式,要当心不要将=写成了赋值运算符=。,运行结果:x=0,运行结果:x!=0,选择结构程序设计,if语句嵌套,选择结构程序设计,例输入两数并判断其大小关系,#includevoidmain()intx,y;printf(Enterintegerx,y:);scanf(%d,%d,运行结果:Enterintegerx,y:12,23XYEnterintegerx,y:12,12X=Y,选择结构程序设计,C语言规定,在缺省时,else总是和它上面离它最近的未配对的if配对,if_else配对原则,选择结构程序设计,运行结果:a=0,运行结果:a=1,选择结构程序设计,例:if(a=b)if(b=c)printf(“a=b=c”);elseprintf(“a!=b”);,修改:if(a=b)if(b=c)printf(“a=b=c”);elseprintf(“a!=b”);,实现ifelse正确配对方法:加,选择结构程序设计,例:考虑下面程序输出结果:voidmain()intx=100,a=10,b=20;intv1=5,v2=0;if(a0,有两个不等的实根。b24ac0x1=(-b+sqrt(disc)/(2*a);/求解两个实根x2=(-b-sqrt(disc)/(2*a);printf(“hasdistinctrealroots:%8.4fand%8.4fn”,x1,x2);else/b2-4ac0realpart=-b/(2*a);/求解两个虚根imagpart=aqrt(-disc)/(2*a);printf(“hascomplexroots:n”);printf(“%8.4f+%8.4fin”,realpart,imagpart);printf(“%8.4f-%8.4fin”,realpart,imagpart);,运行结果:1,2,1Theequationhastwoequalroots:1.00001,2,2Theequationhascomplexroots:-1.0000+1.0000i-1.0000-1.0000i2,6,1Theequationhasdistinctrealroots:-0.1771and-2.8229,例4:查询自动售货机中商品的价格假设自动售货机出售4种商品,薯片(crisps)、爆米花(popcorn)、巧克力(chocolate)和可乐(cola),售价分别是每份3.0、2.5、4.0和3.5元。在屏幕上显示以下菜单,用户可以连续查询商品的价格,当查询次数超过5次时,自动退出查询;不到5次时,用户可以选择退出。当用户输入编号14,显示相应商品的价格;输入0,退出查询;输入其他编号,显示价格为0。1Selectcrisps2Selectpopcorn3Selectchocolate4Selectcola0Exit,选择结构程序设计举例,#includevoidmain()intchoice,i;floatprice;for(i=1;i=5;i+)printf(1Selectcrispsn);printf(2Selectpopcornn);printf(3Selectchocolaten);printf(4Selectcolan);printf(0exitn);printf(Enterchoice:);scanf(%d,1Selectcrisps2Selectpopcorn3Selectchocolate4Selectcola0ExitEnterchoice:1price=3.01Selectcrisps2Selectpopcorn3Selectchocolate4Selectcola0ExitEnterchoice:7price=0.01Selectcrisps2Selectpopcorn3Selectchocolate4Selectcola0ExitEnterchoice:0Thanks,选择结构程序设计举例,例5:写一程序,从键盘上输入任意两个数和一运算符(+:加,-:减,*:乘,/:除),计算其运算的结果并输出。,程序设计思路:首先输入两个数和一运算符号,然后根据运算符号来做相应的运算,但是在做除法运算时,应判别除数是否为0,如果为0,运算非法,给出提示信息。如果运算符号不是+、-、*、/则同样是非法的,也应给出提示信息。其它情况,输出运算的结果。,#includevoidmain()floata,b;/存放两个数的变量inttag=0;/运算合法的标志,0-合法,1-非法charch;/运算符变量floatresult;/运算结果变量printf(inputtwonumber:);/提示输入两个数scanf(%f%f,/输入运算符,switch(ch)/根据运算符来进行相关的运算case+:result=a+b;break;/加法运算case-:result=a-b;break;/减法运算case*:result=a*b;break;/乘法运算case/:if(!b)/除法运算,判除数是否为0printf(divisoriszero!n);/显示除数为0tag=1;/置运算非法标志else/除数非0result=a/b;/计算商break;default:printf(illegalarithmeticlablen);/非法的运算符tag=1;/置运算非法标志if(!tag)/运算合法,显示运算结果printf(%.2f%c%.2f=%.2fn,a,ch,b,result);,运行结果:inputtwonumber:2030inputarithmeticlable(+-*/):+20.00+30.00=50.00,例6:已知某公司员工的保底薪水为500,某月所接工程的利润profit(整数)与利润提成的关系如下所示(计量单位:元)。计算员工的当月薪水。,程序设计思路:首先要定义一个变量用来存放员工所接工程的利润;其次提示用户输入员工所接工程的利润,并调用scanf函数接受用户输入员工所接工程的利润;然后根据上表的规则,计算该员工当月的提成比率。最后计算该员工当月的薪水(保底薪水+所接工程的利润*提成比率),并输出结果。,#includevoidmain()longprofit;/所接工程的利润floatratio;/提成比率floatsalary=500;/薪水,初始值为保底薪水500printf(Inputprofit:);/提示输入所接工程的利润scanf(%ld,/输出结果,运行结果:Inputprofit:4000salary=1100.00,方法一:使用if_elseif语句,0.1默认为double型,不进行强制类型转换将产生警告信息!,#includevoidmain()longprofit;/所接工程的利润floatratio;/提成比率floatsalary=500;/薪水,初始值为保底薪水500printf(Inputprofit:);/提示输入所接工程的利润scanf(%ld,/输出结果,运行结果:Inputprofit:4000salary=1100.00,方法二:使用if语句,方法三:使用switch语句,算法设计要点:为使用switch语句,必须将利润profit与提成的关系转换成某些整数与提成的关系。分析本题可知,提成的变化点都是1000的整数倍(1000、2000、5000、),如果将利润profit整除1000,则当:profit1000对应0、11000profit2000对应1、22000profit5000对应2、3、4、55000profit10000对应5、6、7、8、9、1010000profit对应10、11、12、为解决相邻两个区间的重叠问题,最简单的方法就是:利润profit先减1(最小增量),然后再整除1000即可:profit1000对应01000profit2000对应12000profit5000对应2、3、45000profit10000对应5、6、7、8、910000profit对应10、11、12、,#includevoidmain()longprofit;/所接工程的利润intgrade;floatratio;/提成比率floatsalary=500;/薪水,初始值为保底薪水500printf(Inputprofit:);/提示输入所接工程的利润scanf(%ld,/输入所接工程的利润,方法三:使用switch语句,/将利

温馨提示

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

评论

0/150

提交评论