资源描述
路漫漫其悠远路漫漫其悠远少壮不努力,老大徒悲伤少壮不努力,老大徒悲伤少壮不努力,老大徒悲伤少壮不努力,老大徒悲伤2024/7/31高级语言程序设计课件高级语言程序设计课件路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂复习复习n1 判断条件的形式:通常是用关系表达式判断条件的形式:通常是用关系表达式n2 判断条件的结果:逻辑真判断条件的结果:逻辑真 1、逻辑假、逻辑假 0n3 实际上除了关系表达式之外,实际上除了关系表达式之外,任何有计算结果任何有计算结果的表达式都可以作为的表达式都可以作为判断条件判断条件,计算结果不为零,计算结果不为零的数均转化为逻辑真,计算结果为的数均转化为逻辑真,计算结果为0即为逻辑假即为逻辑假n 算术表达式算术表达式n 函数调用表达式函数调用表达式n4甚至是简单的变量或常量都可以甚至是简单的变量或常量都可以n 路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂选择结构的两种形式:选择结构的两种形式:n if(condition)n n if(condition)n n elsen 路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂注意大括号的使用注意大括号的使用 n复合语句块用复合语句块用 括起来括起来n if()n n .多条语句复合到一起多条语句复合到一起n .n n一条语句的时候省略一条语句的时候省略 路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂问题问题3:按成绩把学生分成多组按成绩把学生分成多组n问题描述:教师要把参加某次测验的学问题描述:教师要把参加某次测验的学生按成绩的分数段(生按成绩的分数段(90以上,以上,80到到89,70到到79,60到到69,小于,小于60)分成多组,)分成多组,并统计出各组的人数。并统计出各组的人数。路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂分析分析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 printf(“better!in groupn”);n elsen printf(“ok,in C or D or Fn”);路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂更好的写法更好的写法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”);路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂注意:注意:n多个多个if-else嵌套,嵌套,if else的匹配原则是:的匹配原则是:else与前面最近的没有被使用的与前面最近的没有被使用的if匹配匹配路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂 n 路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂算法设计(算法设计(1)1 求和变量求和变量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 否则如果成绩还大于或等于否则如果成绩还大于或等于60,输出分到,输出分到D组信息,组信息,dNum加加1,返回到(返回到(2);8 否则输出分到否则输出分到F组信息,组信息,fNum加加1,返回到(返回到(2);9 输出统计结果输出统计结果路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂n算法实现算法实现 见见ifelsenest.c路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂 n#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 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=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;n路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂分析一下该算法的执行情况分析一下该算法的执行情况n你可以运行算法你可以运行算法1的代码,看看每个学生的代码,看看每个学生成绩要判断几次才能找到它适合的位置。成绩要判断几次才能找到它适合的位置。n如果成绩都是如果成绩都是90以上会怎样?以上会怎样?n如果成绩都是如果成绩都是60、70分甚至更低会怎么分甚至更低会怎么样?样?n正常情况下学生的成绩处于中游的比较正常情况下学生的成绩处于中游的比较多,即大多数都在多,即大多数都在70和和80之间,之间,符合客符合客观实际的、更好的结构应该是什么?观实际的、更好的结构应该是什么?路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂 n 路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂n算法实现算法实现 见见ifelsebetter.c路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂重新分析一下问题重新分析一下问题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 可断定该同学应该分到哪一组可断定该同学应该分到哪一组 路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂算法设计(算法设计(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是是 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 输出统计结果。输出统计结果。路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂switch case 多分支选择结构多分支选择结构n switch(整型表达式)(整型表达式)n case 常量表达式常量表达式:n 要执行的语句要执行的语句n break;n case常量表达式常量表达式:n 要执行的语句要执行的语句n break;n n default:n 默认的执行语句默认的执行语句n n 路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂几个组成部分几个组成部分 nswitch(表达式表达式)必须是整型值的表达式必须是整型值的表达式 nswitch的主体用一对花括号括起的主体用一对花括号括起 n多个平行的多个平行的 case 常量表达式常量表达式:n每个每个case 里的要执行的语句可以是多条语句,里的要执行的语句可以是多条语句,它们不必使用它们不必使用括起来。也可以没有语句括起来。也可以没有语句n在整个在整个swith主体的最后是一个可选的主体的最后是一个可选的default:路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂 动作Case 1 breakCase 2Case ndefault路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂n算法实现(算法实现(switch case)n见见 switchint.c路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂5分制成绩统计问题分制成绩统计问题输入的学生成绩是输入的学生成绩是 A/a,B/b,n成绩是一个字符成绩是一个字符 怎么输入字符呢?字符是什么?怎么输入字符呢?字符是什么?n字符可以看成整数(字符可以看成整数(ascii码)码)n如何判断输入的是什么字符?如何判断输入的是什么字符?路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂字符型字符型n char n char c1,c2,c3;n c1=A;n c2=b;n c3=1;n 路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂n也可以用整型变量存放字符常量,如也可以用整型变量存放字符常量,如n int grade1,grade2;n grade1=A;n grade2=B;n计算机内部接受的是计算机内部接受的是 A,B的的ASCII码。码。路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂字符比较字符比较n两个字符常量或者存放字符常量的变量两个字符常量或者存放字符常量的变量可以比较大小可以比较大小nascii码进行比较码进行比较路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂字符型数据的输入字符型数据的输入n可以使用可以使用scanf和和printf函数对字符型数函数对字符型数据进行输入和输出,占位符是据进行输入和输出,占位符是%c。路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂nASCII码是码是10的字符是回车符。这说明的字符是回车符。这说明我们输入了一个字符我们输入了一个字符a后输入的回车符后输入的回车符被变量被变量a第二次读到了。第二次读到了。n这个回车符是没有用的,因此用一个临这个回车符是没有用的,因此用一个临时变量时变量t把从输入缓冲区中读出。下例的把从输入缓冲区中读出。下例的scanf(“%d”,&t)就起这个作用。就起这个作用。路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂键盘读一个字符的函数键盘读一个字符的函数n getchar()n n a=getchar();代替代替scanf(“%c”,&a);n getchar();代替代替 scanf(“%c”,&t);路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂输出一个字符到屏幕的函数输出一个字符到屏幕的函数n putchar(a);n代替代替n printf(“%c”,a);路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂 算法设计(算法设计(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组信息,组信息,cNum加加1,返回到(,返回到(2););7 如果如果grade是是D,输出输出D组信息,组信息,dNum加加1,返回到(,返回到(2););8 如果如果grade是是F,输出输出F组信息,组信息,fNum加加1,返回到(,返回到(2););9 如果如果grade是其它字符,输出错误信息,返回到(是其它字符,输出错误信息,返回到(2););10 输出统计结果。输出统计结果。路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂n算法实现算法实现 见见switch5grade.c路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂从键盘获得一个字符的另外两个函数从键盘获得一个字符的另外两个函数n#includengetche(),它能接收键盘输入的任意一个字符,它能接收键盘输入的任意一个字符,无无需回车即可以接受需回车即可以接受,自动的显示到屏幕上,称之为,自动的显示到屏幕上,称之为回回显显。ngetch(),它同,它同getche()不同的就是不同的就是无回显无回显。n这两个与这两个与getchar()比较,比较,getchar()需要按回车需要按回车键键,变量才能在输入缓冲区中读到一个字符,变量才能在输入缓冲区中读到一个字符,无回显。无回显。路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂n演示三种字符输入函数演示三种字符输入函数n观察它们的区别观察它们的区别路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂问题问题4:判断某年是否为闰年:判断某年是否为闰年n问题分析:问题分析:n 判断某年是不是闰年的条件判断某年是不是闰年的条件“某年能被某年能被4整除但不整除但不能被能被100整除整除或者或者能被能被4整除又能被整除又能被400整除整除”n某年是闰年的条件为某年是闰年的条件为n(1)“year能被能被4整除整除”并且并且“year不能被不能被100整除整除”n或者或者n(2)“year能被能被4整除整除”并且并且“year也能被也能被400整除整除”路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂并且关系并且关系的两个判断如何表示?的两个判断如何表示?nint pass=0;nint grade1,grade2;n scanf(“%d%d”,&grade1,&grade2);n如果如果 grade1=60 且且 grade2=60 pass=1n用嵌套用嵌套 路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂或关系或关系的两个判断如何表示?的两个判断如何表示?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逻辑非是单目运算,它的优先级高于关系运算,因此不可以省逻辑非是单目运算,它的优先级高于关系运算,因此不可以省略略()路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂优先级与结合性优先级与结合性n算术运算算术运算关系运算关系运算逻辑与运算逻辑与运算逻辑逻辑或运算或运算,它们依次降低,它们依次降低,n但逻辑非运算的优先级高于算术运算但逻辑非运算的优先级高于算术运算n逻辑运算是左结合的逻辑运算是左结合的路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂逻辑运算的逻辑运算的短路性短路性n逻辑运算的操作数是逻辑运算的操作数是0和和1,0和和1的运算是有规律的的运算是有规律的n 由由“逻辑与逻辑与”运算组成的表达式,运算组成的表达式,从左至右计算,从左至右计算,遇到遇到0就不用再向右计算了就不用再向右计算了,因这时逻辑表达式的值必为假,因这时逻辑表达式的值必为假,只有都是真的时候向右计算才有意义。只有都是真的时候向右计算才有意义。n(i!=0)&(j/i 0)n由由“逻辑或逻辑或”构成的逻辑表达式也是从左向右计算,如构成的逻辑表达式也是从左向右计算,如果果遇到有一个操作数的表达式的值是遇到有一个操作数的表达式的值是1就不用再向右计就不用再向右计算了,算了,因这时整个逻辑表达式的值必为真。因这时整个逻辑表达式的值必为真。n(grade1 60)|(grade2 60)路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂利用短路性利用短路性n某年是闰年的条件为某年是闰年的条件为n(1)“year能被能被4整除整除”并且并且“year不能被不能被100整除整除”n或者或者n(2)“year能被能被4整除整除”并且并且“year也能被也能被400整除整除”n闰年判断表达式为:闰年判断表达式为:(year%4=0&year%100!=0)|year%400=0 路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂算法设计算法设计n1 输入年份输入年份n2 判断判断(year%4=0&year%100!=0)|year%400=0 是否为真,如果为真输出是闰是否为真,如果为真输出是闰年年路漫漫其悠远路漫漫其悠远锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂锲而不舍,金石可镂n实现(略)实现(略)
展开阅读全文