求用二维数组解决此问题
写几个函数:1.输入10个职工的姓名和职工号;2.按职工号由小到大顺序排序,姓名顺序也随之调整;3.要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。我只会一维数组。。。求解用二维数组,最好带注释,谢谢!
#include<stdio.h> #include<string.h> struct employee { int number; char name[20]; }; int main() { int i,j; int t,n; char c[20]; employee emp[10]; //职工信息的录入 for(i=0;i<10;i++) { printf("请输入职工的姓名:"); scanf("%s",emp[i].name); printf("请输入职工的编号:"); scanf("%d",&emp[i].number); } //对职工进行按工号排序 for(i=1;i<10;i++) for(j=0;j<9;j++) if(emp[j].number>emp[j+1].number) { t=emp[j].number; emp[j].number=emp[j+1].number; emp[j+1].number=t; strcpy(c,emp[j].name); strcpy(emp[j].name,emp[j+1].name); strcpy(emp[j].name,c); } //输出排序后的职工信息 for(i=0;i<10;i++) { printf("职工编号:%d\n",emp[i].number); printf("姓名:%s\n",emp[i].name); } //以下是查找部分,采用折半查找 printf("请输入要查找职工的工号:"); scanf("%d",&n); int m,m1,m2; m=10/2; m1=0; m2=10; while(m1!=m2) { if(n<emp[0].number||n>emp[9].number) break; if(n==emp[m].number) { printf("所查找的职工的姓名是:%s\n",emp[m].name); return 1; } else if(n>emp[m].number) { m1=m; m=(m1+m2)/2; } else { m2=m; m=(m1+m2)/2; } } printf("没有找到该编号对应的职工。\n"); return 0; }