next up previous contents
Next: 18. 配列 II Up: 17. 配列 I Previous: 17.4 一文字づつの読み込み処理

17.5 課題 17

cd c を実行した後で( ~/c に移動した後で )、以下の課題を やってみよ。

課題 17.1
配列を使う I

大きさ 10 の整数型配列を確保し、それぞれ 0 番目の要素から順に 0,1,2,...,9 を 代入した上で、それらをディスプレイに出力するプログラムを作成せよ。

課題 17.2
配列を使う II

文字型の配列を自分の名前( ローマ字 )で初期化し、それらを出力せよ。 例えば、配列 name には、'k','a','n','a','y','a','m','a' が入っていて、 出力すると kanayama とでるようにせよ。但し、初期化とループを使うこと。

課題 17.3
文字の出現回数を数える

標準入力から入力された 'a' から 'z' までの文字の出現回数を数えるプログラム を作成せよ。各文字の出現回数は、大きさ 26 の配列 kaisuu に格納する ものとする。また、'a' から 'z' までの小文字の英字以外はカウントせず、無視 するものとする。

以下のプログラムを参考にせよ。

    char c;
    ...
    while ( cin >> c ){    /* ファイルの終わりまで読む */
        /* ここに 'a' から 'z' のどれが出現したかを数えるプログラムを */
        /* 書くこと */
    }
    /* どの文字が何個あったかを出力する */

ヒント 文字変数 c は、 c - 'a' を計算すると、c に文字 'a' が入っている場 合は、結果は 0 になり、文字 'b' ならば1、文字 'c' ならば 2、文字 'z' ならば 25 のようになるので、配列の要素の番号として式 c - 'a' を使う事が出来る。  

日本語が含まれない C 言語のプログラムのソースを読ませてみて、うまく動くか 確かめてみること。

例 % a.out $<$ kadai17_2.cpp

作成したプログラムをメイルで creport まで送りなさい。題は、kadai17 とする事。

前回の復習
配列の宣言

一次元配列の宣言は、

    [型]  配列名[個数];

で行う。配列名の後の個数を囲む [,] は省略出来ない。 個数で指定されただけの数の領域が確保される。

配列の操作

配列の要素には、添字を指定してアクセスできる。

    int rei[100];
    ...
    for(i=0; i<100; i++){
        rei[i]=i;
    }

添字は、100 の大きさの配列を確保した場合、0 から99 までである。従って、一般に $n$ の大きさの配列では、添字は、 0 から $n-1$ までである。

添字は、整数値であるので、整数値を返す式が許される。もちろん、 整数値を返す関数でも良い。

変数の初期化

一般に、変数は、宣言時に初期化することができる。

    int  a = 0;
    int  b = 4, c = 2;

配列の初期化

配列の初期化は原則的にはできないが、2つの例外がある。一つは、 外部的(グローバル)である場合、もう一つは、静的である場合である。 この2つのいずれかの場合、以下のように初期化をする事ができる。

    char str[8] = {'k','a','n','a','y','a','m','a'};

また、このとき明らかに大きさは8であるから、個数の指定を省略 する事ができる。

    char str[] = {'k','a','n','a','y','a','m','a'};

読み込みの判定
cin>>

    char c;
    while( cin >> c ){

演算子 >> は読み込みに成功した場合には真を返すので、ループや if文の判断に使うことが出来る。



Noriyo Kanayama