《C语言程序设计》案例讲义 - 完整版

发布时间 : 星期日 文章《C语言程序设计》案例讲义 - 完整版更新完毕开始阅读

?? 非0(真) score>=90 0(假) printf(“A”) 非0(真) score>=80 0(假) printf(“B”) 非0(真) score>=70 0(假) printf(“C”) 非0(真) ?? score>=60 0(假) printf(“D”) printf(“E”) ??

图5.2 本案例嵌套if??else??语句执行图解

5.案例执行过程演示

如果一个学生的成绩是75分,也就是在运行程序时,我们输入75,这时对于用嵌套的if??

else??语句所构成的多分支结构程序的执行如图5.3红色部分(虚体)所示,其对应的语句见斜体部分所示,当执行程序时,执行的语句就是斜体所示的语句。

对于分支结构程序,我们上机调试程序时需要注意选择输入数据,保证每个分支至少执行次,如该例,我们应该选择90分以、80~89分、70~79分、60~69分以及60分以下五个数据,运行程序五次,分别输入这五个数据,以观察程序执行的代码,从而可初步确认程序基本正确。如果要比较完善一些,则需要对每一段数据的端点(即边界值)也进行输入,以观察程序在特殊点是不是也能正确。这里还请大家注意,一般情况下我们的程序只能说到目前为止没有发现错误,不能说一个程序完全正确。

33

?? 非0(真) score>=90 0(假) printf(“A”) 非0(真) score>=80 0(假) printf(“B”) 非0(真) score>=70 0(假) printf(“C”) 非0(真) ?? score>=60 0(假) printf(“D”) printf(“E”) ??

图5.3 输入75时分支选择情况

#include

#include main() {

float score;

clrscr(); scanf(“%f”,&score);

if(score>=90) printf(“A”); else if(score>=80) printf(“B”); else if(score>=70) printf(“C”); else if(score>=60)

printf(“D”); else

printf(“E”); }

二、用switch语句改写案例

switch语句是C语言中专门用来实现多分支结构的语句。使用switch语句实现多分支结构比用嵌套的if??else??要方便灵活。

1. switch语句格式

switch(表达式)

{ case 常量1:语句组1;[break;]

34

case 常量2:语句组2;[break;] case 常量3:语句组3;[break;] ??

case 常量n:语句组n;[break;] [default :语句组n+1;] }

2. switch语句执行过程

1) 计算switch后表达式的值,注意,switch语句要求表达式的值为整型或字符型。C语言中的字符是指以单引号“’”起来的单个字符,如’a’,’A’,’1’等。

2) 根据表达式的值,从上到下依次判断表达式的值是否与case后的某个常量匹配(相同),程序将从最先相匹配case后的语句组入口开始执行程序,直到遇到break语句为止,如果没有break语句,则从入口处一直执行程序至switch语句外层的“}”止。

3) 如果没有一个常量与表达式的值相匹配,则从default后入口开始执行程序,直到遇到break语句或switch语句外层的“}”止。

常量:指在程序的执行过程中其值不变量的量。如整型常量56,-123,实型常量5.67,-0.98,3.2e+6,字符常量’w’,’2’,’M’。

格式中用“[]”括起来的部分是可选部分,根据需要进行选择。

break语句就只有break,没有参数,其作用是结束switch语句的执行,使程序转到switch语句的下一条语句执行。

3. 改写后的程序

#include #include main() {

float score;

clrscr(); scanf(“%f”,&score); switch((int)(score)/10 ) {

case 10:

case 9: printf(“A”);break; case 8: printf(“B”);break; case 7:printf(“C”); break; case 6:printf(“D”);break; default : printf(“E”);

} }

用switch语句改写的关键是switch后表达式的确定及case后常量的确定,本例将score的值取整,然后利用两个整数相除结果仍为整数这一规则,使表达式的值为整数,范围在0~10之间。常量10和9说明score的值在90分以上,所以当score的值在90分以上时,将会从case 10:或case 9 处找到入口,从而输出字符“A”,然后运行break;语句,结束switch语句的执行。当输入其它分数时,根据计算的值找到相应case入口,输出对应符号,然后结束switch语句的执行。

三、应用举例

【例5-1】分别用嵌套if??else??语句和switch语句编程为某运输公司计算运费。路程(s)赿远,每公里的运费赿低。标准如下:

s<500,没有折扣 500<=s<1000,5%折扣

35

1000<=s<1500,10%折扣 1500<=s<2000,15%折扣

s>=2000,20%折扣

假设每公里每吨货物的基本运费为p,货物重量为w,距离为s,折扣率为d,则总运费f的计算公式为:

f=p*w*s*(1-d) 分析:如果用嵌套if??else??语句来实现,可以按题目的标准使条件递进,第一个条件是s<500,第二个条件是s<1000,第三个条件是s<1500,依次递进。然后根据条件,选择折扣d,用f=p*w*s*(1-d)公式计算运费。程序如下:

#include #include main() {

float p,w,s,f,d; clrscr();

scanf(“%f”,&p); 输入基本运费; scanf(“%f”,&w); 输入货物重量; scanf(“%f”,&s); 输入运输距离; if(s<500) d=0;

else if(s<1000) d=0.05; else if(s<1500) d=0.1; else if(s<2000)

d=0.15; else

d=0.2;

f=p*w*s*(1-d);

printf(“weight=%f,distance=%f,fee=%f”,w,s,f); }

#include #include main() {

float p,w,s,f,d; clrscr();

scanf(“%f”,&p); 输入基本运费; scanf(“%f”,&w); 输入货物重量; scanf(“%f”,&s); 输入运输距离; switch((int)(s)/500) { case 0: d=0;break; case 1: d=0.05;break; case 2: d=0.1;break; case 3: d=0.15;break; default : d=0.2; }

f=p*w*s*(1-d);

printf(“weight=%f,distance=%f,fee=%f”,w,s,f); }

如果用switch语句实现,关键是找到运输距离和折扣之间的关系,距离每增加500公里,折扣率增加5%,因此把距离除以500作为switch的表达式,case后的常量是从0开始的整数。程序如上。

本例在运行输入数据时,必须保证输入的都是正数。

四、习题

1. 分别用嵌套if??else??语句和switch语句编程判断某人是否属于肥胖体型。 根据体重与身高,得出体指数t=体重W/(身高h)2 (w单位为kg,h单位为m)标准如下: 当t<18时,为低体重; 当18<=t<25时,为正常体重; 当25<=t<27时,为超重体重; 当t>=27时,为肥胖。

2. 某托儿所收2岁到6岁的孩子,2岁、3岁孩子进小班(Lower class),4岁孩子进中班(Middle class), 5岁、6岁孩子进大班(Higher class)。请编程输入孩子年龄,输出年龄及进入的班号。

3. 输入三个整数a、b、c,请编程按从大到小顺序输出它们。

五、实验 实验六 switch和嵌套if语句

36

联系合同范文客服:xxxxx#qq.com(#替换为@)