主题:[原创]小女是初学,还请各位高手近来指点
#include<malloc.h>
#include<string.h>
#define MAXSIZE 100
struct studen
{
char name[20];
int math;
int english;
int chinese;
int sum;
};
typedef struct
{
struct studen stu[MAXSIZE];
int last;
} Seqlist;
Seqlist *Init_Seqlist()
{
Seqlist *l;
l=(Seqlist *)malloc(sizeof(Seqlist));
l->last=-1;
return l;
}
Seqlist *input(Seqlist *q) /*输入*/
{
int i,num;
printf("请输入要输入的学生个数:");
scanf("%d",&num);
for(i=q->last+1;i<num;i++)
/*当我想再次执行这个函数时我要输入的学生数却不能执行那么多输入,比如
在第一次执行这个函数时我要输入3个学生的信息,可再次执行时我还想输入3个学生
的信息,出现了实际输入的比要输入的少
*/
{
printf("\n\t请输入姓名:");
scanf("%s",(q->stu[i].name));
printf("\n\t请输入数学成绩:");
scanf("%d",&(q->stu[i].math));
printf("\n\t请输入英语成绩:");
scanf("%d",&(q->stu[i].english));
printf("\n\t请输入语文成绩:");
scanf("%d",&(q->stu[i].chinese));
q->stu[i].sum=q->stu[i].math+q->stu[i].english+q->stu[i].chinese;
q->last++;
if(q->last==MAXSIZE-1)
printf("表满\n");
}
return q;
}
Seqlist *voi(Seqlist *q) /*排序*/
{
int i,j;
struct studen stu;
for(i=0;i<=q->last;i++)
for(j=i+1;j<=q->last;j++)
if( q->stu[i].sum<q->stu[j].sum)
{
stu = q->stu[i];
q->stu[i]=q->stu[j];
q->stu[j]=stu;
}
return q;
}
int location_Seqlist(Seqlist *q,char name[]) /*查找*/
{
int i;
i=0;
while((i<=q->last)&&strcmp(q->stu[i].name,name)==0) /*感觉这个循环体不执行*/
{ i=i+1;}
if(i>q->last)
return (-1);
else
return(i);
}
void output(Seqlist *l) /*输出*/
{
int i=0;
for(i=0;i<=l->last;i++)
{
printf("姓名:%-15s",l->stu[i].name);
printf("数学成绩:%-6d",l->stu[i].math);
printf("英语成绩:%-6d",l->stu[i].english);
printf("语文成绩:%-6d",l->stu[i].chinese);
printf("总成绩:%-6d",l->stu[i].sum);
printf("\n");
}
}
void main()
{ int i,j;
char name[20];
Seqlist *l;
l=Init_Seqlist();
while(i!=4)
{
printf("\n\n\n\n1.进入学生系统\n");
printf("2.按成绩排名输出\n");
printf("3.按姓名查找学生\n");
printf("4.退出系统\n");
printf("\n\t请选择(1-4):");
scanf("%d",&i);
switch(i)
{
case 1: input(l);break;
case 2: voi(l);
printf("\n===============================排名是===============================\n");
output(l);break;
case 3:
{printf("请输入要查找的同学姓名:");
scanf("%s",name);
j=location_Seqlist(l,name);
if(j==-1)
printf("没有查到你输入的同学\n");
else
printf("\n\n%s同学的排名是第%d位",name,j); } break;
case 4:printf("谢谢使用\n");break;
default:printf("输入有误,请重新输入\n");
}
}
free(l);
}