信奥竞赛

系列

剑指信奥 | C 语言之信奥试题详解(一)

前言

从今天起,我们会进行一系列信奥试题的解析,便于复习前一阶段我们学过的 C 语言的理论内容,并且会补充一些语言中需要掌握的语法细节。

今天,我们从最简单的题目开始。

试题 No. 1 温度转换 🌟

题目
题目描述

将输入的华氏温度转换为摄氏温度。由华氏温度 F 与摄氏温度 C 的转换公式为:

F = C * 9 / 5 + 32

输入

输入一个实数,表示华氏温度

输出

输出对应的摄氏温度,答案保留 4 位小数

样例输入

50

样例输出

10.0000

题解
题目分析

这是一个很基础的运算题目。

注意事项
  1. 题目要求根据华式温度转摄氏温度,而公式是摄氏温度到华式温度,这里需要一个转换
  2. 题目要求答案保留 4 位小数,别忘了这一点
解题过程
  1. 标准输入为 f 赋值
  2. 转换公式求得 c
  3. 标准输出 c,保留 4 位小数
参考代码
#include <stdio.h>
int main() {
    float f, c;
    scanf("%f", &f);
    c = (f - 32) * 5 / 9; // 公式的转换
    printf("%.4f", c); // 输出小数点后 4 位 `%.4f`
    return 0;
}
                

试题 No. 2 三角形 🌟

题目
题目描述

输入三角形三边长 a, b, c(保证能构成三角形),输出三角形面积

输入

一行三个用一个空格隔开的实数 a, b, c,表示三角形的三条边长

输出

输出三角形的面积,答案保留四位小数

样例输入

3 4 5

样例输出

6.0000

数据范围限制

1 <= a,b,c <= 10000

题解
题目分析

这是一个很基础的运算题目,考察的是三角形面积公式。

注意事项
  1. 需要了解海伦公式:S=√p(p-a)(p-b)(p-c),p=(a+b+c)/2
  2. 注意输入要求:按空格分开
  3. 平方根运算需要头文件 math.h
解题过程
  1. 标准输入 a, b, c
  2. 转换公式求得 s
  3. 标准输出 s,保留 4 位小数
参考代码
#include <stdio.h>
#include <math.h>

int main() {
    float a, b, c, p, s;
    scanf("%f %f %f", &a, &b, &c); // 按空格分开接收输入值
    p = (a + b + c) / 2;
    s = sqrt(p * (p - a) * (p - b) * (p - c));
    printf("%.4f", s);
    return 0;
}
                

No. 3 猜数游戏 🌟

题目
题目描述

有一个“就是它”的猜数游戏,步骤如下:请你对任意输入的一个三位数 x,在这三位数后重复一遍,得到一个六位数,467 --> 467467。

把这个数连续除以 7、11、13,输出最后的商。

输入

输入一个三位数x

输出

输出最后的商

样例输入

100

样例输出

100

数据范围限制

100 <= x <= 999

题解
题目分析

这道题也是一个基本运算的题目,难点在于三位数重复变成六位数的方法:

六位数 = 三位数 * 1000 + 三位数

注意事项
  1. 既然是三位数,说明是整数,不要写错数据类型
解题过程
  1. 输入三位数
  2. 求得六位数
  3. 运算得到结果
  4. 输出结果
参考代码
#include <stdio.h>
int main() {
    int x;
    scanf("%d", &x);
    x = x * 1000 + x;
    printf("%d", x / 7 / 11 / 13);
    return 0;
}
                
课后思考

有的同学可能有疑问:这个六位数要连续除三个数,结果一定是整数吗?如果不是的话,输出 %d 是否有问题?

这个问题很有意思,大家可以多运行几次这段代码,你就会发现一个很特别的规律,然后仔细分析一下吧!