您的位置:首页 > 其它

选择结构的程序设计(参考程序)

2009-05-31 16:56 302 查看
(六)练习

问题1:某商场为了对苹果进行促销,规定购买2千克以上可以在原价每千克1.5的基础上打8折。请设计一个程序计算购买x千克苹果的应付款。

(1)分析问题: 设买苹果的重量为x千克,应付款为y元,如果x>=2,则y=1.5*x*0.8,否则y=1.5*x。

(2)设计算法: ① 输入x的值 ② 如果x>=2,则y=1.5*x*0.8

③ 否则y=1.5*x ④ 输出y的值

(3)编写程序: Private sub command1_click()

Dim x as single

x=Inputbox(“请输入购买苹果的重量”)

if x>=2 then

y=1.5*x*0.8

else

y=1.5*x

end if

Print “应付款”;y;“元”

End sub

(4)调式程序

(七)多重选择语句

问题2:输入一个成绩,如果90分以上,则输出“优秀”;80-89,则输出“良好”;70-79,则输出“中等”;60-69,则输出“及格”;60分以下则输出“不及格”,请编写程序。

如果这道题使用if语句来编写程序的话,程序如下:

Private sub command_click()

X=inputbox(“请输入一个分数”)

If X>=90 then print”优秀”

If X>=80 and X<89 then print”良好”

If X>=70 and X<79 then print”中等”

If X>=60 and X<69 then print”及格”

If X <60 then print”不及格”

End sub

在程序2-4中,使用了5个if语句来处理5种情况。这样的程序在可读性和效率方面都是比较差的,如果再多一些情况,它的缺陷就会暴露得更加明显,如何处理这个问题呢?

(1)多重选择语句格式: 在VB语言中,设置了一个处理多种情况的语句,称为多重选择语句,它的基本格式为:

select case 表达式

case 表达式列表1

语句组1

case 表达式列表2

语句组2

……

Case 表达式列表n

语句组n

case else

语句组n+1

end select

其中: 1、表达式和表达式列表可以是数值型或字符型,表达式列表还可以是多个用逗号分开的表达式。

2、表达式列表与表达式的类型必须相同。

3、表达式列表又称值域,它有如下三种形式:

① 表达式1,表达式2,……

② 表达式1 to表达式i(i<=n)

③ Is关系表达式

(2)多重选择语句的执行过程

多重选择语句的执行过程是:

当表达式的值为表达式列表1时,执行语句组1;

当表达式的值为表达式列表2时,执行语句组2;

……

当表达式的值为表达式列表n时,执行语句组n;

当表达式的值不是上述值时,执行语句组n+1;

有了多重选择语句,对于多种情况的选择问题,就可以利用它来解决。运用多重选择语句编写问题2的程序如下:

Private sub command_click()

X=inputbox(“请输入学生成绩”)

Select case X

Case Is>=90

Print”优秀”

Case 80 to 89

Print”良好”

Case 70 to 79

Print”中等”

Case 60 to 69

Print”及格”

Case else

Print”不及格”

End select

End sub

(八)练习

问题3:我们把字符作如下的分类:大写字母:A…Z;小写字母:a…z;数字:0…9;其它字符。编写程序,根据上述分类的方法,输入一个字符,报告该字符所属的类型。

三、编写一个C程序,计算并显示某人根据下列表达式确定的周薪:“如果工作时间小于或等于40小时,那么该职员将得到 8.00 元/小时;否则,该职员将在 320.00 元的基础上,对于超过40小时的部分,再加上 12.00 元/小时”。你所编写的程序请求输入工作时数,并将得到的薪水作为输出结果显示出来。

/* 程序:Ls05Ex03.c

*/

#include <stdio.h>

void main()

{

int workHours; //声明工作时数

float weekPay; //声明周薪

//接收用户输入的周工作时数

printf("请输入您周工作的时数:");

scanf("%d",&workHours);

//计算周薪

if(workHours<=40) //周工作时间在40小时或以下

weekPay = workHours * 8.0;

else //周工作时间在40小时以上

weekPay = (workHours-40)*12.0 + 320.0;

//输出周薪

printf("您的周薪为%.2f\n",weekPay);

}

