判断与决策选择程序设计2

上传人:痛*** 文档编号:230950778 上传时间:2023-08-29 格式:PPT 页数:53 大小:391KB
收藏 版权申诉 举报 下载
判断与决策选择程序设计2_第1页
第1页 / 共53页
判断与决策选择程序设计2_第2页
第2页 / 共53页
判断与决策选择程序设计2_第3页
第3页 / 共53页
资源描述:

《判断与决策选择程序设计2》由会员分享,可在线阅读,更多相关《判断与决策选择程序设计2(53页珍藏版)》请在装配图网上搜索。

1、高级语言程序设计高级语言程序设计选择程序设计(选择程序设计(2)1复习复习n1 判断条件的形式:通常是用关系表达式判断条件的形式:通常是用关系表达式n2 判断条件的结果:逻辑真判断条件的结果:逻辑真 1、逻辑假、逻辑假 0n3 实际上除了关系表达式之外,实际上除了关系表达式之外,任何有计算结果任何有计算结果的表达式都可以作为的表达式都可以作为判断条件判断条件,计算结果不为零,计算结果不为零的数均转化为逻辑真,计算结果为的数均转化为逻辑真,计算结果为0即为逻辑假即为逻辑假n 算术表达式算术表达式n 函数调用表达式函数调用表达式n4甚至是简单的变量或常量都可以甚至是简单的变量或常量都可以n 2选择

2、结构的两种形式:选择结构的两种形式:n if(condition)n n if(condition)n n elsen 3注意大括号的使用注意大括号的使用 n复合语句块用复合语句块用 括起来括起来n if()n n .多条语句复合到一起多条语句复合到一起n .n n一条语句的时候省略一条语句的时候省略 4问题问题3:按成绩把学生分成多组按成绩把学生分成多组n问题描述:教师要把参加某次测验的学问题描述:教师要把参加某次测验的学生按成绩的分数段(生按成绩的分数段(90以上,以上,80到到89,70到到79,60到到69,小于,小于60)分成多组,)分成多组,并统计出各组的人数。并统计出各组的人数。

3、5分析分析n输入输入:学生成绩学生成绩graden输出输出:根据成绩的范围,输出不同的结果根据成绩的范围,输出不同的结果 A,B,C,D,或者,或者F,和统计结果,和统计结果 n 如何判断如何判断grade所在的范围?所在的范围?n 90以上,以上,80到到89,70到到79,60到到69,小于,小于60n if(grade=90)n 但是但是 if(89=grade=60)n if(grade=60)nif(grade=60)n if(grade=60)nn if(grade=90)n printf(“good!in group An”);nelsen if(grade=80)n print

4、f(“better!in groupn”);n elsen printf(“ok,in C or D or Fn”);12更好的写法更好的写法nif(grade=90)n printf(“good!in group An”);nelse if(grade=80)n printf(“better!in groupn”);nelsen printf(“ok,in C or D or Fn”);13注意:注意:n多个多个if-else嵌套,嵌套,if else的匹配原则是:的匹配原则是:else与前面最近的没有被使用的与前面最近的没有被使用的if匹配匹配1415算法设计(算法设计(1)1 求和变量求

5、和变量aNum,bNum,cNum,dNum,fNum初始化初始化为为0;2 输入学生成绩;输入学生成绩;3 如果输入没有结束则执行如果输入没有结束则执行(4)否则执行否则执行(9);4 如果成绩大于或等于如果成绩大于或等于90,输出分到,输出分到A组信息,组信息,aNum加加1,返返回到(回到(2););5 否则如果成绩还大于或等于否则如果成绩还大于或等于80,输出分到,输出分到B组信息,组信息,bNum加加1,返回到(返回到(2);6 否则如果成绩还大于或等于否则如果成绩还大于或等于70,输出分到,输出分到C组信息,组信息,cNum加加1,返回到(返回到(2);7 否则如果成绩还大于或等于

6、否则如果成绩还大于或等于60,输出分到,输出分到D组信息,组信息,dNum加加1,返回到(返回到(2);8 否则输出分到否则输出分到F组信息,组信息,fNum加加1,返回到(返回到(2);9 输出统计结果输出统计结果16n算法实现算法实现 见见ifelsenest.c17n#includenint main(void)nn int aNum=0,bNum=0,cNum=0,dNum=0,fNum=0;n int grade;n while(scanf(%d,&grade)!=EOF)n n if(grade=90)n printf(Good!you belong in group An);n

7、aNum=aNum+1;n n else if(grade=80)n printf(Better!you belong in group Bn);n bNum=bNum+1;n n else if(grade=70)n printf(Middle!you belong in group Cn);n cNum=cNum+1;n n else if(grade=60)n printf(Pass!you belong in group Dn);n dNum=dNum+1;n n else n printf(Sorry,you are failed,belong in group Fn);n fNum

8、=fNum+1;n n n printf(aNum=%dn,aNum);n printf(bNum=%dn,bNum);n printf(cNum=%dn,cNum);n printf(dNum=%dn,dNum);n printf(FNum=%dn,fNum);n return 0;n18分析一下该算法的执行情况分析一下该算法的执行情况n你可以运行算法你可以运行算法1的代码,看看每个学生的代码,看看每个学生成绩要判断几次才能找到它适合的位置。成绩要判断几次才能找到它适合的位置。n如果成绩都是如果成绩都是90以上会怎样?以上会怎样?n如果成绩都是如果成绩都是60、70分甚至更低会怎么分甚至更低

9、会怎么样?样?n正常情况下学生的成绩处于中游的比较正常情况下学生的成绩处于中游的比较多,即大多数都在多,即大多数都在70和和80之间,之间,符合客符合客观实际的、更好的结构应该是什么?观实际的、更好的结构应该是什么?1920n算法实现算法实现 见见ifelsebetter.c21重新分析一下问题重新分析一下问题n如果把成绩除以如果把成绩除以10取整,可以发现,取整,可以发现,100分对应分对应10,90到到99分对应分对应9,80到到89分对应分对应8,依此类推,依此类推,0到到9分的对应分的对应0 n依据整型常量依据整型常量10,9,8,7,6,5,4,3,2,1,0 可断定该同学应该分到哪

10、一组可断定该同学应该分到哪一组 22算法设计(算法设计(2)1 求和变量求和变量aNum,bNum,cNum,dNum,fNum初始化为初始化为0;2 输入学生成绩输入学生成绩grade;3 如果如果grade大于大于100或小于或小于0,输出错误信息,返回到(,输出错误信息,返回到(2););4 如果输入没有结束则执行如果输入没有结束则执行(5)否则执行否则执行(12)5 把成绩除以把成绩除以10并取整,得到对应的整型值并取整,得到对应的整型值number6 如果如果number是是10或或9,输出,输出A组信息,组信息,aNum加加1,返回(,返回(2););7 如果如果number是是

11、8,输出,输出B组信息,组信息,bNum加加1,返回到(,返回到(2););8 如果如果number是是7,输出,输出C组信息,组信息,cNum加加1,返回到(,返回到(2););9 如果如果number是是6,输出,输出D组信息,组信息,dNum加加1,返回到(,返回到(2););10如果如果number是是5或或4或或3或或2或或1或或0,输出,输出F组信息,组信息,fNum加加1,返回到(,返回到(2););11 如果如果number是其它数字,输出错误信息,返回到(是其它数字,输出错误信息,返回到(2););12 输出统计结果。输出统计结果。23switch case 多分支选择结构多

12、分支选择结构n switch(整型表达式)(整型表达式)n case 常量表达式常量表达式:n 要执行的语句要执行的语句n break;n case常量表达式常量表达式:n 要执行的语句要执行的语句n break;n n default:n 默认的执行语句默认的执行语句n n 24几个组成部分几个组成部分 nswitch(表达式表达式)必须是整型值的表达式必须是整型值的表达式 nswitch的主体用一对花括号括起的主体用一对花括号括起 n多个平行的多个平行的 case 常量表达式常量表达式:n每个每个case 里的要执行的语句可以是多条语句,里的要执行的语句可以是多条语句,它们不必使用它们不必

13、使用括起来。也可以没有语句括起来。也可以没有语句n在整个在整个swith主体的最后是一个可选的主体的最后是一个可选的default:25动作Case 1 breakCase 2Case ndefault26n算法实现(算法实现(switch case)n见见 switchint.c275分制成绩统计问题分制成绩统计问题输入的学生成绩是输入的学生成绩是 A/a,B/b,n成绩是一个字符成绩是一个字符 怎么输入字符呢?字符是什么?怎么输入字符呢?字符是什么?n字符可以看成整数(字符可以看成整数(ascii码)码)n如何判断输入的是什么字符?如何判断输入的是什么字符?2829字符型字符型n char

14、 n char c1,c2,c3;n c1=A;n c2=b;n c3=1;n 30n也可以用整型变量存放字符常量,如也可以用整型变量存放字符常量,如n int grade1,grade2;n grade1=A;n grade2=B;n计算机内部接受的是计算机内部接受的是 A,B的的ASCII码。码。31字符比较字符比较n两个字符常量或者存放字符常量的变量两个字符常量或者存放字符常量的变量可以比较大小可以比较大小nascii码进行比较码进行比较32字符型数据的输入字符型数据的输入n可以使用可以使用scanf和和printf函数对字符型数函数对字符型数据进行输入和输出,占位符是据进行输入和输出,

15、占位符是%c。3334nASCII码是码是10的字符是回车符。这说明的字符是回车符。这说明我们输入了一个字符我们输入了一个字符a后输入的回车后输入的回车符被变量符被变量a第二次读到了。第二次读到了。n这个回车符是没有用的,因此用一个临这个回车符是没有用的,因此用一个临时变量时变量t把从输入缓冲区中读出。下例的把从输入缓冲区中读出。下例的scanf(“%d”,&t)就起这个作用。就起这个作用。3536键盘读一个字符的函数键盘读一个字符的函数n getchar()n n a=getchar();代替代替scanf(“%c”,&a);n getchar();代替代替 scanf(“%c”,&t);3

16、7输出一个字符到屏幕的函数输出一个字符到屏幕的函数n putchar(a);n代替代替n printf(“%c”,a);38 算法设计(算法设计(3)1 求和变量求和变量aNum,bNum,cNum,dNum,fNum初始化为初始化为0;2 输入学生成绩输入学生成绩grade;3 如果输入没有结束则执行如果输入没有结束则执行(4)否则执行否则执行(10);4 如果如果grade是是A,输出输出A组信息,组信息,aNum加加1,返回到(,返回到(2););5 如果如果grade是是B,输出输出B组信息,组信息,bNum加加1,返回到(,返回到(2););6 如果如果grade是是C,输出输出C组

17、信息,组信息,cNum加加1,返回到(,返回到(2););7 如果如果grade是是D,输出输出D组信息,组信息,dNum加加1,返回到(,返回到(2););8 如果如果grade是是F,输出输出F组信息,组信息,fNum加加1,返回到(,返回到(2););9 如果如果grade是其它字符,输出错误信息,返回到(是其它字符,输出错误信息,返回到(2););10 输出统计结果。输出统计结果。39n算法实现算法实现 见见switch5grade.c40从键盘获得一个字符的另外两个函数从键盘获得一个字符的另外两个函数n#includengetche(),它能接收键盘输入的任意一个字符,它能接收键盘输

18、入的任意一个字符,无无需回车即可以接受需回车即可以接受,自动的显示到屏幕上,称之为,自动的显示到屏幕上,称之为回回显显。ngetch(),它同,它同getche()不同的就是不同的就是无回显无回显。n这两个与这两个与getchar()比较,比较,getchar()需要按回车需要按回车键键,变量才能在输入缓冲区中读到一个字符,变量才能在输入缓冲区中读到一个字符,无回显。无回显。41n演示三种字符输入函数演示三种字符输入函数n观察它们的区别观察它们的区别42问题问题4:判断某年是否为闰年:判断某年是否为闰年n问题分析:问题分析:n 判断某年是不是闰年的条件判断某年是不是闰年的条件“某年能被某年能被

19、4整除但不整除但不能被能被100整除整除或者或者能被能被4整除又能被整除又能被400整除整除”n某年是闰年的条件为某年是闰年的条件为n(1)“year能被能被4整除整除”并且并且“year不能被不能被100整除整除”n或者或者n(2)“year能被能被4整除整除”并且并且“year也能被也能被400整除整除”43并且关系并且关系的两个判断如何表示?的两个判断如何表示?nint pass=0;nint grade1,grade2;n scanf(“%d%d”,&grade1,&grade2);n如果如果 grade1=60 且且 grade2=60 pass=1n用嵌套用嵌套 44或关系或关系的

20、两个判断如何表示?的两个判断如何表示?nint nopass=0;nint grade1,grade2;n scanf(“%d%d”,&grade1,&grade2);n如果如果 grade1 60 或者或者 grade2=60)&(grade2=60)n逻辑与的优先级低于关系运算,可以省略逻辑与的优先级低于关系运算,可以省略()n 上式等价于上式等价于grade1=60&grade2=60 n(grade1 60)|(grade2 60)n逻辑或的优先级低于关系运算,可以省略逻辑或的优先级低于关系运算,可以省略();n 上式等价于上式等价于 grade1 60|grade2=90)n逻辑非是

21、单目运算,它的优先级高于关系运算,因此不可以省逻辑非是单目运算,它的优先级高于关系运算,因此不可以省略略()47优先级与结合性优先级与结合性n算术运算算术运算关系运算关系运算逻辑与运算逻辑与运算逻辑逻辑或运算或运算,它们依次降低,它们依次降低,n但逻辑非运算的优先级高于算术运算但逻辑非运算的优先级高于算术运算n逻辑运算是左结合的逻辑运算是左结合的48逻辑运算的逻辑运算的短路性短路性n逻辑运算的操作数是逻辑运算的操作数是0和和1,0和和1的运算是有规律的的运算是有规律的n 由由“逻辑与逻辑与”运算组成的表达式,运算组成的表达式,从左至右计算,从左至右计算,遇遇到到0就不用再向右计算了就不用再向右

22、计算了,因这时逻辑表达式的值必为,因这时逻辑表达式的值必为假,只有都是真的时候向右计算才有意义。假,只有都是真的时候向右计算才有意义。n(i!=0)&(j/i 0)n由由“逻辑或逻辑或”构成的逻辑表达式也是从左向右计算,构成的逻辑表达式也是从左向右计算,如果如果遇到有一个操作数的表达式的值是遇到有一个操作数的表达式的值是1就不用再向右就不用再向右计算了,计算了,因这时整个逻辑表达式的值必为真。因这时整个逻辑表达式的值必为真。n(grade1 60)|(grade2 60)49利用短路性利用短路性n某年是闰年的条件为某年是闰年的条件为n(1)“year能被能被4整除整除”并且并且“year不能被

23、不能被100整除整除”n或者或者n(2)“year能被能被4整除整除”并且并且“year也能被也能被400整除整除”n闰年判断表达式为:闰年判断表达式为:(year%4=0&year%100!=0)|year%400=0 50算法设计算法设计n1 输入年份输入年份n2 判断判断(year%4=0&year%100!=0)|year%400=0 是否为真,如果为真输出是闰年是否为真,如果为真输出是闰年51n实现(略)实现(略)52小结小结n 有了算术运算、关系运算、逻辑运算可有了算术运算、关系运算、逻辑运算可以表达各种各样的以表达各种各样的逻辑判断条件逻辑判断条件,n使用单分支或双分支或者多分支结构以使用单分支或双分支或者多分支结构以及嵌套技术可以解决各种各样的逻辑判及嵌套技术可以解决各种各样的逻辑判断问题断问题53

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!