C语言编程:输入每个学生的姓名和数学、语文、外语成绩,统计每人的平均值,并按平均值降序排列……

输入每个学生的姓名和数学、语文、外语成绩,统计每人的平均值,并按平均值降序排列,输出排列后的名次、姓名、课程名(成绩)和平均值。(注:平均值相同者按姓名的字母表顺序排列)(要求用结构体数据类型Student实现,该类型包含姓名charname[20]、3门课成绩doublescore[3]和平均分double ave构成,结构体数组stu在main中定义)(统计平均值Average、排序BubbleSort用子函数实现)

#include <stdio.h>

typedef struct
{
char name[10];
char birth[11];
double chinese;
double english;
double math;
double ave;
}student;

void input(student *p,int n)
{
int i;
for(i=0;i<n;i++)
{
printf("请输入第%d位学生信息:\n",i+1);
printf("姓名:");
scanf("%s",(p+i)->name);
printf("生日(格式:2000-1-1):");
scanf("%s",(p+i)->birth);
printf("语文成绩:");
scanf("%lf",&(p+i)->chinese);
printf("数学成绩:");
scanf("%lf",&(p+i)->math);
printf("英语成绩:");
scanf("%lf",&(p+i)->english);
(p+i)->ave=((p+i)->chinese+(p+i)->math+(p+i)->english)/3;
}
printf("输入完成!\n\n");
}
void output(student *p,int n)
{
int i;
printf("%10s%11s%9s%9s%9s%8s\n","姓名","生日","语文成绩","数学成绩","英语成绩","平均分");
for(i=0;i<n;i++)
{
printf("%10s",(p+i)->name);
printf("%11s",(p+i)->birth);
printf("%9.0f",(p+i)->chinese);
printf("%9.0f",(p+i)->math);
printf("%9.0f",(p+i)->english);
printf("%8.2f\n",(p+i)->ave);
}
printf("输出完成!\n\n");
}
void sort(student *p,int n)
{
int i,j;
student t;
for(i=1;i<n;i++)
{
for(j=1;j<=n-i;j++)
{
if((*(p+i)).ave>(*(p+i-1)).ave)
{
t=*(p+i);
*(p+i)=*(p+i-1);
*(p+i-1)=t;
}
}
}
printf("--------------排序完成!\n\n");
}
int main()
{
int n,i;
student stu[100];
printf("请输入人数:");
scanf("%d",&n);
input(stu,n);
sort(stu,n);
output(stu,n);
return 0;
}


以前写过类似的题目,你可以修改修改,就差不多是你题目要求了。

追问

三门课成绩要用数组表示怎么写?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-22
加我,我发给你1070295480