用链表来做,这样可以方便实现增删查找这些功能,
不过你只问“如何实现按班级和学期查询学生信息”,
这个简单,假设你定义了一个结构体数组,并且数组里已经保存了各个学生的信息,需要实现查找功能,
首先用printf()提示“请输入要查找的班级和学期”接着用scanf()接收放到两个变量里比如(int a1,a2),
然后,。。额,好像不对,你要查的是一个班级的全部成绩,并且还是分学期的?
好吧,我还以为你要查某个同学的成绩,既然这样,就改一下:
假设你定义了一个结构体二维数组aa[3][10],
结构体里有{int banji //班级 名字和各种成绩}
这个数组的第一行元素 代表第一个学期的学生成绩 第二行元素 代表第二个学期的学生成绩(这个理解吧?)
这样学生的信息就有了,就可以查找了
你就判断if(a1 == aa[a2-1][0]) //a2-1是学期 因为下标从0开始 就减1 如果是这个班级就执行下去
{for(i=0;i<10;i++)
printf("%d %s %d %d %d\n",aa[a2-1][i].banji, aa[a2-1][i].名字, aa[a2-1][i].各种成绩);
}
思路就是这样了,具体怎么写就要靠你自己咯。
我又想了想,好像还不是很妥当。既然要从班级判断,就要有很多班级,那么你就定义几个二维数组 每一个代表一个班级的各个学期的成绩
这样就直接用switch语句了 switch(a1)
{
case aa[a2-1][0].banji :
for(i=0;i<10;i++)
printf("%d %s %d %d %d\n",aa[a2-1][i].banji, aa[a2-1][i].名字, aa[a2-1][i].各种成绩);break;
case bb[a2-1][0].banji :
for(i=0;i<10;i++)
printf("%d %s %d %d %d\n",bb[a2-1][i].banji, bb[a2-1][i].名字, bb[a2-1][i].各种成绩);break;
case cc[a2-1][0].banji :
for(i=0;i<10;i++)
printf("%d %s %d %d %d\n",cc[a2-1][i].banji, cc[a2-1][i].名字, cc[a2-1][i].各种成绩);break;
}
学期可以直接用做下标,所以没必要判断
应该就是这样了。
可以用switch语句
谭浩强 C语言多看几遍 应该就能找到答案