资源预览内容
第1页 / 共23页
第2页 / 共23页
第3页 / 共23页
第4页 / 共23页
第5页 / 共23页
第6页 / 共23页
第7页 / 共23页
第8页 / 共23页
第9页 / 共23页
第10页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
项目二 输入学生成绩转化为等级 项目要求一个班进行了一次考试,教师打的是百分制成绩,现在学校要求打五 级制,即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“, if(x=0 二、具体实现 方法二: 参考程序: #include “stdio.h“ main() float x; printf(“请输入一个学生成绩“); scanf(“%f“, if(x=0后c的值为5,因为ab不成立,则表达式的值为0,不执行 后面的语句c=a,所以c的值不变,还是为5; 2)执行语句if(ab) t=a;a=b;b=t;后a的值为3, b的值为4; 4)执行语句if(ab)c=a; else c=b; 后c的值为4。执行语句 if(ab)min=b; if(minc)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“, 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 printf(“请输入年份“); scanf(“%d“, if(year%4=0 if(t=0) printf(“%d年不是闰年 n“,year); if(t=1) printf(“%d年是闰年 n“,year);方法二:判断该年份是否满足闰年的条 件,满足的话输出是闰年的提示信息, 否则输出不是闰年的提示信息。#include “stdio.h“ main( ) int year,t; printf(“请输入年份“); scanf(“%d“, if(year%4=0 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赋好相应的值 等等。参考程序: #include “stdio.h“ main() float x; char y; printf(“请输入1-100内的一个成绩“); scanf(“%f“, if( x=0 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“, 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=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”, if(a=a float p,w,d,f; printf(“请输入基本运费,货物重量, 距离”);scanf(“%f,%f,%d“,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“, if(ab)t=a;a=b;b=t; if(ac)t=a;a=c;c=t; /*求出了a、 b、c三个数的最大值在a中,其它 两个数分别在b、c中*/ if(ad)t=a;a=d;d=t; if(bc)t=b;b=c;c=t; if(bd)t=b;b=d;d=t; /*此时求好了两 个最大的数a和b,其余的数在c、d中*/if(cd)t=c;c=d;d=t;printf(“4个学生成绩从高到低的次序为 :%.1f,%.1f,%.1f,%.1fn“,d,c,b,a); 【例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“, if(a%7=0)t=a*a*a; elset=a*a; printf(“%d“,t); #include “stdio.h“ #include “math.h” main( ) int a,t; printf(“请输入一个整数“); scanf(“%d“, if(a%7=0)t=pow(a,3); elset=a*a; printf(“%d“,t); 【例2-7】输入一个数,判断它是否是水仙花数(一个三位数,它 的各位数字立方之和等于它本身,这个数就是水仙花数)。分析:要求这个数的三位数字之和,首先要分解出这个数的每一位数字,这个一般 通过对数求余或取整等运算来完成。参考程序: #include “stdio.h“ main( ) int a,b,c,x ; printf(“请输入一个三位整数“); scanf(“%d“, 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); elseprintf(“%d不是水仙花数n“,x); 【例2-8】输入方程ax2+bx+c=0的系数值(设a0),输出方程 的实根或输出没有实根的提示信息。分析:输入方程的系数a、b、c后,首先要判断b2-4ac是否大于零,有实根则求出 方程的实根,没有实根则输出没有实根的提示信息。参考程序: #include “stdio.h“
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号