お題:
①プログラム実行中に”整数”の入力を受け付け、その整数が偶数か奇数か判断する。偶数の時は「偶数です」、奇数の時は「奇数です」と表示させる。
②プログラム実行中に整数以外の値を入力された場合、「整数ちゃうよ」といったメッセージを表示させる。
プログラム実行表示例
整数を入力してください。 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 件のコメント:
お疲れ様です 参考にして書いてみます
コメントを投稿