今天开始第三章的学习,我们直接上题目:
#include<stdio.h>
int main(void)
{
int mynumber, yournumber;
mynumber = 38;
printf("Input your number:");
scanf("%d", &yournumber);
if(yournumber==mynumber){
printf("Good Guess!\n");
}else if(yournumber>mynumber){
printf("Too big!\n");
}else{
printf("Too small!\n");
}
return 0;
}
这个是书上给的答案,但是,你会发现这个程序和我们想要的猜数字游戏的预期不一致。这个程序只能执行一次就结束了,而且数字还是固定的,只能人为修改。我们不能满足于此,那我们给他改一下,把这个程序给他完善一下。
首先是只能运行一次的问题,我们给他加一个for循环:
#include<stdio.h>
int main(void)
{
int n, i, mynumber, yournumber;
mynumber = 38;
printf("Please enter the number of guesses:");
scanf("%d", &n);
if(n<=0){
printf("Mistake!\n");
}else{
for(i=1;i<=n;i++){
printf("Enter your number:");
scanf("%d", &yournumber);
if(yournumber==mynumber){
printf("Lucky You!\n");
break;
}else if(yournumber>mynumber){
printf("Too big!\n");
}else{
printf("Too small!\n");
}
}
printf("Game Over!\n");
}
return 0;
}
改善了一点,现在猜测的次数就由我们自己决定了。然后再考虑考虑被猜数字怎么改变,让它变成随机数或者说是一个改变改变的数字。如果考虑简单一点的话,我们可以让被猜数与我们猜测次数相关,比如:
mynumber = 5*n*n - 3*n + 11;
当然,你也可以用 pow(n,2) ,但是别忘了再开头的地方声明函数。但,如果你上网查一下C语言中,随机数怎么表示的话,你应该就知道,我们可以让 mynumber 与时间相关。我们直接上最终改进之后的代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
int n, i, mynumber, yournumber;
srand(time(0));
mynumber = rand()%100+1;
printf("Please enter the number of guesses:");
scanf("%d", &n);
if(n<=0){
printf("Mistake!\n");
}else{
for(i=1;i<=n;i++){
printf("Enter your number:");
scanf("%d", &yournumber);
if(yournumber==mynumber){
printf("Lucky You!\n");
break;
}else if(yournumber>mynumber){
printf("Too big!\n");
}else{
printf("Too small!\n");
}
}
printf("Game Over!\n");
}
return 0;
}
srand(time(0)) :就是给这个算法一个启动种子,也就是算法的随机种子数,有这个数以后才可以产生随机数,用1970.1.1至今的秒数,初始化随机数种子。
rand()%100+1:1~100之间的随机数。我们使用rand函数可以得到一个0~32767的随机数,其中rand()是输出0~32767,只是运用求余算符,除以100的余数在0至99,再加1就使数值在1至100。
今天就到这里吧,打的差不多的,今天主要就是由猜字游戏延伸出去的知识(主要是没时间打其他的了,今天满课),嘿嘿。