#include<iostream>
#define MAXSIZE 10
#define Subject 5
using namespace std;
//定义学生类型
typedef struct student
{
char name[4];
int grade[Subject];
} Student;
//定义顺序表
typedef struct
{
Student data[MAXSIZE];
int last;
}SeqList;
//初始化顺序表
SeqList *Init_Student()
{
SeqList *pc=(SeqList *)malloc(sizeof(SeqList));
pc->last=-1;
return pc;
}
//录入学生信息
int Input_Student(SeqList *L,Student x)
{
L->data[L->last+1]=x;
L->last++;
return 1;
}
//显示学生信息
int Print_Student(SeqList *L)
{
for(int j=0;j<=L->last;j++)
{
cout<<L->data[j].name;
for(int i=0;i<Subject;i++)
{
cout<<L->data[j].grade[i];
}
cout<<endl;
}
}
//统计各科平均成绩
int Average_achievement(SeqList *L)
{
int sum=0;
int aver[Subject];
for(int i=0;i<Subject;i++)
{
for(int j=0;j<=L->last;j++)
sum += L->data[j].grade[i];
aver[i]=sum/(L->last+1);
sum=0;
}
for(int i=0;i<Subject;i++)
cout<<aver[i];
cout<<endl;
return 1;
}
//统计每个学生的总分
int Sum_achievement(SeqList *L)
{
int sum=0;
int sumach[MAXSIZE];
for(int i=0;i<=L->last;i++)
{
for(int j=0;j<Subject;j++)
sum += L->data[i].grade[j];
sumach[i]=sum;
}
for(int i=0;i<=L->last;i++)
cout<<sumach[i];
cout<<endl;
}
//录入学生
int Input(SeqList *)
{
int grade[Subject];
char name[4];
//输入待录入学生的信息
cout<<"请输入学生姓名:";
scanf("%s",name);
cout<<endl;
cout<<"请输入学生的各科成绩:";
for(int i=0;i<Subject;i++)
cin>>grade[i];
Student *pc=(Student *)malloc(sizeof(Student));
for(int i=0;i<Subject;i++)
pc->grade[i]=grade[i];
strcpy(pc->name,name);//这一步可能没有录入进顺序表中,才导致查询功能没有任何结果
}
void printChoice()
{
printf("请选择功能:\n");
printf("\t1.录入学生信息\n");
printf("\t2.打印学生信息\n");
printf("\t3.统计各科平均成绩\n");
printf("\t4.统计每个学生的总分\n");
printf("\t请选择:");
}
int main()
{
SeqList *L=Init_Student();
int choice;
while(1)
{
printChoice();
int choice=-1;
cin>>choice;
switch(choice)
{
case 1:
Input(L);
break;
case 2:
Print_Student(L);
break;
case 3:
Average_achievement(L);
break;
case 4:
Sum_achievement(L);
break;
}
}
}
录入学生信息没有问题,但是查询功能没有任何显示,第三个功能会导致程序崩溃,第四个功能也是没有任何结果,我个人猜测可能是录入进顺序表是发生错误导致数据没有录入进去。
传参的问题,的确是录入的时候,包括后面操作这个结构体指针的时候
传参,若要改变该参数本身的存储,就需要传入该参数的地址,现在这个参数是指针,那传进去的就是该指针结构体的地址,函数里用的就是该结构体指针的指针(二级指针),使用的时候用 (*L)->XXX 这样的方式。
你自己修改一下,如果还有问题请追问
|