C语言问题!!看谁说的有道理,谁有理谁就有分!

tonylai123 2004-08-22 07:30:57
问题:利用顺序查找法从数组a的10个元素中对关键m进行查找。顺序查找法的思路是:从第一个元素开始,从前向后依次与关键字比较,直到找到此元素或查找到数组尾部时结束。若找到,返回此元素的下标;若仍未找到,返回值-1。请通过参数间的传递来实现。
(我做了两次,基本一样,但是第一次运行没错误,第二次就有,什么原因?)
第一次:fun(int a[10])
{
int i,t=-1;
for(i=0;i<9;i++)
if(a[i]==7)
t=i;
return(t);
}
main()
{
int a[10];
int i,temp;
clrscr();
for(i=0;i<9;i++)
scanf("%d",&a[i]);
temp=fun(a);
printf("%d",temp);
}



第二次:fun(int a[10])
{
int i,t;
for(i=0;i<9;i++)
if(a[i]==7)
t=i;
else
t=-1;
return(t);
}
main()
{
int a[10];
int i,temp;
clrscr();
for(i=0;i<9;i++)
scanf("%d",&a[i]);
temp=fun(a);
printf("%d",temp);
}
...全文
191 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tonylai123 2004-08-23
  • 打赏
  • 举报
回复
好贴我会加分!!不过我现在的积分不多,只能再加10分!!
tonylai123 2004-08-23
  • 打赏
  • 举报
回复
很感谢Asan啊才在的耐心教导!!,我现在明白了。
ddc 2004-08-22
  • 打赏
  • 举报
回复
楼主好嚣张,20分而已。
而且还是这种问题。
Asan13 2004-08-22
  • 打赏
  • 举报
回复
第二次:fun(int a[10])
{
int i,t;
for(i=0;i<9;i++)/*这里应该是<=9吧。要不然就是<10。你的数组有十个元素。不过这不是主要问题。*/
if(a[i]==7)
t=i;
else /*应该是这里出问题了,如果是数组最后一个元素为7的话,返回就是正确的。如果不是,就出错(假设数组里有7)。虽然前面找到了7,可是后面的比较,又把t赋值为-1。改成下面的那个应该可以*/
t=-1;
return(t);
}

第二次:fun(int a[10])
{
int i,t;
for(i=0;i<9;i++)
if(a[i]==7)
{t=i;return(t);}/*找到就返回*/
else
t=-1;
return(t);
}
wwwooowww 2004-08-22
  • 打赏
  • 举报
回复
我的意见 :
你每次给t都赋值,即使开始找到了,比如a[3] = 7;
后面又刷新了,将t=3刷掉了。
还有,即使你找到一个正确的,也是最后一个。

改动:
for(i=0;i<9;i++)
if(a[i]==7)
return i;
return -1;

zqpsswh 2004-08-22
  • 打赏
  • 举报
回复
他的循环都是<9 所以也没什么问题
mfj1978 2004-08-22
  • 打赏
  • 举报
回复
for 循环中应该是i < 10,其他同意楼上
zqpsswh 2004-08-22
  • 打赏
  • 举报
回复
if(a[i]==7)
t=i;
else
t=-1;

除非a[8]==7 否则为-1

69,373

社区成员

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

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