7 回答

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

TA貢獻(xiàn)5條經(jīng)驗(yàn) 獲得超4個(gè)贊
你找到第一個(gè)5之后就應(yīng)該break跳出循環(huán)不然會(huì)繼續(xù)運(yùn)行下去

TA貢獻(xiàn)36條經(jīng)驗(yàn) 獲得超19個(gè)贊
首先你的問題就有問題哦~ 如果想返回某個(gè)數(shù)字第一次出現(xiàn)的位置,那么4在已經(jīng)定義的數(shù)組中第一次出現(xiàn)的位置為4,而不是5;
程序結(jié)果輸出的是數(shù)字最后一次出現(xiàn)的位置,因?yàn)樵趂or循環(huán)中,并沒有在第一次找到后break跳出循環(huán),所以它會(huì)一直往下找。
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; }

TA貢獻(xiàn)19條經(jīng)驗(yàn) 獲得超13個(gè)贊
你現(xiàn)在的獲得的結(jié)果是a[20]中最后一個(gè)4的位置。。。。如果打算獲得第一個(gè)的話,for循環(huán)中找到目標(biāo)就break。
~~ 祝好運(yùn)

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