实验四 答案 选择结构程序设计
实验四 选择结构程序设计答案
实验时间: 年 月 日
【实验步骤】
一、程序调试练习
1、写出下列程序的运行结果: (1)ex4_1.c
#include void main() { }
具体要求:
①从键盘上输入a ,分析程序运行的结果。 ②从键盘上输入A ,分析程序运行的结果。 ③从键盘上输入5,分析程序运行的结果。 程序运行结果:
①a ②a ③5 (2)ex4_2.c
#include void main() { }
具体要求:
①从键盘上给x 、y 、z 分别输入2,-1,2,分析程序运行的结果。
char ch;
printf("input a character:"); ch=getchar();
if(ch>='A' && ch
ch=ch+32; printf("%c\n",ch);
int x,y,z;
printf("input x,y,z");
scanf("%d,%d,%d",&x,&y,&z); if(x
if(y
z++; printf("z=%d\n",z);
z=0;
②从键盘上给x 、y 、z 分别输入3,5,2,分析程序运行的结果。 ③从键盘上给x 、y 、z 分别输入-5,-3,2,分析程序运行的结果。 程序运行结果:
①z=2 ②z=3 ③z=0 (3)ex4_3.c
#include main() { }
程序运行结果: a=2,b=1 (4)ex4_4.c
#include void main() { }
具体要求:
int x=1,a=0,b=0; switch(x) { }
printf("a=%d,b=%d\n",a,b);
case 0:b++; case 1:a++; case 2:a++;b++;
int x=1,y=0,a=0,b=0; switch(x) { }
printf("a=%d,b=%d\n",a,b);
case 1: switch(y)
{ }
b++; break;
case 0: a++; break; case 1: b++; break;
case 2: a++; case 3: a++; b++;
①分析程序运行结果。
②在“case 3: a++; b++;”语句的下一行再加入如下一条语句,则运行结果有什么变化?
default: a++; b++; 程序运行结果: a=2,b=1
在“case 3: a++; b++;”语句的下一行再加入default: a++; b++;语句,则运行结果不变。 (5)ex4_5.c
#include void main() { }
具体要求:
①从键盘上给a 、b 分别输入15、9,分析程序运行的结果。 ②从键盘上给a 、b 分别输入16、9,分析程序运行的结果。 ③从键盘上给a 、b 分别输入16、4,分析程序运行的结果。 程序运行结果:
①n=1 ② n=3 ③n=2 (6)ex4_6.c
#include main() {
int a=1,b=0;
int a,b,n=0; printf("input a,b:"); scanf("%d,%d",&a,&b); switch(a%3) { }
printf("n=%d\n",n);
case 0: n++; break; case 1: n++;
switch(b%2) { }
default: n++; case 0: n++; break;
} 运行结果:
**0** **2** (7)ex4_7.c
#include main() { } }
switch(a) { case 1: }
switch(b) {
case 0: printf("**0**\n");break; case 1 :printf("**1**\n");break; }
case 2 : printf("**2**\n");break;
int a,b;
scanf("%d%d",&a,&b); switch(a%2) {
case 0:
switch(b%2)
{
case 0:printf("a,b are even\n");break; case 1:printf("a is even,b is odd\n");break; }
break; switch(b%2)
{
case 0:printf("a is odd,b is even\n");break; case 1:printf("a,b are odd\n");break; }
case 1:
break;
从键盘输入数据分别为
①48 72 ②36 27 ③17 24 ④37 93 运行结果:
48 72 a,b are even 36 27
a is even, b is odd 17 24
a is odd, b is even 37 93 a,b are odd 二、编程练习
1、编程:铁路托运行李,假设每张车票可按每公斤0.5元托运50公斤以内的行李,如果超过50公斤时,超过的部分每公斤加价0.3元,试编写一道计算行李托运费的程序。
设托运行李重为W 公斤,托运费为X 元,要求如下:
①用if 语句实现分支。自变量w 与函数值x 均采用单精度实型。 ②自变量w 值从键盘输入,且输入前要有提示信息。 ③数据的输出格式采用以下形式: w=输入值,x=计算值
④分别以行李重30公斤,80公斤为自变量,运行该程序。记录运行结果; ⑤源程序以ex4_8.c命名保存。 答案
/* 文件名:ex4_8.C */ /*程序功能:计算行李托运费*/ #include main() { }
运行结果: 输入行李重量:30
float w,x;
printf("输入行李的重量:"); scanf("%f",&w); if(w>50.0) else
x=w*0.5;
printf("行李重量w=%.2f公斤,托运费x=%.2f元\n",w,x);
x=50.0*0.5+(w-50.0)*0.8;
行李重量w=30.00公斤,托运费x=15.00元 输入行李重量:80
行李重量w=80.00公斤,托运费x=49.00元 2、编写程序,计算下列分段函数y 的值。
x 2+x-6 (x<0且x ≠-3)
x 2+5x+6 (0≤x <10且x ≠2及x ≠3) x 2-x-1 其他
y=
具体要求:
(1)自变量x 与函数值y 均用单精度类型。
(2)自变量x 用scanf()函灵敏输入,且输入前要有提示信息。结果输出采用以下形式:
X=具体值,y=具体值。
(3)分别输入x=-5.0,-3.0,1.0,2.0,2.5,3.0,5.0,运行该程序。源程序以ex4_9.c命名保存。 答案
/* 文件名:ex4_9.C */ /*程序功能:求分段函数的值*/ #include main() { }
3、广州市个人所得税计算方法如下: 应纳税所得额 =工资薪金所得-2000
应纳税额 = 应纳税所得额×税率-速算扣除数
其税率等级如下表所示:
float x,y;
printf("输入实数x:\n"); scanf("%f",&x); if(x
y=x*x-x-1; printf("y=%f\n",y);
y=x*x+x-6; y=x*x+5*x+6;
else if(x>=0 && x
编程计算个人应交纳的所得税,要求如下: ①用switch 语句实现该功能。
②用键盘输入个人月收入,输入前要有提示信息。
③要能判断输入数据的合理性,对于不合理的数据应输出错误信息。 ④输出结果中应包含个人税后月收入、应交的税金。 ⑤分别输入个人月收入1600元,2500元, 3500元,4300元, 8200元, 38000元,500000元,76000元,97000元,204000元,-800元,运行该程序。记录结果。
⑥源程序以ex4_10.c命名保存。 答案
设salary 表示个人工资薪金所得,real_salary表示税后月收入,ratal 表示应纳税所得额,grade 表示税率等级,tax 表示应纳税额
/* 文件名:ex4_10.c */ #include main() {
int grade;
float salary,real_salary,ratal,tax; printf("请输入个人工资薪金所得:\n "); scanf("%f", &salary); if(salary
else if(salary
printf("输入的数据错误\n"); ratal=0; tax=0;
{ } else {
case 1:tax=ratal*0.05-0;break; case 2:tax=ratal*0.1-25;break; case 3:tax=ratal*0.15-125;break; case 4:tax=ratal*0.2-375;break; case 5:tax=ratal*0.25-1375;break; case 6:tax=ratal*0.3-3375;break; ratal=salary-2000; grade=1; grade=2; grade=3; grade=4; grade=5; grade=6; grade=7; grade=8; if(ratal
if(ratal>500 && ratal2000 && ratal5000 && ratal20000 && ratal40000 && ratal60000 && ratal80000 && ratal
ratal=0; tax=0;
case 7:tax=ratal*0.35-6375;break; case 8:tax=ratal*0.4-10375;break; }
default: tax=ratal*0.45-15375; }
real_salary=salary-tax;
printf("应纳税额: %.2f元\n",tax);
printf("税后月收入: %.2f元\n",real_salary);
【实验小结】
应知:
1、选择结构的概念及其应用场合;
2、if 语句的语法格式及执行流程,if 语句的嵌套; 3、switch 语句的语法格式及执行流程,switch 语句的嵌套; 4、选择结构的算法表示——传统的流程图表示和N-S 流程图表示; 5、switch 语句括号内的表达式与case 语句中常量表达式的对应关系。 应会:
1、选择结构中条件的表示;
2、使用if 语句和if 语句的嵌套编写选择结构程序;
3、使用switch 语句和switch 语句的嵌套编写多分支选择结构程序。
【实验思考】
1、实现选择结构程序设计的方法有哪几种?各有什么特点?适用条件是什么? 答案
选择结构的实现:用if 语句、if …else …语句、if …else if…else 语句和switch 语句。
(1)If 语句的格式是 if (条件表达式) { 程序段 }
if 语句的特点是:通过判断条件表达式的值是true 或false ,来确定是否执行一段语句,或者决定执行哪段语句。
If 语句适合于只有两种选择的情况。 (2)if …else …语句的格式是: if (条件表达式) { 程序段1 } else { 程序段2 }
if …else …语句的特点是:
如果if 后面的判断条件的值为true ,则执行程序段1,否则执行else 后面的程序段2。
if …else …语句也适合于只有两种选择的情况。
(3)if …else if…else 语句的格式是: if (条件表达式1) { 程序段1 }
else if(条件表达式2) { 程序段2 }…
else if(条件表达式n ) { 程序段n } Else {
程序段n+1 }
if …else if…else 语句的特点是使用else 语句进行更多的条件判断,不同的条件对应不同的程序段。
if …else if…else 语句适合于有两个选择的情况。 (4)switch 语句 switch 语句的格式是: switch(表达式) {
case 取值1:
程序段1;break ; case 取值2:
程序段2;break; …
case 取值n:
程序段n;break; default:
程序段n+1;[ break;] }
Switch 的特点是:首先计算机表达式的结果,并将此结果同case 后面的值进行比较,然后根据比较结果来选择执行哪一段程序。
Switch 语句适合于有多个选择的情况。
2、如何设置选择结构中的判断条件?它在程序设计中的意义何在? 答案
一般用关系表达式或逻辑表达式来表示选择结构中的判断条件,也可以用任意类型的表达式(整型、实型、字符型等)。
判断条件是程序运行时的入口。
3、逻辑运算和关系运算的相同之处是什么?它们又有什么不同?
相同之处是:关系运算和逻辑运算的结果都是逻辑值,即" 真" 和" 假" 。经常结合在一起用于判断程序的流程。
不同之处:
关系运算符的作用是确定两个数据之间是否存在某种比较关系,关系运算要求关系运算符连接的两个运算对象为同类型数据
逻辑运算符的作用是确定两个对象之间是否存在某种逻辑关系,逻辑运算不要求逻辑运算符连接的两个运算对象为同类型数据
4、if 语句的使用形式有哪些?
答案
If 语句的使用有以下三种形式
(1)
if (条件表达式)
{
程序段
}
(2)
if (条件表达式)
{
程序段1
}
else
{
程序段2
}
(3)
if (条件表达式1)
{
程序段1
}
else if(条件表达式2)
{
程序段2
}…
else if(条件表达式n )
{
程序段n
}
Else
{
程序段n+1
}
5、switch 语句括号内表达式的值可以有哪些类型?case 语句中每个常量的类型是否可以和switch 语句括号内表达式的值的类型不同?
答案
switch 语句括号内表达式的值可以有整型、字符型或枚举类型。case 语句中每个常量的类型必须和switch 语句括号内表达式的值的类型相同
6、每个case 语句后的常量起什么作用,它们的值是否可以相同? 答案
每个case 语句后的常量是switch 的入口,它们的值必须互不相同。
7、switch 语句的执行流程是怎样的?
答案
首先计算switch 后面“表达式”的值,当switch 后面“表达式”的值,与某个case 后面的“常量表达式”的值相同时,就执行该case 后面的语句(组);当执行到break 语句时,跳出switch 语句,转向执行switch 语句的下一条语句。
8、switch 语句的break 起什么作用?
答案
当执行到break 语句时,跳出switch 语句,转向执行switch 语句的下一条语句。