四、编写一个C程序, 求解ax2 + bx + c = 0 方程的根。

提示:如果方程有根(含同根),求解并输出x1,x2,如果方程没根,输出信息“方程无实根!”。

思考并回答:你认为需要运行几次所写的程序才能确认它运行正常?在每次运行程序时,你输入了哪些数据?

参考程序:

/* 程序:Ls05Ex04.c

求一元二次方程的根

*/

#include <stdio.h> //包括标准输入输出函数头文件

#include <math.h> //包括数学方法头文件

void main()

{

//声明变量

float a,b,c,x1,x2;

printf("请输入a,b,c的值:")

scanf("%f%f%f",&a,&b,&c);

if(b*b-4*a*c>=0) //如果方程有根

{

x1 = -b+sqrt(b*b-4*a*c)/(2*a);

x2 = -b-sqrt(b*b-4*a*c)/(2*a);

printf("x1=%.2f\nx2=%.2f\n",x1,x2);

}

else //方程无解

printf("该方程无实根!\n");

}

五、根据下表计算一下销售人员的月收入

表 销售人员的月收入

月销售额

收 入

大于或等于50,000美元

375美元,加上销售额的16%

小于50,000美元,但大于或等于40,000美元

350美元,加上销售额的14%

小于40,000美元,但大于或等于30,000美元

325美元,加上销售额的12%

小于30,000美元,但大于或等于20,000美元

300美元,加上销售额的 9%

小于20,000美元,但大于或等于10,000美元

250美元,加上销售额的 5%

小于10,000美元

200美元,加上销售额的 3%

 要求分别用if-else语句和switch-case语句编写C程序,接受销售人员的月销售额,计算其月收入

[参考程序: if-else 结构]:

/* 程序:Ls05Ex05a.c */

#include <stdio.h> //包括标准输入输出头文件

void main() //主函数

{

//定义销售额和薪水

double sale,pay;

//接收用户输入的销售额

printf("请输入您本月的销售额:");

scanf("%lf",&sale);

//计算就付薪水

if( sale>=50000.00 ) //销售额在 50000.00 以上

pay = 375.00 + sale*0.16;

else if( sale>=40000.00 ) //销售额为 [40000.00,50000.00)

pay = 350.00 + sale*0.14;

else if( sale>=30000.00 ) //销售额为 [30000.00,40000.00)

pay = 325 + sale*0.12;

else if( sale>=20000.00 ) //销售额为 [20000.00,30000.00)

pay = 300 + sale*0.09;

else if( sale>=10000.00 ) //销售额为 [10000.00,20000.00)

pay = 250 + sale*0.05;

else //销售额为 10000.00 以下

pay = 200 + sale*0.03;

//输出本月应付薪水

printf("本月薪水为$%.2lf.\n",pay);

}

[参考程序: switch 结构]:

/* 程序:Ls05Ex05b.c */

#include <stdio.h> //包括标准输入输出头文件

void main() //主函数

{

//定义销售额和薪水

double sale,pay;

//接收用户输入的销售额

printf("请输入您本月的销售额:");

scanf("%lf",&sale);

//计算就付薪水

switch((int)(sale/10000.00)) //进行折算

{

case 0: //销售额为 10000.00 以下

pay = 200 + sale*0.03;

break;

case 1: //销售额为 [10000.00,20000.00)

pay = 250 + sale*0.05;

break;

case 2: //销售额为 [20000.00,30000.00)

pay = 300 + sale*0.09;

break;

case 3: //销售额为 [30000.00,40000.00)

pay = 325 + sale*0.12;

break;

case 4: //销售额为 [40000.00,50000.00)

pay = 350.00 + sale*0.14;

break;

default: //销售额在 50000.00 以上

pay = 375.00 + sale*0.16;

}

//输出本月应付薪水

printf("本月薪水为$%.2lf.\n",pay);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: