日本亚运会:c语言问题~这程序应该怎么改??究竟哪里不对拉~

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/01 11:28:24
有30个学生,每个学生的数据包括学号,姓名和3门课程的成绩,从键盘输出输出每个学生的数据,计算(1)每个学生的平均成绩(2)计算30个学生每课程平均分(3)按学生平均分从低到高的次序输出每个学生的各科成绩及平均成绩(用结构体)
#include <stdio.h>
#include <stdlib.h>
struct Student
{
int id;//学号
char name[12];//姓名
double score[3];//三门课成绩
double average;//三门课的平均分
};

Student stu[30];

int compare(const void *a,const void *b)
{
Student *pa=(Student *)a;
Student *pb=(Student *)b;
if(pa->average>pb->average)
return 1;
else
if(pa->average<pb->average)
return -1;
else
return 0;
}

int main()
{

double avr[3]={0,0,0};
int i,j;
for(i=0;i<30;i++)
{
printf("学生%d\n",i);
printf("学号:");
scanf("%d",&(stu[i].id));
printf("姓名:");
scanf("%s",stu[i].name);

for(j=0;j<3;j++)
{
printf("学科%d成绩:",j);
scanf("%f",&(stu[i].score[j]));
stu[i].average+=stu[i].score[j];//统计该生平均分
avr[j]+=stu[i].score[j];//统计该科平均分
}
stu[i].average/=3;
}
for(i=0;i<3;i++)
{
avr[i]/=3;
printf("学科%d的平均分是:%f\n",i,avr[i]);
}
//排序
qsort(stu,30,sizeof(Student),compare);
//打印结果
printf("学号,姓名,学科1,学科2,学科2,平均分");
for(i=0;i<30;i++)
{
printf("%d,%s,",stu[i].id,stu[i].name);
for(j=0;j<3;j++)
{
printf("%f,",stu[i].score[j]);
}
printf("%f\n",stu[i].average);
}

}

scanf("%s",stu[i].name);
stu[i].average=0;//*****要初始化平均值*******

for(j=0;j<3;j++)
{
printf("学科%d成绩:",j);
scanf("%lf",&(stu[i].score[j])); //**double变量要用%lf格式*******
stu[i].average+=stu[i].score[j];//统计该生平均分

所有printf中的*double变量最好也用%lf格式。
最后main函数要有返回值,消除一个警告信息。
return 0;

#include <stdio.h>
#include <stdlib.h>
struct Student
{
int id;//学号
char name[12];//姓名
double score[3];//三门课成绩
double average;//三门课的平均分
};

Student stu[30];

int compare(const void *a,const void *b)
{
Student *pa=(Student *)a;
Student *pb=(Student *)b;
if(pa->average>pb->average)
return 1;
else
if(pa->average<pb->average)
return -1;
else
return 0;
}

int main()
{

double avr[3]={0,0,0};
int i,j;
for(i=0;i<30;i++)
{
printf("学生%d\n",i);
printf("学号:");
scanf("%d",&(stu[i].id));
printf("姓名:");
scanf("%s",stu[i].name);

for(j=0;j<3;j++)
{
printf("学科%d成绩:",j);
scanf("%f",&(stu[i].score[j]));
stu[i].average+=stu[i].score[j];//统计该生平均分
avr[j]+=stu[i].score[j];//统计该科平均分
}
stu[i].average/=3;
}
for(i=0;i<3;i++)
{
avr[i]/=3;
printf("学科%d的平均分是:%f\n",i,avr[i]);
}
//排序
qsort(stu,30,sizeof(Student),compare);
//打印结果
printf("学号,姓名,学科1,学科2,学科2,平均分");
for(i=0;i<30;i++)
{
printf("%d,%s,",stu[i].id,stu[i].name);
for(j=0;j<3;j++)
{
printf("%f,",stu[i].score[j]);
}
printf("%f\n",stu[i].average);
}

}
这样该了以后就可以通过编译拉。