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

上传人:公**** 文档编号:568435344 上传时间:2024-07-24 格式:PPT 页数:23 大小:505.50KB
返回 下载 相关 举报
C语言程序设计项目二.ppt_第1页
第1页 / 共23页
C语言程序设计项目二.ppt_第2页
第2页 / 共23页
C语言程序设计项目二.ppt_第3页
第3页 / 共23页
C语言程序设计项目二.ppt_第4页
第4页 / 共23页
C语言程序设计项目二.ppt_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《C语言程序设计项目二.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计项目二.ppt(23页珍藏版)》请在金锄头文库上搜索。

1、项目二项目二 输入学生成绩转化为等级输入学生成绩转化为等级 项目要求项目要求 一个班进行了一次考试,教师打的是百分制成绩,现在学校要求打五级制,即90100 分的转变为A,8089 的转变为 B,7079的转变为C,6069的转变为D,60以下的转变为E。项目分析项目分析 要完成对成绩的转换输出,第一步必须要对输入的成绩是否合法作一个判断,因为是百分制,所以0-100分都是合法的,此范围外输入的成绩是有问题的;第二步对输入的合法成绩转换成相应的等级。因此,将这个项目分解成二个任务来完成。任务一是输入学生成绩,判断其合法性;任务二是输入学生成绩转化为等级。任务任务1 输入学生成绩,判断其合法性输

2、入学生成绩,判断其合法性一、问题情景一、问题情景输入一个学生的成绩,判断它是否合法(成绩采用百分制)。分析:程序流程图: 方法一:方法一:首先判断输入的成绩是否在1到100之间,是的话输出提示信息“输入成绩合法”;再判断输入的成绩是否在0到100以外,是的话输出提示信息“输入的成绩不合法”。二、具体实现二、具体实现方法一:方法一: 参考程序:#include stdio.hmain() float x;printf(请输入一个学生成绩);scanf(%f,&x);if(x=0 & x=100) printf(输入成绩合法n);if(x100) printf(输入成绩不合法n);二、具体实现二、

3、具体实现方法二:方法二:参考程序:#include stdio.hmain() float x;printf(请输入一个学生成绩);scanf(%f,&x);if(x=0&x=100) printf(输入成绩合法);else printf(输入成绩不合法);方法二:判断输入的成绩是否在方法二:判断输入的成绩是否在1到到100之间,是的话输出提示之间,是的话输出提示信息信息“输入成绩合法输入成绩合法”;否则的;否则的话输出提示信息话输出提示信息“输入的成绩不输入的成绩不合法合法”。程序流程图本任务知识点:1、关系运算符与关系表达式2、逻辑运算符与逻辑表达式3、if 和if else语句三、相关知

4、识三、相关知识(一)(一) 关系运算符与关系表达式关系运算符与关系表达式 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

5、,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. 逻辑运算符及优先级逻辑运算符及优先级 & 逻辑与 优先级低 | 逻辑或 ! 逻辑非 优先级高优先级:“!”运算符高于算术运算符,关系运算符高于逻辑运算符ab!a!ba&ba|b真真假假真真真假假真假真假真真假假真假假真真假假其中“&”相当于而且,要求有两个运算量 。“|”相当于或者,要求有两

6、个运算量。 “!”相当于否定 。例如: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

7、,则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(ab) t=a;a=b;b=t;后a的值为3, b的值为4;4)执行语句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) min=b;if(minc) min=c;print

8、f(%d,%d,%d中最小的数为%dn,a,b,c,min);【例例2-1】输入任意三个整数输入任意三个整数a、b、c,输出其中最小的数。,输出其中最小的数。方法二:分析:我们首先将a、b两个数进行比较,把两者中最小的数放到a中,然后用两者中最小的数a跟c进行比较,同样的把两者中最小的数放到a中,最后a中的值就是三者中最小的值。参考程序:#include stdio.hmain( ) int a,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中

