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;
}