C入門4 課題解答例
1. 「C入門4」のmondai.cをif文を使うように書き直してください。
/* kadai4_1.c */
#include <stdio.h>
int main(void)
{
int ans;
printf("問題 世界一長い川は? \n");
printf("1 信濃川 2 アマゾン川 3 ナイル川\n");
scanf("%d", &ans);
if(ans == 1){
printf("日本一ですが、違います。\n");
}
else if(ans == 2){
printf("そんな気もしますが、違います。\n");
}
else if(ans == 3){
printf("おめでとう。正解です!\n");
}
else{
printf("誤入力。入力は1か2か3です。\n");
}
return 0;
}
2. 年齢を聞き、20歳未満なら「まだ飲酒できませんね」、20歳以上なら「もう選挙権があります」と
出力するプログラムを書いてください。
/* kadai4_2.c */
#include <stdio.h>
int main(void)
{
int ans;
printf("整数で、年齢を入力してね。\n");
scanf("%d", &ans);
if(ans < 20){
printf("まだ飲酒できませんね。\n");
}
else{
printf("もう選挙権があります。\n");
}
return 0;
}
「1 20歳未満 2 20歳以上」という選択肢を表示して入力を求めるという方法もありますね。
3. クイズを3題出題し、ユーザの解答に応える(「正解」とか「不正解」とか言う)プログラムを書いてください。
クイズは何でもかまいません。
下のプログラムではansを使いまわししていることに注意してください。
動けばけっこう楽しいと思います。笑える答えを書いてくれた人もけっこういました。
しかし、こういう長いプログラムはやっかいですよね。
/* kadai4_3.c */
#include <stdio.h>
int main(void)
{
int ans;
printf("問題1\n");
printf("コンパイルってどういう意味?\n");
printf("1 実行可能ファイルの実行 2 バイナリへの翻訳\n");
scanf("%d", &ans);
if(ans == 1){
printf("不正解\nもう一度入門1を読もう。\n");
}
else if(ans == 2){
printf("正解\nただし、compileのもとの意味は「編集」。");
}
else{
printf("誤入力。入力は1か2です。\n");
}
printf("\n問題2\n");
printf("Windowsで実行可能ファイルの拡張子は、普通何?\n");
printf("1 c 2 txt 3 exe\n");
scanf("%d", &ans);
if(ans == 1){
printf("不正解\nそれはCのソースファイル。\n");
}
else if(ans == 2){
printf("不正解\nそれはテキストファイル\n");
}
else if(ans == 3){
printf("正解\n");
}
else{
printf("誤入力。入力は1か2か3です。\n");
}
printf("\n問題3\n");
printf("そろそろプログラミングになれた?\n");
printf("1 はい 2 いいえ\n");
scanf("%d", &ans);
if(ans == 1){
printf("よかった、よかった。\n");
}
else if(ans == 2){
printf("あと少しでなれるんじゃないかな。\n");
}
else{
printf("誤入力。入力は1か2です。\n");
}
return 0;
}
4. 問題3で完成したプログラム(ただし、その実行可能ファイル)を友人に渡す方法を考えてください。
どのような方法があるでしょうか?
メールで渡す、フロッピーで渡す、などが考えられます。
5. 問題4で実行可能ファイルを渡すときに、そのプログラムの使い方をまとめた文書を書いてください。
このようなものをReadMeファイルなどと言います。
その友人は、「コマンドプロンプト」(DOS窓)も知らないと考え、きちんと書いてください。
省略
しかし、重要だと思います。
6. 問題3のプログラム(実行可能ファイル)と問題5のReadMeファイル(ReadMe.txtとしましょう)を、
問題4で考えた方法の1つを使って、実際に友人に渡してください。お金は取らないように。
省略
7. 問題3で作ったプログラムの実行可能ファイルを、エクスプローラ(Windowsで考えています)で見つけ、
ダブルクリックしてみてください。何が起こるでしょう。
おそらく問題3のプログラムでは、最後のクイズにユーザが解答すると、すぐにコマンドプロンプトの窓が
終了してしまうでしょう。この「欠点」をなくしたプログラムを書いてください。
最後の表示が終わるとすぐにコマンドプロンプトの窓が閉じてしまうと思います。
これに対処するには、たとえば、次のようにすればよいと思います。
(ただし、クイズを1問にしています。)
これは、「整数値の入力待ち」にすることで、プログラムの進行を止めているのです。
最後に入力された整数値は、ansに格納されますが、使われずにプログラムは終了します。
ちょっと、ださいですね。あとで、もう少しよい方法を考えてみましょう。
/* kadai4_7.c */
#include <stdio.h>
int main(void)
{
int ans;
printf("問題1\n");
printf("コンパイルってどういう意味?\n");
printf("1 実行可能ファイルの実行 2 バイナリへの翻訳\n");
scanf("%d", &ans);
if(ans == 1){
printf("不正解\nもう一度入門1を読もう。\n");
}
else if(ans == 2){
printf("正解\nただし、compileの本当の意味は「編集」");
}
else{
printf("誤入力。入力は1か2です。\n");
}
printf("\n\n終了です。何か数字キーを押し、エンターキーを押してください\n");
scanf("%d", &ans); /* 「入力待ち」にすることで、プログラムの進行をとめる */
return 0;
}