練習問題3(配列)

  1. 配列に格納された10個の素数を一行に一個ずつ表示するプログラム(p10.c
    配列に 2, 3, 5, 7... と10個の素数を初期化によって格納しておき、
    プログラムで、それらの素数を一行に一個ずつ小さい順に表示する
    a.の例:
    > p10
    2
    3
    5
    7
    11
    13
    17
    19
    23
    29
      
    b.の例:
    > p10r
    29
    23
    19
    17
    13
    11
    7
    5
    3
    2
  2. 配列に格納された10個の素数を逆順に一行に一個ずつ表示するプログラム(p10r.c)
    a.で素数を、小さい順ではなく、大きい順に表示する
    配列の格納はa.と同様に小さい順になされたままにしておくこと!
    もちろん、配列をソートして並び順を大きい順にしてから格納順に表示する手もありますが、
    未だ、そのように高度はことは求めていません!!
  3. 20個以下の自然数を入力して配列に格納し表示する(平均も計算して表示する)プログラム(n20.c)
    キー入力した自然数を順番に配列に格納し、
    0以下の数を数が入力された時点で入力を終了し、
    格納された自然数を順に表示する
    (但し入力する自然数の個数が20個を超えないものとする)
    「自然数を入力して下さい(0以下の数を入力すると終了します):」と利用者に入力指示文を出すこと
    入力完了後に平均を計算して「入力された○○個の自然数の平均は○○.○○です。」と表示せよ!
    (平均の計算は実数型で行い、小数点以下2桁で表示してみよ!)
    c.の例:
    自然数を入力して下さい(0以下の数を入力すると終了します):
    1 2 3 6 49 97 -1
    入力された配列データ:
    1
    2
    3
    6
    49
    97
    入力された6個の自然数の平均は26.33です。
    scanfは空白文字で区切るので、Enterでなくスペースで入力を区切ることができる。
  4. 数値データ処理プログラム(stat1.c
    1. まず、処理するデータの個数を入力し、その個数のデータ(整数)を入力して配列に格納して、配列のデータを表示する
      (配列内のデータは、, で区切り、[ と ] で囲んで表示する)
    2. 次に、配列内のデータの最小値、最大値、平均値(実数)を計算して表示する
    3. そして、配列内のデータを昇順(小さい順)に並べ替えて、配列のデータを表示する
    例:















    処理するデータの個数(≦20)を入力して下さい。
    10
    10個のデータを入力して下さい。
    4
    6
    24
    65
    7
    56
    3
    34
    5
    34
    入力された配列データ:
    [ 4, 6, 24, 65, 7, 56, 3, 34, 5, 34 ]
    最小値:3、最大値:65、平均値:23.8
    ソート後の配列データ:
    [ 3, 4, 5, 6, 7, 24, 34, 34, 56, 65 ]
    平均値(関数版):23.8
      <裏技>
    キー入力するデータをファイル(data2.txt)に保存しておき、
    コマンドプロンプトのリダイレクションを利用して、
    > stat1 < data2.txt
    としても良い。

    (キー入力がファイル入力に代わり、入力データは画面に表示されない)
  5. キー入力した複数の自然数が素数かどうかをまとめて判定して表示するプログラム(n20p.c)
    c.と同様に自然数をキー入力して配列に格納し、
    入力完了後に格納された自然数が素数がどうかの判定結果を順に表示する
    「1は素数でも合成数でもありません。」、「nは素数です。」あるいは「nは合成数です。」と画面に一行ずつ表示する
    但し、平均の表示は無用です。
    d.の例:
    自然数を入力して下さい(0以下の数を入力すると終了します):
    1 2 3 6 49 97 -1
    入力された 6 個の自然数を素数判定して表示します:
    1は素数でも合成数でもありません。
    2は素数です。
    3は素数です。
    6は合成数です。
    49は合成数です。
    97は素数です。
  6. MAX(10,000)よりも小さい素数を列挙するプログラム(p10k.c)
  7. MAX(10,000)よりも小さい素数を列挙するプログラム(era.c)〜エラトステネスの篩
    1. 列挙(http://wwws.kobe-c.ac.jp/deguchi/c/prob/enum.html)のように順番に判定を繰り返す方法は効率が悪い
    2. エラトステネス(Eratosthenes)の篩というアルゴリズムについて調べ実現せよ!
      (ウィキペディアより)
       ヒント:
      1. 配列 int n_prime[MAX]; を用意し(外部変数だと初期化の手間を省ける)
      2. 合成数(素数の倍数)であると分かった i に対して、n_prime[i]=1 と印を付ける
      3. 初期値のまま残っている(n_prime[i]==0である)2以上の i が素数である
      4. 表示用の配列 int prime[MAX]; に素数を順に格納する
      5. (最初の10個と最後の10個を表示しておく)
    3. 馬鹿正直に列挙した場合とのスピードを比較してみよ!
      • 画面に表示しているとその時間が掛るので、列挙表示用の配列に格納するまでの時間を調べてみよ
      • サイズを20,000、50,000、100,000、200,000、500,000、1,000,000と変えて比較(グラフ化)してみよ

練習問題4へ 練習問題5へ