刚开始做的时候不知道matlab没有自减运算,在网上查了很久资料,都没发现有对猜数游戏加错误输入判断的,经过多次试错,我弄出来了有判断的程序,在这里分享一下。
文章目录
- 前言
- 一、问题描述
- 二、解题思路
- 1.for循环
- 2.while循环
- 3.C语言实现
- 总结
前言
Matlab写猜数程序主要考察学习者考虑问题的严密性和多分支结构,这个题目增加了错误输入的判断,也就是输入不在范围内的数,不计一次。要注意Matlab没有自增、自减操作,所以在循环时要考虑是选择for循环还是while循环。
一、问题描述
首先由计算机产生[1,100]之间的随机整数,然后由用户猜测所产生的随机数。
根据用户猜测的情况给出不同提示,如猜测的数大于产生的数,则显示“High”,小于则显示 “Low”,等于则显示 “You won”,同时退出游戏。用户最多可以猜7次。如输入非[1,100]之间的数则要求用户重输,不计为一次。猜完7次还没猜对的,请提示“次数用尽”。
二、解题思路
1.for循环
代码如下(示例):
magic = randperm(100,1);%电脑随机产生[1-100]的整数
num=1; %用户猜的次数,初始化为1
sign = 1; %定义一个标识变量,后续当猜对时更改它的值,跳出循环
for i = 1:7guess = input('Please input a number: '); if guess < magic %猜得太小disp('Low') ;elseif guess > magic %猜得太大disp('High');elseif guess == magic %猜对了disp('You won!');sign = 0; %改变sign变量的值,并跳出循环break;end
end
if sign == 1 %猜了7次还没猜对,结束游戏disp('次数用尽!');
end
目前题目完成90%,还有错误输入未完成,(这里大家可以尝试一下把错误输入的判断加进去,但执行的时候并不能实现。)因为在for循环里面更改变量的值不能传到大的循环范围去,经过多次试错,我想到了可以改用while循环进行操作。
2.while循环
代码如下(示例):
magic = randperm(100,1);%电脑随机产生[1-100]的整数
num=1; %用户猜的次数,初始化为1
sign = 1; %定义一个标识变量,后续当猜对时更改它的值,跳出循环
while num <= 7guess = input('Please input a number: '); if guess < 1 || guess > 100 %处理错误输入数据,输入不在范围内的数,num值不增加disp('错误输入,请重猜一次!');continue;end %注意这里要让if条件终止,否则错误输入的数也会被判断是否猜对if guess < magic %猜得太小disp('Low') ;num = num + 1;elseif guess > magic %猜得太大disp('High');num = num + 1;elseif guess == magic %猜对了disp('You won!');sign = 0; %改变sign变量的值,并跳出循环break;end
end
if sign == 1 %猜了7次还没猜对,结束游戏disp('次数用尽!');
end
这里在while循环里面添加了一个if条件语句,实现了错误输入的判断。
3.C语言实现
代码如下(示例):
#include<stdio.h>
int main()
{int magic=rand()%100+1;int guess;int num;int sign = 1;for(num=1;num<8;num++){printf("Please input a number:");scanf("%d",&guess);if(guess < 1 || guess > 100){printf("错误输入,请重猜一个数:\n");num--;continue;}if(guess > magic){printf("High\n");continue;}if(guess < magic){printf("Low\n");continue;}if(guess == magic)printf("You won\n");sign = 0;break;}if(sign == 1)printf("次数用尽");return 0;
}
C语言中用自减就能实现,很简单。
总结
以上就是猜数游戏解题思路,虽然花了很长时间才解决错误输入判断的写法,但过程中我也学到了很多,也希望能解决其他有此问题的人的疑问。学如逆水行舟,不进则退,我会多敲代码,熟练技艺。