情報科学演習 実習課題 2016.01.04

Back to text page


実習課題

  1. 値の並べ替え1

    以下のように配列を定義する.

    	    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の変数を用意してそこに一時的に値を移しておく必要があります.
  2. 値の並べ替え2

    例題5.3を参考に,配列の要素の値を大きい順に並べ替える操作を行なうプログ ラムを考える.100以下の正の整数を乱数で5つ発生させ,それらを大きい順に並 べ変えよ.

    
     85  48  72  41  51
     85  72  51  48  41
    
    

    例えば,上の例のように現在配列 ary に順に85,48,72,41,51が入っ ているとします.このとき,配列の要素は以下の表のようになっています.

    添字01234
    要素8548724151

    まず,先頭の要素(0番目)と次(1番目)の要素,2番目の要素と順に比較し,もし 後の方が大きい場合には値を入れ換える操作を行うものとします.そのとき,比 較の操作は

        if(ary[i] < ary[j])
    
    
    
    

    のように2重ループの変数 i j を使用して行うものとし ます.そのとき, i j の値と配列の要素がどのように変 化していくのかを順に示すと,以下のようになります.

    変数ij添字 01234操作
    01要素8548724151そのまま
    02要素8548724151そのまま
    03要素 8548724151そのまま
    04要素 8548724151そのまま
    一巡目終了
    12要素8572484151入れ換え
    13要素8572484151そのまま
    14要素8572484151そのまま
    二巡目終了
    23要素8572484151そのまま
    24要素8572514148入れ換え
    三巡目終了
    34要素8572514841入れ換え
    四巡目終了

    このように i j が変化していくようなループを作れば完 了です.内側のループの繰り返しの回数が段々と減っているのは,次のように表 示するプログラムと同じです.

    
    ****
    ***
    **
    *
    
    

  3. 値の並べ替え3(ランダム)

    1〜10の範囲の数をランダムに5つ,重複無く選んで表示するプログラムを1次元配列を用いて作成せよ.なお,このプログラムでは if 文は使用しない.

    Random numbers between 1 and 10: 8 10 1 5 9
    

    発生させる乱数の範囲がポイントの一つです.
  4. 2次元配列の基本

    100以下の正の整数となる乱数を9つ発生させ,以下のように乱数を表示するとと もに,各行と列の和を表示するプログラムを作成せよ.

     10  69  18  97
     45  38  23 106
     28   8  30  66
     83 115  71
    

  5. 和を求めるプログラムの改造

    前問を改造して,対角線上の斜めの3つの数の和を求めるようにせよ.

         99  28  94
         77  15  84
         95   3   6
    204             120
    

  6. 表示の工夫

    以下に示す配列を用意して,その要素として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
    

  7. 位取り(1次元配列)

    C言語には整数のべき乗を求める関数が無いことを不便と感じることが多いと思われる.そこで,教科書p.78以降を参考に自分で関数を作り,以下のような位取りを行なうプログラムを作成する.

    5から8の整数を乱数により一つ発生させ,その桁数の乱数を発生させる.そして,その各桁の数字を取り出し,1行目には位の大きい方から,2行目には小さい方から表示させるプログラムを作成せよ.

    Figures: 8
    Random number: 58155931
    
    5 8 1 5 5 9 3 1
    1 3 9 5 5 1 8 5
    


Back to text page