2009年6月23日火曜日

C言語講座 第3回 if と else [解答済]

お題:
①プログラム実行中に”整数”の入力を受け付け、その整数が偶数か奇数か判断する。偶数の時は「偶数です」、奇数の時は「奇数です」と表示させる。
②プログラム実行中に整数以外の値を入力された場合、「整数ちゃうよ」といったメッセージを表示させる。

プログラム実行表示例

整数を入力してください。
x:
入力された値は偶数(奇数)です。


or

なんで整数を入力しないんですか。ディスってるんですか。

必須文字列
・if
・else
・% (剰余を計算する演算子)

if文の本質をよく理解してください。条件がゼロならどうなるか、など。

解答掲載までの期間は3日間です。それまでに各自プログラムを作成し、
・プログラム文
・プログラムをコンパイルした実行ファイル
をメールに添付するなり、紙に書いてポストに投函するなり、言葉で伝えるなり、いかなる方法をつかっても構わないので提出してください。

質問等はメールまたはコメントにて。 どんな些細なことでも答えるので、頑張って取り組んでください。
cosmo-cleaner@za.pial.jp

---------------------------------------------------------------

解答

解答例は以下の通りです。

#include <stdio.h>

int main () {
    double x;    //入力値を格納
    int y;        //整数判定に使用
    printf("x:");    scanf("%lf",&x);
    y = 100000*x;

    if ( y % 100000)
        printf("なんで整数を入力しないんですか。\nディスってんディスか。\n");          
                 //x/10^5に余りがある時、ここを通る。
    else                                              
                //x/10^5の余りが"0"の時、ここを通る。
        if ((int)x % 2)
            puts("そいつは奇数です。");
        else
            puts("そいつは偶数です。");
    return(0);
}

解説
整数判定は、まず、入力された値を10^5倍し、小数点以下を整数に引きずり出し、int型のyに整数としてぶち込みます。次にifの条件でyを10^5で割った余りを判定します。

例えば、x=123.12345を代入すると、y=12312345となり、y/10^5の余りは12345となって、if条件が非0となるので、1つ目の命令を実行して終了します。
この場合、小数点以下5桁の値まで、整数か否かの判定ができます。それ以上の桁数だと判定出来ない場合があります。例えば123.0000023などの値です。結果と理由は考えてみてください。

ここで、注意しなければならないのは、int型は10ケタまでの整数しか扱えない、ということです。10ケタ以上の数を入れようとすると、エラーが起きて分け分からん値が代入されます。つまり、このプログラムでxに代入できる数は、整数5桁までの数字となります。それ以上だと1億万1回の1億万回くらいは”なんで整数入力しないんディスか”となります。例えば123456は10^5倍した時に10ケタを超えてしまうので、エラーになります。代入されるわけわからん値が見たい人は、プログラム作って試してみてください。簡単にできます。
つまり、このプログラムで扱えるxは
・小数点以下あわせて10ケタ
・小数点以下5ケタ
・整数5桁
の実数です。精度を変えたければ、10の乗数を変えます。

奇数、偶数判定はプログラムの通りです。2で割れるか、割れないかで判断します。この段階では、xは整数であると決まってるので、(int)xで、xをint型にします。みなさんから質問ありましたが、%は整数の計算しか扱えません。

あと、puts関数について。これは与えられた文字列を出力した後、改行してくれる便利な関数です。つまり、
puts(“ナイスデース”); = printf(“ナイスデース\n”);
という事になります。一行メッセージをちょろっと入れたい時に便利です。

1 件のコメント:

valda さんのコメント...

お疲れ様です 参考にして書いてみます