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

实验五 分支结构

1. 虫子吃苹果

说明

你买了一箱n个苹果,很不幸的是买完时箱子里混进了一条虫子。虫子每x小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过y小时你还有多少个完整的苹果?

输入输出格式及样例

输入数据(输入仅一行,包括n,x和y(均为整数)):10 4 9

输出数据(输出也仅一行,剩下的苹果个数):7

参考答案

1
2
3
4
5
6
7
8
#include<stdio.h>
int main(){
int n, x, y, eat;//定义四个变量
scanf("%d%d%d", &n, &x, &y);//获取输入的三个数
eat = y%x ? y/x + 1: y/x;//首先判断虫子吃了多少个苹果
printf("%d", eat < n ? n - eat : 0);//再判断还剩下多少个,并输出结果
return 0;
}

2.计算邮资

说明

根据邮件的重量和用户是否选择加急计算邮费。计算规则:重量在1000克以内(包括1000克), 基本费8元。超过1000克的部分,每500克加收超重费4元,不足500克部分按500克计算;如果用户选择加急,多收5元。

输入输出格式及样例

输入数据(输入一行,包含整数和一个字符,以一个空格分开,分别表示重量(单位为克)和是否加急。如果字符是y,说明选择加急;如果字符是n,说明不加急。)

1200 y

输出数据(输出一行,包含一个整数,表示邮费)

17

参考答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
int main(){
int a, price = 8;//定义变量,初始化基本价格为8,
char b;
scanf("%d %c", &a, &b);//获取输入的重量及是否加急字符
if(a > 1000){//大于1000时,需计算1000以外重量的费用,
//这里判断重量超出1000的部分是否能整除500,不能整除商+1,用商乘以单价,累加至总价格上
price = price + ((a - 1000) % 500 ? ((a - 1000) / 500 + 1) * 4 : ((a - 1000) / 500) * 4);//可以使用math.h中的ceil()向上取整函数
}
if(b == 'y'){//在判断是否加急,加急费用+5
price += 5;
}
printf("%d", price);
return 0;
}

3. 骑车与走路

说明

在清华校园里,没有自行车,上课办事会很不方便。但实际上。并非去办任何事情都是骑车快,因为骑车总要找车、开锁、停车、锁车等,这要耽误一些时间。假设找到自行车,开锁并骑上自行车的时间为27秒;停车锁车的时间为23秒;步行每秒行走1.2米,骑车每秒行走3.0米。请判断走不同的距离去办事,是骑车快还是走路快。如果骑车快,输出一行”Bike”;如果走路快,输出一行”Walk”;如果一样快,输出一行”All”。

输入输出格式及样例

输入数据(输入一行,包含一个整数,表示一次办事要行走的距离,单位为米)

120

输出数据(输出一行,如果骑车快,输出一行”Bike”;如果走路快,输出一行”Walk”;如果一样快,输出一行”All”)

Bike

参考答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<stdio.h>
int main(){
int a;//定义变量a,存储输入的距离
double x, y;//x,y分别表示骑车和走路的时间
scanf("%d", &a);
//分别计算两种方式的用时
x = 27 + 23 + a / 3.0;
y = a / 1.2;
//比较大小 输出最快的交通方式
if(x>y){
printf("Walk");
}else if(x==y){
printf("All");
}else{
printf("Bike");
}
return 0;
}

4. 点和正方形的关系

说明

有一个正方形,四个角的坐标 (x,y) 分别是 (1,-1),(1,1),(-1,-1),(-1,1),x 是横轴,y 是纵轴。请你写一个程序,判断一个给定的点是否在这个正方形内(包括正方形边界)。

输入输出格式及样例

输入数据(输入一行,包括两个整数 x、y,以一个空格分开,表示坐标 (x,y)(−10≤x,y≤10)):

1 1

输出数据(输出一行,如果点在正方形内,则输出”yes”,否则输出 “no”):

yes

参考答案

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

5. 字符类型判断

说明

输入一个字符,判断该字符是否大写字母、小写字母、数字字符或其他字符。分别输出对应的提示信息。

输入输出格式及样例

输入数据(输入为一个字符):

1

输出数据(如果该字符是大写字母,则输出”upper”;若是小写字母,则输出”lower”;若是数字字符,则输出”digit”;若是其他字符,则输出”other”。(输出不含双引号)):

digit

