资源预览内容
第1页 / 共24页
第2页 / 共24页
第3页 / 共24页
第4页 / 共24页
第5页 / 共24页
第6页 / 共24页
第7页 / 共24页
第8页 / 共24页
第9页 / 共24页
第10页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
工程二工程二 输入学生成果转化为等级输入学生成果转化为等级知识目的知识目的能正确运用关系运算符、逻辑运算符、条件运算符能正确运用关系运算符、逻辑运算符、条件运算符能熟练运用能熟练运用if、if else以及嵌套以及嵌套能熟练运用能熟练运用switch语句语句技艺目的技艺目的 可以熟练地编写分支程序可以熟练地编写分支程序工程二工程二 输入学生成果转化为等级输入学生成果转化为等级 工程要求工程要求 一个班进展了一次考试,教师打的是百分制成果,如今学校要一个班进展了一次考试,教师打的是百分制成果,如今学校要求打五级制,即求打五级制,即90100 分的转变为分的转变为A,8089 的转变为的转变为 B,7079的转变为的转变为C,6069的转变为的转变为D,60以下的转变为以下的转变为E。工程分析工程分析 要完成对成果的转换输出,第一步必需求对输入的成果能否合法要完成对成果的转换输出,第一步必需求对输入的成果能否合法作一个判别,由于是百分制,所以作一个判别,由于是百分制,所以0-100分都是合法的,此范围外输入分都是合法的,此范围外输入的成果是有问题的;第二步对输入的合法成果转换成相应的等级。因的成果是有问题的;第二步对输入的合法成果转换成相应的等级。因此,将这个工程分解成二个义务来完成。义务一是输入学生成果,判此,将这个工程分解成二个义务来完成。义务一是输入学生成果,判别其合法性;义务二是输入学生成果转化为等级。别其合法性;义务二是输入学生成果转化为等级。义务义务1 输入学生成果,判别其合法性输入学生成果,判别其合法性一、问题情景一、问题情景输入一个学生的成果,判别它能否合法成果采用百分制。输入一个学生的成果,判别它能否合法成果采用百分制。分析:分析:程序流程图: 方法一:首先判方法一:首先判别输入的成果能入的成果能否在否在1到到100之之间,是的,是的话输出提出提示信息示信息“输入成果合法;再判入成果合法;再判别输入的成果能否在入的成果能否在0到到100以外,以外,是的是的话输出提示信息出提示信息“输入的成果入的成果不合法。不合法。二、二、详细实现方法一:方法一: 参考程序:参考程序:#include stdio.hmain() float x;printf(请输入一个学生成果入一个学生成果);scanf(%f,&x);if(x=0 & x=100) printf(输入成果合法入成果合法n);if(x100) printf(输入成果不合法入成果不合法n);二、二、详细实现方法二:方法二:参考程序:参考程序:#include stdio.hmain() float x;printf(请输入一个学生成果入一个学生成果);scanf(%f,&x);if(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+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. 逻辑运算符及优先级逻辑运算符及优先级 & 逻辑与逻辑与 优先级低优先级低 | 逻辑或逻辑或 ! 逻辑非逻辑非 优先级高优先级高优先级:“!运算符高于算术运算符,关系运算符高于逻辑运算符ab!a!ba&ba|b110011100101011001001100其中“&相当于而且,要求有两个运算量 。“|相当于或者,要求有两个运算量。 “!相当于否认 。例如: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|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;printf(%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中最小的数为%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(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.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年不是闰年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.hmain()float x; char y;printf(请输入0-100内的一个成果);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() 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(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语句组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的匹配原那么是:与在它上面的、间隔它最近的、在同一层括号内的、且尚未匹配的if配对。【例【例2-3】 输入一个字符,判别它是小写、大写、数字还是其它字符。输入一个字符,判别它是小写、大写、数字还是其它字符。分析:输入一个字符,判别它能否小写,是的话输出相应的提示信息;否那么再判别它能否是大写,同样是的话输出相应的提示信息;等等。参考程序:#include “stdio.hmain() 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,那么延续输出ABCDE假设t=7,那么延续输出CDE假假设修正成下面的程序:修正成下面的程序: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.hvoid 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.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、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.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.hmain( )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.hmain( )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后,首先要判别b2-4ac能否大于零,有实根那么求出方程的实根,没有实根那么输出没有实根的提示信息。参考程序:参考程序:#include stdio.h#include math.hmain()float a,b,c,d,p,q,x1,x2;printf(输入一元二次方程的系数输入一元二次方程的系数a,b,c); scanf(%f,%f,%f,&a,&b,&c);d=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】从键盘输入两个整数及一个运算符(加、减、乘、除), 求其结果并输出。分析:首先判别输入的运算符能否符合范围,符合的话再判别能否是+,是的话做加法;否那么再判别能否是-,是的话做减法;否那么的话再判别能否是*,是的话做乘法;否那么做除法。方法一方法一#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);
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号