Online Compiler C

#include <stdio.h> int main() { int a, b, c, d; scanf("%d", &a); b = a % 10; c = a % 10; a /= 10; while (a > 0) { d = a % 10; if (d < b) b = d; if (d > c) c = d; a /= 10; } printf("%d %d", b, c); return 0; }
这段代码的目的是读取一个整数,然后找出这个整数中最小和最大的数字,并输出它们。

代码逻辑上有一个小问题:变量 `b` 和 `c` 的初始值都设置为 `a % 10`,也就是个位数字。但之后在循环中,`a` 被除以了10,导致个位数字被丢弃,循环从十位开始处理。这样,个位数字实际上被比较了两次(一次作为初始值,一次在循环中?不,循环中不会再次处理个位),但初始值设置是正确的。

- 检查变量 `b` 和 `c` 的初始赋值:它们都取了同一个数字(个位),但一个应该记录最小值,一个记录最大值。初始值相同没有问题,但注意 `b` 和 `c` 的命名可能混淆——`b` 用于最小值,`c` 用于最大值。
- 思考循环条件:`while (a > 0)` 在 `a` 被除以10后进入循环,但此时 `a` 可能已经变成0(如果原数只有一位),循环不会执行,输出就是初始的个位数字,这没问题。但如果原数有多位,循环会正确处理剩余数字。