参考答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
int main(){
char a;
a = getchar();
if(a<='z' && a>= 'a'){
printf("lower");
}else if(a<= 'Z' && a>= 'A'){
printf("upper");
}else if(a>='0' && a<='9'){
printf("digit");
}else{
printf("other");
}
return 0;
}

6. 邮寄包裹

说明

邮局对邮寄包裹有如下规定:若包裹的重量超过 30 千克,不予邮寄,对可以邮寄的包裹每件收手续费 0.2 元,再加上根据下表按重量 x 计算的结果(不同重量段相应的收费不同)。

重量(千克) 收费标准(元/公斤)
x<=10 0.80
10<x<=20 0.75
20<x<=30 0.70

请你编写一个程序,输入包裹重量,输出所需费用或”Fail”表示无法邮寄。

输入输出格式及样例

输入数据(输入一个整数 x,表示包裹的重量(单位:千克)。(0<x≤100)):

7

输出数据(输出对应的费用(答案保留 2 位小数)或”Fail”表示无法邮寄。):

5.80

参考答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<stdio.h>
int main(){
int x;
double price = 0.2;//初始价格
scanf("%d", &x);
//根据不同重量进行计算价格
if(x>30){
printf("Fail");
return 0;//大于30时,通过return结束主函数
}
else if(x>20){
price += 8.0 + 7.5 + (x - 20) * 0.7;//分段收费
}
else if(x>10){
price += 8.0 + (x - 10) * 0.75;
}
else{
price += 0.2 + x*0.80;
}
printf("%.2f", price);
return 0;
}

7. 有一门课不及格的学生

说明

给出一名学生的语文和数学成绩,判断他是否恰好有一门课不及格(成绩小于60分)。若该生恰好有一门课不及格,输出1;否则输出0。

输入输出格式及样例

输入数据(一行,包含两个在0到100之间的整数,分别是该生的语文成绩和数学成绩):

50 80

输出数据(若该生恰好有一门课不及格,输出1;否则输出0):

1

参考答案

1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
int main(){
int a, b;
scanf("%d%d", &a, &b);
//判断只有1门课不及格的情况,两种情况,用或||来表示
if((a<60&&b>=60)||(a>=60&&b<60)){
printf("1");
}else{
printf("0");
}
return 0;
}

8. 闰年与平年

说明

大家都知道,每四年一个闰年。按照每四年一个闰年计算,过四百年就会多出大约3.12天,因此规定整百数的年份必须是400的倍数才是闰年,这就是通常所说的:四年一闰,百年不闰,四百年再闰。

试编一个程序,输入一个年份,判断是平年还是闰年。

输入输出格式及样例

输入数据(一行一个年份):

2020

输出数据(输出是平年还是闰年,详情见“样例输出”):

2020是闰年

参考答案

1
//参考书上示例代码

9. 回文数

说明

先计算出两个正整数 a+b 的结果 sum,然后要判断 sum 是不是回文数。

回文数:设 n 是一任意自然数。若将 n 的各位数字反向排列所得自然数 n1 与 n 相等,则称 n 为回文数。例如 121 是回文数,而 123 不是回文数。

输入输出格式及样例

输入数据(输入共一行,两个以空格隔开的正整数 a,b(1≤a,b≤100)):

80 41

输出数据(输出共两行,第一行一个正整数 sum,表示 a,b 的和。
如果 sum 是回文数,则第二行输出 “Yes”,否则第二行输出 “No”。输出不带引号。):

121

Yes

参考答案

1
//参考书上示例代码

10.这个月有几天

说明

输入一个年份和一个月份,输出该月的天数。

输入输出格式及样例

输入数据(两个整数y(1600≤y≤3000)和m (1≤m≤12),分别表示年份和月份):

1900 2

输出数据(一个整数,表示该月的天数):

28

参考答案

1
//参考书上示例代码

11. 简单计算器

说明

设计一个最简单的计算器,支持’+’、’-‘、’’、’/‘四种运算。

仅需考虑输入输出为整数的情况,数据和运算结果不会超过 int 表示的范围。

输入输出格式及样例

输入数据(输入只有一行,共有三个参数,其中第 1、2 个参数为整数,第 3 个参数为操作符(’+’、’-‘、’’、’/‘或其它符号)):

1 2 +

输出数据(输出只有一行,一个整数,为运算结果。然而:
如果出现除数为 0 的情况,则输出:”Divided by zero!”;
如果出现无效的操作符(即不为’+’、’-‘、’*’、’/‘之一),则输出:”Invalid operator!”。):

