C语言程序设计项目二.ppt

上传人:tia****nde 文档编号:2890061 上传时间:2019-12-03 格式:PPT 页数:23 大小:505.50KB
返回 下载 相关 举报
C语言程序设计项目二.ppt_第1页
第1页 / 共23页
C语言程序设计项目二.ppt_第2页
第2页 / 共23页
C语言程序设计项目二.ppt_第3页
第3页 / 共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“, ,二、具体实现 方法二: 参考程序: #include “stdio.h“ main() float x; printf(“请输入一个学生成绩“); scanf(“%f“, ,方法二:判断输入的成绩是否在1到100之间,是的话输出提示信息“输入成绩合法”;否则的话输出提示信息“输入的成绩不合法”。,程序流程图,本任务知识点: 1、关系运算符与关系表达式 2、逻辑运算符与逻辑表达式 3、if 和if else语句,三、相关知识,(一) 关系运算符与关系表达式 1. 关系运算符及优先级 (大于) = (大于或等于) = (等于) != (不等于),优先级相同(高),优先级相同(低),1)前4种运算符(,=)优先级相同,后两种也相同。前4种高于后2种。 (2)关系运算符的优先级低于算术运算符。 (3)关系运算符的优先级高于赋值运算符。,2. 关系表达式 用关系运算符将两个表达式连接起来的式子,称为关系表达式。 例如:ab,a!=b,a+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. 逻辑运算符及优先级 & 逻辑与 优先级低 | 逻辑或 ! 逻辑非 优先级高,优先级:“!”运算符高于算术运算符,关系运算符高于逻辑运算符,其中“&”相当于而且,要求有两个运算量 。,“|”相当于或者,要求有两个运算量。,“!”相当于否定 。,例如:10岁以下的小孩而且是女的,例如:10岁以下的小孩或者是女的,除了10岁以下的女小孩。,逻辑运算符的“真值表”,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|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) 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; 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“ 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整除,或者能被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“,方法二:判断该年份是否满足闰年的条件,满足的话输出是闰年的提示信息,否则输出不是闰年的提示信息。,#include “stdio.h“ main( ) int year,t; printf(“请输入年份“); scanf(“%d“, ,四、知识扩展,条件运算符与条件表达式 条件运算符为 ? : 条件表达式为 表达式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“,方法二:,方法二:首先判断输入的成绩是否合法,不合法的话,输出“输入的成绩不合法”的提示信息;合法的话再判断成绩是否大于等于90分,若是的话,将变量y赋好相应的值;否则再判断成绩是否大于等于80分,是的话,将变量y赋好相应的值;否则再判断成绩是否大于等于70分,是的话,将变量y赋好相应的值等等。,#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语句的嵌套用法。 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】 输入一个字符,判断它是小写、大写、数字还是其它字符。,分析:输入一个字符,判断它是否小写,是的话输出相应的提示信息;否则再判断它是否是大写,同样是的话输出相应的提示信息;等等。,参考程序: #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 常量表达式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)越远,每公里运费越低。,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“,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(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“, ,#include “stdio.h“ #include “math.h” main( ) int a,t; printf(“请输入一个整数“); scanf(“%d“, ,【例2-7】输入一个数,判断它是否是水仙花数(一个三位数,它的各位数字立方之和等于它本身,这个数就是水仙花数)。,分析:要求这个数的三位数字之和,首先要分解出这个数的每一位数字,这个一般通过对数求余或取整等运算来完成。,参考程序: #include “stdio.h“ main( ) int a,b,c,x ; printf(“请输入一个三位整数“); scanf(“%d“, ,【例2-8】输入方程ax2+bx+c=0的系数值(设a0),输出方程的实根或输出没有实根的提示信息。,分析:输入方程的系数a、b、c后,首先要判断b2-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“, ,【例2-9】从键盘输入两个整数及一个运算符(加、减、乘、除), 求其结果并输出。,分析:首先判断输入的运算符是否符合范围,符合的话再判断是否是+,是的话做加法;否则再判断是否是-,是的话做减法;否则的话再判断是否是*,是的话做乘法;否则做除法。,方法一 #include “stdio.h“ main() float s ,a,b; char ch; printf(“请输入算式,仅限于加减乘除n“); scanf(“%f%c%f“,方法二: #include “stdio.h“ main() int a,b; float s; char ch; printf(“请输入算式,仅限于加减乘除n“); scanf(“%d%c%d“,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!