在这里rand函数有错吗?没错的话,为什么我每次出的题目都一样?

来源:百度知道 编辑:UC知道 时间:2024/06/15 06:11:28
#include"stdlib.h"
void main()
{
int i,d,a,b,r,n,m;
printf("\n\t欢 迎 使 用 本 考 试 系 统!\n");
printf("\t本考试系统出题题型:\n");
printf("\t\t加法题\n\t\t减法体\n\t\t乘法题\n\t\t除法题\n");
printf("本考试系统每次测试10题,按回车键开始答题!");
getchar();
for(i=1;1<=10;i++)
{
d=rand()%4+1;
switch(d)
{
case 1:
printf("\t\n第%2d题加法题!\n",i);
a=rand()%30;
b=rand()%30;
printf("%d+%d=",a,b);
scanf("%d",&r);
if(r==a+b)
{n++;printf("你答对了!请继续努力!");}
else{m++;printf("你答错了!请加倍努力!");}break;
case 2:printf("\t\n第%2d题:减法题!\n",i);
do
{a=rand()%30;
b=rand()%30;
}while(a<b);
printf("%d-%d=",a,b);
scanf("%d",&r);
if(r==a

rand函数产生的是伪随机数。但我们需要的是随机数。于是,我们需要对程序进行随机化,这需要使用标准库函数srand来实现。函数srand需要一个无符号的整型参数,在每次程序执行时用函数rand去生在一组不同的随机数.程序的运行结果是当我们输入不同的SEED时,产生不同组的随机数.如果我们希望不用每次输入SEED值,而且每次运行时SEED值都是不同的,用下面语句
srand(time(NULL));
这会使计算机自动读取自己的时钟以获得SEED值。于是我们就获值了每次运行都会改变的SEED,同样也就获得了真正的随机数。

我修改的开头部分
#include"stdlib.h"
#include "stdio.h"
#include "time.h"
void main()
{
srand(time(NULL));
int i,d,a,b,r,n,m;