以下のように配列を定義する.
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 入れ換え
四巡目終了
****
***
**
*
1〜10の範囲の数をランダムに5つ,重複無く選んで表示するプログラムを1次元配列を用いて作成せよ.なお,このプログラムでは if 文は使用しない.
Random numbers between 1 and 10: 8 10 1 5 9 |
発生させる乱数の範囲がポイントの一つです.
100以下の正の整数となる乱数を9つ発生させ,以下のように乱数を表示するとと もに,各行と列の和を表示するプログラムを作成せよ.
10 69 18 97 45 38 23 106 28 8 30 66 83 115 71 |
前問を改造して,対角線上の斜めの3つの数の和を求めるようにせよ.
99 28 94 77 15 84 95 3 6 204 120 |
以下に示す配列を用意して,その要素として1〜100の範囲の自然数を乱数により代入する.
int ary[3][10]; |
要素の数値を最初は10個ずつ3行に表示し,つぎにはそれを縦横入れ換えて表示するプログラムを作成せよ.
76 8 73 58 72 5 40 99 77 75 59 61 84 12 36 100 36 72 60 55 85 98 98 25 100 73 11 83 41 50 76 59 85 8 61 98 73 84 98 58 12 25 72 36 100 5 100 73 40 36 11 99 72 83 77 60 41 75 55 50 |
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 |