プログラミング実習II (2026) 課題
[リスト 10.5] を参考に,特定の名前をもつファイルからの読み込みと書き出しをするよう,[T12] で作成したプログラムに変更を加えよ.
0 で示さなくても終了を判定できるようにし,末尾の 0 はデータの一部とする.indata.txt から読み込んだデータを,すべてファイル outdata.txt に書き出す.result.txt に書き出す.fclose 関数を用いること.[リスト 10.7] を参考にして,前問のプログラムを,fgets 関数と sscanf 関数を用いてデータを読み込むように書き換えよ.
2個の整数がコマンドライン引数として入力される(例: ./a.exe 49 85)とき,それらの和を表示するプログラムを作成する.
argc を %d で,argv[0] ~ argv[2] を %s で printf で表示せよ.argv[] は文字列であるため,このままでは整数としての計算が行えない.stdlib.h の atoi() 関数を用いて argv[1], argv[2] を int 型に変換した上で,和を求めて表示せよ.#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;
}
学生番号と得点のデータを,高得点順に表示するプログラムを作成せよ.
student_t を定義せよ(メンバ: 学生番号int id, 得点int val).N を 30 とし,ファイル score.txt から fgets と sscanf を用いて N 人分のデータを読み込み,構造体配列に格納せよ.
fgets で各行を文字列 string に読み込む
sscanf( string, "%d %d", &a, &b ); によって,学生番号を int 型変数 a に,点数を int 型変数 b に格納できる.
s[i].val と s[j].val の大小比較
s[i] と s[j] のスワップ
表示例:
9024 98
9007 97
9003 95
:
0.0 ~ 1.0 の値をとる一様乱数を発生させ,統計量を計算せよ.
rand() の戻り値をキャストして RAND_MAX で割ることで,区間 [0.0, 1.0] 上の一様乱数を生成せよ.#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 不要な行はコメントアウトすること.
int main( void )
{
srand((unsigned int)time(NULL));
printf("RAND_MAX: %d \n", RAND_MAX);
return 0;
}
モンテカルロ法を用いて円周率 π を近似的に求めよ.
(x, y) とする.x2 + y2 ≤ 1)に含まれるか否かを判定する.確率 p で当たり,確率 1-p で外れるくじのシミュレーションを行え.
p を atof() で受け取る.10Ci pi(1.0-p) 10-i を比較せよ.表示例( p = 0.5,実行のたびに結果は変わる.3個目の数字は各得点の割合,4個目の数字が2項分布の数値を指す): ------------------------------ 0 101 0.00101 0.000977 1 1029 0.01029 0.009766 2 4560 0.04560 0.043945 3 11750 0.11750 0.117188 4 20460 0.20460 0.205078 5 24617 0.24617 0.246094 6 20546 0.20546 0.205078 7 11566 0.11566 0.117188 8 4280 0.04280 0.043945 9 994 0.00994 0.009766 10 97 0.00097 0.000977 ------------------------------ (printf の書式は %2d, %5d, %.5f, %f) 表示例( p = 0.3,4 個目の数字が 2 項分布の数値): ------------------------------ 0 2838 0.02838 0.028248 1 12171 0.12171 0.121061 2 23300 0.23300 0.233474 3 26677 0.26677 0.266828 4 19978 0.19978 0.200121 5 10299 0.10299 0.102919 6 3648 0.03648 0.036757 7 924 0.00924 0.009002 8 153 0.00153 0.001447 9 10 0.00010 0.000138 10 2 0.00002 0.000006 ------------------------------ (printf の書式は %2d, %5d, %.5f, %f)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main( int argc, char *argv[] ){
if( argc != 2 ){
printf("使い方: %s [double] \n", argv[0]);
exit(EXIT_FAILURE);
}
double p = atof( argv[1] );
srand((unsigned int)time(NULL));
// シミュレーションの実装
return 0;
}