错误在哪?!

cnljyg 2009-03-28 12:21:36
#include <stdio.h>
#include <stdlib.h>

void enter(int a[],int n)
{
int i;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
printf("\n测试数据为:\n");
for(i=0;i<n;i++)
printf("%3d",a[i]);
printf("\n");
return;
}

int search(int a[], int n)
{
int left=0;
int right=n-1;
while(left<=right)
{
int middle=(left+right)/2;
if (middle==a[middle]) return middle;
if (middle>a[middle]) left=middle+1;
else right=middle-1;
}
return -1;
}

int main()
{
void enter(int a[],int n);
int search(int a[],int n);
int a[10],n;
printf("请输入测试数据数目n:");
scanf("%d",&n);
enter(a,n);
printf("查找的坐标i:");
search(a,n);
printf("\n");
}
前面运行正确,但无法输入坐标值。急啊,请大家分析一下。
...全文
97 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnljyg 2009-04-15
  • 打赏
  • 举报
回复
问题已解决,谢谢大家
woshixinghuo 2009-03-29
  • 打赏
  • 举报
回复
你的问题没有问题没有问清楚而且程序看起来好乱,main函数里面不用再去声明函数了,因为你的函数是写在main之前,如果是在main之后就要在main函数里面声明
nirensuyue 2009-03-28
  • 打赏
  • 举报
回复
main 默认返回int型0啊
shenjigong19801109 2009-03-28
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>

void enter(int a[],int n)
{
int i;
for(i=0;i <n;i++)
scanf("%d",&a[i]);
printf("\n测试数据为:\n");
for(i=0;i <n;i++)
printf("%3d",a[i]);
printf("\n");
return;
}

int search(int a[], int n)//错误2:看不明白你这个函数是要找什么?????明确你的算法
{
int left=0;
int right=n-1;
while(left <=right)
{
int middle=(left+right)/2; //错误3:如果是C语言,不能在这里定义变量,C++可以
if (middle==a[middle]) return middle;
if (middle>a[middle]) left=middle+1;
else right=middle-1;
}
return -1;
}

int main()
{
void enter(int a[],int n);
int search(int a[],int n);
int a[10],n;
printf("请输入测试数据数目n:");
scanf("%d",&n);
enter(a,n);
printf("查找的坐标i:");
search(a,n);
printf("\n");


return 0;////错误1:主函数有一个返回值要返回
}
mengde007 2009-03-28
  • 打赏
  • 举报
回复
n和a[middle]有关系吗?假如n=5;而a[middle]=5455;呢?
此算法有问题。弄的莫名奇妙
tianya0609 2009-03-28
  • 打赏
  • 举报
回复

int main()
{
void enter(int a[],int n);
int search(int a[],int n);
int a[10],n;
printf("请输入测试数据数目n:");
scanf("%d",&n);
enter(a,n);
printf("查找的坐标i:");
scanf("%d",&n);
printf("%d\n",search(a,n));
printf("\n");
}
tianya0609 2009-03-28
  • 打赏
  • 举报
回复
不知道你的程序功能要做什么,查找坐标是指下标还是自己输一个数?下标的话直接传入n是越界了,传数的话你就差了一句输入语句。还有里面的功能是要二分查找吧,二分查找的话,里面的middle == a[middle],middle > a[middle] , 应该改成n== a[middle],n >a[middle],最后最好还要输出语句看运行是否正确。 下面有修改后的程序,不知是否是你想要的。

#include <stdio.h>
#include <stdlib.h>

void enter(int a[],int n)
{
int i;
for(i=0;i <n;i++)
scanf("%d",&a[i]);
printf("\n测试数据为:\n");
for(i=0;i <n;i++)
printf("%3d",a[i]);
printf("\n");
return;
}

int search(int a[], int n)
{
int left=0;
int right=n-1;
while(left <=right)
{
int middle=(left+right)/2;
if (n ==a[middle]) return middle;
if (n >a[middle]) left=middle+1;
else right=middle-1;
}
return -1;
}

int main()
{
void enter(int a[],int n);
int search(int a[],int n);
int a[10],n;
printf("请输入测试数据数目n:");
scanf("%d",&n);
enter(a,n);
printf("查找的坐标i:");
scanf("%d",&n);
printf("%d\n",search(a,n));
printf("\n");
}
cnljyg 2009-03-28
  • 打赏
  • 举报
回复
不对吧?我要输出这个i这个坐标值,i=middle,我输入它干嘛啊?
mengde007 2009-03-28
  • 打赏
  • 举报
回复

int main()
{
void enter(int a[],int n);
int search(int a[],int n);
int a[10],n;
printf("请输入测试数据数目n:");
scanf("%d",&n);
enter(a,n);
printf("查找的坐标i:");//你并没有输入i值
search(a,n);
printf("\n");
}
xiaoyuer5222 2009-03-28
  • 打赏
  • 举报
回复

int i;
printf("查找的坐标i:");
scanf("%d",&i);
cnljyg 2009-03-28
  • 打赏
  • 举报
回复
要实现的功能:n个不同的整数排好序后存在A[0:n-1]中,若存在下标i,使得A[i]=i,输出i
cnljyg 2009-03-28
  • 打赏
  • 举报
回复
我要实现的功能:n个不同的整数排好序后存于T[0:n-1]中,若存在一个下标i,使得T[i]=i,找到这个i。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