多次元配列


ソースコード

源文件
  1|/* array06.c */
  2|
  3|#include <stdio.h>
  4|
  5|int main(void)
  6|{
  7|  int a[3][2] = {{10, 20},
  8|                 {30, 40},
  9|                 {50, 60},};
 10|  int i, j;
 11|
 12|  for(i = 0; i < 3; i++){
 13|    for(j = 0; j < 2; j++){
 14|      printf("a[%d][%d] = %d\n", i, j, a[i][j]);
 15|    }
 16|  }
 17|  printf("\n");
 18|  /* 各要素のアドレスを確かめる */
 19|  for(i = 0; i < 3; i++){
 20|    for(j = 0; j < 2; j++){                                                           
 21|      printf("&a[%d][%d] = %p\n", i, j, &a[i][j]);
 22|    }
 23|  }
 24|  printf("\n");
 25|  /* a[m][n]を*(*(a + m) + n)と書けるのか確かめる */
 26|  for(i = 0; i < 3; i++){
 27|    for(j = 0; j < 2; j++){
 28|      printf("*(*(a + %d) + %d) = %d\n", i, j, *(*(a + i) + j));
 29|    }
 30|  }
 31|  return 0;
 32|}

実行結果

a[0][0] = 10
a[0][1] = 20
a[1][0] = 30
a[1][1] = 40
a[2][0] = 50
a[2][1] = 60

&a[0][0] = 0x7fff5fbff610
&a[0][1] = 0x7fff5fbff614
&a[1][0] = 0x7fff5fbff618
&a[1][1] = 0x7fff5fbff61c
&a[2][0] = 0x7fff5fbff620
&a[2][1] = 0x7fff5fbff624

*(*(a + 0) + 0) = 10
*(*(a + 0) + 1) = 20
*(*(a + 1) + 0) = 30
*(*(a + 1) + 1) = 40
*(*(a + 2) + 0) = 50
*(*(a + 2) + 1) = 60


さて、もう少し実用的なプログラムを作りましょう。生徒5人について、英語、数学、のテストお行いました。各教科の平均点を出し、たま個人別総合得点、及び平均点を出すプログラムを作りましょう。

ソースコード

源文件
  1|/* array07.c */                                                                       
  2|
  3|#include <stdio.h>
  4|#define NO 3
  5|
  6|int main(void)
  7|{
  8|  int  point[][2] = {
  9|    {80, 80},
 10|    {100, 98},
 11|    {60, 70},
 12|  };
 13|
 14|  int i, j, sum = 0, p_sum[NO];
 15|  double ave;
 16|
 17|  /* 英語の平均点を求める */
 18|  for(i = 0; i < NO; i++){
 19|    sum += point[i][0];
 20|    ave = (double)sum / NO;
 21|  }
 22|    printf("英語の平均点は%5.1fです\n", ave);
 23|
 24|    /* 数学の平均点を求める */
 25|    sum = 0;
 26|    for(i = 0; i < NO; i++){
 27|      sum += point[i][1];
 28|      ave = (double)sum / NO;
 29|    }
 30|    printf("数学の平均点は%5.1fです\n", ave);
 31|
 32|    /* 個人別合計点を求める */
 33|    for(i = 0; i < NO; i++){
 34|      p_sum[i] = 0;
 35|    }
 36|    for(i = 0; i < NO; i++){
 37|      for(j = 0; j < 2; j++){
 38|        p_sum[i] += point[i][j];
 39|      }
 40|      printf("出席番号%dの総得点%d\n", i + 1, p_sum[i]);                              
 41|    }
 42|    return 0;
 43|}

実行結果

英語の平均点は 80.0です
数学の平均点は 82.7です
出席番号1の総得点160
出席番号2の総得点198
出席番号3の総得点130


Chapte7 @ C言語目録 @ HomeWork List @ 昭亮's Homepage