promotion image of download ymail app
Promoted
Jason asked in 教育與參考考試 · 5 years ago

C語言-array和While, if else

請問下面連結第25題,

http://wwwc.moex.gov.tw/ExamQuesFiles/Question%5C1...

為何答案是C?

自己判斷為A,

因array[]=list[]

而while 條件成立 0<=4

執行 middle=(left+right)/2 ==>2

執行if (array[middle] == key) ==> 不成立

跳到else if (array[middle] > key, 3>2成立

執行right=middle -1

最後return (-1)

output = -1

故判斷為-1 , 不知何處未注意到?

Thanks

Update:

確認一個問題,

假設沒有此段"return( array[middle])"

在最後跳出 while loop時,

才會去執行return (-1) ??

Thanks

1 Answer

Rating
  • 5 years ago
    Favorite Answer

    進入主程式void main()後接著進入

    副程式unknow(list,5,2)//array[]=list[]={1,2,3,4,5},size=5,key=2

    進入while(left<=right) //這時left=0,right=4

    條件成立

    執行middle=(left+right)/2; //middle=(0+4)/2=2

    執行if(array[middle]==key) //array[2]==2,3==2不成立

    執行else if( array[middle]>key)//array[2]==2,3>2成立

    執行right=middle-1; //這時middle=2,right=middle-1=1

    跳離if-else //大大應該是從這裡開始出錯,跳離if-else後while條件還是處於成立狀態也沒遇到break,return之類的所以會繼續執行while

    再度進入while(left<=right) //這時left=0,right=1

    條件成立

    執行middle=(left+right)/2;middle=(0+1)/2=0[middle為(int)整數宣告所以1/2=0不是0.5]

    執行if(array[middle]==key) //array[0]==2,1==2不成立

    執行else if( array[middle]>key) //array[0]==2,1>2不成立

    執行left=middle+1; //lift=0+1=1

    再次跳離if-else//middle=0,right=1,lift=1,while條件成立且未遇到break,return等....所以迴圈還會再度進入

    再度進入while(left<=right)//這時left=1,right=1

    執行middle=(left+right)/2; //middle=(1+1)/2=1

    執行if(array[middle]==key) //array[1]==2,2==2成立

    執行return( array[middle]);//array[middle]=array[1]=2,這時2將被return出去

    副程式unknown()也跟著結束執行

    最後回到主程式

    output=unknown(list,5,2)=2

    執行printf("%d",output);//螢幕顯示>>2

    我只是個大一學生

    對於C語言我第一次學也很很陌生 學習時間不到半年

    如果有誤 請提出相關論點糾正小弟

    Source(s): 自己
    • Commenter avatarLogin to reply the answers
Still have questions? Get your answers by asking now.