写一个统计学生成绩的c语言程序,要求输入10个学生5门功课的成绩,分别用子函数求出:(1)每个学生的平%

c语言 请给出正确答案啊 好的加分!
写一个统计学生成绩的程序,要求输入10个学生5门功课的成绩,分别用子函数求出:(1)每个学生的平均分;(2)每门功课的平均分;(3)找出最高分所对应的学生和功课。

第1个回答  2009-07-22
我这有个差不多的,要吗?是我写的实训作业
程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int man=0;
int j;
char str[20];
struct student
{
char id[11];
char name[10];
int n1;
int n2;
int n3;
int n4;
int n5;
int n6;
int n7;
int n8;
int n9;
int zong;
int ping;
}student[100],temp;
void read(void)
{
FILE *cj;
int i,k;
man=0;
while(1)
{
printf("请输入要读取的文件:\n");
scanf("%s",&str);
if((cj=fopen(str,"r"))==NULL)
{
printf("打开失败\n");
}
else
{
break;
}
}
for(i=0;i<500;i++)
{
if(fscanf(cj,"%s %s %d %d %d %d %d %d %d %d %d",&student[i].id,&student[i].name,&student[i].n1,&student[i].n2,&student[i].n3,&student[i].n4,&student[i].n5,&student[i].n6,&student[i].n7,&student[i].n8,&student[i].n9)==-1)
{
break;
}
man=man+1;
}
printf("从%s读取去了“%d”条记录\n",str,man);
for(k=0;k<man;k++)
{
student[k].zong=student[k].n1+student[k].n2+student[k].n3+student[k].n4+student[k].n5+student[k].n6+student[k].n7+student[k].n8+student[k].n9;
}
for(i=0;i<man;i++)
{
student[i].ping=student[i].zong/9;
}
fclose(cj);
}
void write(void)
{
FILE *cj;
int i;
char me;
printf("请确认是否保存(是:y,否:任意键):\n");
scanf("%s",&me);
if(me=='y')
{
if((cj=fopen(str,"w"))==NULL)
{
printf("保存失败\n");
}
for(i=0;i<man;i++)
{
fprintf(cj,"%s %s %d %d %d %d %d %d %d %d %d\n",student[i].id,student[i].name,student[i].n1,student[i].n2,student[i].n3,student[i].n4,student[i].n5,student[i].n6,student[i].n7,student[i].n8,student[i].n9);
}
printf("存了“%d”条记录到%s\n",man,str);
fclose(cj);
}
else
return;
}
void save(void)
{
FILE *cj;
int i;
char me;
printf("请输入新的文件名:\n");
scanf("%s",&str);
printf("请确认是否保存(是:y,否:任意键):\n");
scanf("%s",&me);
if(me=='y')
{
if((cj=fopen(str,"w"))==NULL)
{
printf("保存失败\n");
}
for(i=0;i<man;i++)
{
fprintf(cj,"%s %s %d %d %d %d %d %d %d %d %d\n",student[i].id,student[i].name,student[i].n1,student[i].n2,student[i].n3,student[i].n4,student[i].n5,student[i].n6,student[i].n7,student[i].n8,student[i].n9);
}
printf("存了“%d”条记录到%s\n",man,str);
fclose(cj);
}
else
return;
}
void print(void)
{
int i;
for(i=0;i<72;i++)
printf("*");
printf("\n");
printf(" | 学号 姓名 1 2 3 4 5 6 7 8 9 平均分 总分 | \n");
for(i=0;i<man;i++)
{
printf(" | %10s %-6s %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d | \n",student[i].id,student[i].name,student[i].n1,student[i].n2,student[i].n3,student[i].n4,student[i].n5,student[i].n6,student[i].n7,student[i].n8,student[i].n9,student[i].ping,student[i].zong);
}
for(i=0;i<72;i++)
printf("*");
printf("\n");
}
void inquiry(void)
{
int i;
char id[10];
while(1)
{
printf("请输入要查人的学号或名字(输入-1即返回上一级):\n");
scanf("%s",&id);
if(id[0]=='-'&&id[1]=='1')
{
printf("exit\n");
break;
}
else
{
for(i=0;i<man;i++)
{
if(strcmp(student[i].id,id)==0)
{
j=i;
break;
}
if(strcmp(student[i].name,id)==0)
{
j=i;
break;
}

j=-1;

}
if(j==-1)
{
printf("无此人\n");
}
else
{
printf(" | 学号 姓名 1 2 3 4 5 6 7 8 9 总分 平均分 | \n");
printf(" | %10s %-6s %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d | \n",student[j].id,student[j].name,student[j].n1,student[j].n2,student[j].n3,student[j].n4,student[j].n5,student[j].n6,student[j].n7,student[j].n8,student[j].n9,student[i].ping,student[i].zong);
}
}
}
}
void fail(void)
{
int i;
printf("有不及格成绩的学生为:\n");
for(i=0;i<man;i++)
{
if(student[i].n1<60||student[i].n2<60||student[i].n3<60||student[i].n4<60||student[i].n5<60||student[i].n6<60||student[i].n7<60||student[i].n8<60||student[i].n9<60)
{
printf(" | %10s %-6s %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d %3d | \n",student[i].id,student[i].name,student[i].n1,student[i].n2,student[i].n3,student[i].n4,student[i].n5,student[i].n6,student[i].n7,student[i].n8,student[i].n9,student[i].ping,student[i].zong);
}
}
}
void compositor(void)
{
int i,k;
char m;
printf("请选择干什么排序:\n");
printf("1.成绩1\n");
printf("2.成绩2\n");
printf("3.成绩3\n");
printf("4.成绩4\n");
printf("5.成绩5\n");
printf("6.成绩6\n");
printf("7.成绩7\n");
printf("8.成绩8\n");
printf("9.成绩9\n");
printf("0.总成绩或平均成绩\n");
scanf("%s",&m);
if(m=='0')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i].zong<student[i+1].zong)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='1')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i].n1<student[i+1].n1)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='2')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i].n2<student[i+1].n2)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='3')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i].n3<student[i+1].n3)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='4')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i].n4<student[i+1].n4)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='5')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i].n5<student[i+1].n5)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='6')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i].n6<student[i+1].n6)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='7')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i].n7<student[i+1].n7)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='8')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i].n8<student[i+1].n8)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else if(m=='9')
{
for(k=man;k>0;k--)
{
for(i=0;i<k;i++)
{
if(student[i].n9<student[i+1].n9)
{
temp=student[i];
student[i]=student[i+1];
student[i+1]=temp;
}
}
}
}
else
printf("无此功能\n");
}
void raise(void)
{
printf("请输入添加人的学号:\n");
scanf("%s",&student[man].id);
printf("请输入添加人的姓名:\n");
scanf("%s",&student[man].name);
printf("请输入添加人的成绩1:\n");
scanf("%d",&student[man].n1);
printf("请输入添加人的成绩2:\n");
scanf("%d",&student[man].n2);
printf("请输入添加人的成绩3:\n");
scanf("%d",&student[man].n3);
printf("请输入添加人的成绩4:\n");
scanf("%d",&student[man].n4);
printf("请输入添加人的成绩5:\n");
scanf("%d",&student[man].n5);
printf("请输入添加人的成绩6:\n");
scanf("%d",&student[man].n6);
printf("请输入添加人的成绩7:\n");
scanf("%d",&student[man].n7);
printf("请输入添加人的成绩8:\n");
scanf("%d",&student[man].n8);
printf("请输入添加人的成绩9:\n");
scanf("%d",&student[man].n9);
student[man].zong=student[man].n1+student[man].n2+student[man].n3+student[man].n4+student[man].n5+student[man].n6+student[man].n7+student[man].n8+student[man].n9;
student[man].ping=student[man].zong/9;
man=man+1;
}
void alter(void)
{
int i;
char id[10];
printf("请输入要修改人的学号:\n");
scanf("%s",&id);
for(i=0;i<man;i++)
{
if(strcmp(student[i].id,id)==0)
{
j=i;
break;
}

j=-1;

}
if(j==-1)
{
printf("无此人\n");
}
else
{
printf("请输入要修改为的学号:\n");
scanf("%s",&student[j].id);
printf("请输入要修改为的姓名:\n");
scanf("%s",&student[j].name);
printf("请输入要修改为的成绩1:\n");
scanf("%d",&student[j].n1);
printf("请输入要修改为的成绩2:\n");
scanf("%d",&student[j].n2);
printf("请输入要修改为的成绩3:\n");
scanf("%d",&student[j].n3);
printf("请输入要修改为的成绩4:\n");
scanf("%d",&student[j].n4);
printf("请输入要修改为的成绩5:\n");
scanf("%d",&student[j].n5);
printf("请输入要修改为的成绩6:\n");
scanf("%d",&student[j].n6);
printf("请输入要修改为的成绩7:\n");
scanf("%d",&student[j].n7);
printf("请输入要修改为的成绩8:\n");
scanf("%d",&student[j].n8);
printf("请输入要修改为的成绩9:\n");
scanf("%d",&student[j].n9);
student[j].zong=student[j].n1+student[j].n2+student[j].n3+student[j].n4+student[j].n5+student[j].n6+student[j].n7+student[j].n8+student[j].n9;
student[j].ping=student[j].zong/9;
}
}
void deletes()
{
int i,k;
char id[10];
printf("请输入要删除人的学号:\n");
scanf("%s",&id);
for(i=0;i<man;i++)
{
if(strcmp(student[i].id,id)==0)
{
j=i;
break;
}

j=-1;

}
if(j==-1)
{
printf("无此人\n");
}
else
{
for(k=j;k<man;k++)
{
student[j]=student[j+1];
j=j+1;
}
man=man-1;
}
}
void menu(void)
{
int i;
printf("\n");
for(i=0;i<10;i++)
printf(" ");
for(i=0;i<60;i++)
printf("*");
for(i=0;i<9;i++)
printf(" ");
printf("\n");
for(i=0;i<10;i++)
printf(" ");
printf("# 1.显示学生成绩信息 6.查询不及格学生信息 #\n");
for(i=0;i<10;i++)
printf(" ");
printf("# 2.按成绩由高到低排序 7.修改学生成绩信息 #\n");
for(i=0;i<10;i++)
printf(" ");
printf("# 3.添加学生成绩信息 8.读取文件 #\n");
for(i=0;i<10;i++)
printf(" ");
printf("# 4.删除学生成绩信息 9.保存文件 #\n");
for(i=0;i<10;i++)
printf(" ");
printf("# 5.查询学生成绩信息 -. 另存为 #\n");
for(i=0;i<10;i++)
printf(" ");
printf("# +.退出 #\n");
for(i=0;i<10;i++)
printf(" ");
for(i=0;i<60;i++)
printf("*");
for(i=0;i<9;i++)
printf(" ");
printf("\n");
}
int main(void)
{
char i;
read();
menu();
while(1)
{
printf("请输入要选择的需要功能的序列号(输入0显示菜单):\n");
scanf("%s",&i);
if(i=='1')
{
print();
}
else if(i=='2')
{
compositor();
print();
}
else if(i=='3')
{
raise();
print();
}
else if(i=='4')
{
deletes();
print();
}
else if(i=='5')
{
inquiry();
}
else if(i=='6')
{
fail();
}
else if(i=='7')
{
alter();
print();
}
else if(i=='8')
{
read();
}
else if(i=='9')
{
write();
}
else if(i=='0')
{
menu();
}
else if(i=='+')
{
break;
}
else if(i=='-')
{
save();
}
else
{
printf("无此功能,请重新输入序列号\n");
}
}
return 0;
}
记事本文件:你可以随意起名,但要放在和程序同目录
0615438101 顾佳 44 67 72 60 66 65 93 82 67
0615438103 金一宇 60 77 75 75 78 77 97 74 76
0615438104 李阳涛 50 76 66 73 74 80 92 89 74
0615438105 马凯 66 76 77 66 75 72 95 82 75
0615438106 史超 47 71 65 61 85 72 89 83 70
0615438108 徐磊 60 75 66 80 76 80 92 68 74
0615438109 杨浩 60 81 70 91 83 72 93 72 78
0615438110 于泽 61 75 78 70 87 73 84 92 77
0615438111 张昊 60 71 57 82 72 63 86 38 67
0615438112 张政 60 67 69 80 66 61 87 88 73
0615438114 周艨 61 69 71 38 74 77 76 89 67
0615438131 张楠 86 74 72 90 80 81 97 80 84
0615438132 王凡 29 68 48 35 46 76 88 62 54本回答被提问者采纳
第2个回答  2009-07-14
请问是Excel表格的问题么?
第3个回答  2009-07-14
条件不全?