猜数游戏、随机数、time函数与循环
标签(空格分隔): C 双学位高级语言程序设计 C循环结构
猜数游戏,就是系统生成一个随机数,用户从键盘输入数据,系统将这个输入数据与之前的随机数作比较,提示大了或者小了,然后用户重新输入,直到猜到随机数的真正大小。
C语言的随机数命令是stdlib.h里面定义的,所以要声明。其命令是rand()。但是注意,rand生成的是伪随机数,也就是说,每次都生成同样顺序的随机数,rand函数其实每次生成同一张随机数表。为了获得真正的随机数,我们需要设置随机数种子,方法如下。#include#include 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#include #include 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#include #include 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;}