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]
大约 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C语言-二分查找(折半查找)算法
1.折半查找算法 原理:取中间元素与查找元素进行比较,如果查找元素比中间元素大,则在中间元素右边查找,如果查找元素比中间元素小,则在中间元素的左边查找。 代码例子: #include /** * 折半查找函数 * * @param arr 数组 * @param len 数组长度 * @param value 查找元素 * * @return 返回查找元素的
C语言:折半查找的程序编写
# include<stdio.h>int binary_search(int arr[], int key, int left, int right) { while (left <= right) { int mid = left + ((right - left) >> 1); if (key > arr[mid]) {
折半查找法---C语言实现
/********************************************************************************************* 函数名称: HalfFindElement() ** 作 者: 张月华
C语言 找数字,用(折半查找法或二分查找法)
找数字,用(折半查找法或二分查找法) 注意:基于 有序数组int main() { int arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int key = 1; int left = 0; int right = sizeof(arr)/sizeof(arr[0])-1;//下标 while (left <= right ) { int mid =left
【C/C++】折半查找(二分查找)
一、二分查找 在C和C++里,二分查找是针对有序数组所用的一种快速查找元素的方法。 二、二分查找的条件以及优缺点 条件:针对有序数组(元素从小到大或从大到小) 优点:查询速度较快,时间复杂度为O(n) 缺点:有硬性条件的限制,而且即使查到后,插入与删除困难。 三、二分查找C语言代码块(封装后) 封装函数解释: 函数原型:binary_research(int arr[],int l
c语言程序折半查找算法
//创建表信息 void CreatStable(SSTable *ST,int length) { int i; printf("请输入数据的个数:"); scanf("%d",&ST->length); length = ST->length; ST->elem = (elemType *) malloc(length * sizeof(elemType)); printf("请从小到大输入数据:\n"); for(i=0; i < ST->length; i++) { printf("请你输入一个整数 :"); scanf("%d",&ST->elem[i].number); } } //比较函数 int EQ(int num1,int num2) { if(num1==num2) return 1; else return 0; } int LT(int num1,int num2) { if(num1<num2) return 1; else return 0; } //查找函数 int Search_Bin(SSTable *ST,int number) { int low=1,high=ST->length; int mid; while(low<=high) { mid=(low+high)/2; if(EQ(ST->elem[mid].number,number)) return mid; else if(LT(number,ST->elem[mid].number)) high=mid-1; else low=mid+1; } return 0; }
程序能看懂,但就是不会写
有学生发博文,题目是“请问贺老师怎么解决程序能看懂,但是自己不会写的问题”,博文内容是“如题”。  在自己的博客中发文,要让我看到,太考验我了。在打开求助的渠道过程中,选择合适的方式,真太有必要了。亲爱的读者,你能说出这样的方式之外的其他途径,并评价这种方式的有效性吗?  针对问题,我的答复是:  不会写是你的潜意识告诉你的,是因为你内心拒绝你要写出来,是因为你不写。现在你必须写出来,这是心理问题
C语言简单实现折半查找法
近期研习C语言,谭浩强《C语言程序设计(第2版)》P167.6原题:     有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。     因以前使用其他高级语言时从未使用过该查询算法 ,苦思了有差不多半个钟才代码实现。不过对照原版答案后认为自己的算法更简洁。 原书做法是每一次查找时先根据值的比较结果定出
用c语言编写折半查找法
折半查找法又称为二分查找,是在一个有序数组里面找到一个具体的数,方法我在代码里注释到了。 #include int binary_search(int *arr, int key, int sz)//创建一个函数 { int left = 0;//定义数组中元素的左下标 int right = sz - 1;//定义数组中元素的右下标 int mid = 0;//定义数组中一个元素的下
【c语言】自己编写一遍折半查找
//自己编写一遍折半查找 #include int fun(int * a,int len,int x) { int r=len-1,l=0,mid; mid=(r+l)/2; while(r>l) { if( x > a[mid] ) { l=mid+1; } else if( x < a[mid] ) { r=r-1; } else