2 international470 international470 于 2016.04.30 10:30 提问

C语言--有木有大神帮帮看看我的折半法代码,已经自己研究了好长时间,还是弄不出来???

#include
#include
#define M 3
void inputName(char name[][121],double money[]);
void ouput(char name[][121],double money[]);
void sortPay(char name[][121],double money[]);
void sortName(char name[][121],double money[]);
int zhe(char name[][121],double money[]);
void main()
{
char name[M][121];
double money[M]={0};
char m[121];
int g;
inputName(name,money);
printf("输出原样:\n");
ouput(name,money);
sortPay(name,money);
printf("按工资输出:\n");
ouput(name,money);
sortName(name,money);
printf("按姓名输出:\n");
ouput(name,money);
printf("请输入要查找的职工姓名:");
gets(m);
g=zhe(name,money,m);
if(g!=-1)
{
printf("输出该职工%s\n",m);
}
else
{
printf("没有此人\n");
}

}
//写一个函数,输入m个职工的姓名和工资
void inputName(char name[][121],double money[])
{
int i;
for(i=0;i {
printf("输出职工姓名:");
scanf("%s",&name[i]);
printf("输入职工工资:");
scanf("%lf",&money[i]);
getchar();
}
printf("\n");
}
//写一个函数,输出m个职工的姓名和工资
void ouput(char name[][121],double money[])
{
int i;
for(i=0;i {
printf("%s %g\n",name[i],money[i]);
}
}
//写一个函数,对m个职工的工资进行升序排列,姓名也随着调整
void sortPay(char name[][121],double money[])
{
int i,j;
double t;
char x[121];
for(i=1;i {
for(j=0;j {
if(money[j] {
t=money[j];
money[j]=money[j+1];
money[j+1]=t;
strcpy(x,name[j]);
strcpy(name[j],name[j+1]);
strcpy(name[j+1],x);
}
}
}
}
//写一个函数,对m个职工的姓名进行升序排列,工资也随着调整
void sortName(char name[][121],double money[])
{
int i,j;
char xm[121];
double t;
for(i=1;i {
for(j=0;j {
if(strcmp(name[j],name[j+1]) {
strcpy(xm,name[j]);
strcpy(name[j],name[j+1]);
strcpy(name[j+1],xm);
t=money[j];
money[j]=money[j+1];
money[j+1]=t;
}
}
}
}
//写一个函数,findByName,用折半法按姓名查找指定的职工,找到返回数组下标,找不到返回-1
int zhe(char name[][121],double money[],char m[])
{
int top,bottom,mid;
top=0;
bottom=M-1;
mid=(top+bottom)/2;
while(top {
mid=(top+bottom)/2;
if(strcmp(m,name[mid][121]) {
top=mid+1;
}
else if(strcmp(m,name[mid][121])>0)
{
bottom=mid-1;
}
else
{
return mid;
}

}
return -1;

}
图片说明

1个回答

qq423399099
qq423399099   Ds   Rxr 2016.04.30 10:54
已采纳

zhe函数里两个strcmp应该都改为strcmp(m,name[mid])<0吧?
图片说明

qq423399099
qq423399099 不是都改为<0,两个name[mid][121]应该是name[mid]
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!