C入門9 課題
1. 次のプログラムを実行するとどうなるでしょうか。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void saikoro(void){
printf("さいころを振るよ〜\n");
printf("ころころころ...\n");
printf("出た目は%dです。\n", rand() % 6 +
1);
}
int main(void)
{
srand( (unsigned)time( NULL ) );
saikoro();
return 0;
}
2. 実行すると、今日のパワーとラッキー度が表示される関数omikuji2を書いて、
それを使うプログラムを書いてください。
パワーとラッキー度は、1から100までとします。
3. 「入門9にある古典的なおみくじ」と「今日のパワーとラッキー度が表示されるおみくじ」を
選択できるプログラムを書いてください。ただし、入門9の関数omikujiと問2のomikuji2を
使うようにしてください。
2回続けて実行した例
(ヒント)
mainは次のように書けます。
int main(void)
{
int a;
srand( (unsigned)time( NULL ) );
printf("どちらにしますか?\n");
printf("1 古典的なおみくじ 2 パワーとラッキー度\n");
scanf("%d", &a);
if(a == 1){
omikuji();
}
else if(a == 2){
omikuji2();
}
return 0;
}
4. 問3では、入門9の関数omikujiをそのまま使いました。
しかし、上の最初の図のように、「古典的なおみくじ」の結果は、なんだかさみしいですね。
そこで、関数omikujiを少し改良して、出力がもう少しはでに(?)なるようにしてください。
たとえば、次の図のように。
5. 問4のプログラムをさらに改良し、「コンピュータがユーザとじゃんけんをし、その結果を表示する」
機能も付け加えてください。
ただし、この機能は、jankenという名前の関数で、すでに以下のように書かれているとします。
これを使ってプログラムを書いてください。
void janken(void){
/* userはユーザの手、compはコンピュータの手
*/
int user, comp;
printf("では、じゃんけんです。何を出しますか?\n");
printf("1 グー 2 チョキ 3 パー\n");
scanf("%d", &user);
/* ユーザが手を入力 */
comp = rand() % 3 + 1; /*
コンピュータの手は乱数で決める */
if(comp == 1){
if(user == 1){
printf("あなたはグー。私はグー。ひきわけですね。\n");
}
else if(user == 2){
printf("あなたはチョキ。私はグー。私の勝ちですね。\n");
}
else if(user == 3){
printf("あなたはパー。私はグー。あなたの勝ちです。\n");
}
}
else if(comp == 2){
if(user == 1){
printf("あなたはグー。私はチョキ。あなたの勝ちです。\n");
}
else if(user == 2){
printf("あなたはチョキ。私はチョキ。ひきわけですね。\n");
}
else if(user == 3){
printf("あなたはパー。私はチョキ。私の勝ちですね。\n");
}
}
else if(comp == 3){
if(user == 1){
printf("あなたはグー。私はパー。私の勝ちですね。\n");
}
else if(user == 2){
printf("あなたはチョキ。私はパー。あなたの勝ちです。\n");
}
else if(user == 3){
printf("あなたはパー。私はパー。ひきわけですね。\n");
}
}
}
6. 問5のプログラムを見て、「関数を書くことのメリット」を論じてください。
7. 問5の関数jankenを、機能を変えずに、もう少し短く書き直してください。
ポイントは、「同じもののくりかえし」をなるべく減らすということです。