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

#include <stdio.h> int find_missing(int n, int a[]) { int min = 0; min = a[0]; for (int i = 0; i < n; i++) { if (a[i] < min) { min = a[i]; } } int max = a[0]; for (int i = 0; i < n; i++) { if (a[i] > max) { max = a[i]; } } int num = 0; for (int q = min; q < max; q++) { num = 0; for (int i = 0; i < n; i++) { if (a[i] == q) { num++; } } if (num != n) { return q; } } } int main() { int a[5] = {1, 2, 3, 5, 6}; printf("%d", int find_missing(5;a)); return 0; }
这段代码试图在一个整数数组中找出缺失的数字。它先找到数组的最小值和最大值,然后遍历从最小值到最大值之间的每个整数,检查该整数在数组中出现的次数。如果某个整数出现的次数不等于数组长度(这里逻辑有误),就返回该整数作为缺失值。

代码中存在几个问题:

- 在 main 函数中调用 find_missing 的语法有误,参数传递方式不正确。
- 判断缺失数字的条件 `num != n` 逻辑不对,应该检查出现次数是否为 0 而不是不等于 n。
- 如果数组中没有缺失数字,函数没有返回值,会导致未定义行为。

- 检查 main 函数中调用 find_missing 的写法,注意函数调用时参数应该用逗号分隔,而不是分号。
- 思考一下:要判断一个数字是否缺失,应该检查它在数组中出现了几次?是 0 次还是 n 次?