2011-08-15 145 views
0

該程序輸出1.我不明白它如何輸出1,因爲for循環將在a[2][3]失敗,其中包含值12.所以12將分配給k,輸出必須是12.如果for循環中的條件

#include<stdio.h> 

int main() 
{ 
    int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 
    int i,j,k=99; 
    for(i=0;i<3;i++) 
    { 
     for(j=0;j<4;j++) 
     { 
      if(a[i][j]<k) 
      { 
       k=a[i][j]; 
       printf("%d\n",k); 
      } 
     } 
    } 
    printf("Res:%d\n",k); 
    return 0; 
} 
+2

a [i] [j]與i == 0和j == 0等於1,且1 <99因此它輸出1 – stijn

+1

@Beata:你有沒有試圖在調試器中運行你的程序? –

+0

@yi_H:對不起,我沒有嘗試調試器。我正在使用visual studio。 – Angus

回答

2

第一次通過循環if被評估爲[0] [0] < k這就是1 < 99真正。 第二次通過他循環,如果if是[1] [0] < k即2 < 1評估爲false,因此k值不更新 k永遠不會重新分配另一個值,因此在最後k = 1。

1

在這一行要更改的K值

K = A [i] [j];

並且您運行的第一個迭代將k更改爲1,這就是爲什麼第二次迭代將失敗。在每一次迭代中,你的k應該是一個單位,小於它應該用於if語句工作的數量

1

一些評論:

調用變量k沒有告訴我們您正在使用它什麼。如果你把它叫做arrayMin那麼它對我們來說會更清晰。對於循環索引,使用ij很好,這是預期的。

指定k=99對數組內容進行了假設,從而導致了易碎代碼。最好不要做出假設,並開始分配arrayMin = a[0][0]

您的程序很小且很簡單,您可以自己在紙上運行。這樣做會幫助你看到發生了什麼。使用調試器單步執行它也會有所幫助。

+0

對不起。以後我會在紙上試着自己解決簡單的例子。 – Angus