前言:后面这三题之所以独立出来是感觉这三题是数学题,本人数学实力有限,所以这三题代码部分基本上都出自于官方教材的课后习题答案部分。
企业发放的奖金根据企业的当年利润决定。
当利润(以 I表示) ****
从键盘输人当年利润 I,求应发奖金总数。
要求:
(1)用if语句编程序;
(2)用switch语句编程序。
代码难度:⭐
理解题目难度:⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
PS:本题我搞了一下午都没看懂,放弃了,所以下面的答案不是我写的,是课本配套的习题解答,给你们研究研究
switch形式的计算
#define _CRT_SECURE_NO_WARNINGS 1
#include
int main()
{
long i = 0;
double bonus, bon1, bon2, bon4, bon6, bon10;
int branch = 0;
bon1 = 100000 * 0.1;
bon2 = bon1 + 100000 * 0.075;
bon4 = bon2 + 200000 * 0.05;
bon6 = bon4 + 200000 * 0.03;
bon10 = bon6 + 400000 * 0.015;
printf("请输入利润i:");
scanf("%ld", &i);
branch = i / 100000;
if (branch > 10)
branch = 10;
switch (branch)
{
case 0:
bonus = i * 0.1;
break;
case 1:
bonus = bon1 + (i - 100000) * 0.075;
break;
case 2:
case 3:
bonus = bon2 + (i - 200000) * 0.05;
break;
case 4:
case 5:
bonus = bon4 + (i - 400000) * 0.03;
break;
case 6:
case 7:
case 8:
case 9:
bonus = bon6 + (i - 600000) * 0.015;
break;
case 10:
bonus = bon10 + (i - 1000000) * 0.01;
}
printf("奖金是:%10.2f\n",bonus);
return 0;
}
if形式的计算
#define _CRT_SECURE_NO_WARNINGS 1
#include
int main()
{
long i = 0;
double bonus, bon1, bon2, bon4, bon6, bon10;
bon1 = 100000 * 0.1;
bon2 = bon1 + 100000 * 0.075;
bon4 = bon2 + 100000 * 0.05; //这里是错的??为什么跟上面的不一样??
bon6 = bon4 + 100000 * 0.03;
bon10 = bon6 + 400000 * 0.015;
printf("请输入利润i:");
scanf("%ld", &i);
if (i <= 100000)
bonus = i * 0.1;
else if (i <= 200000)
bonus = bon1 + (i - 100000) * 0.075;
else if (i <= 400000)
bonus = bon2 + (i - 200000) * 0.05;
else if (i <= 600000)
bonus = bon4 + (i - 400000) * 0.03;
else if (i <= 1000000)
bonus = bon6 + (i - 600000) * 0.015;
else
bonus = bon10 + (i - 1000000) * 0.01;
printf("奖金是:%10.2f\n",bonus);
return 0;
}
有 4 个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为 1,见图 4.14。这 4 个塔的高度为10m.塔以外无建筑物。现输入任一点的坐标。求该点的建筑高度(塔外的高度为零).
代码如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include
int main()
{
int h = 10;
float x1 = 2;
float y1 = 2;
float x2 = -2;
float y2 = 2;
float x3 = -2;
float y3 = -2;
float x4 = 2;
float y4 = -2;
float x, y, d1, d2, d3, d4;
scanf("%f,%f", &x, &y);
d1 = (x - x1) * (x - x1) + (y - y1) * (y - y1);
d2 = (x - x2) * (x - x2) + (y - y2) * (y - y2);
d3 = (x - x3) * (x - x3) + (y - y3) * (y - y3);
d4 = (x - x4) * (x - x4) + (y - y4) * (y - y4);
if (d1 > 1 && d2 > 1 && d3 > 1 && d4 > 1)
h = 0;
printf("该点高度为%d\n", h);
return 0;
}
本题其实就是让你算该点到每个中心点的距离,只要点在塔外那么就是0,只要在塔内就是10.
根据代数知识,应该有以下几种可能:
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
int main()
{
float a, b, c, disc, x1, x2, realpart, imagpart;
printf("please enter a,b,c:");
scanf("%f,%f,%f", &a, &b, &c);
printf("The equation ");
if (fabs(a) <= 1e-6)
printf("is not a quadratic\\n");
else
{
disc = b * b - 4 * a * c;
if (fabs(disc) <= 1e-6)
printf("has two equal roots:%8.4f\n", -b / (2 * a));
else if (disc > 1e-6)
{
x1 = (-b + sqrt(disc)) / (2 * a);
x2 = (-b - sqrt(disc)) / (2 * a);
printf("has distinct real roots:%8.4f and 68.4fn", x1, x2);
}
else
{
realpart = -b / (2 * a);
imagpart = sqrt(-disc) / (2 * a);
printf("has complex roots:\n");
printf("%8.4f+%8.4fi\n", realpart, imagpart);
printf("%8.4f-%8.4fi\n", realpart, imagpart);
}
}
return 0;
}
本题答案亦出自教材课后习题的代码。