プログラミング演習I

プログラミング演習I
2004年7月14日(第11回)
理学部数学科・木村巌
前回までの復習
 繰り返し
 while文
 それらのバリエーション
 処理の流れの変更:break, continue
 浮動小数点数
今日学ぶこと
 配列の基本事項
 配列の応用
 教科書7章
配列
 同じ型のデータをたくさん扱う場合に便利
 同じ型のデータの保管箱が連続して並んでい
るイメージ
配列の宣言
 配列に格納するデータの型、配列の名前(識
別子)、格納するデータの個数(要素数)を指
定する.構文は以下の通り:
型名 配列名[要素数];
例
int test[5];
/* int型のデータを5つ保存できる配列testを宣言 */
/* test[0], test[1], test[2], test[3], test[4] の5つ */
/* 添え字の範囲に注意!! */
配列の使い方
int test[5];
test[0] = 80;
test[1] = 60;
test[2] = 22;
test[3] = 50;
test[4] = 75;
のように、配列名[添字] = 式; の形式
配列要素の値を出力
 Sample1.c
(p.185) を入力して、コンパイル・実
行してみよう.
 同じくSample2.c (p.187)を入力して、コンパイ
ル・実行してみよう.
 int型の配列のそれぞれの要素は、これまで
のint型の変数同様に扱える(printf(), scanf()で
は%dで入出力できる)
配列の添え字の範囲について
 例えば、
int test[5];
test[10] = 10;
 というコードを書いても、コンパイラは特にエ
ラーとはしない
 しかし、実行するとエラーになる
 配列の範囲の正しさについては、プログラマ
が責任を持つこと
配列の初期化
 構文:
型名 配列名[要素数] = {値0, 値1, ……};
 により、配列の宣言と初期化を同時に行うこ
とが出来る
int test[5] = {80, 60, 22, 50, 75};
あるいは
int test[] = {80, 60, 22, 50, 75};
初期化子に応じて、自動的に要素数を設定して
くれる
初期化子が足りない場合
int test[5] = {80, 60, 22};
 このような場合、test[3], test[4] は 0 に初期化さ
れる
 Sample3.cを入力し、コンパイル・実行してみよ
う
マクロ
 プリプロセッサの機能で、
#define マクロ名 マクロの実体
 という記述を行うと、プリプロセスの段階で、
マクロ名を機械的にマクロの実体に置き換え
る
 Sample4.cを参照.ソースコード内のNUMがす
べて、5に置き換えられる
 プログラムのあちこちに、同じ値が現れるとき
に使うと便利で、誤りを防ぐことが出来る
配列の応用
 int型の配列に格納された値を、大きい順に並
べ替える……ソート(sort)
 Sample5.cを入力し、コンパイル・実行してみよ
う
配列の応用2
 多次元配列(配列の配列)
 例えば2次元配列なら、
型名 配列名[要素数][要素数];
 Sample6.cを入力、コンパイル・実行してみよう
 その他の応用:
 ベクトルと行列
 多倍長桁数の計算などなど
文字列とchar型の配列との関係
Cには「文字列型」はな
く、「char型の配列」でそ
れを代用しているの
だった
 より正確には、最後の
要素がnull文字 ‘\0’であ
るようなchar型の配列、
である

char str[6];
str[0] = ‘H’;
str[1] = ‘e’;
str[2] = ‘l’;
str[3] = ‘l’;
str[4] = ‘o’;
str[5] = ‘\0’; /* null文字必須
*/
文字列とchar型の配列との関係(2)
 従って、文字列に含まれる文字数 +
1個の要
素を持つchar型の配列が必要になる.
 一般的には、
char str[6] = “Hello”;
char str[] = “Hello”;
 のように書く.null文字は暗黙のうちに付加さ
れる
char str[6];
str = “Hello”; /* このような記述は出来ない */
文字列の入出力
 printf()で出力する際は、変換しようとして、%s
を用いる:p.206の例を参照のこと
 文字列を端末から読み込むのにも、scanf()を
使うことが出来る(しかし推奨されない)
 文字列操作に関しては、後期に詳しく説明す
るので、略(配列とポインタ、文字列操作のた
めの標準ライブラリ関数など.10章参照)
今日学んだこと
 配列の基本事項
 配列の応用
 マクロ
 文字列とchar型の配列との関係
レポート課題




教科書p.212, 練習問題の1で、最高得点の
みならず、平均点を出力するように改造した
ものを作成せよ
締め切り:2004年7月20日一杯(日本時間で)
提出先:メールで木村([email protected])まで.
感想などあると木村が喜びます