C语言程序设计实验课参考答案(实验四:分支结构1)

实验四 分支结构

1. 组别判断

说明

信息学课上要同学分组做期末报告,分组的方式为依座号顺序,每 3 个人一组。如:1, 2, 3 为第一组,4, 5, 6 为第二组….以此类推。

输入一个同学的座号,请判断他在哪一组。

输入输出格式及样例

输入数据

输入只有一行,含有一个正整数 n(1≤n≤60),代表那个同学的座号。

7

输出数据

输出组别。

3

参考答案

1
2
3
4
5
6
7
#include<stdio.h>
int main(){
int a;
scanf("%d", &a);
printf("%d", (a - 1) / 3 + 1);//也可以使用math.h文件中的ceil()函数,向上取整
return 0;
}

2.三角形面积

说明

三角形三边长 a,b,c,判断输入的 a,b,c 是否构成一个三角形,若三个边长不能构成三角形,则需要抛出异常。考虑:

  1. 判断三角形边长是否为正,否则抛出异常“the side length should be positive”
  2. 考虑三边长是否满足三角不等式(任意两边之和大于第三边),否则抛出以上“the side length should fit the triangle inequation”
  3. 如果满足全部条件,则根据海伦公式Area = sqrt(s(s-a)(s-b)(s-c)),计算三角形面积,输出面积值。其中s=(a+b+c)/2为半周长。

测试说明

输入描述:

输入三角形三边长实数 a,b,c

输出描述:

根据是否有异常输出结果,平台会对你编写的代码进行测试:

测试输入:0 5 5

预期输出:the side length should be positive

测试输入:1 2 4

预期输出:the side length should fit the triangle inequation

测试输入:3 4 5

预期输出:Area: 6.000

参考答案

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(){
int a, b, c;
double s, area;
scanf("%d%d%d", &a, &b, &c);
if(a<=0 || b<=0 || c<=0){
printf("the side length should be positive");
}else if(a+b<=c || a+c<=b || b+c<=a){ //这里一定要用else if!
printf("the side length should fit the triangle inequation");
}else{
s = (a+b+c) / 2.0;
area = sqrt(s*(s-a)*(s-b)*(s-c));
printf("Area: %.3f", area);
}
return 0;
}

3. 奇偶数判断

说明

给定一个整数,判断该数是奇数还是偶数。

输入输出格式及样例

输入数据:

输入仅一行,一个大于零的正整数n。

5

输出数据:

输出仅一行,如果n是奇数,输出odd;如果n是偶数,输出even。

odd

参考答案

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
int main(){
int a;
scanf("%d", &a);
if(a%2==0){
printf("even");
}else{
printf("odd");
}
return 0;
}

4. 收费

说明

乘坐飞机时,当乘客行李小于等于20公斤时,按每公斤1.68元收费,大于20公斤时,按每公斤1.98元收费,编程计算收费(保留2位小数)。

输入输出格式及样例

输入数据:行李重量。

20.00

输出数据:费用(保留2位小数)。

33.60

参考答案

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
int main(){
double a;
scanf("%lf", &a);
if(a<=20){
printf("%.2f", a * 1.68);
}else{
printf("%.2f", a * 1.98);
}
return 0;
}

5. 选择题判定

说明

受疫情的影响,2020 年蓝桥杯大赛青少年创意编程 C++ 组的省赛在网上进行。选择题有 5 道,都是单选题,每道 30 分,共计 150 分。每道选择题选对得 30 分,选错或者不选得 0 分。

注意以下仅为假设,不代表本场考试选择题的真实答案,仅是针对本编程题假设出的答案。

假设正确的答案为 “DCBAD”,那么你能根据选手的提交情况,判定选手的选择题总分吗?选手提交一个由5个字符组成的字符串,代表选手的选项。字符串仅能包含如下 5 种字符:”D”、”C”、”B”、”A”、”E”。其中 “A”、”B”、”C”、”D” 代表选手选择了某个选项,而 “E” 代表选手未做该题。

输入输出格式及样例

输入数据:选手提交的一个由 5 个字符组成的字符串。

DCEAA

