next up previous contents
Next: 4. 制御構造1 繰り返し(for文) Up: 3. 制御構造1 判断 Previous: 5. 日本語とプログラム

6. 課題 3

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

課題 3.1
もっとも簡単な if 文

以下のプログラムを実行してみよ。


/* kadai 3.1 */
#include <stdio.h>

main()
{
       int a;
       a = 3;
       if ( a > 0 ){
                printf("a > 0 \n");
       }
}

課題 3.2
偽の場合は

課題 3.1 のプログラムで、a = 3;a = -1 に変更して 実行してみよ。

課題 3.3
真偽それぞれについて実行されるようにしよう。

課題 3.2 のプログラムを改良し、a が正又は0の場合は、a >= 0 を 負の場合は、a < 0 を表示するように改良し、実行してみよ。 また、a に 10 を代入するように変更してみて実行してみよ。 それぞれ、きちんと表示されましたか?

課題 3.4
3つの場合分け

課題 3.3 のプログラムを改良し、a が、正か0か負のどれであるかを 表示するようにせよ。

課題 3.5
割り切れるや否や?

前回、整数同志の割り算の結果は整数であるので、小数以下は切り捨てられることを 学んだが、これを応用して割り算の余りを求め、割り切れるかどうか を調べるプログラムを作ってみよう。

例えば、整数 $7$ を整数 $3$ で割った場合、商が $2$ で、余りは $1$ となるが、 これは、次のように書ける。


\begin{displaymath}
{7 \over 3} = 2 + {1 \over 3}
\end{displaymath}

分母を払うと、

\begin{displaymath}
7 = {2 \times 3} +1
\end{displaymath}

従って、一般的には、 整数 a を整数 b で割った商が p で、余りが q であるとき、

\begin{displaymath}
{a \over b} = p + {q \over b}
\end{displaymath}

と書けるので、分母の b を払うと、

\begin{displaymath}
a = {p \times b} + q
\end{displaymath}

と変形できる。よって、余り $q$ は、

\begin{displaymath}
q = a - {p \times b}
\end{displaymath}

となる。 そこで、整数 $a, b$ が与えられていれば、$p$ を求めれば余りは求まる事になる。 前回学んだように、c 言語では、整数同志の割り算をすれば、必ず商が求まるので、 p = a / b; とすればよい。 結局、余りがあるかどうかを調べるには、


		p = a / b;
		q = a - p * b;

を計算し、$q$ が0か否かを調べれば良い。

以上のことを用いて、 余り q を求めて、0ならば、割り切れたことを、0でないならば、 余りを表示するプログラムを作成せよ。

但し、プログラムはなるべく一般的に作り、プログラムの最初の方で、整数 a,b に値を代入し、以降は変数 a, b を使うようにしなさい。(具体的な数値を 使って計算してはならない。)

整数 a, b に割り切れる場合、割り切れない場合の数を代入し、それぞれきちんと 表示されるか確かめてみなさい。

 

作成したプログラムをメイルで creport まで送ること。但し、題は、kadai03 と すること。 ( 2回目以降のメイルを出すときは、kadai03 retry のように、kadai03 の後ろに 空白を入れてメッセージを付け足すこと。 )

参考問題
時間が余った人はやってみよう。

課題 3.5 のプログラムで、a = b= の行を削除し、 以下の行を挿入せよ。


        printf("Input a = ");
        scanf("%d",&a);
        printf("\nInput b = ");
        scanf("%d",&b);
        printf("\n");
これを実行すると、まず、 Input a = と表示されるので、適当な値を キーボードから入力し ( 整数 ) 、リターンキーを押すと、 今度は、 Input b = と表示するので、先の値とは違う値を入れてみよ。

どうです? これは、何度でも値を変えて割り切れるかどうか調べることが出来るようになって いますね。 実は、scanf("%d",&a); は、整数をキーボードから読み取って、変数 a に 代入する命令なのです。 ( 今の所は、正式には講義してませんので、 そういうおまじないと思って構いません。 )

復習
  1. 判断
    判断には次の3種類がある。
  2. 比較演算
    比較演算は2数についての演算であり、その意味では四則演算と同じで あるが、四則演算とは違い、真である場合に1を、偽である場合に0を 返す。
    比較演算には、 == != > < >= <= の6種類があり、それぞれ 数学の $ = \neq > < \mathrel{\mathpalette\lower.6ex\vbox{\baselineskip\z@skip\lineskip\...
...ip\z@skip\lineskip\z@
\ialign{$\m@th;\hfill ... と同じ意味になっている。特に注意が必要 なのは、一番目の == で、代入記号の = と間違えては ならない。

  3. 良くある間違い
    if 文で最も有名な間違いは、if ( a=0 ) の間違いである。これは、 a=0 が比較演算ではなく、代入文なので、a に0が代入され、 代入演算の結果は代入した数値なので、a=0 の結果は0となり、 この if 文は常に偽と判断される。


next up previous contents
Next: 4. 制御構造1 繰り返し(for文) Up: 3. 制御構造1 判断 Previous: 5. 日本語とプログラム
Noriyo Kanayama