主題の要件:
1.システムは0から99までの整数をランダムに生成します。
2.プレイヤーは整数を入力し、それがシステムによってランダムに生成された数と一致する場合、1、2、および3番目の賞をランダムに引くことができます(システムによって決定されます)。
3.入力された数がシステムによってランダムに生成された数と一致しない場合、システムはプレーヤーによって与えられた値に従ってサイズを要求します。
4.プレーヤーは、合計10回の確率で数字を推測できます。10回経過しても推測できない場合は、機会がなくなったことを示すプロンプトが表示されます。
【実行上の問題の概要】①f()関数のマジック変数と推測変数をchar型に変更すると、一致しない値を何度入力しても、カウント変数iの値は常に1のままになります。 、期待どおりではあり ません。1を追加します。②rand()関数は乱数を生成できますが、プログラムを実行するたびに生成される乱数は同じです。
[注]メインメモリスペースを節約するために、小さな値の範囲を持つすべての値をchar型変数に格納します。
問題の手順:
#include<stdio.h>
#include<stdlib.h>
char f()//用户猜数流程
{
char magic=rand()%100;//生成一个介于0~99间的整数(包括0和99)
char guess;//记录用户输入的整数
char i=0;//循环计数变量
printf("当前次数:\n");
while(i<10)
{
printf("%d. 请输入一个介于0~99之间的整数: ", i+1);
//printf("i=%d\n", i);//调试语句
scanf("%d", &guess);
if(guess==magic)
{
printf("猜对了!\n");
return 1;
}
else if(guess>magic)
{
printf("猜大了!\n");
}
else
{
printf("猜小了!\n");
}
i++;
}
//若程序执行至此, 说明10次猜数机会已经用完.
return 0;
}
char f2()//若用户猜对, 此程序随机决定用户的获奖等级
{
char c=rand()%100;//随机生成一个0~99的整数
if(c<=5)
{
return 1;
}//一等奖
else if(c<=30)
{
return 2;
}//二等奖
else
{
return 3;
}//三等奖
}
int main()
{
if(f()==1)
{
printf("恭喜您, 奖品到手!\n");
if(f2()==1)
{
printf("一等奖.\n");
}
else if(f2()==2)
{
printf("二等奖.\n");
}
else
{
printf("三等奖.\n");
}
}
else
{
printf("很遗憾, 您的10次机会已经用完, 欢迎再次参与!\n");
}
//
return 0;
}
正しい手順:
#include<stdio.h>
#include<stdlib.h>
char f()//用户猜数流程
{
int magic=rand()%100;//生成一个介于0~99间的整数(包括0和99)
int guess;//记录用户输入的整数
char i=0;//循环计数变量
printf("当前次数:\n");
while(i<10)
{
printf("%d. 请输入一个介于0~99之间的整数: ", i+1);
//printf("i=%d\n", i);//调试语句
scanf("%d", &guess);
if(guess==magic)
{
printf("猜对了!\n");
return 1;
}
else if(guess>magic)
{
printf("猜大了!\n");
}
else
{
printf("猜小了!\n");
}
i++;
}
//若程序执行至此, 说明10次猜数机会已经用完.
return 0;
}
char f2()//若用户猜对, 此程序随机决定用户的获奖等级
{
char c=rand()%100;//随机生成一个0~99的整数
if(c<=5)
{
return 1;
}//一等奖
else if(c<=30)
{
return 2;
}//二等奖
else
{
return 3;
}//三等奖
}
int main()
{
if(f()==1)
{
printf("恭喜您, 奖品到手!\n");
if(f2()==1)
{
printf("一等奖.\n");
}
else if(f2()==2)
{
printf("二等奖.\n");
}
else
{
printf("三等奖.\n");
}
}
else
{
printf("很遗憾, 您的10次机会已经用完, 欢迎再次参与!\n");
}
//
return 0;
}