C语言查错。#include <stdio.h> #include <stdlib.h> #define N 10 typedef struct student { long studentID; char studentName[20]; float score[3]; }STUDENT; void input (STUDENT * stu_inf,int n) { int j; for(j=0;j<n;j++) { scanf("%ld",stu_inf->studentID); scanf("%s",stu_inf->studentName); for(int k=0;k<3;k++) scanf("%f",stu_inf->score[k]); stu_inf++; } } void average(STUDENT * stu_inf,int n,int * ave_course) { int i,j,s; for(i=0;i<N;i++) { s=0; for(j=0;j<3;j++) s+=stu_inf->score[j]; *ave_course=s/3; ave_course++; } } STUDENT max(STUDENT * stu_inf,int n) { STUDENT *top; int i,j,k; float sumscore[10]={0}; for(i=0;i<N;i++) { for(j=0;j<3;j++) sumscore[i]+=stu_inf->score[j]; } for(i=0,k=0;i<9;i++) { if(sumscore[i]>sumscore[k]) k=i; } for(j=0;j<10;j++) { if(j==k) top=stu_inf; break; } return *top; } int main() { int i; float av[10]; STUDENT *inf; STUDENT *ave; ave=av; for(i=0;i<N;i++) {input(inf,N);} average(inf,N,ave); STUDENT m=max(inf,N); printf("总平均分是%f\n最高分学生数据如下:\n",*ave); printf("%ld %s ",m.studentID,m.studentName); int su=0; for(i=0;i<3;i++) { printf("%f ",m.score[i]); su+=m.score[i]; } printf("%f",su/3); return 0; }
时间: 2024-04-26 18:20:20 浏览: 83
这段代码有几个错误:
1.在input函数中,scanf函数的参数应该是&stu_inf->studentID和stu_inf->studentName,因为它们是指向long和char数组的指针,而不是实际的变量。
2.在average函数中,变量i应该从0开始,而不是从N开始。另外,在计算平均分时应该使用float类型的变量,而不是int类型的指针。
3.在max函数中,变量i应该从0开始,而不是从N开始。在查找最高分时,变量k应该初始化为0,而不是为i。
4.在max函数中,返回的是指向STUDENT结构体的指针,而不是STUDENT结构体本身。因此,在main函数中,应该使用*号来解引用指针。
5.在main函数中,变量inf没有分配内存空间,因此无法使用。应该使用malloc函数来分配内存空间,并将返回的指针赋值给inf。另外,变量ave应该是float类型的数组,而不是指针。
以下是修改后的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define N 10
typedef struct student {
long studentID;
char studentName[20];
float score[3];
} STUDENT;
void input(STUDENT* stu_inf, int n) {
int j;
for (j = 0; j < n; j++) {
scanf("%ld", &stu_inf->studentID);
scanf("%s", stu_inf->studentName);
for (int k = 0; k < 3; k++)
scanf("%f", &stu_inf->score[k]);
stu_inf++;
}
}
void average(STUDENT* stu_inf, int n, float* ave_course) {
int i, j;
for (i = 0; i < N; i++) {
float s = 0;
for (j = 0; j < 3; j++)
s += stu_inf->score[j];
*ave_course = s / 3;
ave_course++;
stu_inf++;
}
}
STUDENT* max(STUDENT* stu_inf, int n) {
STUDENT* top;
int i, j, k = 0;
float sumscore[10] = { 0 };
for (i = 0; i < N; i++) {
for (j = 0; j < 3; j++)
sumscore[i] += stu_inf->score[j];
stu_inf++;
}
for (i = 0; i < 9; i++) {
if (sumscore[i] > sumscore[k])
k = i;
}
stu_inf -= N;
for (j = 0; j < 10; j++) {
if (j == k) {
top = stu_inf;
break;
}
stu_inf++;
}
return top;
}
int main() {
int i;
float av[10];
STUDENT* inf = (STUDENT*)malloc(N * sizeof(STUDENT));
float* ave = av;
for (i = 0; i < N; i++) {
input(inf, N);
}
average(inf, N, ave);
STUDENT* m = max(inf, N);
printf("总平均分是%f\n最高分学生数据如下:\n", *ave);
printf("%ld %s ", m->studentID, m->studentName);
int su = 0;
for (i = 0; i < 3; i++) {
printf("%f ", m->score[i]);
su += m->score[i];
}
printf("%f", su / 3.0);
free(inf);
return 0;
}
```
阅读全文