#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct SUBJECT{
char clas[20];
float num;
struct SUBJECT *next;
}Sub;
typedef struct student{
long id;
char name[20];
Sub *clas;
float Snum;
}stu;
void input(int n,int N,stu student[]);//录入成绩、学号和姓名
float Eadd(stu p[],float Esum[30],int n,int N,float Eaver[30]);//计算每个学生的总分和平均分
float Sadd(stu p[],int n,int N,float Saver[6]);//计算每门课程的总分和平均分
int main(){
int n,f,N;
stu student[n];
float Eaver[30],Saver[6],Esum[30];
printf("请输入学生人数:");
scanf("%d",&n);
printf("请输入科目的数量:");
scanf("%d",&N);
printf(" 1.input recorf\n 2.caculate total and Eaverage score of every course\n 3.caculate total and Eaverage score of every student\n ");
do{
printf("请选择操作:");
scanf("%d",&f);
switch(f){
case 1:input(n,N,student);break;
case 2:Eadd(student,Esum,n,N,Eaver);break;
case 3:Sadd(student,n,N,Saver);break;
default:break;
}
}while(f!=0);
return 0;
}
void input(int n,int N,stu p[]){
char a;
Sub *c;
for(int i=0;i<n;i++){
printf("第%d个同学的学号:",i+1);
scanf("%ld",&p[i].id);
printf("姓名:");
scanf(" %s",p[i].name);
for(int j=0;j<N;j++){
c=(Sub *) malloc (N * sizeof(Sub));
printf("当前所录入的科目:");
scanf("%s",c->clas);
printf("请输入%s同学的%s的成绩:",p[i].name,c->clas);
scanf("%f",&c->num);
a=getchar();
if(p[i].clas==NULL){
p[i].clas=c;
}
else{
c->next=p[i].clas;
p[i].clas=c;
}
}
}
free(c);
}
float Eadd(stu p[],float Esum[30],int n,int N,float Eaver[30]){
stu *q=p;
for(int i=0;i<N;i++){
for(int j=0;j<n;j++){
Esum[i]=q[i].clas->num;
q[i].clas=q[i].clas->next;
}
}
for(int i=0;i<n;i++){
Eaver[i]=Esum[i]/(float)N;
}
printf("计算完成\n");
}
float Sadd(stu p[],int n,int N,float Saver[6]){
stu *q=p;
for(int i=0;i<n;i++){
for(int j=0;j<N;j++){
p[i].Snum += q[i].clas->num;
q[i].clas = q[i].clas->next;
}
}
for(int i=0;i<N;i++){
Saver[i]=p[i].Snum/(float)n;
}
printf("计算完成\n");
}
这个程序单独执行选项2和选项3时可以执行,但是2和3没法都执行