输出数据:一个整数,代表选手选择题的总分。

90

参考答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>
int main(){
char asw[] = "DCBAD"; //使用了数组
char a;
int i=0, score = 0;
while(a = getchar()){
if(a == '\n' || a == EOF){ //针对头歌平台,判断读取字符结束的两种条件
break;
}
if(a == asw[i]){
score += 30;
}
i++;
}
printf("%d", score);
return 0;
}

6. 双面打印

说明

为了方便小蓝的学习,妈妈会把老师发放的材料打印出来。而为了环保,妈妈一般都进行双面打印,也就是一张纸的正反面都打印出相应的内容。举个例子来说:如果一份电子材料有 3 页,那么需要 2 张纸进行打印;如果一份电子材料有 4 页,那么还是需要 2 张纸进行打印。现在已经知道了一份电子版的学习材料的页数 N,你能帮小蓝计算一下需要几张纸吗?

输入输出格式及样例

输入数据:整数 N(0≤N≤1000),代表一份电子版的学习材料的页数。

7

输出数据:双面打印所需纸的张数。

4

参考答案

1
2
3
4
5
6
#include<stdio.h>
int main(){
int n;
scanf("%d", &n);
printf("%d", (n + 1) /2);
}

7. 奇偶ASCII值判断

说明

任意输入一个字符,判断其ASCII值是否是奇数,若是,输出YES,否则,输出NO。例如,字符’A’的ASCII值是65,则输出YES,若输入字符’B’(ASCII值是66),则输出NO。

输入输出格式及样例

输入数据:输入一个字符。
A

输出数据:如果其ASCII值为奇数,则输出YES,否则,输出NO。

YES

参考答案

1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
int main(){
char a = getchar();
if(a%2==0){
printf("NO");
}else{
printf("YES");
}
return 0;
}

8. 孔融让梨

说明

孔融小时候聪明好学,才思敏捷,大家都夸他是神童。一日,父亲叫孔融分梨,孔融挑了个最小的梨,其余按长幼顺序分给兄弟。现在,有3个梨。输入3个整数表示这3个梨的重量,请输出最小的数。

输入输出格式及样例

输入数据:3个整数,表示3个梨的重量。

3 4 5

输出数据:最小的数。

min=3

参考答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>
int main(){
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
if(a<b){
if(a<c){
printf("min=%d", a);
}
}else{
if(b<c){
printf("min=%d", b);
}else{
printf("min=%d", c);
}
}
return 0;
}

9. 卡牌游戏

说明

有一种卡牌游戏,玩家有无数张卡牌,每张卡片都写着一个正整数 a 表示这张卡牌能对敌人造成的伤害值,即打出这张卡牌会使敌人的血量减少 a 。已知敌人的血量为 b,当敌人的血量小于等于 0 时,玩家就取得了胜利。请问玩家至少要使用多少张卡牌,才能取得胜利。

输入输出格式及样例

输入数据:输入有两个空格隔开的正整数 a,b(1≤a,b≤10^9).

3 7

输出数据:输出一行,包含一个整数,表示该玩家至少要使用的牌数。

3

参考答案

1
2
3
4
5
6
7
#include<stdio.h>
int main(){
int a, b;
scanf("%d%d", &a, &b);
printf("%d", b%a ? b / a + 1 : b / a);//这种都可以使用向上取整的方法ceil()
return 0;
}

10.还要等多久

说明

晶晶又想打电话给贝贝,可是这次他碰到了另一个问题。晶晶不想打扰贝贝课,也不想才刚打通电话她就要上课去了,因此他决定一定要在刚好 25 分钟的时候打电话给她。给你现在的时间的分钟,请你帮他算算看还要等多久才能打电话给贝贝?

输入输出格式及样例

输入数据:输入只有一行,包含现在时间的分钟 m(0≤m≤59)。

20

输出数据:输出还要等几分钟晶晶才能打电话。

5

参考答案

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<stdio.h>
int main()
{
int a;
scanf("%d", &a);
if(a<=25)
{
printf("%d", 25-a);
}else{
printf("%d", 85-a);
}
return 0;
}