猜数游戏、随机数、time函数与循环
标签(空格分隔): C 双学位高级语言程序设计 C循环结构
猜数游戏,就是系统生成一个随机数,用户从键盘输入数据,系统将这个输入数据与之前的随机数作比较,提示大了或者小了,然后用户重新输入,直到猜到随机数的真正大小。
C语言的随机数命令是stdlib.h里面定义的,所以要声明。其命令是rand()。但是注意,rand生成的是伪随机数,也就是说,每次都生成同样顺序的随机数,rand函数其实每次生成同一张随机数表。为了获得真正的随机数,我们需要设置随机数种子,方法如下。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
unsigned int seed;
scanf("%u",&seed);
srand(seed);
for (i = 0;i<10;i++) //将随机数按列打印出来
{
printf("%d\n",rand());
}
return 0;
}
课件里面讲述时,说随机数种子seed必须为无符号整型数。
但是这样不是很方便,每次都得设置种子,更好的方法是改用系统时间作为随机数种子。方法如下。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int i;
srand(timr(NULL));
for (i = 0;i<10;i++) //将随机数按列打印出来
{
printf("%d\n",rand());
}
return 0;
程序中,用了time函数,其存放在time.h模块内,所以须声明。time函数运用方法很多,此处用Null作为函数参数,可以使其从函数返回值取得系统时间,也就是说,这样的话,time(NULL)只是个常数了。
**注意:在%前加空格符,意为忽略所有空白字符
如scanf(” %d”,&a);如果输入中有空格、tab、回车,则这样处理可以让输入值忽略这些字符的影响。**
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int a,b,i=0,r=0,w=0,ac=0;
float c,rr=0;
char d;
srand(time(NULL));
do
{
a = rand()%10+1;
b = rand()%10+1; //生成随机数
d = rand()%100+1;
if (d>=1&&d<=25) //加法
d=43,c=a+b;
else if (d>=26&&d<=50) //减法
d=45,c=a-b;
else if (d>=51&&d<=75) //乘法
d=42,c=a*b;
else if (d>=76&&d<=100) //除法
d=47,c=1.0*a/b;
printf("%d%c%d=?\n",a,d,b);
scanf("%f",&e); //输入答案
if (e==c) //判断答案是否正确
{
printf("Right!\n");
r++;
}
else //结果错误
{
printf("Wrong!\n");
w++;
}
if (i==9) //判断是否已运算10次,如果是,便停止输入,跳出循环
{
ac=r*10;
rr=r*10;
printf("account=%d right rate=%.0f%%",ac,rr);
break;
}
i++;
}while(i<=9); //如果答案错误,将返回循环开头,重新开始计算
return 0;
}