Онлайн компилятор C

#include <stdio.h> int main() { int a, b, c, d, e; scanf("%d", &a); b=a/100; c=a/10-b*10; d=a%10; e=b; if(c>e)e=c; if(d>e)e=d; printf("%d", e); return 0; }
这段代码的功能是:读入一个三位整数,然后找出它的百位、十位、个位三个数字中的最大值,并输出这个最大值。

代码的思路是先通过整数除法和取余运算分离出三个数位,然后通过两次比较找出最大值。

- 变量 `b` 是百位数字,`c` 是十位数字,`d` 是个位数字。
- 先假设百位数字 `b` 是最大值,赋给 `e`。
- 然后依次用 `c` 和 `d` 与 `e` 比较,如果更大就更新 `e`。

代码逻辑基本正确,但有一个潜在问题:如果输入的数字不是三位数(比如两位数或四位数),程序仍然会运行,但分离出的数位可能不符合预期。例如输入 `12`,`b` 会是 `0`,`c` 会是 `1`,`d` 会是 `2`,结果输出 `2`,这也许不是你想要的行为。

- 考虑是否需要检查输入的数字范围,确保它是三位数。
- 思考一下,如果输入负数,程序会怎样?