收藏 分销(赏)

项目二-输入学生成绩转化为等级.ppt

上传人:仙人****88 文档编号:14676730 上传时间:2026-10-28 格式:PPT 页数:26 大小:708KB 下载积分:10 金币
下载 相关
项目二-输入学生成绩转化为等级.ppt_第1页
第1页 / 共26页
项目二-输入学生成绩转化为等级.ppt_第2页
第2页 / 共26页


点击查看更多>>
资源描述
,*,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,项目二 输入学生成绩转化为等级,项目要求,一个班进行了一次考试,教师打的是百分制成绩,现在学校要求打五级制,即,90100,分的转变为,A,,,8089,的转变为,B,,,7079,的转变为,C,,,6069,的转变为,D,,,60,以下的转变为,E,。,项目分析,要完成对成绩的转换输出,第一步必须要对输入的成绩是否合法作一个判断,因为是百分制,所以,0-100,分都是合法的,此范围外输入的成绩是有问题的;第二步对输入的合法成绩转换成相应的等级。因此,将这个项目分解成二个任务来完成。任务一是输入学生成绩,判断其合法性;任务二是输入学生成绩转化为等级。,任务,1,输入学生成绩,判断其合法性,一、问题情景,输入一个学生的成绩,判断它是否合法(成绩采用百分制)。,分析:,程序流程图:,方法一:,首先判断输入的成绩是否在,1,到,100,之间,是的话输出提示信息“输入成绩合法”;再判断输入的成绩是否在,0,到,100,以外,是的话输出提示信息“输入的成绩不合法”。,二、具体实现,方法一:,参考程序:,#include,stdio.h,main(),float x;,printf,(,请输入一个学生成绩,);,scanf(%f,&x,);,if(x,=0&x=0&x=100),printf,(,输入成绩合法,);,else,printf,(,输入成绩不合法,);,方法二:判断输入的成绩是否在,0,到,100,之间,是的话输出提示信息“输入成绩合法”;否则的话输出提示信息“输入的成绩不合法”。,程序流程图,本任务知识点,:,1,、关系运算符与关系表达式,2,、逻辑运算符与逻辑表达式,3,、,if,和,if else,语句,三、相关知识,(一),关系运算符与关系表达式,1.,关系运算符及优先级,(,大于,),=(,大于或等于,),=(,等于,),!=(,不等于,),优先级相同,(,高,),优先级相同,(,低,),(,1,)前,4,种运算符(,,,,,=,)优先级相同,后两种也相同。前,4,种高于后,2,种。,(,2,)关系运算符的优先级低于算术运算符。,(,3,)关系运算符的优先级高于赋值运算符。,2.,关系表达式,用关系运算符将两个表达式连接起来的式子,称为关系表达式。,例如:,ab,,,a!=b,,,a+b,a+c,,,ab,关系表达式的值是一个逻辑值,即“真”或“假”,在,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.,逻辑运算符及优先级,|,逻辑或 优先级低,&,逻辑与,!,逻辑非 优先级高,优先级:“!”运算符高于算术运算符,关系运算符高于逻辑运算符,a,b,!a,!b,a&b,a|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&x=”,和“,=0,和,x=0&x=0&x=0,的结果为,1,,表达式,x=0|x=0|xb)c=a;,后,c,的值为,5,,因为,ab,不成立,则表达式的值为,0,,不执行后面的语句,c=a,,所以,c,的值不变,还是为,5,;,2,)执行语句,if(a,b)t=,a;a,=,b;b,=t;,后,a,的值为,3,b,的值为,4,;,4,)执行语句,if(a,b)c,=a;else c=b;,后,c,的值为,4,。,执行语句,if(a,b)c,=a;else c=b;,后,c,的值为,3,。,同样地,语句组,1,和语句组,2,的语句不止一句时,要用,将语句组括起来,作为一个复合语句。,【,例如,】,若,a=3,b=4,c=5,执行语句,if(a,b),min=b;,if(min,c),min=c;,printf(%d,%d,%d,中最小的数为,%,dn,a,b,c,min,);,【,例,2-1】,输入任意三个整数,a,、,b,、,c,,输出其中最小的数。,方法二:,分析:我们首先将,a,、,b,两个数进行比较,把两者中最小的数放到,a,中,然后用两者中最小的数,a,跟,c,进行比较,同样的把两者中最小的数放到,a,中,最后,a,中的值就是三者中最小的值。,参考程序:,#include,stdio.h,main(),int,a,b,c,t,;,printf,(,请输入三个数,);,scanf(%d,%d,%d,&a,&b,&c,);,if(a,b),t=,a;a,=,b;b,=t;,if(a,c),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,的话是闰年。,#include,stdio.h,main(),int,year,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,);,方法二:判断该年份是否满足闰年的条件,满足的话输出是闰年的提示信息,否则输出不是闰年的提示信息。,#include,stdio.h,main(),int,year,t,;,printf,(,请输入年份,);,scanf(%d,&year,);,if(year%4=0&year%100!=0|year%400=0),printf(%d,年是闰年,n,year,);,else,printf(%d,年不是闰年,n,year,);,四、知识扩展,条件运算符与条件表达式,条件运算符为,?,:,条件表达式为 表达式,1,?表达式,2,:表达式,3,。,当表达式,1,值为真时,整个表达式的值为表达式,2,的值,当表达式,1,值为假时,整个表达式的值为表达式,3,的值。,例如:,若,a=3,,,b=4,,则表达式,a,b?a:b,的值为,4,。,因为表达式,ab,的值为,0,,整个表达式,a,b?a:b,应该是表达式,3,的值,即,b,的值。,表达式,a,b?a:b,的值实际上是取,a,、,b,两者中最大值。,若,a=3,,,b=4,,,c=5,,则表达式,c(a,b?a:b)?c,:(a,b?a:b,),的值为,5,。这里表达式,1,是,c(a,b?a:b,),,表达式,2,是,c,,表达式,3,是,(a,b?a:b,),。表达式,c(a,b?a:b)?c,:(a,b?a:b,),的值实际上是取,a,、,b,、,c,三者中最大值。,任务,2,输入学生成绩转化为等级,一、问题情景,输入一个学生的成绩,若是合法成绩,则输出相应的等级,否则输出不合法的提示信息。,方法一:,首先判断输入的成绩是否合法,不合法的话,输出“输入的成绩不合法”的提示信息;合法的话再判断成绩是否在,90,分到,100,分之间,是的话,将变量,y,赋好相应的值;同样再判断成绩是否在,80,分到,90,分之间,是的话,将变量,y,赋好相应的值等等。,参考程序:,#include,stdio.h,main(),float x;char y;,printf,(,请输入,1-100,内的一个成绩,);,scanf(%f,&x,);,if(x=0&x=90,if(x,=80,if(x,=70,if(x,=60,if(x,=0,printf,(,该学生的等级为,%,cn,y,);,else,printf,(,输入的学生成绩不合法,n);,方法二:,方法二,:首先判断输入的成绩是否合法,不合法的话,输出“输入的成绩不合法”的提示信息;合法的话再判断成绩是否大于等于,90,分,若是的话,将变量,y,赋好相应的值;否则再判断成绩是否大于等于,80,分,是的话,将变量,y,赋好相应的值;否则再判断成绩是否大于等于,70,分,是的话,将变量,y,赋好相应的值等等。,#include,stdio.h,main(),float x;,char y;,printf,(,请输入,1-100,内的一个成绩,);,scanf(%f,&x,);,if(x,=0),if(x,=90)y=A;,else,if(x,=80)y=B;,else,if(x,=70)y=C;,else,if(x,=60)y=D;,else y=E;,printf,(,该学生的等级为,%,cn,y,);,else,printf,(,输入的学生成绩不合法,n);,方法三:,另外我们还可以用,switch,语句来实现。,#include,stdio.h,main(),int,x,t,;,char y;,printf,(,请输入,1-100,内的一个成绩,);,scanf(%d,&x,);,t=x/10;,switch(t,),case 10:,case 9:,printf,(,该学生的等级为,A);break,;,case 8:,printf,(,该学生的等级为,B);break,;,case 7:,printf,(,该学生的等级为,C);break,;,case 6:,printf,(,该学生的等级为,D);break,;,case 5:,case 4:,case 3:,case 2:,case 1:,case 0:,printf,(,该学生的等级为,E);break;,default:,printf,(,输入的学生成绩有误,);,本任务中要掌握的是:,1,、,if,语句的嵌套用法。,2,、,switch,语句的用法。,三、相关知识,1.if,语句的嵌套,【,语法,】,if,(表达式,1,)语句组,1,else if,(表达式,2,)语句组,2,else if,(表达式,3,)语句组,3,.,else,语句组,n,【,例如,】,if(x,=90,else,if(x,=80)y=B;,else,if(x,=70)y=C;,else,if(x,=60)y=D;,else y=E;,这里实际上只有一个,if else,语句,只不过,else,后面跟的不是一般的语句,而又是一个,if else,语句而已。,if,和,else,后面可以跟语句组,这个语句组里当然也可以是,if else,语句,这种情况称为,if,语句的嵌套。,if,语句的嵌套时,,else,语句与,if,的匹配原则是:与在它上面的、距离它最近的、在同一层括号内的、且尚未匹配的,if,配对。,【,例,2-3】,输入一个字符,判断它是小写、大写、数字还是其它字符。,分析:输入一个字符,判断它是否小写,是的话输出相应的提示信息;否则再判断它是否是大写,同样是的话输出相应的提示信息;等等。,参考程序:,#include“,stdio.h,”,main(),char a;,printf,(“,请输入一个字符,n”);,scanf(“%c”,&a,);,if(a,=,a&a,=,A&a,=0&a=,a&a,=,A&a,=0&a=9),printf,(“,输入的字符是数字”,);,else,printf,(“,输入的字符是其它字符”,);,2.switch,语句,一般形式为:,switch(,表达式,),case,常量表达式,1,:语句组,1,;,break,;,case,常量表达式,2,:语句组,2,;,break,;,case,常量表达式,n,:语句组,n,;,break,;,default,:语句组,n+1,;,说明:,switch,后面的表达式可以是,int,char,和枚举型中的一种。,case,每个后面的表达式必须互不相同,否则会出现矛盾的现象。,case,后面的常量表达式仅起语句标号的作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,,所以要加上,break,语句,以便结束,switch,语句。,【,例如,】,switch(t,),case 10:,case 9:y=A;,printf,(“%,cn”,y,);,case 8:y=B;,printf,(“%,cn”,y,);,case 7:y=C;,printf,(“%,cn”,y,);,case 6:y=D;,printf,(“%,cn”,y,);,default:y=E;printf(“%cn”,y);,若,t=9,则连续输出,A,B,C,D,E,若,t=7,则连续输出,C,D,E,若修改成下面的程序:,switch(t,),case 10:,case 9:y=A;,printf,(“%,cn”,y,);break,;,case 8:y=B;,printf,(“%,cn”,y,);break,;,case 7:y=C;,printf,(“%,cn”,y,);break,;,case 6:y=D;,printf,(“%,cn”,y,);break,;,dfault:y=E;printf(“%cn”,y);,若,t=9,,则输出,A,若,t=7,,则输出,C,【,例,2-4】,运输公司对用户计算运费。路程,(s),越远,每公里运费越低。,s250,没有折扣,250=s500 2%,折扣,500=s1000 5%,折扣,1000=s2000 8%,折扣,2000=s=3000 15%,折扣,设每公里每吨货物的基本运费为,p,,货物重为,w,,距离为,s,,折扣为,d,,则总运费的计算公式为,f=p*w*s*,(,1-d,),分析:公司对不同的路程采用了,5,种折扣,但实际上路程值有无数种,我们要把这无数种路程变为若干个值。通过观察我们可以把,250,公里作为一个单元,这样就把所有路程变成了,13,种情况,分别是,0,、,1,、,12,。而其中,0,享受的是没有折扣;,1,享受的是,2%,折扣;,2,、,3,享受的是,5%,折扣;,4,、,5,、,6,、,7,享受的是,8%,折扣;,8,、,9,、,10,、,11,享受的是,10%,折扣;,12,享受的是,15%,折扣。,参考程序:,#include“,stdio.h,”,void main(),int,c,s,;,float,p,w,d,f,;,printf,(“,请输入基本运费,货物重量,距离”,);,scanf(%f,%f,%d,&p,&w,&s,);,if(s=3000)c=12;,else c=s/250;,switch(c,),case 0:d=0;break;,case 1:d=2;break;,case 2:,case 3:d=5;break;,case 4:,case 5:,case 6:,case 7:d=8;break;,case 8:,case 9:,case 10:,case 11:d=10;break;,case 12:d=15;break;,f=p*w*s*(1-d/100.0);,printf,(,总运费,=%15.4fn,f);,用,switch,语句解题的关键是要把多种情况分成若干个有限的值。,任务,3,举一反三,【,例,2-5】,输入,4,个学生的成绩,按从高到低的次序输出。,分析:前面我们已经求过,3,个数中的最大值,求,4,个数的最大值就只要把前面三个数的最大值与第四个数进行比较就可以了;求好四个数的最大值后,接下来就是求剩下的三个数的最大值;最后再求最后剩下的两个数的最大值即可。,参考程序:,#include,stdio.h,main(),float,a,b,c,d,t,;,printf,(,请输入,4,个学生的成绩,用逗号分隔,);,scanf(%f,%f,%f,%f,&a,&b,&c,&d,);,if(a,b)t,=,a;a,=,b;b,=t;,if(a,c)t,=,a;a,=,c;c,=t;,/*,求出了,a,、,b,、,c,三个数的最大值在,a,中,其它两个数分别在,b,、,c,中*,/,if(a,d)t,=,a;a,=,d;d,=t;,if(b,c)t,=,b;b,=,c;c,=t;,if(b,d)t,=,b;b,=,d;d,=t;,/*,此时求好了两个最大的数,a,和,b,,其余的数在,c,、,d,中*,/,if(c,d)t,=,c;c,=,d;d,=t;,printf(“4,个学生成绩从低到高的次序为:,%.1f,%.1f,%.1f,%.1fn,a,b,c,d);,【,例,2-6】,输入一个数,如果是,7,的倍数,则输出这个数的立方,否则输出这个数的平方。,分析:判断是否是,7,的倍数,就只要看能否被,7,整除就可以了;,a,的立方不能写成,a3,,可以简单地用,a*a*a,来表示,也可以调用,C,语言中提供的库函数,pow(a,3),来表示,此时要用,#include“,math.h,”,语句把包含,pow,函数的库文件,math.h,包含进来。,#include,stdio.h,main(),int,a,t,;,printf,(,请输入一个整数,);,scanf(%d,&a,);,if(a%7=0),t=a*a*a;,else,t=a*a;,printf(%d,t,);,#include,stdio.h,“,#include“,math.h,”,main(),int,a,t,;,printf,(,请输入一个整数,);,scanf(%d,&a,);,if(a%7=0),t=pow(a,3);,else,t=a*a;,printf(%d,t,);,【,例,2-7】,输入一个数,判断它是否是水仙花数(一个三位数,它的各位数字立方之和等于它本身,这个数就是水仙花数)。,分析:要求这个数的三位数字之和,首先要分解出这个数的每一位数字,这个一般通过对数求余或取整等运算来完成。,参考程序:,#include,stdio.h,main(),int,a,b,c,x,;,printf,(,请输入一个三位整数,);,scanf(%d,&x,);,a=x/100;/*,分离出百位数*,/,b=x/10%10;/*,分离出十位数*,/,c=x%10;/*,分离出个位数*,/,if(a,*a*,a+b,*b*,b+c,*c*c=x)/*,判断三位数字之和是否与原数相等*,/,printf(%d,是水仙花数,n,x,);,else,printf(%d,不是水仙花数,n,x,);,【,例,2-8】,输入方程,ax2+bx+c=0,的系数值(设,a0,),输出方程的实根或输出没有实根的提示信息。,分析:输入方程的系数,a,、,b,、,c,后,首先要判断,b,2,-4ac,是否大于零,有实根则求出方程的实根,没有实根则输出没有实根的提示信息。,参考程序:,#include,stdio.h,#include,math.h,main(),float a,b,c,d,p,q,x1,x2;,printf,(,输入一元二次方程的系数,a,b,c,);,scanf(%f,%f,%f,&a,&b,&c,);,d=,sqrt(b,*b-4*a*c);,if(d,0),printf,(,方程没有实根,);,else,x1=(-b+sqrt(d)/(2*a);/*,求两个实根*,/,x2=(-b-sqrt(d)/(2*a);,printf,(,方程的两个实根分别为:,x1=%,fn,x2=%,fn,x1,x2);,【,例,2-9】,从键盘输入两个整数及一个运算符,(,加、减、乘、除,),,求其结果并输出。,分析,:,首先判断输入的运算符是否符合范围,符合的话再判断是否是,+,,是的话做加法;否则再判断是否是,-,,是的话做减法;否则的话再判断是否是*,是的话做乘法;否则做除法。,方法一,#include,stdio.h,main(),float s,a,b,;,char,ch,;,printf,(,请输入算式,仅限于加减乘除,n);,scanf(%f%c%f,&a,&ch,&b,);,if(ch,=+|,ch,=-|,ch,=*|,ch,=/),if(ch,=+)s=,a+b,;,/*,单引号不可少*,/,else,if(ch,=-)s=a-b;,else,if(ch,=*)s=a*b;,else s=a/b;,printf(%f%c%f,=%,fn,a,ch,b,s,);,else,printf,(,输入的运算符有误,n);,方法二:,#include,stdio.h,main(),int,a,b,;,float s;,char,ch,;,printf,(,请输入算式,仅限于加减乘除,n);,scanf(%d%c%d,&a,&ch,&b,);,switch(ch,),case +:s=,a+b,;break;,case -:s=a-b;break;,case *:s=a*b;break;,case /:s=(,float)a/b,;break;,printf(%d%c%d,=%,fn,a,ch,b,s,);,补充,1,:,if,语句嵌套,如果某,if,语句(或者,else,分支)的执行语句也是,if,语句,则这种结构形式被称为,if,语句的嵌套。,示例,1,:实验,05,第,2,题,示例,2,:教材,P44,第,12,题。,补充,2,:随机数的产生,见源程序:,rand.c,思考:编程一,C,程序,模拟“剪刀、石头、布”游戏。对手是计算机和计算机用户。,
展开阅读全文

开通  VIP、SVIP  下载更划算
下载10份以上建议开通 VIP 会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        关注我们

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服