项目二输入学生成绩转化为等级项目要求一个班进行了一次考试,教师打的是百分制成绩,现在学校要求打五级制,即90~100分的转变为A,80~89的转变为B,70~79的转变为C,60~69的转变为D,60以下的转变为E。项目分析要完成对成绩的转换输出,第一步必须要对输入的成绩是否合法作一个判断,因为是百分制,所以0-100分都是合法的,此范围外输入的成绩是有问题的;第二步对输入的合法成绩转换成相应的等级。因此,将这个项目分解成二个任务来完成。任务一是输入学生成绩,判断其合法性;任务二是输入学生成绩转化为等级。任务1输入学生成绩,判断其合法性一、问题情景输入一个学生的成绩,判断它是否合法(成绩采用百分制)。分析:程序流程图:方法一:首先判断输入的成绩是否在1到100之间,是的话输出提示信息“输入成绩合法”;再判断输入的成绩是否在0到100以外,是的话输出提示信息“输入的成绩不合法”。二、具体实现方法一:参考程序:#includestdio.hmain(){floatx;printf(请输入一个学生成绩);scanf(%f,&x);if(x=0&&x=100)printf(输入成绩合法\n);if(x0||x100)printf(输入成绩不合法\n);}二、具体实现方法二:参考程序:#includestdio.hmain(){floatx;printf(请输入一个学生成绩);scanf(%f,&x);if(x=0&&x=100)printf(输入成绩合法);elseprintf(输入成绩不合法);}方法二:判断输入的成绩是否在0到100之间,是的话输出提示信息“输入成绩合法”;否则的话输出提示信息“输入的成绩不合法”。程序流程图本任务知识点:1、关系运算符与关系表达式2、逻辑运算符与逻辑表达式3、if和ifelse语句三、相关知识(一)关系运算符与关系表达式1.关系运算符及优先级(小于)(大于)=(小于或等于)=(大于或等于)==(等于)!=(不等于)优先级相同(高)优先级相同(低)(1)前4种运算符(,=,,=)优先级相同,后两种也相同。前4种高于后2种。(2)关系运算符的优先级低于算术运算符。(3)关系运算符的优先级高于赋值运算符。2.关系表达式用关系运算符将两个表达式连接起来的式子,称为关系表达式。例如:ab,a!=b,a+ba+c,’a’’b’关系表达式的值是一个逻辑值,即“真”或“假”,在C语言中用整数数值1代表“真”,以整数数值0代表“假”。【例如】若a=1,b=4,则:(1)ab的值为0。因为a=1,b=4,所以ab的值为假,即表达式ab的值为0。(2)a!=b的值为1。(3)a==b=0的值为1。因为“=”优先级比“==”的优先级要高,所以b=0先做,结果为1;再做==运算符,a==1成立,所以整个表达式的值为1。(4)b=0==a的值为1。三、相关知识(续)特别提示:在C语言中,数值也可以用作判断条件。而且规定:非0值表示条件为“真”,0值表示条件为“假”。见相关示例。(二)逻辑运算符与逻辑表达式1.逻辑运算符及优先级||逻辑或优先级低&&逻辑与!逻辑非优先级高优先级:“!”运算符高于算术运算符,关系运算符高于逻辑运算符ab!a!ba&&ba||b真真假假真真真假假真假真假真真假假真假假真真假假其中“&&”相当于而且,要求有两个运算量。“||”相当于或者,要求有两个运算量。“!”相当于否定。逻辑运算符的“真值表”2.逻辑表达式逻辑表达式的值是一个逻辑值,即“真”或“假”,C语言编译系统在给出运算结果中,以数值1代表“真”,以0代表“假”,但在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”。在C语言中一共只有4个0,分别是:0(整数0)、0.0(实数0)、‘\0’(字符0)和NULL(符号常量0)。【例如】若a=2,b=4,则a&&b的值为1。因为a,b的值均为非0,被认为是“真”,因此a&&b的值为“真”,表达式a&&b的值为1。若x=5,则x=0&&x10的值为1。因为“=”和“”的优先级比“&&”的优先级高,先算x=0和x10表达式,结果都为1,而1&&1的结果为1,因此x=0&&x10的值为1。若x=5,则x=0&&x3的值为0,表达式x=0的结果为1,表达式x3的结果为0,1&&0的结果为0。若x=5,则x=0||x3的值为1,因为1||0的结果为1。若x=5,则!(x=0||x3)的值为0。(三)条件语句1.单分支语句【语法】if(表达式)语句组/*表达式值为非0时,执行语句组,为0时,不执行语句组*/【流程图】【例如】若a=3,b=4,c=5,1)则执行语句if(ab)c=a;后c的值为5,因为ab不成立,则表达式的值为0,不执行后面的语句c=a,所以c的值不变,还是为5;2)执行语句if(ab)c=a;后c的值为3。3)执行语句if(ab){t=a;a=b;b=t;}后a的值为3,b的值为4;4)执行语句if(ab){t=a;a=b;b=t;}后a的值为4,b的值为3。其中的t=a;a=b;b=t;完成了变量a和b的值的交换,当语句组的语句有1句以上时,要用{}把语句组括起来,注意在{}外面不需要再加分号。因为{}内是一个完整的复合语句,不需要另附加分号。2.双分支语句【语法】if(表达式)语句组1else语句组2/*表达式值为非0时,执行语句组1,为0时,执行语句组2*/【流程图】【例如】若a=3,b=4,c=5,则执行语句if(ab)c=a;elsec=b;后c的值为4。执行语句if(ab)c=a;elsec=b;后c的值为3。同样地,语句组1和语句组2的语句不止一句时,要用{}将语句组括起来,作为一个复合语句。【例如】若a=3,b=4,c=5,执行语句if(ab){t=a;a=b;b=t;}else{t=a;a=c;c=t;}后a、b、c的值分别为4,3,5。【例2-1】输入任意三个整数a、b、c,输出其中最小的数。方法一:用一个变量min来暂时存放所有比较过数中的最小值。第一次将某个数赋给min,然后用min跟没有比较过的数一一进行比较,发现新的数比min的值还小的话,就修改min的值为新比较的数,直到所有的数都比较过为止。参考程序:#includestdio.hmain(){inta,b,c,min;printf(请输入三个数);scanf(%d,%d,%d,&a,&b,&c);min=a;if(minb)min=b;if(minc)min=c;printf(%d,%d,%d中最小的数为%d\n,a,b,c,min);}【例2-1】输入任意三个整数a、b、c,输出其中最小的数。方法二:分析:我们首先将a、b两个数进行比较,把两者中最小的数放到a中,然后用两者中最小的数a跟c进行比较,同样的把两者中最小的数放到a中,最后a中的值就是三者中最小的值。参考程序:#includestdio.hmain(){inta,b,c,t;printf(请输入三个数);scanf(%d,%d,%d,&a,&b,&c);if(ab){t=a;a=b;b=t;}if(ac){t=a;a=c;c=t;}printf(%d,%d,%d中最小的数为%d,a,b,c,a);}【例2-2】输入一个年份,判断它是否是闰年。某一年是闰年的条件是:能被4整除并且不能被100整除,或者能被400整除的年份是闰年。写成表达式是year%4==0&&year%100!=0||year%400==0。方法一:先设一个变量t=0,然后判断该年份是否满足闰年的条件,满足的话将t的值修改为1,然后我们可以根据t的值来判断该年是否是闰年,t为0的话不是闰年,t为1的话是闰年。#includestdio.hmain(){intyear,t=0;printf(请输入年份);scanf(%d,&year);if(year%4==0&&year%100!=0||year%400==0)t=1;if(t==0)printf(%d年不是闰年\n,year);if(t==1)printf(%d年是闰年\n,year);}方法二:判断该年份是否满足闰年的条件,满足的话输出是闰年的提示信息,否则输出不是闰年的提示信息。#includestdio.hmain(){intyear,t;printf(请输入年份);scanf(%d,&year);if(year%4==0&&year%100!=0||year%400==0)printf(%d年是闰年\n,year);elseprintf(%d年不是闰年\n,year);}四、知识扩展条件运算符与条件表达式条件运算符为?:条件表达式为表达式1?表达式2:表达式3。当表达式1值为真时,整个表达式的值为表达式2的值,当表达式1值为假时,整个表达式的值为表达式3的值。例如:若a=3,b=4,则表达式ab?a:b的值为4。因为表达式ab的值为0,整个表达式ab?a:b应该是表达式3的值,即b的值。表达式ab?a:b的值实际上是取a、b两者中最大值。若a=3,b=4,c=5,则表达式c(ab?a:b)?c:(ab?a:b)的值为5。这里表达式1是c(ab?a:b),表达式2是c,表达式3是(ab?a:b)。表达式c(ab?a:b)?c:(ab?a:b)的值实际上是取a、b、c三者中最大值。任务2输入学生成绩转化为等级一、问题情景输入一个学生的成绩,若是合法成绩,则输出相应的等级,否则输出不合法的提示信息。方法一:首先判断输入的成绩是否合法,不合法的话,输出“输入的成绩不合法”的提示信息;合法的话再判断成绩是否在90分到100分之间,是的话,将变量y赋好相应的值;同样再判断成绩是否在80分到90分之间,是的话,将变量y赋好相应的值等等。参考程序:#includestdio.hmain(){floatx;chary;printf(请输入1-100内的一个成绩);scanf(%f,&x);if(x=0&&x=100){if(x=90&&x=100)y='A';if(x=80&&x90)y='B';if(x=70&&x80)y='C';if(x=60&&x70)y='D';if(x=0&&x60)y='E';printf(该学生的等级为%c\n,y);}elseprintf(输入的学生成绩不合法\n);}方法二:方法二:首先判断输入的成绩是否合法,不合法的话,输出“输入的成绩不合法”的提示信息;合法的话再判断成绩是否大于等于90分,若是的话,将变量y赋好相应的值;否则再判断成绩是否大于等于80分,是的话,将变量y赋好相应的值;否则再判断成绩是否大于等于70分,是的话,将变量y赋好相应的值等等。#includestdio.hmain(){floatx;chary;printf(请输入1-100内的一个成绩);scanf(%f,&x);if(x=100&&x=0){if(x=90)y='A';elseif(x=80)y='B';elseif(x=70)y='C';elseif(x=60)y='D';elsey='E';printf(该学生的等级为%c\n,y);}elseprintf(输入的学生成绩不合法\n);}方法三:另外我们还可以用switch语句来实现。#includestdio.hmain(){intx,t;chary;printf(请输入1-100内的一个成绩);scanf(%d,&x);t=x/10;switch(t){case10:case9:printf(该学生的等级为A);break;case8:printf(该学生的等级为B);break;case7:printf(该学生的等级为C);break;case6:printf(该学生的等级为D);break;case5:case4:case3:case2:case1:case0:prin