C入門10 課題解答

1. 次のプログラムを実行するとどうなるでしょうか。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int saikoro(void){
    printf("さいころを振るよ〜\n");
    printf("ころころころ...\n");
    return rand() % 6 + 1;
}

int main(void)
{
    srand( (unsigned)time( NULL ) );
    printf("%d", saikoro());
    return 0;
}

  「さいころを振るよ〜
   ころころ...
   3           」
  などとなる。

2. 実行すると、1から引数までの乱数を戻す関数myRandを書いてください。
  つまり、たとえば、myRand(30)と書けば、それが1から30までのどれかになるというものです。

int myRand(int x){
    return rand() % x + 1;
}

  これで「1からxまでのどれか」を戻す関数になりました。
  (ただ、一般的に、Cでは「1からx」というより、「0からx - 1」と考える方がよいかもしれませんね。)

3. 問2で書いたmyRandを使って、今日のパワーとラッキー度を表示するおみくじプログラムを
  書いてください。
  パワーとラッキー度は、1から100までとします。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int myRand(int x){
    return rand() % x + 1;
}

int main(void)
{
    srand( (unsigned)time( NULL ) );
    printf("今日のパワー  :%d\n", myRand(100));
    printf("今日のラッキー度:%d\n", myRand(100));
    return 0;
}

4. ユーザとじゃんけんをして、ひきわけなら0、ユーザが勝ったら1、コンピュータが勝ったら2を
  戻す関数jankenを書いてください。

int janken(void){
    /* userはユーザの手、compはコンピュータの手、kekkaは結果 */
    int user, comp, kekka;
    char* te[3] = {"グー", "チョキ", "パー"};
    char* kekka_hyouji[3]
        = {"ひきわけですね。", "あなたの勝ちです。", "私の勝ちです。"};

    printf("何を出しますか?\n");
    printf("1 グー 2 チョキ 3 パー\n");
    scanf("%d", &user); /* ユーザが手を入力 */
    comp = rand() % 3 + 1; /* コンピュータの手は乱数で決める */
    if(comp == 1){
        if(user == 1) kekka = 0;
        else if(user == 2) kekka = 2;
        else if(user == 3) kekka = 1;
    }
    else if(comp == 2){
        if(user == 1) kekka = 1;
        else if(user == 2) kekka = 0;
        else if(user == 3) kekka = 2;
    }
    else if(comp == 3){
        if(user == 1) kekka = 2;
        else if(user == 2) kekka = 1;
        else if(user == 3) kekka = 0;
    }
    printf("あなたは%s。わたしは%s。\n%s\n",
                te[user - 1], te[comp - 1], kekka_hyouji[kekka]);
    return kekka;
}

5. 問4のjankenを使って、ユーザとコンピュータが3回勝負のじゃんけんをするプログラムを
  書いてください。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int janken(void){
    /* userはユーザの手、compはコンピュータの手、kekkaは結果 */
    int user, comp, kekka;
    char* te[3] = {"グー", "チョキ", "パー"};
    char* kekka_hyouji[3]
        = {"ひきわけですね。", "あなたの勝ちです。", "私の勝ちです。"};

    printf("何を出しますか?\n");
    printf("1 グー 2 チョキ 3 パー\n");
    scanf("%d", &user); /* ユーザが手を入力 */
    comp = rand() % 3 + 1; /* コンピュータの手は乱数で決める */
    if(comp == 1){
        if(user == 1) kekka = 0;
        else if(user == 2) kekka = 2;
        else if(user == 3) kekka = 1;
    }
    else if(comp == 2){
        if(user == 1) kekka = 1;
        else if(user == 2) kekka = 0;
        else if(user == 3) kekka = 2;
    }
    else if(comp == 3){
        if(user == 1) kekka = 2;
        else if(user == 2) kekka = 1;
        else if(user == 3) kekka = 0;
    }
    printf("あなたは%s。わたしは%s。\n%s\n",
                te[user - 1], te[comp - 1], kekka_hyouji[kekka]);
    return kekka;
}

int main(void)
{
    int i, x, uwin, cwin;
    srand( (unsigned)time( NULL ) );
    uwin = 0;
    cwin = 0;
    printf("じゃんけん3回勝負です。\n");
    for(i = 0; i < 3; i++){
        x = janken();
        if(x == 1) uwin++;
        else if(x == 2) cwin++;
    }
    printf("\nあなたの%d勝%d敗%d引き分け\n", uwin, cwin, 3 - uwin - cwin); 
    return 0;
}


課題10

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