前言
延续昨天的内容,我们继续来讲几道基础题
这些题目仍然来自 c primer pro
昨天的题都是理论的题,今天让我们看看,结合实际的题目
1分支
第一题
编写一个程序输入用户一周的工作的小时数,然后打印工资总额以及税金和净收入
a.基本工资=10.00美元/小时
b.加班(超过40小时)按1.5倍的时间计算
c.税收 前300美元为15% 接下来的150美元为20% 余下的为25%
1分析这个是实际的题目,编程实现相信大家都会但要注意的是,里面出现了很多的常数
我们最好是使用常量来实现,并且他是一个交互性程序我们因该多打印几次提示词
2代码实现
#define tax1 0.15
#define tax2 0.2
#define tax3 0.25
int main()
{
while (1)
{
int hour = 0;
float salary = 0.0;
float tax = 0.0;//温馨提示tax的意思税
printf("请输入您的一周工作时间<:");
scanf("%d", &hour);
if (hour > 40)
salary = 40 * 10 + (hour - 40) * 1.5 * 10;
else
salary = hour * 10;
if (salary <= 300)
{
tax = salary * tax1;
}
else if (salary > 300 && salary <= 450)
{
tax = 300 * tax1 + (salary - 300) * tax2;
}
else
tax = 300 * tax1 + 150 * tax2 + (salary - 450) * tax3;
printf("salary=%.2f tax=%.2f money=%.2f\n", salary, tax, salary - tax);
}
return 0;
}
这个代码比较简单但是仍需要多加练习
3结果截图
第二题
由于接下来的题目长的吓人,而且大同小异,我们接下来就来讲解如何使用
switch分支去写一个菜单
我们以一个计算器为例
大家如果觉得难,那就多练好吧
int Add(int a, int b)
{
return a + b;
}
int Mul(int a, int b)
{
return a * b;
}
int Div(int a, int b)
{
return a / b;
}
int Sub(int a, int b)
{
return a - b;
}
void menu()
{
printf("***********1加 2减********\n");
printf("***********3乘 4除********\n");
printf("***************exit 0********\n");
}
int main()
{
int(*p[4])(int, int) = { Add,Sub,Mul,Div };
int input; int a; int b;
do
{
menu();
printf("请输入您的第一个操作数\n");
scanf("%d", &a);
printf("请输入您的第二个操作数\n");
scanf("%d", &b);
printf("请输入您要的操作(0---4)\n");
scanf("%d", &input);
switch (input)
{
case 1: printf("结果为%d\n", p[input-1](a, b)); break;
case 2: printf("结果为%d\n", p[input-1](a, b)); break;
case 3: printf("结果为%d\n", p[input-1](a, b)); break;
case 4: printf("结果为%d\n", p[input-1](a, b)); break;
default: printf("没有该操作请重新输入\n");
}
} while (input);
printf("退出成功\n");
return 0;
}
大家看看通过switch我们可以完成菜单的制作
这个代码计算器还是有很大的缺陷
1想要退出时,每次都要先把两个操作数打完才行
2不能继承上一次的运算的结果
3类型上还不够严谨,应该使用浮点型,而且除法的除数不能为0
我们仍然会在接下来的讲解中解决问题
2循环
第一题
通过循环让用户输入两个浮点数,输出两数之差与两数之计积相除,直至用户输入非数,循环结束
1分析首先两数之积作为除数是不能为0的 怎么才能输入非数就结束呢,利用scanf的返回值
2代码实现
int main()
{
double a, b;
printf("请输入两个小数\n");
while (scanf("%lf %lf", &a, &b)==2)//scanf函数的返回值为取到值的个数
{
assert(a != 0 && b != 0);
printf("结果是:%lf\n", (a - b)/(a * b));
printf("请输入两个小数\n");
}
}
3执行结果
大家看是不是遇到a就结束了呢,
当然大家仍然对scanf他是如何作用的不清楚,我们在今后的博客还会提到
第二题
输入一个上下限,计算上下限数的平方和,并且可以自动控制结束与否
不考虑溢出
1分析怎么才能自动结束 上下限的值是否会出错
2代码实现
long haha(int x, int y)
{
long d=0;
for (x = x; x <= y; x++)
{
d = d + x * x;
}
return d;
}
int main()
{
int a, b;
long c;
int input=1;
while (input)
{
printf("请输入一个下限和一个上限数\n");
scanf("%d %d", &a, &b);
if (a > b)
{
printf("输入错误\n");
printf("请输入使a<=b\n");
continue;
}
c=haha(a, b);
printf("上限的平方%ld到下限的平方%ld的和是%ld\n", a * a, b * b, c);
printf("是否退出?是:0 否:1<:");
scanf("%d", &input);
}
printf("退出成功\n");
return 0;
}
3看执行结果
3总结
今天的题目看起来少但是每一个都很实用,还是建议初学者多多练习
谢谢大家的阅读