回 帖 发 新 帖 刷新版面

主题:[讨论]请问这个程序怎么了,要交的作业,求助!!!!

#include<stdio.h>
#include<stdlib.h>
#define MAXNUM 10
#define FALSE 0
#define TRUE  1
 
typedef struct 
{ int key;
  int value;
}DicElement;
 
typedef struct
{ DicElement element[MAXNUM];
  int n;
}SeqDictionary;
  
int binarySearch(SeqDictionary *pdic,int key,int *position)  //2分法
{
    int low,mid,high;
    low=0;high=pdic->n-1;
    while(low<=high)
    {
        mid=(low+high)/2;
        if(pdic->element[mid].key==key)
        {
            *position=mid;
            return(TRUE);
        }
        else if(pdic->element[mid].key>key)
                    high=mid-1;
        else low=mid+1;
    }
    *position=low;
    return(FALSE);
    
}

int insert_seq(SeqDictionary *palist,int x)  //插入数据
{  
    int q;
    for(q=palist->n-1;q>0 && palist->element[q].key>x;q--)
    {
       palist->element[q+1].key=palist->element[q].key;
    }

    palist->element[q].key=x;
    palist->n=palist->n+1;
    return(TRUE);
}

void main()
{
  int i,f=0,e,r,x=0,h,u=0;
  SeqDictionary KEY;
 printf("请输入数据的个数:");
 scanf("%d",&KEY.n);
 printf("请输入数据:\n");
 for(i=0;i<KEY.n;i++)
{
         scanf("%d",&KEY.element[i].key);
         //printf("请输入地%d个关键码的值:",i+1);
         //scanf("%d",&KEY.element[i].value);
}
 printf("请输入要查的关键码:");
 scanf("%d",&x);
 printf("结果是:");
 f=binarySearch(&KEY,x,&h);
 printf("%d\n",f);
 printf("要插入数据请按1:");
 scanf("%d",e);
     if(e==1)
     {printf("请输入要插入的数据:");
     scanf("%d",r);
     insert_seq(&KEY,r);
     printf("请输入要查的关键码:");
     scanf("%d",&x);
     printf("结果是:");
     f=binarySearch(&KEY,x,&h);
     printf("%d\n",f);
     }
     

}
这个程序调试的时候是没有错的,但运行到某一步的时候就出现错了,检查好久都不懂那里错,希望高手帮忙解决一下,不盛感激~~~~~

回复列表 (共4个回复)

沙发

Compiling...
binarysearch.cpp
i:\c++1\binarysearch.cpp(70) : warning C4700: local variable 'e' used without having been initialized
i:\c++1\binarysearch.cpp(73) : warning C4700: local variable 'r' used without having been initialized
Linking...

binarysearch.exe - 0 error(s), 2 warning(s)
以上是你的程序编译结果,其实e和r前应加取地址符。

printf("要插入数据请按1:");
 scanf("%d",&e);
     if(e==1)
     {printf("请输入要插入的数据:");
     scanf("%d",&r);

Compiling...
binarysearch.cpp
Linking...

binarysearch.exe - 0 error(s), 0 warning(s)
现在编译应该没有错误了,至于你的二分检索好坏,你还要自己去检查。

[em2][em2]

板凳

哎  随便 一看就发现了一个错误  scanf 的
编绎 成功了  ?  搞不清~~~

3 楼

主函数中
scanf("%d",&e);//少了&
r犯了相同的错误

4 楼

其实在编译是缺少&的是不会出错的,只是结果会使非常奇怪的。
可以试试看!
不知你学过编译原理没有,如果学过的话,你会更清楚一些。

我来回复

您尚未登录,请登录后再回复。点此登录或注册