用C语言编写几个函数(1)输入N 个职工的姓名和职工号(2)按职工号由小到大顺序排序,姓名顺序也随之调整(3)要输入一个职工号用折半查找方法找出该职工的姓名从主程序输入要查找的职工姓名。
哪位高手大哥帮帮忙,偶快急死了
谢谢!!!
#include <stdio.h> struct zhigong { char name[10]; int gonghao; };
void paixu(struct zhigong str[]);
void main() { int i; struct zhigong str[5]; for(i=0;i<5;i++) { printf("请输入职工姓名:"); scanf("%s",str[i].name); printf("请输入职工工号:"); scanf("%d",&str[i].gonghao); printf("\n"); } paixu(str); }
void paixu(struct zhigong str[]) { int temp; int i,j; for(i=0;i<4;i++) { for(j=1;j<5;j++) { if(str[i].gonghao>str[j].gonghao) { temp=str[j].gonghao; str[j].gonghao=str[i].gonghao; str[i].gonghao=temp; } } } for(i=0;i<5;i++) { printf("姓名:%s\t工号:%d\n",str[i].name,str[i].gonghao); } }
以上为我编写的前二个部分,但是出了问题,就是我按工号排序时(我只会用冒泡排序法),既然不成功,我想了一下,是不是因为"str[i].gonghao"这个变量不是整形的变量,所以不成功啊,因为我定义的是一个结构体,所以他是"struct zhigong"这个类型的变量了,如果我要给结构体的变量排序,应该用什么方法啊.谢谢大家请告之,第三部分还不会.
不对!!!我们只说i=1&&j=2和i=2&&,j=1的情况!!在i=1,j=2时你的判断原结构数组的
str[1].gonghao>str[2].gonghao,如果成立互换,而在i=2,j=1时你的判断又是:
str[2].gonghao>str[1].gonghao,如果第一个成立,则第二个也成立,不成立都不成立,
这样你两次换又换回去了不是么???
你用0,1,2,3,4看一看,我里面的一个循环应该是for(j=i+1;j<5;j++)这样才对,
因为一次i的循环已经保证前面的一个一定是最小的了,你下面的循环就不用再用后面的和它比了!!
而且你的职工名称怎么换???
用字符串strcopy()函数??
这样的问题应该用链的,而不是数组,因为如果是几百,几千个员工怎么办,用多少次循环???!!!