PTA 循环结构 L1-6 猜数字游戏
题目要求:
猜数字游戏是令游戏机随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Too big”),还是小了(“Too small”),相等表示猜到了。如果猜到,则结束程序。程序还要求统计猜的次数,如果1次猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”;如果超过N次都没有猜到,则提示“Game Over”,并结束程序。如果在到达N次之前,用户输入了一个负数,也输出“Game Over”,并结束程序。
输入格式:
输入第一行中给出两个不超过100的正整数,分别是游戏机产生的随机数、以及猜测的最大次数N。最后每行给出一个用户的输入,直到出现负数为止。
输出格式:
在一行中输出每次猜测相应的结果,直到输出猜对的结果或“Game Over”则结束。
题目分析:
用户输入一个需要被猜的数字(100以内)和要求猜的次数,接下来不断输入数字猜测并根据输入数值给出相应提示及控制程序执行。本题应采用嵌套循环去判断和控制程序的运行。具体代码如下:
源代码:
#include <stdio.h>
int main()
{
int factnumber,maxcount,guessnumber;
scanf("%d %d",&factnumber,&maxcount); //输入被猜数字和最多猜测次数
int i;
for (i=1;i<=maxcount+1;i++){ //此循环执行对猜测数字的判断并执行相应操作
scanf("%d",&guessnumber);
if (guessnumber>=0){
if (guessnumber>factnumber){ //猜测数字大于被猜数字时执行以下操作
printf("Too big\n"); //输出Too big
continue; //跳过下面步骤进入下一个循环
}
if (guessnumber<factnumber){ //猜测数字小于被猜数字执行以下操作
printf("Too small\n"); //输出Too small
continue; //跳过下面步骤进入下一个循环
}
if (guessnumber==factnumber){ //猜测数字与被猜数字相等时跳出循环
break;
}
}
else{ //输入为负数时直接结束循环
i=0;
printf("Game Over");
break;
}
}
if (i==1){ //第一次猜中时输出
printf("Bingo!");
}
if (i<=3&&i>1){ //三次以内猜出(不包括第一次)输出
printf("Lucky You!");
}else if(i>3&&i<=maxcount){ //超过三次但在限定次数内猜中输出
printf("Good Guess!");
}
if (i>maxcount){ //超过限定次数仍没猜出时输出
printf("Game Over");
}
return 0;
}
程序分析:
i表示第i次猜数字,同时根据i的值来输出循环结束后输出的语句,超过N次仍未猜出数字,即到第N+1次(i=N+1)仍在猜数字时,不论猜中与否,都跳出循环并输出Game Over。即循环结束后i>N时输出该语句。在N次以内第i次猜中则输出对应的语句。当i<N的时候输入值为负数,则直接输出Game Over并跳出循环。此处同时将i置为0,使跳出循环后不会再有额外的语句输出。(代码中N用maxcount表示,方便阅读与理解)
程序运行结果:
第1次猜中:
三次以内猜中(包括第三次且不包括第一次):
超过3次但在N次以内(包括N)猜中:
超过N次仍未猜中:
输入负数直接结束:
PTA判题结果: