配列

課題1

下記のプログラムは、配列に格納された10個のデータを 表示させるプログラムである。 下記のプログラムをarray1.cとして書き、正しく実行されることを確認せよ。

#include <stdio.h>

int main(void) {

    int i;
    int data[10]={2,3,0,9,12,8,9,-2,7,6};


    for (i=0; i<10; i++) {
        printf("data[%d] = %d\n", i, data[i]);
    }

    return (0);
}

課題2

下記のプログラムは、10個のデータ(等差数列)を生成し、各々を 配列に格納した後、表示させるプログラムである。 下記のプログラムをarray2.cとして書き、正しく実行されることを確認せよ。

#include <stdio.h>

int main(void) {

    int i;
    int data[10];


    for (i=0; i<10; i++) {
        data[i] = 3 * i + 10;
    }

    for (i=0; i<10; i++) {
        printf("data[%d] = %d\n", i, data[i]);
    }

    return (0);
}

課題3

下記のプログラムをarray3.cとして書き、様々な数値で試して 正しく実行されることを確認せよ。

#include <stdio.h>

int main(void) {

    int i, n;
    double data[100];

    printf("数字を入力してください。\n");
    printf("入力を終えるときにはCtrl-dを押してください。\n");

    n = 0;
    while (scanf("%lf", &data[n]) != EOF) {
        n++;
    }

    for (i=0; i<n; i++) {
        printf("data[%d] = %f\n", i, data[i]);
    }

    return (0);
}
(実行例)
% ./a.out
数字を入力してください。
入力を終えるときにはCtrl-dを押してください。
3.4
9.2
-2.54
3
2
^d  <- キーボードから入力しても画面には表示されないので注意
data[0] = 3.400000
data[1] = 9.200000
data[2] = -2.540000
data[3] = 3.000000
data[4] = 2.000000

課題4

テストの点数(0〜100までの整数)を入力させ、下記のような 階級ごとの人数を把握したい。 下記のプログラムをarray4.cとして完成させ、 様々な数値を入力して正しく実行されることを確認せよ。

0点以上10点未満
10点以上20点未満
20点以上30点未満
30点以上40点未満
40点以上50点未満
50点以上60点未満
60点以上70点未満
70点以上80点未満
80点以上90点未満
90点以上100点未満
100点
#include <stdio.h>
#include <stdlib.h>
#define  N   11

int main(void) {

    int i, n, data, num[N];


    /* 配列の初期化 */
    for (i=0; i<N; i++) {
        num[i] = 0;
    }

    /* データの入力 */
    printf("テストの点数を入力してください。\n");
    printf("入力を終えるときにはCtrl-dを押してください。\n");

    n = 0;
    while (scanf("%d", &data) != EOF) {
        
        if (data < 0 || data > 100) {
            printf("入力された数字は0から100までの数字ではありません。\n");
            exit(1);
        } else {
            num[data/10]++;
            n++;
        }
    }

    /* 結果の表示 */

    for (i=0; i<N-1; i++) {
        printf("%3d点以上%3d点未満 = %3d人\n", i*10, (i+1)*10, num[i]);
    }
    printf("100点              = %3d人\n", num[N-1]);

    printf("--------------------------------\n");
    printf("合計               = %3d人\n", n);

    return (0);
}
(実行例)
% ./a.out
テストの点数を入力してください。
入力を終えるときにはCtrl-dを押してください。
32
33
33
34
5
  0点以上 10点未満 =   1人
 10点以上 20点未満 =   0人
 20点以上 30点未満 =   0人
 30点以上 40点未満 =   4人
 40点以上 50点未満 =   0人
 50点以上 60点未満 =   0人
 60点以上 70点未満 =   0人
 70点以上 80点未満 =   0人
 80点以上 90点未満 =   0人
 90点以上100点未満 =   0人
100点              =   0人
--------------------------------
合計               =   5人

(実行例)
テストの点数を入力してください。
入力を終えるときにはCtrl-dを押してください。
20
90
-30
入力された数字は0から100までの数字ではありません。

課題5

各要素を3桁の整数で表示するプログラムが下記に示されているが、 そのプログラムをarray5.cとして書き、正しく表示される ことを確認せよ。

#include <stdio.h>
#define  N  5

int main(void) {

    int i, j;
    int mat[N][N]={
          {2,0,2,0,0},{0,1,0,0,0},{3,0,6,0,0},{0,4,0,1,0},{0,0,0,7,1}};

    for (i=0; i<N; i++) {
        for (j=0; j<N; j++) {
            printf("%3d", mat[i][j]);
        }
        printf("\n");
    }
    return (0);
}
(実行結果)
% ./a.out
  2  0  2  0  0
  0  1  0  0  0
  3  0  6  0  0
  0  4  0  1  0
  0  0  0  7  1

課題6

m×nの行列A, Bが存在するとき、その行列の和、A+Bは下記のように定義される。 プログラムarray5.cを一部修正して、実行例のように行列の和を計算し、表示する プログラムをarrray6.cとして書き、正しく表示されることを確認せよ。ただし、行列 A, Bは、プログラムarray5.cと同様、プログラム内で定義されているものとする。

行列の和の公式

