#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) { printf("请输入学生数据(10个):\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<3;i++) { for(j=0;j<n;j++) {ave_course[i] += stu_inf[j].score[i];} } for(j=0;j<3;j++) {ave_course[j]/=n;} }int main() { int i; float av[3]={0};//分别存储三门课的平均分 STUDENT *inf=(STUDENT*)malloc(N*sizeof(STUDENT)); input(inf,N);//输入结构体数组 average(inf,N,av);//计算平均分 STUDENT m=max(inf,N);//找最高分学生 printf("\n三门课的平均分如下:\n"); for(i=0;i<3;i++) {printf("%.2d ",av[i]);} printf("\n最高分学生数据如下:\n",*av); printf("%ld %s ",m.studentID,m.studentName);//输出最高分学生的学号姓名 int su=0; for(i=0;i<3;i++) {printf("%.2f ",m.score[i]);}//输出最高分学生的三门课 free(inf); return 0; }查错
时间: 2024-04-06 16:33:12 浏览: 62
在程序中调用了一个未定义的函数max,需要先定义或导入该函数。另外,在输出最高分学生数据时,printf函数的格式控制字符串中应当包含占位符,如"%ld %s"。最后,计算平均分时,输出应当使用"%.2f"格式控制字符串来控制小数位数。修改后的程序如下:
```
#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) {
printf("请输入学生数据(10个):\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 < 3; i++) {
for (j = 0; j < n; j++) {
ave_course[i] += stu_inf[j].score[i];
}
}
for (j = 0; j < 3; j++) {
ave_course[j] /= n;
}
}
STUDENT max(STUDENT *stu_inf, int n) {
int i, j, max_index = 0;
float max_score = 0.0;
for (i = 0; i < n; i++) {
float sum = 0.0;
for (j = 0; j < 3; j++) {
sum += stu_inf[i].score[j];
}
if (sum > max_score) {
max_score = sum;
max_index = i;
}
}
return stu_inf[max_index];
}
int main() {
int i;
float av[3] = {0}; //分别存储三门课的平均分
STUDENT *inf = (STUDENT*)malloc(N * sizeof(STUDENT));
input(inf, N); //输入结构体数组
average(inf, N, av); //计算平均分
STUDENT m = max(inf, N); //找最高分学生
printf("\n三门课的平均分如下:\n");
for (i = 0; i < 3; i++) {
printf("%.2f ", av[i]);
}
printf("\n最高分学生数据如下:\n");
printf("%ld %s ", m.studentID, m.studentName); //输出最高分学生的学号姓名
for (i = 0; i < 3; i++) {
printf("%.2f ", m.score[i]); //输出最高分学生的三门课
}
printf("\n");
free(inf);
return 0;
}
```
阅读全文