📄 查找.c
字号:
#define K 3
#define NULL 0
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
typedef struct st
{ int num;
char name[10];
int age;
char sex[4];
char dep[20];
int cour[K];
struct st *lchild,*rchild;
} person;
person a[100];
person a1[100];
person a2[100];
person a3[100];
person a4[100];
person a5[100];
person b1[100];
person b2[100];
person b3[100];
person b4[100];
person b5[100];
person *T;
int Q=0,S1,T1;
void fun1(a) /*输入学生信息*/
person a[];
{ char b[100],ch;
int i,j;
for(i=1;1>0;i++)
{ printf("请输入学生学号:");
gets(b); a[i].num=atoi(b);
printf("请输入学生姓名:");
gets(a[i].name);
printf("请输入学生年龄:");
gets(b); a[i].age=atoi(b);
printf("请输入学生性别:");
gets(a[i].sex);
printf("请输入学生系别:");
gets(a[i].dep);
printf("请输入数据结构成绩:");
gets(b); a[i].cour[0]=atoi(b);
printf("请输入概率成绩:");
gets(b); a[i].cour[1]=atoi(b);
printf("请输入外语成绩:");
gets(b); a[i].cour[2]=atoi(b);
Q++;
printf("学生信息已输入!\n");
printf("是否继续输入?(Y/N)");
ch=getchar(); getchar();
if(ch!='y')
break;
}
for(j=0;j<Q+1;j++)
{
b1[j]=a[j];
b2[j]=a[j];
b3[j]=a[j];
b4[j]=a[j];
b5[j]=a[j];
}
printf("按4键返回主菜单!\n");
}
void fun2(a) /*输出学生信息*/
person a[];
{ int i,j;
printf("学号 姓名 年龄 性别 系别 数据结构 概率 外语\n");
for(i=1;i<Q+1;i++)
{ printf("%d\t%s\t%d\t%s\t%s\t",a[i].num,a[i].name,a[i].age,a[i].sex,a[i].dep);
for(j=0;j<K;j++)
printf("%d\t",a[i].cour[j]);
printf("\n");
}
}
void fun3(a) /*追加学生信息*/
person a[];
{ char c[100],ch;
printf("追加学生信息开始:\n");
for(Q=Q+1;1>0;Q++)
{ printf("请输入学生学号:");
gets(c); a[Q].num=atoi(c);
b1[Q].num=a[Q].num;
b2[Q].num=a[Q].num;
b3[Q].num=a[Q].num;
b4[Q].num=a[Q].num;
b5[Q].num=a[Q].num;
printf("请输入学生姓名:");
gets(a[Q].name);
strcpy(b1[Q].name,a[Q].name);
strcpy(b2[Q].name,a[Q].name);
strcpy(b3[Q].name,a[Q].name);
strcpy(b4[Q].name,a[Q].name);
strcpy(b5[Q].name,a[Q].name);
printf("请输入学生年龄:");
gets(c); a[Q].age=atoi(c);
b1[Q].age=a[Q].age;
b2[Q].age=a[Q].age;
b3[Q].age=a[Q].age;
b4[Q].age=a[Q].age;
b5[Q].age=a[Q].age;
printf("请输入学生性别:");
gets(a[Q].sex);
strcpy(b1[Q].sex,a[Q].sex);
strcpy(b2[Q].sex,a[Q].sex);
strcpy(b3[Q].sex,a[Q].sex);
strcpy(b4[Q].sex,a[Q].sex);
strcpy(b5[Q].sex,a[Q].sex);
printf("请输入学生系别:");
gets(a[Q].dep);
strcpy(b1[Q].dep,a[Q].dep);
strcpy(b2[Q].dep,a[Q].dep);
strcpy(b3[Q].dep,a[Q].dep);
strcpy(b4[Q].dep,a[Q].dep);
strcpy(b5[Q].dep,a[Q].dep);
printf("请输入数据结构成绩:");
gets(c); a[Q].cour[0]=atoi(c);
b1[Q].cour[0]=a[Q].cour[0];
b2[Q].cour[0]=a[Q].cour[0];
b3[Q].cour[0]=a[Q].cour[0];
b4[Q].cour[0]=a[Q].cour[0];
b5[Q].cour[0]=a[Q].cour[0];
printf("请输入概率成绩:");
gets(c); a[Q].cour[1]=atoi(c);
b1[Q].cour[1]=a[Q].cour[1];
b2[Q].cour[1]=a[Q].cour[1];
b3[Q].cour[1]=a[Q].cour[1];
b4[Q].cour[1]=a[Q].cour[1];
b5[Q].cour[1]=a[Q].cour[1];
printf("请输入外语成绩:");
gets(c); a[Q].cour[2]=atoi(c);
b1[Q].cour[2]=a[Q].cour[2];
b2[Q].cour[2]=a[Q].cour[2];
b3[Q].cour[2]=a[Q].cour[2];
b4[Q].cour[2]=a[Q].cour[2];
b5[Q].cour[2]=a[Q].cour[2];
printf("学生信息已追加完毕!\n");
printf("是否继续追加?(Y/N)");
ch=getchar(); getchar();
if(ch!='y')
break;
}
printf("按4键返回主菜单!\n");
}
void menu3()
{ char ch;
printf("**************************************\n");
printf("* 1.直接排序 2.起泡排序 *\n");
printf("* 3.快速排序 4.直接选择排序 *\n");
printf("* 5.堆排序 6.归并排序 *\n");
printf("* 7.返回上一级菜单 *\n");
printf("=====================================*\n");
printf("* (请从1-7中选择)*\n");
printf("**************************************\n");
do
{ ch=getchar(); getchar();
switch(ch)
{ case'1': INSORT1(b1); break;
case'2': BUBSORT1(b1); break;
case'3': QUISORT1(b1,S1,T1); break;
case'4': selsort1(b1); break;
case'5': HEASORT1(b1); break;
case'6': MERGES1(b1); break;
case'7': menu2(); ;
}
} while(1);
}
void menu4()
{ char ch;
printf("**************************************\n");
printf("* 1.直接排序 2.起泡排序 *\n");
printf("* 3.快速排序 4.直接选择排序 *\n");
printf("* 5.堆排序 6.归并排序 *\n");
printf("* 7.返回上一级菜单 *\n");
printf("=====================================*\n");
printf("* (请从1-7中选择)*\n");
printf("**************************************\n");
do
{ ch=getchar(); getchar();
switch(ch)
{ case'1': INSORT2(b2); break;
case'2': BUBSORT2(b2); break;
case'3': QUISORT2(b2,S1,T1); break;
case'4': selsort2(b2); break;
case'5': HEASORT2(b2); break;
case'6': MERGES2(b2); break;
case'7': menu2(); break;
}
} while(1);
}
void menu5()
{ char ch;
printf("**************************************\n");
printf("* 1.直接排序 2.起泡排序 *\n");
printf("* 3.快速排序 4.直接选择排序 *\n");
printf("* 5.堆排序 6.归并排序 *\n");
printf("* 7.返回上一级菜单 *\n");
printf("=====================================*\n");
printf("* (请从1-7中选择)*\n");
printf("**************************************\n");
do
{ ch=getchar(); getchar();
switch(ch)
{ case'1': INSORT3(b3); break;
case'2': BUBSORT3(b3); break;
case'3': QUISORT3(b3,S1,T1); break;
case'4': selsort3(b3); break;
case'5': HEASORT3(b3); break;
case'6': MERGES3(b3); break;
case'7': menu2(); break;
}
} while(1);
}
void menu6()
{ char ch;
printf("**************************************\n");
printf("* 1.直接排序 2.起泡排序 *\n");
printf("* 3.快速排序 4.直接选择排序 *\n");
printf("* 5.堆排序 6.归并排序 *\n");
printf("* 7.返回上一级菜单 *\n");
printf("=====================================*\n");
printf("* (请从1-7中选择)*\n");
printf("**************************************\n");
do
{ ch=getchar(); getchar();
switch(ch)
{ case'1': INSORT4(b4); break;
case'2': BUBSORT4(b4); break;
case'3': QUISORT4(b4,S1,T1); break;
case'4': selsort4(b4); break;
case'5': HEASORT4(b4); break;
case'6': MERGES4(b4); break;
case'7': menu2(); break;
}
} while(1);
}
void menu7()
{ char ch;
printf("**************************************\n");
printf("* 1.直接排序 2.起泡排序 *\n");
printf("* 3.快速排序 4.直接选择排序 *\n");
printf("* 5.堆排序 6.归并排序 *\n");
printf("* 7.返回上一级菜单 *\n");
printf("=====================================*\n");
printf("* (请从1-7中选择)*\n");
printf("**************************************\n");
do
{ ch=getchar(); getchar();
switch(ch)
{ case'1': INSORT5(b5); break;
case'2': BUBSORT5(b5); break;
case'3': QUISORT5(b5,S1,T1); break;
case'4': selsort5(b5); break;
case'5': HEASORT5(b5); break;
case'6': MERGES5(b5); break;
case'7': menu2(); break;
}
} while(1);
}
void menu1()
{ char ch;
printf("****************************************\n");
printf("* 学生成绩管理 *\n");
printf("*======================================*\n");
printf("* 1. 输入学生信息 2.输出学生信息 *\n");
printf("* 3. 排序 4.返回主菜单 *\n");
printf("* 5.追加学生信息 6.查找 *\n");
printf("* 0.退出本系统 *\n");
printf("*======================================*\n");
printf("* (请从0-6中选择)*\n");
printf("****************************************\n");
do
{ ch=getchar(); getchar();
switch(ch)
{ case'1': fun1(a); break;
case'2': fun2(a); break;
case'3': menu2(); break;
case'4': menu1(); break;
case'5': fun3(a); break;
case'6': menu8(); break;
case'0': exit(0);
}
} while(1);
}
menu2()
{ char ch;
printf("**************************************\n");
printf("* 排序菜单 *\n");
printf("*====================================*\n");
printf("* 1.对学号进行排序 *\n");
printf("* 2.对年龄进行排序 *\n");
printf("* 3.对数据结构进行排序 *\n");
printf("* 4.对概率进行排序 *\n");
printf("* 5.对外语进行排序 *\n");
printf("* 6.返回排序菜单 *\n");
printf("* 7.返回主菜单 *\n");
printf("*====================================*\n");
printf("* (请从1-6中选择) *\n");
printf("**************************************\n");
do
{ ch=getchar(); getchar();
switch(ch)
{ case'1': menu3(); break;
case'2': menu4(); break;
case'3': menu5(); break;
case'4': menu6(); break;
case'5': menu7(); break;
case'6': menu2(); break;
case'7': menu1(); break;
}
} while(1);
}
void menu9()
{ char ch;
printf("**************************************\n");
printf("* 1.顺序查找 *\n");
printf("* 2.二分查找 *\n");
printf("* 3.二叉排序树 *\n");
printf("* 4.返回上一级菜单 *\n");
printf("*====================================*\n");
printf("* (请在1-4中选择)*\n");
printf("**************************************\n");
do
{ ch=getchar(); getchar();
switch(ch)
{ case'1': SEQSEAR1(b1); break;
case'2': BINSEAR1(b1); break;
case'3': BSTSEAR1(b1); break;
case'4': menu8(); break;
}
} while(1);
}
void menu10()
{ char ch;
printf("**************************************\n");
printf("* 1.顺序查找 *\n");
printf("* 2.二分查找 *\n");
printf("* 3.二叉排序树 *\n");
printf("* 4.返回上一级菜单 *\n");
printf("*====================================*\n");
printf("* (请在1-4中选择)*\n");
printf("**************************************\n");
do
{ ch=getchar(); getchar();
switch(ch)
{ case'1': SEQSEAR2(b1); break;
case'2': BINSEAR2(b1); break;
case'3': BSTSEAR2(b1); break;
case'4': menu8(); break;
}
} while(1);
}
void menu11()
{ char ch;
printf("**************************************\n");
printf("* 1.顺序查找 *\n");
printf("* 2.二分查找 *\n");
printf("* 3.二叉排序树 *\n");
printf("* 4.返回上一级菜单 *\n");
printf("*====================================*\n");
printf("* (请在1-4中选择)*\n");
printf("**************************************\n");
do
{ ch=getchar(); getchar();
switch(ch)
{ case'1': SEQSEAR3(b1); break;
case'2': BINSEAR3(b1); break;
case'3': BSTSEAR3(b1); break;
case'4': menu8(); break;
}
} while(1);
}
menu8()
{ char ch;
printf("**************************************\n");
printf("* 查找菜单 *\n");
printf("*====================================*\n");
printf("* 1.对学号进行查找 *\n");
printf("* 2.对姓名进行查找 *\n");
printf("* 3.对年龄进行查找 *\n");
printf(" 4.返回主菜单 *\n");
printf("*====================================*\n");
printf("* (请从1-4中选择) *\n");
printf("**************************************\n");
do
{ ch=getchar(); getchar();
switch(ch)
{ case'1': menu9(); break;
case'2': menu10(); break;
case'3': menu11(); break;
case'4': menu1(); break;
}
} while(1);
}
INSORT1(b1) /*对学号进行直接排序*/
person b1[];
{ int i,j;
for(i=2;i<Q+1;i++)
{ b1[0]=b1[i];
j=i-1;
while(b1[0].num<b1[j].num)
b1[j+1]=b1[j--];
b1[j+1]=b1[0];
}
printf("对学号进行直接排序的结果为:\n");
fun2(b1);
}
BUBSORT1(b1) /*对学号进行起泡排序*/
person b1[];
{ int i,j,noswap;
person temp;
for(i=1;i<Q;i++)
{ noswap=1;
for(j=Q-1;j>=i;j--)
if(b1[j+1].num<b1[j].num)
{ temp=b1[j+1];
b1[j+1]=b1[j];
b1[j]=temp;
noswap=0;
}
if(noswap)
break;
}
printf("对学号进行起泡排序的结果为:\n");
fun2(b1);
}
int PARTION1(b1,l,h) /*对学号进行快速排序*/
person b1[];
int l,h;
{ int i,j;
person temp;
i=l; j=h; temp=b1[i];
do
{ while((b1[j].num>=temp.num) && (i<j))
j--;
if(i<j)
b1[i++]=b1[j];
while((b1[i].num<=temp.num) && (i<j))
i++;
if(i<j)
b1[j--]=b1[i];
} while(i!=j);
b1[i]=temp;
return(i);
}
QUISORT1(b1,s1,t1)
person b1[];
int s1,t1;
{ int i,j;
if(s1<t1)
{ i=PARTION1(b1,s1,t1);
QUISORT1(b1,s1,i-1);
QUISORT1(b1,i+1,t1);
}
printf("对学号进行快速排序的结果为:\n");
fun2(b1);
}
selsort1(b1) /*对学号进行直接选择排序*/
person b1[];
{ int i,j,k;
person temp;
for(i=1;i<Q-1;i++)
for(j=i+1;j<Q;j++)
{ k=i;
if(b1[j].num<b1[k].num)
k=j;
if(k!=i)
{ temp=b1[i];
b1[i]=b1[k];
b1[k]=temp;
}
}
printf("对学号进行直接选择排序的结果为:\n");
fun2(b1);
}
SIFT1(b1,i,m) /*对学号进行堆排序*/
person b1[];
int i,m;
{ int j;
person temp;
temp=b1[i];
j=2*i;
while(j<=m)
{ if((j<m) && (b1[j].num<b1[j+1].num))
j++;
if(temp.num<b1[j].num)
{ b1[i]=b1[j];
i=j; j=2*i;
}
else
break;
}
b1[i]=temp;
}
HEASORT1(b1)
person b1[];
{ int i,j;
person temp;
for(i=Q/2;i>=1;i--)
SIFT1(b1,i,Q);
for(i=Q;i>=1;i--)
{ temp=b1[1];
b1[1]=b1[i];
b1[i]=temp;
SIFT1(b1,1,i-1);
}
printf("对学号进行堆排序的结果为:\n");
fun2(b1);
}
MERGE1(b1,a1,low,mid,high) /*对学号进行归并排序*/
person b1[];
person a1[];
int low,mid,high;
{ int i,j,k;
low=1; mid=Q/2+1; high=Q;
i=low; j=mid; k=low;
while((i<=Q/2) && (j<=high))
if(b1[i].num<=b1[j].num)
a1[k++]=b1[i++];
else
a1[k++]=b1[j++];
while(i<=Q)
a1[k++]=b1[i++];
while(j<=Q)
a1[k++]=b1[j++];
}
MERGEP1(b1,a1,length)
person b1[];
person a1[];
int length;
{ int i,j;
i=0;
while(i+2*length-1<Q+1)
{ MERGE1(b1,a1,i,i+length-1,i+2*length-1);
i=i+2*length;
}
if(i+length-1<Q)
MERGE1(b1,a1,i,i+length-1,Q);
else
for(j=i;j<Q+1;j++)
a1[j]=b1[j];
}
MERGES1(b1)
person b1[];
{ int length;
length=1;
while(length<Q+1)
{ MERGEP1(b1,a1,length);
length=2*length;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -