猜数游戏、随机数、time函数与循环

猜数游戏、随机数、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;
}
posted @ 2017-12-11 09:12  CF过2100就买ARCTERYX  阅读(143)  评论(0编辑  收藏  举报