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整除

题目 给定一个整数

  1. 能同时被 3, 5, 7 整除(直接输出 3 5 7, 每个数中间一个空格)
  2. 只能被其中两个数整除(输出两个数, 小的在前,中间用空格分隔。例如 3 5 或者 3 7 或者 5 7,)
  3. 只能被其中一个数整除(输出这个除数)
  4. 不能被任何数整除, 输出小写字符 '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;
 }

image

分析:将出发与到校时间分别看作起点,终点:

**解出 **​

#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 简单计算器

题目 一个最简单的计算器,支持 + - * / 四种运算。仅考虑输入输出为整数的情况。然而:

  1. 如果出现除数为0的情况,则输出:Divided by zero!
  2. **如果出现无效的操作符(即不为 **+ - * / 之一),则输出: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;
 }