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を、機能を変えずに、もう少し短く書き直してください。
  ポイントは、「同じもののくりかえし」をなるべく減らすということです。


解答例

C入門9
C入門目次
ホーム