9、最小的数为%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.hmain( )int year,t=0;printf(请输入年份请输入年份);scanf(%d,&year);if(ye

10、ar%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.hmain( ) int year,t;printf(请输入年份);scanf(%d,&year);if(year%4=0&year%100!=0|year%400=0) printf(%d年是闰年年是闰年n,year);else printf(%d年不是闰年年不是闰

11、年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)

12、。表达式c(ab?a:b)?c: (ab?a:b)的值实际上是取a、b、c三者中最大值。任务任务2 输入学生成绩转化为等级输入学生成绩转化为等级一、问题情景一、问题情景输入一个学生的成绩,若是合法成绩,则输出相应的等级,否则输出不合法的提示信息。方法一:方法一:首先判断输入的成绩是否合法,不合法的话,输出“输入的成绩不合法”的提示信息;合法的话再判断成绩是否在90分到100分之间,是的话,将变量y赋好相应的值;同样再判断成绩是否在80分到90分之间,是的话,将变量y赋好相应的值等等。参考程序:#include stdio.hmain()float x; char y;printf(请输入1-1

13、00内的一个成绩);scanf(%f,&x);if( x=0 & x=90 & x=80 & x=70 & x=60 & x=0 & x60) y=E; printf(该学生的等级为%cn,y);else printf(输入的学生成绩不合法n);方法二:方法二: 方法二方法二:首先判断输入的成绩是否合法,不合法的话,输出“输入的成绩不合法”的提示信息;合法的话再判断成绩是否大于等于90分,若是的话,将变量y赋好相应的值;否则再判断成绩是否大于等于80分,是的话,将变量y赋好相应的值;否则再判断成绩是否大于等于70分,是的话,将变量y赋好相应的值等等。#include stdio.hmain()

14、 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.hmain() int x,t; char y;printf(请输入1-100内的一个成绩);scanf(%d,&x);t=x/10;switch(

15、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语句的嵌套用法。

16、2、switch语句的用法。三、相关知识三、相关知识1. if语句的嵌套【语法】if(表达式1)语句组1else if(表达式2)语句组2else if(表达式3)语句组3 .else 语句组n【例如】 if(x=90&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的匹配原则是

17、:与在它上面的、距离它最近的、在同一层括号内的、且尚未匹配的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(“输入的字符是其它

18、字符”);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语句。语

19、句。【例如例如】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,则连续输出ABCDE若t=7,则连续输出CDE若修改成下面的程序:若修改成下面的程序:switch(t)case 10: case 9: y=A; printf(“ %cn”,y); break; case 8: y=B; pr

20、intf(“ %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,货物重为

21、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(“请输入基本运费,货物重量,距离”);

22、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语句解题的关键是要把多

23、种情况分成若干个有限的值。任务任务3 举一反三举一反三【例2-5】输入4个学生的成绩,按从高到低的次序输出。分析:前面我们已经求过3个数中的最大值,求4个数的最大值就只要把前面三个数的最大值与第四个数进行比较就可以了;求好四个数的最大值后,接下来就是求剩下的三个数的最大值;最后再求最后剩下的两个数的最大值即可。参考程序:#include stdio.hmain()float a,b,c,d,t;printf(请输入4个学生的成绩,用逗号分隔);scanf(%f,%f,%f,%f,&a,&b,&c,&d);if(ab)t=a;a=b;b=t;if(ac)t=a;a=c;c=t; /*求出了a、b

24、、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,可以简单

25、地用a*a*a来表示,也可以调用C语言中提供的库函数pow(a,3)来表示,此时要用#include “math.h”语句把包含pow函数的库文件math.h包含进来。#include stdio.hmain( )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;prin

26、tf(%d,t);【例2-7】输入一个数,判断它是否是水仙花数(一个三位数,它的各位数字立方之和等于它本身,这个数就是水仙花数)。分析:要求这个数的三位数字之和,首先要分解出这个数的每一位数字,这个一般通过对数求余或取整等运算来完成。参考程序:参考程序:#include stdio.hmain( )int a,b,c,x ;printf(请输入一个三位整数);scanf(%d,&x);a=x/100; /*a=x/100; /*分离出百位数分离出百位数* */ /b=x/10%10; /*b=x/10%10; /*分离出十位数分离出十位数* */ /c=x%10; /*c=x%10; /*分离

27、出个位数分离出个位数* */ /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后,首先要判断b2-4ac是否大于零,有实根则求出方程的实根,没有实根则输出没有实根的提示信息。参考程序:参考程序:#include stdio.h#include math.hmain()float a,b,c,d,p,q,x1,x2;printf(输入一元二

28、次方程的系数a,b,c); scanf(%f,%f,%f,&a,&b,&c);d=sqrt(b*b-4*a*c); if(d0) printf(方程没有实根); else x1=(-b+sqrt(d)/(2*a); /*求两个实根*/ x2=(-b-sqrt(d)/(2*a); printf(方程的两个实根分别为:x1=%fn x2=%fn ,x1,x2); 【例2-9】从键盘输入两个整数及一个运算符(加、减、乘、除), 求其结果并输出。分析:首先判断输入的运算符是否符合范围,符合的话再判断是否是+,是的话做加法;否则再判断是否是-,是的话做减法;否则的话再判断是否是*,是的话做乘法;否则做除

29、法。方法一方法一#include stdio.hmain() 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.hmain() 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);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号