(実行例)
% ./a.out
A=
  2  0  2  0  0
  0  1  0  0  0
  3  0  6  0  0
  0  4  0  1  0
  0  0  0  7  1

B=
  0  0  0  2  0
  2  1  0  0  5
  0  0  3  0  0
  1  4  0  1  0
  2  0  0  0  1

A+B=
  2  0  2  2  0
  2  2  0  0  5
  3  0  9  0  0
  1  8  0  2  0
  2  0  0  7  2

課題7

下記に、文字列を1文字ずつ表示させるプログラムが示されている。この プログラムをarray7.cとして書き、正しく実行されることを確認せよ。

#include <stdio.h>

int main(void)
{
    char name[] = "Wakaba-ku";
    int i;

    for(i=0; name[i] != '\0'; i++){
        printf("%c\n", name[i]);
    }

    return 0;
}
(実行結果)
% ./a.out
W
a
k
a
b
a
-
k
u

課題8

下記に、文字列の長さを表示させるプログラムが示されている。この プログラムをarray8.cとして書き、正しく実行されることを確認せよ。

#include <stdio.h>

int main(void)
{
    char name[] = "Wakaba-ku";
    int i, n=0;

    for(i=0; name[i] != '\0'; i++){
        n++;
    }

    printf("n = %d\n", n);

    return 0;
}

課題9

下記に、複数の科目名を表示させるプログラムが示されているが、 ここでは2次元配列が使われている。その意味を理解した上で、この プログラムをarray9.cとして書き、正しく実行されることを確認せよ。

#include <stdio.h>

int main(void)
{
  char name[3][10] = {"英語", "国語", "数学"};
  int i;

  for(i=0; i<3; i++){
    printf("%s\n", name[i]);
  }

  return (0);
}
(実行結果)
% ./a.out
英語
国語
数学

課題10

体重を入力させ、下記のような階級ごとの人数を把握したい。 課題4を参考にして、 *********で隠されている部分を補ってプログラムをarray10.cとして完成させ、 様々な数値で試して正しく実行されることを確認せよ。

40kg未満
40kg以上50kg未満
50kg以上60kg未満
60kg以上70kg未満
70kg以上80kg未満
80kg以上
#include <stdio.h>
#include <stdlib.h>
#define  N   6

int main(void) {

    int i, n, data, num[N];


    /* 配列の初期化 */
    for (i=0; i<N; i++) {
        num[i] = 0;
    }

    printf("体重を整数値で入力してください。\n");
    printf("入力を終えるときにはCtrl-dを押してください。\n");

    n = 0;
    while (scanf("%d", &data) != EOF) {
        *********************************
        *********************************
        *********************************
        *********************************
        *********************************
        *********************************
        n++;
    }

    /* 結果の表示 */

    printf("40kg未満         = %3d人\n", num[0]);

    for (i=1; i<N-1; i++) {
      printf("%dkg以上%dkg未満 = %3d人\n", i*10+30, i*10+40, num[i]);
    }

    printf("80kg以上         = %3d人\n", num[N-1]);
 
    printf("-------------------------\n");
    printf("合計             = %3d人\n", n);

    return (0);
}
(実行例)
% ./a.out
体重を整数値で入力してください。
入力を終えるときにはCtrl-dを押してください。
55
64
109
39
46
56
40kg未満         =   1人
40kg以上50kg未満 =   1人
50kg以上60kg未満 =   2人
60kg以上70kg未満 =   1人
70kg以上80kg未満 =   0人
80kg以上         =   1人
-------------------------
合計             =   6人
%
% ./a.out
体重を整数値で入力してください。
入力を終えるときにはCtrl-dを押してください。
45
100
67
-20
入力された数字は負の値です。

課題11

あらかじめ人数が分かっている学生集団において、英語、数学、国語の各科目ごとの 点数を入力した後に、各々の平均点と標準偏差を知りたい。 入力された点数を配列に代入し、また科目名の表示に配列を使用(課題9を参照) すると効率的である。 下記の実行結果を参考にしながら、要求を満たすプログラムを array11.cとして作成し、正しく実行することを確認せよ。ただし、 平均点、標準偏差は小数とし、各々小数点が揃うように表示させよ。

平均と標準偏差の公式

注意:平方根を計算するためには、以下の3つを実行しなければならない。

  1. main関数の前に、以下の一文を書く。
    #include <math.h>
  2. 平方根を計算する関数は、
    a = sqrt(b);
    のように「sqrt()」である。ここで、a, bはdouble型の変数である。
  3. コンパイルを以下のように行う。
    gcc array11.c -lm
(実行例)
% ./a.out
学生の人数?
3

学生1の英語: 50
学生1の数学: 70
学生1の国語: 60

学生2の英語: 40
学生2の数学: 20
学生2の国語: 30

学生3の英語: 90
学生3の数学: 60
学生3の国語: 90

英語の平均点: 60.0
数学の平均点: 50.0
国語の平均点: 60.0

英語の標準偏差: 21.6
数学の標準偏差: 21.6
国語の標準偏差: 24.5

須ア純一 京都大学大学院 工学研究科社会基盤工学専攻 空間情報学講座
[C言語 演習問題トップページ] [須ア純一ホームページ]