版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、项目二 输入学生成绩转化为等级,项目要求 一个班进行了一次考试,教师打的是百分制成绩,现在学校要求打五级制,即90100 分的转变为A,8089 的转变为 B,7079的转变为C,6069的转变为D,60以下的转变为E。,项目分析 要完成对成绩的转换输出,第一步必须要对输入的成绩是否合法作一个判断,因为是百分制,所以0-100分都是合法的,此范围外输入的成绩是有问题的;第二步对输入的合法成绩转换成相应的等级。因此,将这个项目分解成二个任务来完成。任务一是输入学生成绩,判断其合法性;任务二是输入学生成绩转化为等级。,任务1 输入学生成绩,判断其合法性,一、问题情景 输入一个学生的成绩,判断它是否
2、合法(成绩采用百分制)。 分析:,程序流程图:,方法一:首先判断输入的成绩是否在1到100之间,是的话输出提示信息“输入成绩合法”;再判断输入的成绩是否在0到100以外,是的话输出提示信息“输入的成绩不合法”。,二、具体实现 方法一: 参考程序: #include stdio.h main() float x; printf(请输入一个学生成绩); scanf(%f, ,二、具体实现 方法二: 参考程序: #include stdio.h main() float x; printf(请输入一个学生成绩); scanf(%f, ,方法二:判断输入的成绩是否在1到100之间,是的话输出提示信息“
3、输入成绩合法”;否则的话输出提示信息“输入的成绩不合法”。,程序流程图,本任务知识点: 1、关系运算符与关系表达式 2、逻辑运算符与逻辑表达式 3、if 和if else语句,三、相关知识,(一) 关系运算符与关系表达式 1. 关系运算符及优先级 (大于) = (大于或等于) = (等于) != (不等于),优先级相同(高),优先级相同(低),1)前4种运算符(,=)优先级相同,后两种也相同。前4种高于后2种。 (2)关系运算符的优先级低于算术运算符。 (3)关系运算符的优先级高于赋值运算符。,2. 关系表达式 用关系运算符将两个表达式连接起来的式子,称为关系表达式。 例如:ab,a!=b,a
4、+ba+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。,(二) 逻辑运算符与逻辑表达式,1. 逻辑运算符及优先级 后c的值为5,因为ab不成立,则表达式的值为0,不执行后面的语句c=a,所以c的值不变,还是为5; 2)执行语句if(ab)
5、 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(表达式)语句组1 else 语句组2 /*表达式值为非0时,执行语句组1,为0时,执行语句组2*/ 【流程图】,【例如】若a=3,b=4,c=5, 则执行语句 if(ab)c=a; else c=b; 后c的值为4。,执行语句 if(ab)c=a
6、; else c=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的值为新比较的数,直到所有的数都比较过为止。,参考程序: #include stdio.h
7、 main( ) int a,b,c,min; printf(请输入三个数); scanf(%d,%d,%d, ,【例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, ,【例2-2】 输入一个年份,判断它是否是闰年。,某一年是闰年的条件是:能被4整除并且不能被100
8、整除,或者能被400整除的年份是闰年。写成表达式是year%4=0 printf(请输入年份); scanf(%d,方法二:判断该年份是否满足闰年的条件,满足的话输出是闰年的提示信息,否则输出不是闰年的提示信息。,#include stdio.h main( ) int year,t; printf(请输入年份); scanf(%d, ,四、知识扩展,条件运算符与条件表达式 条件运算符为 ? : 条件表达式为 表达式1 ?表达式2:表达式3。 当表达式1值为真时,整个表达式的值为表达式2的值,当表达式1值为假时,整个表达式的值为表达式3的值。 例如: 若a=3,b=4,则表达式ab?a:b的值
9、为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 输入学生成绩转化为等级,一、问题情景 输入一个学生的成绩,若是合法成绩,则输出相应的等级,否则输出不合法的提示信息。 方法一:首先判断输入的成绩是否合法,不合法的话,输出“输入的成绩不合法”的提示信息
10、;合法的话再判断成绩是否在90分到100分之间,是的话,将变量y赋好相应的值;同样再判断成绩是否在80分到90分之间,是的话,将变量y赋好相应的值等等。,参考程序: #include stdio.h main() float x; char y; printf(请输入1-100内的一个成绩); scanf(%f,方法二:,方法二:首先判断输入的成绩是否合法,不合法的话,输出“输入的成绩不合法”的提示信息;合法的话再判断成绩是否大于等于90分,若是的话,将变量y赋好相应的值;否则再判断成绩是否大于等于80分,是的话,将变量y赋好相应的值;否则再判断成绩是否大于等于70分,是的话,将变量y赋好相应
11、的值等等。,#include stdio.h main() float x; char y; printf(请输入1-100内的一个成绩); scanf(%f, ,方法三:,另外我们还可以用switch语句来实现。,#include stdio.h main() int x,t; char y; printf(请输入1-100内的一个成绩); scanf(%d,case 5: case 4: case 3: case 2: case 1: case 0: printf(该学生的等级为E); break; default: printf(输入的学生成绩有误); ,本任务中要掌握的是: 1、if语
12、句的嵌套用法。 2、switch语句的用法。,三、相关知识,1. if语句的嵌套 【语法】 if(表达式1)语句组1 else if(表达式2)语句组2 else if(表达式3)语句组3 . else 语句组n,【例如】 if(x=90,这里实际上只有一个if else语句,只不过else后面跟的不是一般的语句,而又是一个if else语句而已。 if 和else 后面可以跟语句组,这个语句组里当然也可以是if else语句,这种情况称为if语句的嵌套。if语句的嵌套时,else语句与if的匹配原则是:与在它上面的、距离它最近的、在同一层括号内的、且尚未匹配的if配对。,【例2-3】 输入一
13、个字符,判断它是小写、大写、数字还是其它字符。,分析:输入一个字符,判断它是否小写,是的话输出相应的提示信息;否则再判断它是否是大写,同样是的话输出相应的提示信息;等等。,参考程序: #include “stdio.h” main() char a; printf(“请输入一个字符n”); scanf(“%c”,分析下面程序错误的原因: #include “stdio.h” main() char a; printf(“请输入一个字符n”); scanf(“%c”, ,2. switch语句,一般形式为: switch(表达式) case 常量表达式1:语句组1;break; case 常量表
14、达式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);
15、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
16、”,y); break; dfault:y=E; printf(“ %cn”,y); ,若t=9,则输出A 若t=7,则输出C,【例2-4】运输公司对用户计算运费。路程(s)越远,每公里运费越低。,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%折扣
17、;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,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/
18、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(b
19、c)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, ,#include stdio.h“ #include “math.h” main( ) int a,t; printf(请输入一个整数); scanf(%d, ,【例2-7】输入一个数,判断它是否是水仙花数(一个三位数,它的各位数字立方之和等于它本身,这个数就是水仙花数)。,分析:要求
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 混凝土模板支撑工程专项方案
- 2025年骨科器械使用培训考试试题及答案
- 桥面铺装病害原因分析及防治措施
- 2025年5G+工业互联网融合应用政策科技政策合规考核试卷及答案
- 2025年劳务员考试题库附答案
- 2025年房地产估价师之基本制度法规政策含相关知识押题练习试题及答案
- 2025年五年级美术教师个人年度工作总结
- 《心理咨询知情同意书》
- 建设工程施工合同纠纷要素式起诉状模板可导出多种格式
- 2026 年专用型离婚协议书合规版
- 电力工程有限公司管理制度制度范本
- 科研伦理与学术规范-课后作业答案
- 《混凝土结构工程施工规范》
- 安全防范系统安装维护员题库
- mbd技术体系在航空制造中的应用
- 苗木育苗方式
- 通信原理-脉冲编码调制(PCM)
- 省直单位公费医疗管理办法实施细则
- 附录 阿特拉斯空压机操作手册
- JJG 693-2011可燃气体检测报警器
- GB/T 39557-2020家用电冰箱换热器
评论
0/150
提交评论