Online Compiler C

#include <stdio.h> int main() { int SIZE = 10; int A[SIZE]; int i; int max_idx, max_val, min_idx, min_val; for (i = 0; i < SIZE; i++) { scanf("%d", &A[i]); } max_val = A[0]; min_val = A[0]; for (i = 1; i < SIZE; i++) { if (A[i] > max_val) { max_val = A[i]; max_idx = i + 1; } if (A[i] < min_val) { min_val = A[i]; min_idx = i + 1; } } printf("%d%d%d%d", max_idx, max_val, min_idx, min_val); return 0; }
这段代码的功能是:读取10个整数存入数组,然后找出数组中的最大值和最小值,并输出它们的位置(从1开始计数)和数值。但代码存在几个问题。

- 变量 `max_idx` 和 `min_idx` 在初始化时没有被赋值,如果最大值或最小值恰好是第一个元素(下标0),那么对应的索引变量将保持未初始化的值,导致输出错误。
- 输出格式没有分隔符,四个数字会连在一起,例如最大值索引、最大值、最小值索引、最小值会直接拼接成类似“31015”这样的字符串,难以区分。
- 代码中 `max_idx` 和 `min_idx` 的赋值使用了 `i + 1`,这是为了从1开始计数,但需要确保在循环开始前也处理第一个元素的情况。