Online Compiler C

#include <stdio.h> int main() { int num; // 读入第一个数字 if (scanf("%d", &num) != 1 || num == 0) { return 0; // 如果一开始就是0或者读取失败,直接退出 } // 初始化最大值为读入的第一个数 int max_val = num; // 循环读取接下来的数字,直到读到 0 为止 while (scanf("%d", &num) == 1 && num != 0) { if (num > max_val) { max_val = num; // 如果新读入的数比当前最大值还大,就更新最大值 } } // 输出最终的最大值 printf("%d\n", max_val); return 0; }
这段代码的功能是:从标准输入读取一系列整数,直到遇到0为止,然后输出这些整数中的最大值。代码首先读取第一个数,如果它是0或读取失败则直接结束;否则将其设为初始最大值,然后循环读取后续非零数并更新最大值,最后输出结果。

- 代码的逻辑是正确的,但有一个边界情况需要注意:如果输入的第一个数不是0,但后续所有数都小于它,程序会正确输出第一个数。然而,如果输入中只有一个非零数(比如只输入5然后0),程序也能正常工作。

- 考虑一下:如果输入序列中所有数都是负数,比如-5, -3, -1, 0,你的代码会输出什么?初始最大值设为第一个数-5,然后-3和-1都比-5大,所以会更新为-1,最终输出-1,这是正确的。但请思考:如果输入的第一个数是负数,而后面没有更大的数,代码是否仍然正确?是的,因为初始最大值就是第一个数。