头歌C语言实验 练习4:选择结构 II

第1关:三角形的面积

问题描述

给定三条线段的长度,判断这三条线段是否能够构成三角形。如果能够构成,则计算其面积。 三角形的面积可以根据海伦公式计算: 若三角形的三边边长分别为a,b,c,则三角形的面积: $$S = \sqrt {p(p-a)(p-b)(p-c)}$$
其中,p是三角形的半周长,即:

p=a+b+c2p = \frac{a+b+c} {2}

输入

输入包括用英文逗号分开的三个浮点数,分别表示三条线段的长度。

输出

对于可以构成三角形的情况,输出三角形的面积,保留4位小数。 对于不能构成三角形的情况, 输出“无法构成三角形”(不包括双引号)。

输入示例

3,4,5

输出示例

6.0000

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <math.h>

int main() {
double a, b, c;
scanf("%lf,%lf,%lf", &a, &b, &c);

if (a + b > c && a + c > b && b + c > a) {
double p = (a + b + c) / 2;
double area = sqrt(p * (p - a) * (p - b) * (p - c));
printf("%.4f\n", area);
} else {
printf("无法构成三角形\n");
}

return 0;
}

第2关:点和正方形的关系

问题描述

在平面坐标系中有一个正方形,四个顶点的坐标分别为(1, 1),(1, -1),(-1, -1)和(-1, 1)。给出平面中一个点的坐标(x, y),判定这个点是否在正方形范围内(包括正方形边界)。

输入

两个用空格分开的浮点数x和y,表示这个点的坐标(x, y)。

输出

若点在正方形范围内,输出yes,否则输出no。

输入示例

1 -0.3

输出示例

yes

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>

int main() {
double x, y;
scanf("%lf %lf", &x, &y);

if (x >= -1 && x <= 1 && y >= -1 && y <= 1) {
printf("yes\n");
} else {
printf("no\n");
}

return 0;
}

第3关:晶晶赴约会

问题描述

晶晶的朋友贝贝约晶晶下周一起去看展览,但晶晶每周的1、3、5有课必须上课,请使用switch多分支结构编写一段程序帮助晶晶判断她能否接受贝贝的邀请。

输入

输入有一行,贝贝邀请晶晶去看展览的日期,用数字1到7表示从星期一到星期日。 输入数据保证一定不会超出1~7的范围。

输出

输出有一行,如果晶晶可以接受贝贝的邀请,输出YES,否则,输出NO。 注意YES和NO都是大写字母!

输入示例

2

输出示例

YES

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>

int main() {
int day;
scanf("%d", &day);

switch(day) {
case 1:
case 3:
case 5:
printf("NO\n");
break;
default:
printf("YES\n");
break;
}
return 0;
}

第4关:字符变身

问题描述

输入一个字符,如果是小写字母,则变身为对应的大写字母;如果是大写字母,则变身为对应的小写字母;其他字符不变身。请输出变身后的字符(包括不变身的字符)。

输入

一个字符,即要变身的字符。

输出

变身后的字符。

输入示例

A

输出示例

a

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

int main() {
char ch;
scanf("%c", &ch);

if (ch >= 'a' && ch <= 'z') {
printf("%c", ch - 'a' + 'A');
} else if (ch >= 'A' && ch <= 'Z') {
printf("%c", ch - 'A' + 'a');
} else {
printf("%c", ch);
}

return 0;
}

第5关:爬山问题

问题描述

中秋节到了,小明和朋友们约好了去爬山。山的形状就像是一个圆形平台,其纵截面是一个左右对称的梯形,如下图所示:
其底面在xy水平面上,底面圆心在原点O处。圆台的上底半径为3,下底半径为5,高为7。现在给出小明所在位置的平面坐标(x, y),聪明的你能否编写一段程序,自动计算出小明所在位置的高度z呢?

输入

两个用英文逗号分开的浮点数x和y,表示小明所在位置的平面坐标(x, y)。

输出

一个浮点数z,表示小明所在位置的高度z,保留2位小数。

输入示例

2.7,3.4

输出示例

2.30

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#include <math.h>

int main() {

    double x, y;
    double r1, r2, h;
    double d, z;

    scanf("%lf,%lf", &x, &y);
    r1 = 3.0;
    r2 = 5.0;
    h = 7.0;
    d = sqrt(x * x + y * y);

    if (d >= r2) {
        z = 0.0;
    } else if (d <= r1) {
        z = h;
    } else {
        z = h * (1 - (d - r1) / (r2 - r1));
    }
    printf("%.2f\n", z);
    return 0;
}