简单来说就是设两个结构体,一个学生信息,一个课程信息;在学生结构体里面弄一个课程结构体指针,到时候若某学生有n门课程就创建n个课程大小的数组即可。
示例如下:
#include <stdio.h>
#include <stdlib.h>
/*先定义两个结构体*/
struct subject{
char c_name[20]; //课程名
double grade; //该课程成绩
};
struct student{
char number[10]; //学号
char name[10]; //姓名
int n; //课程门数
struct subject *cj; //课程
double sum; //总分
double average; //平均分
};
int main()
{
int i,j;
struct student s[10];
for(i=0;i<10;i++){ //输入十个学生信息
scanf("%s %s %d",s[i].number,s[i].name,&s[i].n); //输入学生学号,姓名,课程门数
s[i].sum=0;
s[i].cj=(struct subject *)malloc(s[i].n * sizeof(struct subject));
for(j=0;j<s[i].n;j++){
scanf("%s %lf",s[i].cj[j].c_name,&s[i].cj[j].grade); //输入每门课程名称和成绩
s[i].sum+=s[i].cj[j].grade; //计算总分
}
if(s[i].n!=0) s[i].average=s[i].sum/s[i].n; //计算平均分
else s[i].average=0;
}
for(i=0;i<10;i++){
printf("%s %s",s[i].number,s[i].name);
for(j=0;j<s[i].n;j++)
printf("\t%s\t%.2lf",s[i].cj[j].c_name,s[i].cj[j].grade);
putchar('\n');
}
return 0;
}