为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 答案是 4, 14 ,而不是4 ,5

为什么 答案是 4, 14 ,而不是4 ,5

{int a[20]={1,2,3,4,5,-1,-2,-3,-4,-5,1,2,3,4,5,-1,-2,-3,-4,-5}; int  i,m,n,f=0; scanf("%d",&n); for(i=0;i<20;i++)   if(a[i]==n){     f=1;     m=i; } if(f!=0)  printf("%d,%d\n", n,m+1); else  printf(" %d not found !\n",n); }
查看完整描述

7 回答

已采纳
?
天地不仁_以_万物为刍狗

TA贡献2条经验 获得超0个赞

{int a[20]={1,2,3,4,5,-1,-2,-3,-4,-5,1,2,3,4,5,-1,-2,-3,-4,-5};
 int  i,m,n,f=0;
 scanf("%d",&n);
 for(i=0;i<20;i++)
   if(a[i]==n){
     f=1;
     m=i; 
         //输出结果是4,14,而不是4,5----是因为当在控制台输入了4的时候,进入for循环,进行if判断,从数组a[20]中寻找符合  if(a[i] == n),即a[i] == 4的数组元素;从数组中可以看出,符合条件的数组元素有两个:分别为a[3]、a[13],当a[3] == 4满足if判断的时候,执行if语句内部的代码片段(此时的【 i == 3 ,n == 4 ,m == i == 3 】);【重点到了】:当i == 3执行完之后,此时for循环并没有结束条件(即 break跳出for循环),此时for循环继续向下执行,i == 3,i++之后为4,不满足判断条件,然后i++之后为5,还是不满足判断条件......直到a[13] == 4的时候,满足判断条件,然后执行if内部代码片段(重复一遍,此时的 m === 3!!!依旧是上一次i == 3的时候赋的值),当执行到m==i的时候,变量m重新赋值为i的当前值(即13),到了此处if语句的内部代码片段不会再执行,直到for循环结束。
         //此时的  f == 1 , i == 19(因为for循环执行到最后) , m == 13(即第二次重新赋的值)
         //结论:然后代码执行到下面的【printf("%d,%d\n", n,m+1);】语句 ,n == 4, m+1 =13+1==14
         
    //要想最终的输出结果是4,5那么久应该在if语句执行了 m = i ,这个表达式之后让循环结束,那么此时的m保持的值就是第一次持有的值(【 i == 3 ,n == 4 ,m == i == 3 】)
    
    break;    //加上此句即可
    
}
 if(f!=0)                     
         //当if语句后面只有一行代码的时候 {} 可以省略,楼主这种写法没问题。但是从代码的可读性上来说,这种习惯不好,建议不要省略{}
 printf("%d,%d\n", n,m+1);
 else  
printf(" %d not found !\n",n); 
}


查看完整回答
反对 回复 2016-05-11
?
codebase

TA贡献5条经验 获得超4个赞

你找到第一个5之后就应该break跳出循环不然会继续运行下去

查看完整回答
2 反对 回复 2016-05-09
?
堇延未七

TA贡献36条经验 获得超19个赞

首先你的问题就有问题哦~ 如果想返回某个数字第一次出现的位置,那么4在已经定义的数组中第一次出现的位置为4,而不是5;

程序结果输出的是数字最后一次出现的位置,因为在for循环中,并没有在第一次找到后break跳出循环,所以它会一直往下找。

int main()
{
    int a[20]={1,2,3,4,5,-1,-2,-3,-4,-5,1,2,3,4,5,-1,-2,-3,-4,-5};
    int i,m,n,f=0;
    scanf("%d",&n);
    for(i=0;i<20;i++){
        if(a[i]==n){
            f=1;
            m=i;
            break;
        }
    }
    if(f!=0)
        printf("%d,%d\n",n,m+1);
    else
        printf(" %d not found !\n",n);
    return 0;
}


查看完整回答
1 反对 回复 2016-05-10
?
Umi_Sun

TA贡献19条经验 获得超13个赞

你现在的获得的结果是a[20]中最后一个4的位置。。。。如果打算获得第一个的话,for循环中找到目标就break。

~~ 祝好运

查看完整回答
1 反对 回复 2016-05-10
?
惟愿_无事常相见

TA贡献30条经验 获得超25个赞

你的for循环只包含了第一个if语句,遍历完整个数组后如果指定值在数组中有多个,那么你定义的m值就会被重复赋值,留下的就是指定值最后一次出现在数组中的索引,然后才会跳出for循环。加g个break让if语句第一次判定成功就跳出循环结果就是4,5 了。

查看完整回答
1 反对 回复 2016-05-10
?
楚风听雨

TA贡献1条经验 获得超0个赞

你的for循环到底包含了几个if语句,你的{}呢?

查看完整回答
反对 回复 2016-05-10
  • 7 回答
  • 0 关注
  • 1821 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信