(六)练习
问题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);
}