2011-08-15 36 views
0

このプログラムは1を出力します。forループが失敗するため、値12を含むa[2][3]で失敗するので、12がkに割り当てられ、出力が必要になります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

i == 0、j == 0は1と1が<99なので、1 – stijn

+1

を出力します。@Beata:*デバッガでプログラムを実行しようとしましたか? –

+0

@yi_H:申し訳ありませんが、私はデバッガで試してみませんでした。私はビジュアルスタジオを使っています。 – Angus

答えて

2

ループを初めて使うとき、ifは[0] [0] < kと評価されます。1 < 99です。本当。 ifが[1] [0] < kである場合、2回目のループでループする2 < 1と評価され、したがってkの値は更新されません。 kは決して別の値= 1。

1

12は、この行では、Kの値を

K = [I] [j]を変更しています。

あなたが実行する最初の繰り返しはkを1に変更するため、2回目の繰り返しは失敗します。すべての繰り返しで、あなたのkは、文が動作するために必要なものよりも1単位少なくなるでしょう。

1

いくつかのコメント:

変数kを呼び出すには、私たちにあなたのためにそれを使用しているかについては何も伝えていません。あなたがそれをarrayMinと呼んでいたのであれば、それはもっとわかりやすくなりました。ループインデックスのためにijを使用しても問題ありません。

k=99を割り当てると、配列の内容が前提となり、脆弱なコードになります。仮説を立てずに割り当てようとするのはやめてください。arrayMin = a[0][0]

あなたのプログラムは紙の上で自分で実行できるほど小さくて簡単です。そうすることで、何が起こっているのかを知るのに役立ちました。デバッガを使ってそれをシングルステップ実行することも役に立ちました。

+0

申し訳ありません。ここから紙面上の簡単な例を自分自身で解決しようとします。 – Angus

関連する問題