qq_大概你的體重會抱我做夢_03230772
2016-05-09 21:45:53
{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條經(jīng)驗 獲得超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;? ?????????//輸出結(jié)果是4,14,而不是4,5----是因為當(dāng)在控制臺輸入了4的時候,進入for循環(huán),進行if判斷,從數(shù)組a[20]中尋找符合??if(a[i]?==?n),即a[i]?==?4的數(shù)組元素;從數(shù)組中可以看出,符合條件的數(shù)組元素有兩個:分別為a[3]、a[13],當(dāng)a[3]?==?4滿足if判斷的時候,執(zhí)行if語句內(nèi)部的代碼片段(此時的【?i?==?3?,n?==?4?,m?==?i?==?3?】);【重點到了】:當(dāng)i?==?3執(zhí)行完之后,此時for循環(huán)并沒有結(jié)束條件(即?break跳出for循環(huán)),此時for循環(huán)繼續(xù)向下執(zhí)行,i?==?3,i++之后為4,不滿足判斷條件,然后i++之后為5,還是不滿足判斷條件......直到a[13]?==?4的時候,滿足判斷條件,然后執(zhí)行if內(nèi)部代碼片段(重復(fù)一遍,此時的?m?===?3?。?!依舊是上一次i?==?3的時候賦的值),當(dāng)執(zhí)行到m==i的時候,變量m重新賦值為i的當(dāng)前值(即13),到了此處if語句的內(nèi)部代碼片段不會再執(zhí)行,直到for循環(huán)結(jié)束。 ?????????//此時的??f?==?1?,?i?==?19(因為for循環(huán)執(zhí)行到最后)?,?m?==?13(即第二次重新賦的值) ?????????//結(jié)論:然后代碼執(zhí)行到下面的【printf("%d,%d\n",?n,m+1);】語句?,n?==?4,?m+1?=13+1==14 ????????? ????//要想最終的輸出結(jié)果是4,5那么久應(yīng)該在if語句執(zhí)行了?m?=?i?,這個表達式之后讓循環(huán)結(jié)束,那么此時的m保持的值就是第一次持有的值(【?i?==?3?,n?==?4?,m?==?i?==?3?】) ???? ????break;????//加上此句即可 ???? } ?if(f!=0)????????????????????? ?????????//當(dāng)if語句后面只有一行代碼的時候?{}?可以省略,樓主這種寫法沒問題。但是從代碼的可讀性上來說,這種習(xí)慣不好,建議不要省略{} ?printf("%d,%d\n",?n,m+1); ?else?? printf("?%d?not?found?!\n",n);? }

堇延未七
TA貢獻36條經(jīng)驗 獲得超19個贊
首先你的問題就有問題哦~ 如果想返回某個數(shù)字第一次出現(xiàn)的位置,那么4在已經(jīng)定義的數(shù)組中第一次出現(xiàn)的位置為4,而不是5;
程序結(jié)果輸出的是數(shù)字最后一次出現(xiàn)的位置,因為在for循環(huán)中,并沒有在第一次找到后break跳出循環(huán),所以它會一直往下找。
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
TA貢獻19條經(jīng)驗 獲得超13個贊
你現(xiàn)在的獲得的結(jié)果是a[20]中最后一個4的位置。。。。如果打算獲得第一個的話,for循環(huán)中找到目標(biāo)就break。
~~ 祝好運

惟愿_無事常相見
TA貢獻30條經(jīng)驗 獲得超25個贊
你的for循環(huán)只包含了第一個if語句,遍歷完整個數(shù)組后如果指定值在數(shù)組中有多個,那么你定義的m值就會被重復(fù)賦值,留下的就是指定值最后一次出現(xiàn)在數(shù)組中的索引,然后才會跳出for循環(huán)。加g個break讓if語句第一次判定成功就跳出循環(huán)結(jié)果就是4,5 了。
- 7 回答
- 0 關(guān)注
- 1962 瀏覽
添加回答
舉報
0/150
提交
取消