3

参考答案

1
//使用switch语句判断运算符

12. 成绩等级

说明

风之巅小学规定,若测试成绩大于或等于90分为“A”,大于或等于70分小于90分为“B”,大于或等于60分小于70分为“C”,60分以下为“D”。现在输入一个成绩,输出它的等级。

输入输出格式及样例

输入数据(一个整数,表示成绩):

99

输出数据(输出等级):

A

参考答案

1
//

13. 晶晶赴约会

说明

晶晶的朋友贝贝约晶晶下周一起去看展览,但晶晶每周的 1、3、5 必须上课,请帮晶晶判断他能否接受贝贝的邀请,如果能输出”YES”;如果不能则输出”NO”。

输入输出格式及样例

输入数据(输入为一行,贝贝邀请晶晶去看展览的日期,用数字 1 到 7 表示从星期一到星期日):

2

输出数据(输出为一行,如果晶晶可以接受贝贝的邀请,输出”YES”;否则,输出”NO”):

YES

参考答案

1
// 求模,判断除以7的余数

14. 小J的旅游计划

说明

寒假小J计划去海南旅游,他发现:

1、如果早上11点以前(不包含11点)出发,可以做汽车去;

2、如果6~15点出发,可以坐高铁;

3、如果9~24点(不包含24点)出发,可以坐飞机。

现在给你一个小J打算出发的时间,请你给出他共有几种去海南的方法。

输入输出格式及样例

数据1 数据2 数据3 数据4 数据5 数据6
输入数据(一个正整数,t(0≤t<24),表示小,J打算出发的时间) 5 6 9 10 11 23
输出数据(一个正整数,表示在这个出发时间,小J可以选择的乘坐方法数) 1 2 3 3 2 1
Hint
1、若5点出发,只能乘坐汽车;   
2、若6点出发,既可以乘坐汽车,又可以乘坐高铁;
3、若10点出发,既可以乘坐汽车、高铁,又可以乘坐飞机;
4、若11点出发,既可以乘坐高铁,又可以乘坐飞机;
5、若23点出发,只能乘坐飞机。

参考答案

1
//分段判断

15. 深深的生活

说明

深深是一个非常懂生活的男孩,他给自己一周 7 天的衣服搭配了 7 种不同的色系,从周日到周六依次是:red, orange, yellow, green, indigo, blue, violet。

现在请你编写一个程序,通过输入周几,输出对应的深深那天应该穿的衣服的色系。

输入输出格式及样例

数据1 数据2 数据3
输入数据(一个整数n(1≤n≤10^9),代表周几) 1 7 10000
输出数据(如果1≤n≤7,输出一个全小写的英文字符串,代表对应的色系;否则,输出 error) orange red error

参考答案

1
//switch

16. 自动找人系统

说明

maoge 现在转到了警局工作,现在他被要求开发一个找人系统。给定三个参数 a,b,c,表示年,月,日,表示一个时间节点。他要找出在两个时间节点之间的时间(两个时间节点本身也包括在内)。现在给定两个时间节点和1个事件发生的时间,他要判断这个时间是否在这个时间段之中。

maoge 又双叒叕找到了你来帮忙。

输入输出格式及样例

输入数据(输入三行,三个时间,每行有三个数,表示年月日。前两行表示两个时间节点(不一定按照第一个小于第二个的顺序给出),最后一行是这个事件发生的时间。年份是小于 10000 的正整数。):

2007 1 1
2007 12 31
2007 3 22

输出数据(输出一个 Yes 或者 No 表示是否在这个时间段之中):

Yes

参考答案

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
26
27
28
29
30
#include<stdio.h>

int main(){
int a1, a2, a3;
int b1, b2, b3;
int c1, c2, c3;
scanf("%d%d%d", &a1, &a2, &a3);
scanf("%d%d%d", &b1, &b2, &b3);
scanf("%d%d%d", &c1, &c2, &c3);
//读取到的年月日组合成一个8位的整数
int a, b, c;//a, b, c分别表示3个日期的年月日
a = a1*10000+a2*100+a3;
b = b1*10000+b2*100+b3;
c = c1*10000+c2*100+c3;
int flag = 0;
//只需判断日期值的大小
if(a<b){
if(c>=a && c<=b)
flag = 1;
}else{
if(c>=b && c<=a)
flag = 1;
}
if(flag == 1){
printf("Yes");
}else{
printf("No");
}
return 0;
}