• 沒有找到結果。

实验指导教材参考答案

在文檔中 第 3 章 分支结构 (頁 22-27)

double x1, y1, x2, y2, x3, y3;

double d12, d13, d23;

double area, s;

scanf ("%lf%lf",&x1,&y1);

scanf ("%lf%lf", &x2, &y2);

scanf ("%lf%lf", &x3, &y3);

d12 = sqrt ((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 -y2));

d13 = sqrt ((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3));

d23 = sqrt ((x2 - x3) * (x2 - x3) + (y2 - y3) * (y2 - y3));

if ((d12 + d13 > d23) && (d13 + d23 > d12)&& (d12 + d23 > d13)){

s=(d12 + d13 + d23) / 2;

area = sqrt (s * (s - d12) * (s - d13) * (s - d23));

printf ("L = %.2lf, A = %.2lf\n", s * 2.0, area);

} else

printf ("Impossible\n");

return 0;

}

3.4 实验指导教材参考答案

一 、 调 试 示 例

求一元二次方程的根:输入参数 a、b、c,求一元二次方程 ax2 + bx + c = 0 的根。

解答:

# include <stdio.h>

# include <math.h>

# define eps 0.0000000001 int main (void)

{

double a, b, c, d;

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

d = b * b - 4 * a * c;

if (fabs (a) < eps){

if (fabs (b) < eps){

if (fabs (c) < eps){

printf ("Zero Equation\n");

} else{

printf ("Not An Equation\n");

} } else{

printf ("%0.2f\n", -c / b);

} } else{

if (fabs (d) < eps){

printf ("%0.2f\n", -b / (a+a) );

}

else if (d > 0){

printf ("%0.2f\n", (-b + sqrt (d)) / (2 * a));

printf ("%0.2f\n", (-b - sqrt (d)) / (2 * a));

}

else if (fabs (b) < eps){

printf ("0.00+%0.2fi\n", sqrt (-d) / (2 * a));

printf ("0.00-%0.2fi\n", sqrt (-d) / (2 * a));

} else{

printf ("%0.2f+%0.2fi\n", -b / (2 * a), sqrt (-d) / (2 * a));

printf ("%0.2f-%0.2fi\n", -b / (2 * a), sqrt (-d) / (2 * a));

} }

return 0;

}

二 、 基 础 编 程 题

(1)计算符号函数的值:输入一个整数 x,计算并输出符号函数 sign(x) 的值。试编写相 应程序

⎪ ⎩

⎪ ⎨

⎧

>

=

<

=

=

0 1

0 0

0 1

) (

x x x x

sign y

解答:参见练习3-2。

(2)比较大小:输入 3 个整数,按从小到大的顺序输出。

解答:参见习题程序设计第1 题。

(3)统计字符:输入 10 个字符,统计其中英文字母、空格或回车、数字字符和其他字符的 个数。

解答:参见练习3-4。

(4)查询水果的单价:有 4 种水果,苹果(apples)、梨(pears)、桔子(oranges)和葡萄

(grapes),单价分别是 3.00 元/公斤,2.50 元/公斤,4.10 元/公斤和 10.20 元/公斤。在屏幕

上显示以下菜单(编号和选项),用户可以连续查询水果的单价,当查询次数超过5 次时,

自动退出查询;不到 5 次时,用户可以选择退出。当用户输入编号 1~4,显示相应水果的

单价(保留一位小数);输入0,退出查询;输入其他编号,显示价格为 0。试编写相应程序。

[1] apples [2] pears [3] oranges [4] grapes [0] Exit

解答:参见练习3-8。

(5)计算个人所得税:假设个人所得税为:税率 * (工资 - 1600)。请编写程序计算应缴的 所得税,其中税率定义为:

当工资不超过 1600 时,税率为 0;

• 当工资在区间(1600, 2500]时,税率为 5%;

• 当工资在区间(2500, 3500]时,税率为 10%;

• 当工资在区间(3500, 4500]时,税率为 15%;

• 当工资超过 4500 时,税率为 20%。

解答:

# include <stdio.h>

# include <math.h>

int main(void) {

double rate, salary, tax;

scanf("%lf", &salary);

if (salary > 4500.0){

rate = 0.20;

}

else if (salary > 3500.0){

rate = 0.15;

}

else if (salary > 2500.0){

rate = 0.10;

}

else if (salary > 1600.0){

rate = 0.05;

} else{

rate = 0.0;

}

tax = fab((salary - 1600) * rate);

printf("%.2f\n", tax);

return 0;

}

(6)统计学生成绩:输入一个正整数 n,再输入 n 个学生的成绩,统计五分制成绩的分布。

百分制成绩到五分制成绩的转换规则:大于或等于90 分为 A,小于 90 分且大于或等于 80 分为B,小于 80 分且大于或等于 70 为 C,小于 70 分且大于或等于 60 为 D,小于 60 分为 E。

解答:参见习题程序设计第4 题。

三 、 改 错 题

输出三角形面积和周长:输入三角形的3 条边 a、b、c,如果能构成一个三角形,输出

面积area 和周长 perimeter(保留 2 位小数);否则,输出“These sides do not correspond to a valid triangle”。(源程序 error03_2.cpp)

在一个三角形中,任意两边之和大于第3 边。三角形面积计算公式:

area=

s ( s − a )( s − b )( s − c )

其中,s = (a+b+c)/2

解答:

# include <stdio.h>

# include <math.h>

int main (void) {

int a, b, c;

double area, perimeter, s;

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

if ((a + b > c) && (b + c > a) && (a + c > b)){

perimeter = a + b + c;

s = (a + b + c) * 1.0 / 2;

area = sqrt(s * (s-a) * (s-b) * (s-c));

printf ("area = %.2f; perimeter = %.2f\n",area, perimeter);

} else {

printf ("These sides do not correspond to a valid triangle\n");

} return 0;

}

四 、 拓 展 编 程 题

(1)三天打鱼两天晒网:中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三

天打鱼两天晒网”,问这个人在以后的第 N 天中是“打鱼”还是“晒网”?试编写相应程序。

解答:

# include <stdio.h>

int main(void) {

int m, n;

scanf ("%d", &n);

m = n % 5;

if ((m >= 1) && (m < 4) ){

printf ("Fishing in day %d\n", n);

} else{

printf ("Drying in day %d\n", n);

}

return 0;

}

(2)高速公路超速处罚:按照规定,在高速公路上行使的机动车,超出本车道限速的 10%

则处 200 元罚款;若超出 50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对

该机动车的处理。

解答:参见习题程序设计第2 题。

(3)计算油费:假设现在 90 号汽油 6.95 元/升、93 号汽油 7.44 元/升、97 号汽油 7.93 元/

升。为吸引顾客,某自动加油站推出了“自助服务”和“协助服务”两个服务等级,分别可 得到5%和 3%的折扣。请编写程序,输入顾客的加油量 a,汽油品种 b(90、93 或 97)和服务 类型c(m 为自助服务,e 为协助服务),计算并输出应付款(保留小数点后 2 位)。

解答:

# include <stdio.h>

int main (void) {

int a, b;

char c ;

double price, money;

scanf ("%d%d", &a, &b);

getchar ();

c = getchar ();

if (b == 90){

price = 6.95;

}

else if (b == 93){

price = 7.44;

} else{

price = 7.93;

}

if(c == 'm'){

money = a * price * 0.95;

} else{

money = a * price * 0.97;

}

printf ("%.2f\n", money);

return 0;

}

在文檔中 第 3 章 分支结构 (頁 22-27)

相關文件