C语言从键盘输入某单位职工的月收入(人数最多不超过40人),当输入负值时,表示输入结束,编程从键盘任意输入一个职工号,查找该职工的月收入。 程序如下,请修正程序中的错误,使之能够得到正确的运行结果。 #include <stdio.h> #define N 40 int ReadScore(int income[], long num[]); int LinSearch(long num[], long x, int n); int main() { int income[N], n, pos; long num[N], x; n = ReadScore(income, num); printf("Total number is %d\n", n); printf("Input the searching ID:"); scanf("%d", &x); pos = LinSearch(num, x, n); if (pos != -1) { printf("income = %d\n", income[pos]); } else { printf("Not found!\n"); } return 0; } int ReadScore(int income[], long num[]) { int i do{ i++; printf("Input person's ID and income:"); scanf("%d%d", num[i], income[i]); } while (num[i] >0 && score[i] >= 0); return i; } int LinSearch(long num[], long x, int n) { int i; for (i=0; i<=n; i++) { if (num[i] = x) return (i); } return (-1); }
时间: 2024-03-05 14:48:45 浏览: 77
C语言编程-从键盘上输入任意实数x,求出其所对应的函数值;z=(x-4)的二次幂(x4)z=x的八次幂(x-4)z
修正后的程序如下:
```
#include <stdio.h>
#define N 40
int ReadScore(int income[], long num[]);
int LinSearch(long num[], long x, int n);
int main() {
int income[N], n, pos;
long num[N], x;
n = ReadScore(income, num);
printf("Total number is %d\n", n);
printf("Input the searching ID:");
scanf("%ld", &x); // 修改为%ld,因为num数组中存储的是long类型的数据
pos = LinSearch(num, x, n);
if (pos != -1) {
printf("income = %d\n", income[pos]);
} else {
printf("Not found!\n");
}
return 0;
}
int ReadScore(int income[], long num[]) {
int i = -1; // 初始化为-1
do {
i++;
printf("Input person's ID and income:");
scanf("%ld%d", &num[i], &income[i]); // 修改为%ld,因为num数组中存储的是long类型的数据
} while (num[i] > 0 && income[i] >= 0 && i < N); // 修改为income[i] >= 0,同时加上i < N的限制,避免数组越界
return i;
}
int LinSearch(long num[], long x, int n) {
int i;
for (i = 0; i < n; i++) { // 修改为i < n,避免访问num[n]导致数组越界
if (num[i] == x) { // 修改为双等号,表示判断相等
return i;
}
}
return -1;
}
```
修正的主要问题包括:
1. 在ReadScore函数中,初始时i应该为-1,因为后面会先自增再读入数据。
2. 在ReadScore函数中,判断输入是否结束的条件应该同时考虑num[i]和income[i]的值,并且加上i < N的限制,避免数组越界。
3. 在LinSearch函数中,循环结束的条件应该是i < n,而不是i <= n,避免访问num[n]导致数组越界。另外,判断相等应该使用双等号。
阅读全文