猿问

为什么 答案是 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); 

}


qq_大概你的体重会抱我做梦_03230772
浏览 1899回答 7
7回答

天地不仁_以_万物为刍狗

{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);  }

codebase

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

堇延未七

首先你的问题就有问题哦~ 如果想返回某个数字第一次出现的位置,那么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; }

Umi_Sun

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

惟愿_无事常相见

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

楚风听雨

你的for循环到底包含了几个if语句,你的{}呢?
随时随地看视频慕课网APP
我要回答