-5

このコードを実行すると、出力が得られます: 21 20 18 15 11 6、この出力を取得する方法を教えてください。

#define N 6
int main(void)
{
  int i,j,a[N]={1,2,3,4,5,6};

  for(i=0;i<N;i++)
    for(j=i+1;j<N;j++)
      a[i]+=a[j];

  for(i=0;i<N;i++)
    printf("%d",a[i]);

return 0;
}
4

4 に答える 4

2

2 番目の for ループ内のすべての結果を見ると、理解しやすいかもしれません。

[1、2、3、4、5、6]

[3, 2, 3, 4, 5, 6]

[6、2、3、4、5、6]

[10、2、3、4、5、6]

[15、2、3、4、5、6]

[21, 2, 3, 4, 5, 6] 今私は増加します

[21、5、3、4、5、6]

[21、9、3、4、5、6]

[21、14、3、4、5、6]

[21, 20, 3, 4, 5, 6] 今私は増加します

[21、20、7、4、5、6]

[21、20、12、4、5、6]

[21, 20, 18, 4, 5, 6] 今私は増加します

[21、20、18、9、5、6]

[21, 20, 18, 15, 5, 6] 今私は増加します

[21、20、18、15、11、6]

于 2013-09-14T11:03:15.537 に答える
1

あなたのプログラムは、配列 'a' の要素を合計します。最初のループは開始インデックスを決定し、内側のループは配列の要素を合計します (開始インデックス i を考慮して)。最後に、a[0] にはすべての配列要素の合計が含まれ、a[1] にはインデックス 1 から始まるすべての配列要素の合計が含まれます。

于 2013-09-14T10:55:02.373 に答える
1
for(i=0;i<N;i++)
    for(j=i+1;j<N;j++)
        a[i]+=a[j];
    for(i=0;i<N;i++)
        printf("%d",a[i]);

[N] = {1,2,3,4,5,6};

トレースを行うのが最も簡単な方法です。#DEFINE からの N = 6 なので、最初の for ループは 6 回実行されます。

最初の実行のために

i = 0 j = 1のとき

[0] += [1]

したがって、a[0] は 3 に等しくなります

j++ なので j は 2 に等しい

i = 0 j = 2

[0] += [2]

a[0] (3) に a[2] (3) を足すと、6 になります。

j++ なので j は 2 に等しい

トレースを続けると、1+2+3+4+5+6 = 21 である配列の残りを合計していることがわかります。

次の反復は 2+3+4+5+6 です

于 2013-09-14T10:59:12.020 に答える
0

for(i=0;i<N;i++)
for(j=i+1;j<N;j++)
  a[i]+=a[j];

の値

a[0] = 1+2+3+4+5+6 = 21
a[1] = 2+3+4+5+6 = 20
a[2] = 3+4+5+6 = 18
a[3] = 4+5+6 = 15
a[4] = 5+6 = 11
a[5] = 6 = 6

 printf("%d",a[i]);

する必要があります

 printf("%d\n",a[i]);
于 2013-09-14T10:59:30.523 に答える