next up previous contents
Next: 6. 制御構造と論理演算 Up: 5. 入力の読み込みと制御構造 Previous: 5.3 効率のよいプログラム開発

5.4 課題6

cd c を実行した後で( ~/c に移動した後で)、以下の課題を やってみよ。

課題 6.1
入力が間違っていた場合

本文の例4をプログラムとして完成させ、kadai5_1 という実行ファイル名 で、色々入力を変えて実行してみよ。特に、誤った入力をした場合、 期待したとおり、入力が誤っているというメッセージが出ることを確認 せよ。

課題 6.2
商と余りを表示するコマンドを作る

課題 3.5 を用いて、キーボードから2数を読み込み、割算の式を表示 するプログラムを作成せよ。 (課題3の参考問題も参考にせよ。) 実行プログラム名は、kadai5_2 とせよ。

課題 6.3
クイズ

選択が4つ以上あるクイズを考え、答えの番号を入力させるプログラムを 作成せよ。また、正しければ正解である事を表示して終了し、 間違っていれば誤答である事を表示し、正解が入力されるまで終了しない事。

問題 C 言語では、真であるというのは次のどの数であらわされるか? 次の4つの中から正解と思われるものを選び、その番号を入力せよ。

(1)
2
(2)
0
(3)
1
(4)
-1

課題 6.4
親切なプログラム

課題 5.5 を改造し、最初に購入したい車の値段、1ヶ月の返済金額の上限、 年利(年利は%で入力するものとする)をキーボードから 入力するようにせよ。値段、返済金額、年利に間違って文字等を入力 した場合に、正しい数値が入力されるまで繰り返し再入力をうながすプ ログラムにせよ(例6を参考にせよ)。 実行プログラム名は、carloan とすること。

[参考] 入力された年利(%)が nenri という変数に入っていて、 車の値段が car という変数に入っている場合、1年の金利がついた後の車の値段は 次のようにして求める事が出来る。

car = car * (1 + nenri/100.0);

 

作成したプログラムをメイルで、creport まで送ること。但し、題は kadai06 と すること。

前回の復習

1.
整数変数の標準入力からの読み込み
標準入力(ユーザーがリダイレクトしなければ、キーボード)からの読み込み には、scanf を用い、その書式は次の通りである。

書式   scanf("%d", &整数変数)

        例
                int a;
                scanf("%d", &a);
例では、整数変数 a に標準入力から一個の整数を読み込む。

2.
scanf のエラー処理
scanf は、期待した形式(上の場合は整数)以外のものが入力された場合、 0 を返す。入力が正常に行われた場合は、読み込んだ個数(上の場合は1個) を返す。従って、次の例の様に scanf の返り値を元に入力を検査できる。
                int a;
                if (scanf("%d",&a)!=1){
                        printf("Error!\n");
                }else{
                        printf("正常入力\n");
                }

3.
scanf での読みとりエラーと標準入力
scanf は入力エラーの場合は、標準入力にそのデータを返却する。 入力にデータを返すというと奇異に感じるが、実は、入力データは 一旦システムのある場所に貯められているので、その貯蔵庫に返却 するという意味である。従って、一旦入力エラーとなったデータを 捨てないと次のデータを読むことは出来ない。 そのための関数が、fflush() である。 fflush の引数には、今の場合、 標準入力を考えているので、fflush(stdin) とすれば良い。

4.
実行プログラムの名前を付ける
a.out 以外の名前を実行プログラムにつけるには、コンパイル時に以下の ようにすれば良い。
                $ cc   -o    実行ファイル名  ソースファイル名
        例
                $ cc  -o  test  test.c



Noriyo Kanayama