在线编译器 C

#include <stdio.h> int main() { int unsigned num; int max = 0; int min = 9; scanf("%u", &num); if (num == 0) printf("0"); while (num > 0) { int d = num % 10; num = num / 10; if (d >= max) { max = d; } if (d <= min) { min = d; } } printf("%d %d", min, max); return 0; }
这段代码的功能是:读入一个无符号整数,找出它的十进制表示中的最小数字和最大数字,并先输出最小数字再输出最大数字。

代码中存在一个逻辑问题:当输入的数字是0时,程序会先输出一个单独的"0",然后while循环不会执行,最后又输出min和max的初始值(0和9),导致输出结果不符合预期。

- 当输入为0时,你希望输出什么?目前的代码会输出"0"加上后续的"0 9",这很可能不是你想要的结果。考虑一下,对于0这个特殊情况,应该如何处理循环和输出。
- 变量min的初始值设为9是合理的,但max的初始值设为0在数字包含0时可能没问题,但如果数字中所有数字都大于0,max的初始值0会被正确更新。不过,当输入为0时,循环不执行,max保持0,min保持9,这会导致输出错误。思考一下,是否应该把对0的特殊处理整合到循环逻辑中,而不是单独用if语句输出。