プログラミング実習II (2025) 課題

[E12] 第10章 ファイルと乱数


(E12_1) [リスト 10.5] を参考に,特定の名前をもつファイルからの読み込みと書き出しをするよう,[T12] で作成したプログラムに変更を加えよ([リスト 10.5] と同様,コマンドライン引数は使用しない).


(E12_2) [リスト 10.7] を参考にして,前問のプログラムを,fgets関数とsscanf関数を用いてデータを読み込むように書き換えよ.


(E12_3) 2個の整数がコマンドライン引数として入力されるとき,それらの和を表示するプログラムを作成せよ. 例えば,実行の際に "./a.exe 49 85 " のように入力される.

#include <stdio.h>
#include <stdlib.h>

int main( int argc, char *argv[] )
{
    if( argc が 3 でなければ ){
        printf("使い方: %s [int] [int] \n", argv[0] );
        exit(EXIT_FAILURE);
    }

    return 0;
}

(E12_4) 学生番号と得点のデータを,点数の高い順に表示するプログラムを作成する.

9001 78
9002 62
9003 95
9004 84
9005 75
9006 51
9007 97
9008 72
9009 60
9010 78
9011 75
9012 85
9013 80
9014 60
9015 40
9016 60
9017 85
9018 88
9019 93
9020 65
9021 73
9022 90
9023 55
9024 98
9025 48
9026 35
9027 69
9028 82
9029 70
9030 61
表示例:
  9024 98
  9007 97
  9003 95
     :

(E12_5) 0.0 〜 1.0 の値をとる一様乱数を発生させる.


(E12_6) 乱数を用いてシミュレーションや数値計算を行うモンテカルロ法という手法がある.簡単な例として,円周率πを乱数を用いて近似的に求めてみる.次の 1. 〜 4. の手順で計算を行う.

  1. 一様乱数を 2 個生成することで,xy 平面上で ( 0, 0 ),( 1, 0 ),( 1, 1 ),( 0, 1 ) を頂点とする正方形の中の 1 点の座標 ( x, y ) をランダムに決定する.
  2. 生成した点が,原点からの距離が 1 以下である (x2+y2 ≤ 1 )かどうかを調べる (つまり,原点を中心とした半径 1 の扇形の内部にあるかどうか調べる).
  3. 1. と 2. の操作を多数回繰り返し,原点からの距離が 1 以下であった回数を数える.
  4. (正方形の中に生成した点の数) : (原点からの距離が 1 以下である点の数) = (正方形の面積) : (扇形の面積) = 1 : (π/4) であるため,この関係式を基に円周率を求める

(E12_7) 0.0 〜 1.0の値をとる一様乱数を発生させたとき,それが p 未満となる確率は(当然ながら)p である.以下のプログラムを作成せよ.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

int main( int argc, char *argv[] ){

	double p;

	srand((unsigned int)time(NULL));

	if( argc != 2 ){
		printf("使い方: %s [double] \n", argv[0]);
		exit(EXIT_FAILURE);
	}

	p = atof( argv[1] );

	if( p <= 0.0 || p >= 1.0 ){
		printf("not a probability \n");
		exit(EXIT_FAILURE);
	}










	return 0;

}