情報科学演習 実習課題 2015.01.05

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. 2次元配列の基本

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

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

  4. 設問iiiの改造

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

         99  28  94
         77  15  84
         95   3   6
    204             120
    

  5. 2次元座標的な表示

    -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セットです.
  6. 位取り(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