- 曾雪琳 的博客
2.分支结构.md
- 2023-10-25 21:47:26 @
2.分支结构答案p25 交换两数p26 直间三角形p27心系南方灾区p29 相邻的三个整数p30 闯关大冒险p31 宇航员选拔p32 求解分段函数p33判断能否被3,5,7整除p35判断某年某月的天数p36 海伦公式p37三角形类别p38汉译英p39苹果和虫子/Apples Prologuep40写评语p41上学迟到p42 肥胖问题p47求和p49足球决赛p50 简单计算器
2.分支结构答案
p25 交换两数
输入 整数
输出 两个整数(小数在前大数在后),中间用一个空格分隔
#include <stdio.h>
int main() {
int a, b; scanf("%d %d", &a, &b);
if (a > b) {
int t = a;
a = b;
b = t;
} // 引入一个t
printf("%d %d", a, b);
return 0;
}
p26 直间三角形
题目 判定三条线段a*,b,*c能否构成一个直角三角形。如果能构成,请计算出面积,不然输出'No'
输入 一行,三个整数
输出 面积(保留一位小数) 或'No'
#include <stdio.h>
int main() {
int a, b, c, t;
scanf("%d %d %d", &a, &b, &c);
if (a > b) t = a, a = b, b = t;
if (a > c) t = a, a = c, c = t;
if (b > c) t = b, b = c, c = t;
if (a * a + b * b == c * c) {
printf("%.1f", a * b / 2.0);
} else printf("No");
return 0;
}
p27心系南方灾区
**题目 **有 m 件大衣,一辆卡车一次最多运走 n 件,计算将全部大衣物资运走,最多要多少辆卡车
输入 两个整数m,n
输出 一个整数,表示需要的卡车数量(若输入数据不满足条件,输出no)
#include <stdio.h>
int main() {
int m, n; scanf("%d %d", &m, &n);
if ((10000 <= m && m <= 2000000) && (2000 <= n && n <= 10000)) {
if (m % n == 0) {
printf("%d", m / n);
} else {
printf("%d",m / n + 1);// 若不可整除,多了的衣服还需要一辆卡车,故+1
}
} else printf("no");
return 0;
}
p29 相邻的三个整数
题目 判断三个整数是否相邻,是输出"TRUE",否则输出"FALSE"
输入 一行,三个整数
输出 一行
#include <stdio.h>
int main() {
int a, b, c; scanf("%d %d %d", &a, &b, &c);
if (a > b) { int t = a; a = b; b = t; } // 先将a,b,c以小到大排序
if (a > c) { int t = a; a = c; c = t; }
if (b > c) { int t = b; b = c; c = t; } // 此时a<=b<=c
if (c == a + 2 && c == b + 1) printf("TRUE");
else printf("FALSE");
return 0;
}
p30 闯关大冒险
题目 给一个4位的整数n,计算出这个整数各个位中的最大数
输入 一个4位整数n
输出 一个整数(这个整数各个位中的最大数)
#include <stdio.h>
int main() {
int n; scanf("%d", &n);
int a = n / 1000, b = n / 100 % 10, c = n / 10 % 10, d = n % 10;
if (a < b) a = b; // 假设a就是最大的
if (a < c) a = c;
if (a < d) a = d;
printf("%d", a);
return 0;
}
p31 宇航员选拔
题目 宇航局在身体素质方面定了3个基本的标准:身高在165厘米到185厘米之间,体重在50公斤到80公斤之间,年龄在16到19周岁(所有数据都包含边界值)判断战士是否符合标准
输入 三个整数,分别表示战士的年龄、体重、身高数据
输出 判断结果"Y"或"N"
#include <stdio.h>
int main() {
int a, b, c; scanf("%d %d %d", &a, &b, &c);
printf("%s",a>=16&&a<=19&&b>=50&&b<=80&&c>=165&&c<=185? "Y":"N");
return 0;
}
p32 求解分段函数
题目
输入 一行,整数
输出 一行,整数
#include <stdio.h>
int main() {
int x, y=0; scanf("%d", &x);
if (x > 1) y = x + 1;
if (x < 0) y = x - 1;
printf("%d", y);
return 0;
}
p33判断能否被3,5,7整除
题目 给定一个整数
- 能同时被 3, 5, 7 整除(直接输出 3 5 7, 每个数中间一个空格)
- 只能被其中两个数整除(输出两个数, 小的在前,中间用空格分隔。例如 3 5 或者 3 7 或者 5 7,)
- 只能被其中一个数整除(输出这个除数)
- 不能被任何数整除, 输出小写字符 'n' , 不包括单引号
输入 一个整数
输出 一行,按要求输出被3,5,7整除的情况
#include <stdio.h>
int main() {
int a, b = 0; scanf("%d", &a);
if (a % 3 == 0) { printf("3 "); b = 1; } // 注意这样写不能用else if
if (a % 5 == 0) { printf("5 "); b = 1; } // 不然就没办法输出"3 5 7"
if (a % 7 == 0) { printf("7 "); b = 1; } // 引入一个b,标记是否有3 5 7输出
if (b == 0) printf("n");
return 0;
}
p35判断某年某月的天数
输入 两个整数,年,月
输出 只有一行,1个整数(该月的天数)
#include <stdio.h>
int main() {
int y, m, day = 31; // 除了2,4,6,9,11月其它月均是31天
scanf("%d%d", &y, &m);
if (m == 2) {// 闰年两种情况,只有2月要考虑年
if (y % 400 == 0 || y % 400 && y % 100 != 0) day = 29;
else day = 28;
} else if (m == 4 || m == 6 || m == 9 || m == 11) day = 30;
printf("%d", day);
return 0;
}
p36 海伦公式
题目 输入三条边,若不能构成三角形输出0;若能,则用海伦公式计算后输出面积(保留一位小数)
**半周长: ,面积公式:**
输入 三个实数,中间空格隔开
输出 一个实数
#include <math.h> //sqrt需要从这个头文件中提取
#include <stdio.h>
int main() {
double a, b, c, p, q, s; // 输入的是实数
scanf("%lf %lf %lf", &a, &b, &c); // double对应的占位符是%lf
if (a + b > c && a + c > b && b + c > a) { // 判断是否是三角形
p = (a + b + c) / 2;
s = sqrt(p * (p - a) * (p - b) * (p - c)); // 求算术平方根用sqrt()
printf("%.1lf", s); // 保留一位小数
} else printf("0");
return 0;
}
p37三角形类别
题目 输入三个不大于 100的正整数,以这三个数为边长,判断是否构成三角形,
若不能输出"no",若能,则判断它们构成的是锐角三角形、直角三角形、钝角三角形.
分别输出"ruijiao","zhijiao","dunjiao"
输入 三个整数
输出 一个字符串
#include<stdio.h>
int main(){
int a,b,c; scanf("%d%d%d", &a,&b,&c);
if(a > c) { int t=a; a=c; c=t; }//先将a,b,c按从小到大排序
if(b > c) { int t=b; b=c; c=t; }
if(a > b) { int t=a; a=b; b=t; }// a <= b <= c
if(a + b > c){
if(a*a + b*b == c*c) puts("zhijiao");
if(a*a + b*b > c*c) puts("ruijiao");
if(a*a + b*b < c*c) puts("dunjiao");
}else puts("no");
return 0;
}
p38汉译英
题目 如果输入的整数在 1-9 范围内,则输出相对应的单词,否则输 out
**输入 **一行,一个整数n
输出 整数 n相对应的小写英文单词或 out
#include<stdio.h>
int main(){
int n; scanf("%d", &n);
switch(n){
case 1:printf("one"); break;//记得要加break
case 2:printf("two"); break;//不然执行了一个,后面就会一直执行
case 3:printf("three"); break;
case 4:printf("four"); break;
case 5:printf("five"); break;
case 6:printf("six"); break;
case 7:printf("seven"); break;
case 8:printf("eight"); break;
case 9:printf("nine"); break;
default:printf("out"); break;
}
return 0;
}
p39苹果和虫子/Apples Prologue
题目 m个苹果,吃完一个苹果需要t分钟,吃完一个后立刻开始吃下一个,现在时间过去s分钟,求她还有几个完整的苹果?
输入 输入三个非负整数表示 m*、*t和s
输出 输出一个整数表示答案。 如果你出现了 RE,不如检查一下被零除?
#include <math.h>
#include <stdio.h>
int main() {
int m, t, s, n, res = 0;
scanf("%d %d %d", &m, &t, &s);
if (t != 0) {
int x = ceil(1.0 * s / t);
if (x >= m) res = 0;
else res = m - x;
}
printf("%d", res);
return 0;
}
p40写评语
题目 判断成绩好坏
- 如果成绩在大于等于90,输出“Excellent”;
- 如果成绩在大于等于80分且小于90分,输出“Good”;
- 如果成绩大于等于60分且小于80分,输出“Pass”;
- 成绩小于60分,输出“Fail”。
输入 一个整数score,表示学生成绩
**输出 **对应评语
#include <stdio.h>
int main() {
int score; scanf("%d", &score);
if (score >= 90) printf("Excellent");
else if (score >= 80) printf("Good");
else if (score >= 60) printf("Pass");
else printf("Fail");
return 0;
}
p41上学迟到
题目 y学校要求早上 8 点前到达。学校到y 的家有 s米,而 y 以 v 米每分钟匀速走到学校,此外她要额外花 10 分钟垃圾分类。问为了避免迟到 y 最晚何时出门?输出最晚离家,y 可能不得不提前一天出发,不过不可能提前超过一天!
输入 两个正整数 s,v
输出 hh:mm 最晚离开家的时间(时:分,必须输出两位,不足两位前面补0)
#include <stdio.h>
int main() {
int s, v; double m, n; scanf("%d %d", &s, &v); // 要分两种情况
if (s / v <= 470) { // 第一种是在当天出发
if (s % v == 0) {
m = 1.0 * ((470 - s / v) / 60); // m是浮点数方便后面输出两位
n = 1.0 * ((470 - s / v) % 60); // 故要*1.0,将整数转换成浮点数
}
if (s % v != 0) {
m = 1.0 * ((469 - s / v) / 60);
n = 1.0 * ((469 - s / v) % 60);
}
} else if (s / v > 470 &&
s / v <= 1910) { // 第二种是提前一天出发,记得不能提前超过一天
if (s % v == 0) {
m = (1.0 * ((1910 - s / v) / 60));
n = (1.0 * ((1910 - s / v) % 60));
}
if (s % v != 0) {
m = 1.0 * ((1909 - s / v) / 60);
n = 1.0 * ((1909 - s / v) % 60);
}
}
printf("%02.0lf:%02.0lf", m, n); // 输出两位,%02.0lf中02是整数两位,.0是保留零位小数
return 0;
}
分析:将出发与到校时间分别看作起点,终点:。
**解出 **
#include <math.h>
#include <stdio.h>
int main() {
int s, v; scanf("%d %d", &s, &v);
int start = (int)((24 + 8)*60-10-ceil(1.0*s/v)) % (24*60);
double m = start / 60, n = start % 60;
printf("%02.0lf:%02.0lf", m,n); // 输出两位,%02.0lf中02是整数两位,.0是保留零位小数
return 0;
}
p42 肥胖问题
题目 BMI=m/h*h,m体重(千克),h身高(米),判断结果:
- **小于 18.518.5:体重过轻,输出 **
Underweight
; - **大于等于 18.518.5 且小于 2424:正常体重,输出 **
Normal
; - **大于等于 2424:肥胖,不仅要输出 BMI 值(使用 **
cout
的默认精度),然后换行,还要输出Overweight
;
**输入 **两个浮点数,m,h
输出 一行一个字符串,对应的判断,对于 Overweight
情况的特别处理请参照题目所述。
#include <iostream> //使用std::cout要从这个头文件中提取
#include <stdio.h>
int main() {
double m, h; scanf("%lf %lf", &m, &h);
double x = m / (h * h);
if (x < 18.5) printf("Underweight");
else if (x < 24) printf("Normal");
else {
std::cout<<x<<std::endl; // 此处为C++写法
printf("Overweight");
}
return 0;
}
p47求和
**题目 **求 1,2,3,...,n 的奇数和
**输入 **正整数n
**输出 **正整数,表示奇数之和
#include <stdio.h>
int main() {
long long n, m;
scanf("%lld", &n); // long long占位符是%lld
if (n % 2) n++;
m = (n / 2) * (n / 2); // 不能用(n*n)/4会爆 long long
printf("%lld", m);
return 0;
}
p49足球决赛
题目 阳光队和雷霆队进入决赛,分为三场,计算出总冠军,若阳光队获胜,输出“yangguang”,反之,输出“leiting”,每一场均不存在平局
输入 6个整数,分别代表3场比赛中阳光和雷霆两队的得分
输出 获胜队名
#include <stdio.h>
int main() {
int a, b, c, d, e, f;
scanf("%d %d %d %d %d %d", &a, &b, &c, &d, &e, &f);
if (a > b) {
if (c > d || e > f) { // 阳光队赢了一局的情况下,剩下两局只要阳光队赢一局就会胜利
printf("yangguang");
} else printf("leiting");
}
if (b > a) {
if (c > d && e > f) printf("yangguang");
else printf("leiting");
}
return 0;
}
p50 简单计算器
题目 一个最简单的计算器,支持 + - * /
四种运算。仅考虑输入输出为整数的情况。然而:
- 如果出现除数为0的情况,则输出:
Divided by zero!
- **如果出现无效的操作符(即不为 **
+ - * /
之一),则输出:Invalid operator!
输入 一行,前面两个整数,再一个运算符号
**输出 ** 运算表达式的中缀形式以及向零取整的结果,中间用空格隔开
#include <stdio.h>
int main() {
long long a, b; // 记得用long long ,题目的数据会爆int
char c;
scanf("%lld %lld %c", &a, &b, &c); // long long 占位符是%lld
if (c == '+') {
printf("%lld + %lld = %lld", a, b, a + b);
} else if (c == '-') {
printf("%lld - %lld = %lld", a, b, a - b);
} else if (c == '*') {
printf("%lld * %lld = %lld", a, b, a * b);
} else if (c == '/') {
if (b == 0) {
printf("%lld / %lld = Divided by zero!", a, b);
} else {
printf("%lld / %lld = %lld", a, b, a / b);
}
} else {
printf("%lld %c %lld = Invalid operator!", a, c, b);
}
return 0;
}