c
1#include <stdio.h> 2 3int print_array(const int a[], int n) { 4 int i; 5 6 printf("{"); 7 if (n >= 2) 8 for (i = 0; i < n - 1; i++) 9 printf("%d, ", a[i]); 10 if (n >= 1) 11 printf("%d", a[n - 1]); 12 printf("}"); 13} 14 15int sum(const int a[], int n) { 16 int i; 17 int sum = 0; 18 19 for (i = 0; i < n; i++) 20 sum += a[i]; 21 return sum; 22} 23 24int main(void) 25{ 26 int i, j; 27 int x[] = {1, 3, 5, 7}; 28 int y[][5] = { {1, 2, 3, 4, 5}, 29 {1, 1, 1, 1, 1}, 30 {1, 3, 5, 7, 9}, 31 }; 32 33 int x_size = sizeof(x) / sizeof(x[0]); 34 int y_height = sizeof(y) / sizeof(y[0]); 35 int y_width = sizeof(y[0]) / sizeof(y[0][0]); 36 37 printf("配列x..."); 38 print_array(x, x_size); 39 printf(" 合計=%d\n", sum(x, x_size)); 40 41 for (i = 0; i < y_height; i++) { 42 print_array(y[i], y_width); 43 printf(" 合計=%d\n", sum(y[i], y_width)); 44 } 45 46 return 0; 47} 48
このコードは多次元配列内の部分配列の受け渡しを表す、サンプルプログラムなのですが、下の関数内の・・・
c
1int print_array(const int a[], int n) { 2 int i; 3 4 printf("{"); 5 if (n >= 2) 6 for (i = 0; i < n - 1; i++) 7 printf("%d, ", a[i]); 8 if (n >= 1) 9 printf("%d", a[n - 1]); 10 printf("}"); 11} 12
下のfor文の条件式がわかりません。
c
1 2 for (i = 0; i < n - 1; i++) 3 printf("%d, ", a[i]);
「n」要素数を表すのですが、要素数の数だけprintfで表示するはずなのになぜ「n - 1」なのでしょうか?
例えば要素数が5の配列をこの関数に渡して配列内の値をすべてprintfするには
c
1 for (i = 0; i < n; i++) 2 printf("%d ", a[i]);
だと思ったのですが、これを実行すると表示される要素が一つ足りません。
しかし、別の関数だと
c
1int sum(const int a[], int n) { 2 int i; 3 int sum = 0; 4 5 for (i = 0; i < n; i++) 6 sum += a[i]; 7 return sum; 8} 9
for文の判定式が for (i = 0; i < n; i++) になっています。
なぜ関数print_arrayと関数sumでは条件式が違うのでしょうか?
2つの関数は両方とも配列のすべての要素数が条件式に必要だと思うのですが・・・
私はどこを勘違いしているのかわからないのでお尋ねしました。
初心者な質問ですみません。
よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/01 02:44