C言語入門(8):配列の続き。
- 配列の復習
多数の同じ型(int, double 等)の変数をまとめて扱うデータ構造を配列という。
- 配列の宣言
以下のように宣言してから使用する。
例えば、int a[10] ; と宣言された場合、 a はa[0],a[1],
...,
a[9] の10 個の要素からなる int 型の配列である。
(例題8−1)
以下のプログラムは入力された整数のうち最大のもの(MAX)を選び出し、出力するプログラムです。
このプログラムを作成し、実行しましょう。
(実行結果 )
gcc ex8-1.c -o ex8-1
./ex8-1
n ?: 4
3 -9 7 1
MAX: 7
3, -9, 7, 1 では、7 が一番大きい整数。
プログラムの赤い部分がデータの入力で、青い部分で最大値を探しています。
最大値を探すには
- まず a[0] の要素をmax に代入する。
- a[1] と max を比べて a[1] の方が大きければ max に a[1] を代入しなおす。max
の方が大きければ何もしない。
- a[2], a[3],....a[n-1] について順番に同じことを繰り返す。
- a[0]~a[n-1] のうち最大のものが max に代入されている。
としています。
(課題8−1)
上のプログラムに追加して、入力した整数のうち、最大値(MAX)と最小値(MIN)を出力するプログラムを作成し、実行しなさい。
(例題8−2)
以下のプログラムは、配列を使った複素数の足し算を実行するプログラムです。作成し、実行してみましょう。
(実行例)
gcc ex8-2.c -o ex8-2
./ex 8-2
input complex number 1: 3.2 5.4
input complex number 2: 1.3 2.2
c1+c2= 4.500000 + 7.600000 I
%
- 複素数は、実部と虚部の2つの部分からなっていて、それぞれを配列の第0成分と第1成分で
表します。
- 配列の成分ごとに入力する場合、普通の変数と同様に &c[0]
などとします。
(課題8−2)
上のプログラムに追加して、2つの複素数を入力し、それらの和、差、積、商を計算するプログラムを作成し、実行しなさい。
ヒント:
(a+bI)*(c+dI)=ac-bd+(ad+bc)I
(a+bI)/(c+dI)=(a+bI)*(c-dI)/(c*c+d*d)=... この先は、自分で計算してみること。
(課題8−3)
配列を使って、N個の入力データ aj の平均値 ã と標準偏差 s=(√[Σj(aj-ã)2/N],
平均値からの差の2乗平均の平方根)を計算するプログラムを作成 し、実行しなさい。まず1つめのループで配列の各要
素にデータを格納し、2つめのループでその配列を使って平均値と標準偏差を計算する。
1.2,9,8,-3.2,0.1,5.5,4.4,8.3,2.4,-5.5,-0.3,9.1,8.4 の入力データについて計算せよ。
余裕のある人へ
(課題8−4)
以下の手順で n 個の数列 {a0,a1,...,an-1}
を降順に並べ替えるプログラムを作成し、実行しましょう。(バブルソートという。とても重要なアルゴリズムです。)
- i を 0 から n-1 まで1つずつ増やす。
- j を n-1 から i+1 まで1つずつ減らす。
- aj-1<aj なら aj-1 と ajを
入れ替える。
Shimpei Endo, The University of Electro-Communications