查找和排序.docx
- 文档编号:15860578
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:17
- 大小:186.40KB
查找和排序.docx
《查找和排序.docx》由会员分享,可在线阅读,更多相关《查找和排序.docx(17页珍藏版)》请在冰点文库上搜索。
查找和排序
#include
#include
#include
#defineMAXSIZE100//设记录不超过二十个
typedefstruct//定义每个记录
{
charname[MAXSIZE];//姓名
charsex[3];//性别
floatnum;//学号
floatsum;//总分
floatave;//平均分
floatmark1;//成绩一
floatmark2;//成绩二
floatmark3;//成绩三
}Student;
typedefstruct//定义顺序表的结构
{
Studentr[MAXSIZE+1];//存储顺序表的向量
intlength;//顺序表的长度
}SqList;
voidcreate(SqList&ST)//创建学生的相关信息
{
inti;
printf("请输入学生的个数:
\n");
scanf("%d",&ST.length);
for(i=0;i { printf("请输入第%d+1个学生的信息: \n",i); printf("学号: \n"); scanf("%f",&ST.r[i].num); printf("姓名: \n"); scanf("%s",&ST.r[i].name); printf("性别: \n"); scanf("%s",&ST.r[i].sex); printf("成绩一: \n"); scanf("%f",&ST.r[i].mark1); printf("成绩二: \n"); scanf("%f",&ST.r[i].mark2); printf("成绩三: \n"); scanf("%f",&ST.r[i].mark3); } printf("输入完毕! \n"); } voidsum(SqList&ST)//计算总分 { inti; for(i=0;i { ST.r[i].sum=ST.r[i].mark1+ST.r[i].mark2+ST.r[i].mark3; } } voidshuchu(SqList&ST)//输出函数 { inti; printf("学生的信息如下: \n"); printf("学号姓名性别成绩一成绩二成绩三总分\n"); for(i=0;i { printf("%f%s%s%f%f%f%f\n",ST.r[i].num,ST.r[i].name,ST.r[i].sex,ST.r[i].mark1,ST.r[i].mark2,ST.r[i].mark3,ST.r[i].sum); } } voidcaidan(SqList&ST); /*************************************chacunbufen*****************************/ voidchaxun(SqList&ST)//查询信息 { l1: printf("查询可以选择以下方法: \n"); printf("1: 根据学号查询\n"); printf("2: 根据姓名查询\n"); printf("3: 根据性别查询\n"); printf("4: 退出\n"); intn,m; charname[MAXSIZE]; charxb[3]; printf("请选择! \n"); scanf("%d",&m); if(m==1)//折半查找 { inti,j; StudentL1;//使学号变为有序的 for(i=1;i for(j=i;j>=1;j--) if(ST.r[j].num { L1=ST.r[j]; ST.r[j]=ST.r[j-1]; ST.r[j-1]=L1; } l2: inta=0; printf("请输入需要查找的学号: \n"); scanf("%d",&n); intlow,high,mid; low=0; high=ST.length-1; while(low<=high) { mid=(low+high)/2; if(n==ST.r[mid].num) { printf("%f%s%s%f%f%f%f\n",ST.r[mid].num,ST.r[mid].name,ST.r[mid].sex,ST.r[mid].mark1,ST.r[mid].mark2,ST.r[mid].mark3,ST.r[mid].sum); a=1; break; } elseif(n high=mid-1; else low=mid+1; } if(! a) { printf("所查信息不存在! \n请重新输入! "); gotol2; } gotol1; } if(m==2)//顺序查找 { l3: inta=0,i; printf("输入要查找的姓名: \n"); scanf("%s",&name); for(i=0;i { if(strcmp(name,ST.r[i].name)==0) { printf("%f%s%s%f%f%f%f\n",ST.r[i].num,ST.r[i].name,ST.r[i].sex,ST.r[i].mark1,ST.r[i].mark2,ST.r[i].mark3,ST.r[i].sum); a=1; } } if(! a) { printf("所查信息不存在! \n请重新输入! \n"); gotol3; } gotol1; } if(m==3)//顺序查找 { l4: inta=0,i; printf("请输入需要查的性别: \n"); scanf("%s",&xb); for(i=0;i { if(strcmp(xb,ST.r[i].sex)==0) { printf("%f%s%s%f%f%f%f\n",ST.r[i].num,ST.r[i].name,ST.r[i].sex,ST.r[i].mark1,ST.r[i].mark2,ST.r[i].mark3,ST.r[i].sum); a=1; } } if(! a) { printf("所查信息不存在! 请重新输入! \n"); gotol4; } gotol1; } if(m==4) { caidan(ST); } } /***********************************paixubufen**********************************/ voidpaixu(SqList&ST)//排序 { l1: intn; printf("排序有以下方法可供选择: \n"); printf("1: 根据学号排序\n"); printf("2: 根据成绩一排序\n"); printf("3: 根据成绩二排序\n"); printf("4: 根据成绩三排序\n"); printf("5: 根据总成绩排序\n"); printf("6: 退出\n"); printf("请选择! \n"); scanf("%d",&n); if(n==1)//按照学号排序,使用插入排序 { inti,j; StudentL1; for(i=1;i for(j=i;j>=1;j--) { if(ST.r[j].num { L1=ST.r[j]; ST.r[j]=ST.r[j-1]; ST.r[j-1]=L1; } } shuchu(ST); printf("排序完成! \n"); gotol1; } if(n==2)//根据成绩一排序,用选择排序 { StudentL1; inti,j; for(i=0;i for(j=i+1;j { if(ST.r[i].mark1>ST.r[j].mark1) { L1=ST.r[j]; ST.r[j]=ST.r[i]; ST.r[i]=L1; } } shuchu(ST); printf("排序完成! \n"); gotol1; } if(n==3)//根据成绩二排序,用选择排序 { StudentL1; inti,j; for(i=0;i for(j=i+1;j { if(ST.r[i].mark2>ST.r[j].mark2) { L1=ST.r[j]; ST.r[j]=ST.r[i]; ST.r[i]=L1; } } shuchu(ST); printf("排序完成! \n"); gotol1; } if(n==4)//根据成绩三排序,用选择排序 { StudentL1; inti,j; for(i=0;i for(j=i+1;j { if(ST.r[i].mark3>ST.r[j].mark3) { L1=ST.r[j]; ST.r[j]=ST.r[i]; ST.r[i]=L1; } } shuchu(ST); printf("排序完成! \n"); gotol1; } if(n==5)//根据总成绩排序,用选择排序 { StudentL1; inti,j; for(i=0;i for(j=i+1;j { if(ST.r[i].sum>ST.r[j].sum) { L1=ST.r[j]; ST.r[j]=ST.r[i]; ST.r[i]=L1; } } shuchu(ST); printf("排序完成! \n"); gotol1; } if(n==6)//退出 { caidan(ST); } } voidcaidan(SqList&ST)//选择菜单 { printf("请选择要进入的模块: \n"); printf("1: 查询\n"); printf("2: 排序\n"); printf("3: 退出\n"); intc; scanf("%d",&c); if(c==1) { chaxun(ST); } if(c==2) { paixu(ST); } if(c==3) { exit(0); } } /***********************主函数************************/ voidmain() { SqListST; create(ST); sum(ST); shuchu(ST); caidan(ST); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 查找 排序