以下のように配列を定義する.
int ary[7] = {1, 2, 3, 4, 5, 6, 7}; |
配列の先頭の要素と最後の要素を入れ換えて,配列の中身が7, 6, 5, 4, 3,2,1という順番 になるような処理を考えよ.
すなわち以下のようなプログラムになるので,必要な部分について for 文を用いて完成させる.
int i, tmp, ary[7] = {1, 2, 3, 4, 5, 6, 7}; for(i=0; i<=6; i++) printf("%d ", ary[i]); printf("\n"); for(i=0; i<=2; i++){ /* ここに入れ換えの処理を入れる */ } for(i=0; i<=6; i++) printf("%d ", ary[i]); printf("\n"); |
入れ換えについては第3の変数を用意してそこに一時的に値を移しておく必要があります.
例題5.3を参考に,配列の要素の値を大きい順に並べ替える操作を行なうプログ ラムを考える.100以下の正の整数を乱数で5つ発生させ,それらを大きい順に並 べ変えよ.
85 48 72 41 51 85 72 51 48 41 |
例えば,上の例のように現在配列 ary に順に85,48,72,41,51が入っ
ているとします.このとき,配列の要素は以下の表のようになっています.
まず,先頭の要素(0番目)と次(1番目)の要素,2番目の要素と順に比較し,もし
後の方が大きい場合には値を入れ換える操作を行うものとします.そのとき,比
較の操作は
のように2重ループの変数 i と j を使用して行うものとし
ます.そのとき, i と j の値と配列の要素がどのように変
化していくのかを順に示すと,以下のようになります.
このように i と j が変化していくようなループを作れば完
了です.内側のループの繰り返しの回数が段々と減っているのは,次のように表
示するプログラムと同じです.
添字 0 1 2 3 4
要素 85 48 72 41 51
if(ary[i] < ary[j])
変数 i j 添字
0 1 2 3 4 操作
値 0 1 要素 85 48 72 41 51 そのまま
値 0 2 要素 85 48 72 41 51 そのまま
値 0 3 要素
85 48 72 41 51 そのまま
値 0 4 要素
85 48 72 41 51 そのまま
一巡目終了
値 1 2 要素 85 72 48 41 51 入れ換え
値 1 3 要素 85 72 48 41 51 そのまま
値 1 4 要素 85 72 48 41 51 そのまま
二巡目終了
値 2 3 要素 85 72 48 41 51 そのまま
値 2 4 要素 85 72 51 41 48 入れ換え
三巡目終了
値 3 4 要素 85 72 51 48 41 入れ換え
四巡目終了
****
***
**
*
100以下の正の整数となる乱数を9つ発生させ,以下のように乱数を表示するとと もに,各行と列の和を表示するプログラムを作成せよ.
10 69 18 97 45 38 23 106 28 8 30 66 83 115 71 |
設問iiiを改造して,対角線上の斜めの3つの数の和を求めるようにせよ.
99 28 94 77 15 84 95 3 6 204 120 |
-10≦x≦10,-10≦y≦10の2次元平面を考える.x と y は整数値のみを取るとし,各座標点に確率1/50で x が表示され,その座標と原点対称の位置に o が表示されるようなプログラムを作成せよ.見やすさのために座標軸も表示させること.
x | | | | | x | x | | o | x x | --------------------+--------------------- | o o | x | | o | o | | | | | o |
2次元配列を用意して,x を表示させるべき位置に他と違う値を入れることで実現できますが,配列の要素は0から始まるので,それを考慮して簡単な座標変換が必要です.
縦横比を自然にするために,横は2文字分取っています.x 軸のハイフンは二つ(--)で1セットです.
C言語には整数のべき乗を求める関数が無いことを不便と感じることが多いと思われる.そこで,教科書p.78以降を参考に自分で関数を作り,以下のような位取りを行なうプログラムを作成する.
5から8の整数を乱数により一つ発生させ,その桁数の乱数を発生させる.そして,その各桁の数字を取り出し,1行目には位の大きい方から,2行目には小さい方から表示させるプログラムを作成せよ.
main 関数から power という名前で呼び出される関数を作る.このとき,引数は a と b ということにしておき,include 文の後に以下のように宣言する.
#include <stdio.h> #include <stdlib.h> #include <time.h> int power(int a, int b); |
main 関数の後に以下のように a の b 乗を計算する関数を記述する.
int power(a, b) { int i, p = 1; for(i=1; i<=b; i++) p *= a; return(p); } |
上の処理では,変数 p の値が求める答えになっているので,return 文で p の値を呼び出したところへ返す.
10の(乱数-1)乗が必要な場所で power(10, hoge-1) のように呼び出す.
Figures: 8 Random number: 58155931 5 8 1 5 5 9 3 1 1 3 9 5 5 1 8 5 |