请大神看看那里有问题,为什么执行时查找学生信息,输出不正确呢?
程序代码:
#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);
}
}
}









不是啊,平时也有好好学习,只不过非计算机专业,所以课时少,所以学的比较渣!