Ex12
From Prog0
演習第12回
Contents |
演習問題
主な内容
- ニュートン法
- 桁数の求め方
- ある桁の値の求め方
- エラーチェック
以下の問題を解いて期限内に解答を提出してください。
出席確認
- 演習時間中に出席確認をLMS上の「演習出欠」で行ってください
- 出席確認用のパスワードは演習時間のどこかのタイミングで提示されます
A問題
A-1 ニュートン法
ファイル名: ex12a1.c
f(x) = x2 - 2 = 0 の解をニュートン法を用いて求めるプログラムを作成せよ。ただし、xの初期値は2.0とし、収束条件の精度は10-6とする。なお、実行例の各列の数値の意味はハンドアウトの例題(Lec12-9参照)と同じである。
[実行例]
% ./a.out
x(k-1) fx dfx x(k) f(x,2.000000)
2.000000 2.000000 4.000000 1.500000 0.2500000000
1.500000 0.250000 3.000000 1.416667 0.0069444444
1.416667 0.006944 2.833333 1.414216 0.0000060073
1.414216 0.000006 2.828431 1.414214 0.0000000000
sqrt(2.000000): 1.4142135624
%
A-2 数値の桁数
ファイル名: ex12a2.c
以下の実行例のように、入力した正の整数の桁数を表示するプログラムを作成せよ。その際、整数の桁数を計算して返す関数 int digits(int) を作成して使用すること。なお、この問題では入力値のエラーチェックは省略してよい。
[実行例]
% ./a.out
正の整数を入力してください:12345
12345 の桁数は 5 です
%
B問題
B-1 10進数から2進数への変換
ファイル名: ex12b1.c
10進数の0から255までの数値を8ビットの符号なし2進数で表示するプログラムを作成せよ。その際、10進数を2進数へ変換して表示する関数 void d2b(int) を作成して使用すること。ただし、入力と表示は繰り返し行い、負の値が入力された場合に終了するものとする。
[実行例]
% ./a.out
10進数を入力してください:15
00001111
10進数を入力してください:47
00101111
10進数を入力してください:256
256以上の値が入力されました
10進数を入力してください:-1
%
B-2 各桁の数値の和
ファイル名: ex12b2.c
ハンドアウト Lec12-11 〜 Lec12-16 にある関数を利用して、キーボードから入力した正の整数の各桁の数値の和を計算して表示するプログラムを作成せよ。ただし、負の値が入力された場合は「不正な値が入力されました」というメッセージを標準エラー出力で出力して強制終了すること。またその際、シェル変数「$?」へは「8」を渡すようにすること(Lec12-23参照)。
[実行例]
% ./a.out
正の整数を入力してください:12345
12345 の各桁の数値の和は 15 です
% echo $?
0
% ./a.out
正の整数を入力してください:-1
不正な値が入力されました
% echo $?
8
%
B-3 10進数を16進数で表示
ファイル名: ex12b3.c
以下の実行例のように、入力した10進数を16進数で表示するプログラムを作成せよ。ただし、負の値が入力された場合は、実行例のようにメッセージを表示して再度データ入力からやり直すこととする。
[実行例]
%./a.out
10進数を入力してください:10
10 の16進数は a です
% ./a.out
10進数を入力してください:-1
負の値が入力されました
10進数を入力してください:255
255 の16進数は ff です
%
ヒント:Lec03-20参照
B-4 四捨五入
ファイル名: ex12b4.c
キーボードから入力した正の実数を、小数点以下の指定した桁数までとなるように四捨五入して表示するプログラムを作成せよ。その際、実数を指定した桁数で四捨五入する関数 double round_to(double, int) を作成して使用すること。なお、この問題では入力値のエラーチェックは省略してよい。
[実行例]
%./a.out
正の実数を入力してください:3.14159265
小数点以下の桁数を入力してください:2
3.140000
% ./a.out
正の実数を入力してください:3.14159265
小数点以下の桁数を入力してください:4
3.141600
%
Extra問題
E-1 素数判定
ファイル名: ex12e1.c
素数かどうかを判定する関数「isprime」を作成し、2から1000までの素数を10列の表として表示するプログラムを作成しなさい。isprime関数は判定する数字を引数に取り、素数の場合は "1" を、そうでない場合は "0" を返す関数とする。なお、実行例のように列を揃えて(10個単位で改行させて)表示させること(ブラウザによっては、ずれて見える可能性がある)。
[実行例]
% ./a.out
2 3 5 7 11 13 17 19 23 29
31 37 41 43 47 53 59 61 67 71
73 79 83 89 97 101 103 107 109 113
127 131 137 139 149 151 157 163 167 173
179 181 191 193 197 199 211 223 227 229
233 239 241 251 257 263 269 271 277 281
283 293 307 311 313 317 331 337 347 349
353 359 367 373 379 383 389 397 401 409
419 421 431 433 439 443 449 457 461 463
467 479 487 491 499 503 509 521 523 541
547 557 563 569 571 577 587 593 599 601
607 613 617 619 631 641 643 647 653 659
661 673 677 683 691 701 709 719 727 733
739 743 751 757 761 769 773 787 797 809
811 821 823 827 829 839 853 857 859 863
877 881 883 887 907 911 919 929 937 941
947 953 967 971 977 983 991 997
%
課題提出上の注意事項
解答ファイルはmenuコマンドを使って提出してください。以下のようにmenuコマンドを実行し、表示されるメッセージに沿って操作すること。
%
~prog0/bin/menu
menuコマンドは、解答ファイルが ~/Prog0/Ex## のディレクトリに指定されたファイル名で置かれているものとして処理します。正常に提出された場合は ○ が、何らかのエラーが生じた場合は × が表示されます。
解答の提出期間は以下のとおりです。
問題 | 提出受付開始 | 提出〆切 |
---|---|---|
A問題 | 演習日の6日前の午後9時 | 演習終了時刻 |
B, Extra問題 | 演習日の6日前の午後9時 | 演習日の6日後の午後9時 |
提出は〆切前であれば何度でもやり直すことができます。再提出すると、前に提出したファイルは新しい内容で上書きされます。