#include<stdio.h>
#include<stdlib.h>
typedef struct STUDENT
{
long ID;
char classname[32];
char name[32];
float score[3];
float ave;
} student;
void shuju(student stu[],int n);
void average(student stu[],int n);
int max(student stu[],int n);
int main()
{
student stu[1204];
int n;
scanf("%d",&n);
int i,a;
shuju(stu,n);
average(stu,n);
for(i=0;i<n;i++)
{
printf("%s\n",stu[i].name);
printf("%.1f\n",stu[i].ave);
}
a = max(stu,n);
printf("%ld %s %s %.1f %.1f %.1f %.1f",stu[a].ID,stu[a].classname,stu[a].name,stu[a].score[0],stu[a].score[1],stu[a].score[2],stu[a].ave);
printf("\n");
return 0;
}
void shuju(student stu[],int n)
{
int i,j;
for(i=0;i<n;i++)
{
scanf("%ld%s%s",&stu[i].ID,&stu[i].classname,&stu[i].name);
for(j=0;j<3;j++)
{
scanf("%f",&stu[i].score[j]);
}
}
}
void average(student stu[],int n)
{
int i,j,t;
for(i=0;i<1;i++)
{
t=0;
for(j=0;j<3;j++)
{
t+=stu[i].score[j];
}
stu[i].ave=t*1.0/3;
}
}
int max(student stu[],int n)
{
int i,m;
float temp =stu[0].ave;
for(i=0;i<n;i++)
{
if(stu[i].ave>temp)
{
temp=stu[i].ave;
m=i;
}
}
return m;
}
你自己写的shuju()中的scanf类型不匹配
什么意思啊
为什么你们新生都是盲打?让人怎么输入?没有 UserInterface,看不了。一天看下来太多了,是老师有问题,还是书本有问题。让人怎么学啊???例如你开头:
int n = 0;
printf("How many student? ");
scanf("%d", &n);
要给提示,你要什么东西。
typedef struct STUDENT
{
long ID;
char classname[32];
char name[32];
float score[3];
float ave;
} student; // error: 跟 STUDENT 重名
这里很混乱也,一个就够。
typedef struct
{
long ID;
char classname[32];
char name[32];
float score[3];
float ave;
} Student;
要那么多,干嘛?
你用的是 dynamic array,鸡动的,开玩笑!用户输入的。新的当然用 new 啦!用上面的 n 开档啦。
Student *stu = new Student[n];
什么叫 shuju?输车吗。加多点 提示不会死的,要看官看得清清楚楚:
void shuju(Student stu[], int n)
{
int i,j;
for(i=0; i<n; i++)
{
printf("Plese enter Student id, classname, and name: ");
scanf("%ld %s %s", &stu[i].ID, &stu[i].classname, &stu[i].name);
for(j=0; j<3; j++)
{
printf("Plese enter score of %s: ", stu[i].name);
scanf("%f", &stu[i].score[j]);
}
printf("You have entered: %.1f, %.1f, %.1f\n", stu[i].score[0], stu[i].score[1], stu[i].score[2]);
}
}
结果如:
How many Student? 2
Plese enter Student id, classname, and name: 1234 3B FengZi
Plese enter score of FengZi: 33.4
Plese enter score of FengZi: 39.8
Plese enter score of FengZi: 40
You have entered: 33.4, 39.8, 40.0
Plese enter Student id, classname, and name: 3455 4C WuLiao
Plese enter score of WuLiao: 99.8
Plese enter score of WuLiao: 98.7
Plese enter score of WuLiao: 88.2
You have entered: 99.8, 98.7, 88.2
average 的 for loop 错了。
还有 t 是 float,不是 int。我加 Log,以后都这样干,自己看得舒服,错哪都知道。
void average(Student stu[], int n)
{
int i, j;
float t;
for(i=0; i<n; i++)
{
t = 0.0;
printf("Calculating %s\n", stu[i].name);
for(j=0; j<3; j++)
{
printf("%d: t(%.1f) + %.1f = ", j+1, t, stu[i].score[j]);
t = t + stu[i].score[j];
printf("%.1f\t", t);
}
printf("\n");
stu[i].ave = t / 3;
printf("\t avg: %.1f\n", stu[i].ave);
}
}
结果:
Calculating FengZi
1: t(0.0) + 33.4 = 33.4 2: t(33.4) + 39.8 = 73.2 3: t(73.2) + 40.0 = 113.2
avg: 37.7
Calculating WuLiao
1: t(0.0) + 99.8 = 99.8 2: t(99.8) + 98.7 = 198.5 3: t(198.5) + 88.2 = 286.7
avg: 95.6
下面再加点招牌:
printf("\nStudents Record:\n");
for(int i=0; i<n; i++)
{
printf("Student: %s\n",stu[i].name);
printf("Average: %.1f\n",stu[i].ave);
}
int a = max(stu, n);
printf("\nThe Best Student --\n");
printf("Student ID: %ld\nClassname: %s\nName: %s\nSocres: %.1f\t %.1f\t %.1f\nAverage: %.1f\n",
stu[a].ID,
stu[a].classname,
stu[a].name,
stu[a].score[0],
stu[a].score[1],
stu[a].score[2],
stu[a].ave);
printf("\n");
结果就是:
Students Record:
Student: FengZi
Average: 37.7
Student: WuLiao
Average: 95.6
The Best Student --
Student ID: 3455
Classname: 4C
Name: WuLiao
Socres: 99.8 98.7 88.2
Average: 95.6