请大神看看那里有问题,为什么执行时查找学生信息,输出不正确呢?
程序代码:
#include <stdio.h> #include <string.h> #include <stdlib.h> # define SIZE 100 typedef struct{ char name[10]; //*学生姓名*// char no[20]; //*学号由20个字符组成*// int score; //*学生成绩*// }Stu; //*元素类型*// typedef struct{ Stu elem[100]; int Length; int size; }Mylist; int init_list(Mylist&la) {la.Length=0; la.size=100; return 1;} int List_insert(Mylist &la,int i,Stu e) {Stu *p,*q; if ((i<1) || (i>la.Length+1)) return 0; p=&(la.elem[i-1]); q=&(la.elem[la.Length-1]); for (;q>=p;q--) { *(q+1)=*q; } *p=e; la.Length++; return 1; } int Find1(Mylist &la,char * name) /*查找并显示一个记录*/ {int i; for (i=0;i<la.Length;i++) {if (strcmp(la.elem[i].name,name)==0) return i+1;} return 0;} int Find2(Mylist la,char * no) /*查找并显示一个记录*/ {int i; for (i=0;i<la.Length;i++) {if (strcmp(la.elem[i].no,no)==0) return i+1;} return 0;} int Find3(Mylist la, int &score) /*查找并显示一个记录*/ {int i; for (i=0;i<la.Length;i++) {if (la.elem[i].score==score) return i+1;} return 0;} //输出 void print(Stu e) {printf("%s\t%s\t%d",e.no,e.name,e.score);} void Output(Mylist &la) { int i; for(i=0;i<la.Length;i++) print(la.elem[i]); } void count(Mylist la) { int i,a=0,q=0,w=0,e=0,r=0,t=0,y=0; for(i=0;i<la.Length-1;i++) { a=la.elem[i].score/10; switch(a) //对成绩分段 { case 10:q++;break; case 9:w++;break; case 8:e++;break; case 7:r++;break; case 6:t++;break; default:y++;break; } } printf("成绩为100有%d人\n",q); printf("成绩为90~99有%d人\n",w); printf("成绩为80~89有%d人\n",e); printf("成绩为70~79有%d人\n",r); printf("成绩为60~69有%d人\n",t); printf("不及格的有%d人\n\n",y); } void Max (Mylist la) {int i; int max; max= la.elem[0].score; for(i=0;i<=la.Length-1;i++) { if(max<la.elem[i].score) max=la.elem[i].score; printf("\n最高分:%d",max); } } void Min(Mylist la) {int i; int min; min=la.elem[0].score; for(i=0;i<=la.Length-1;i++) { if(min>la.elem[i].score) min=la.elem[i].score; } printf("\n 最低分:%d",min); } //平均分 void Ave(Mylist la) {int sum,aver; int i; for(i=0;i<la.Length;i++) { sum+=la.elem[i].score; } aver=sum/(la.Length-1); printf("%d",aver); } //输出 //统计学生成绩 void tongji(Mylist la) {int choose1; printf("--------------------------------------\n"); printf("| 查找学生信息 |\n"); printf("| 1.... 查找最高分 |\n"); printf("| 2.... 查找最低分 |\n"); printf("| 3.... 统计平均分 |\n"); printf("| 4.... 统计各分数段人数 |\n"); printf("| 5.... 按任意键退出 |\n"); printf("--------------------------------------"); printf("请输入您要进行的操作:"); scanf("%d",&choose1); switch(choose1) {case 1 : Max(la); break ; case 2 : Min(la); break ; case 3 : Ave(la); break ; case 4 : count(la); break ; case 5: exit(0);}} void main() {int k; char choose; Stu stud; Mylist L; init_list(L); while(1) {printf("--------------------------------------\n"); printf("| 学生成绩管理系统 |\n"); printf("| 1.... 录入学生信息 |\n"); printf("| 2.... 查找学生信息 |\n"); printf("| 3.... 输出学生信息 |\n"); printf("| 4.... 成绩统计 |\n"); printf("| 5.... 按任意键退出 |\n"); printf("--------------------------------------"); printf("\n"); printf("\n"); printf("请输入您要进行的操作:"); fflush(stdin); scanf("%c",&choose); switch(choose) {case '1' : printf("输入学生学号,姓名,成绩(用空格隔开)\n"); scanf("%s%s%d",stud.no,stud.name,&stud.score); List_insert (L,L.Length+1,stud); //录入学生信息 break ; case '2': printf("--------------------------------------\n"); printf("| 查找学生信息 |\n"); printf("| 1.... 按姓名查找 |\n"); printf("| 2.... 按学号查找 |\n"); printf("| 3.... 查找按成绩 |\n"); printf("| 4.... 按任意键退出 |\n"); printf("--------------------------------------"); printf("请输入您要进行的操作:"); fflush(stdin); char choose1; scanf("%c",&choose1); switch(choose1) {case '1' : printf("请输入姓名:"); scanf("%s",stud.name); k= Find1(L,stud.name); if(k==0) printf("此学生系统中没有这个名字\n"); else printf("该学生的信息 :%s %s %d\n",L.elem[k-1].name,L.elem[k-1].no,L.elem[k-1].score); break; case'2': printf("请输入学号:"); scanf("%s",stud.no); k= Find2(L,stud.no); if(k==0) printf("此学生系统中没有这个名字\n"); else printf("该学生的信息 :%s %s %d\n",L.elem[k-1].name,L.elem[k-1].no,L.elem[k-1].score); break; case '3' : printf("输入你要查找的分数\n"); scanf("%s",stud.score); k=Find3(L,stud.score); if(k==0) printf("此学生系统中没有这个名字\n"); else printf("该学生的信息 :%s %s %d\n",L.elem[k-1].name,L.elem[k-1].no,L.elem[k-1].score); break ; case '4': exit(0);} case'3': //输出学生信息 Output(L); break ; case'4': //成绩统计 tongji(L); break; case'5': exit(0); } } }