C语言随机函数主要用于实现一组随机数的生成。
十多年的荔湾网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站建设的优势是能够根据用户设备显示端的尺寸不同,自动调整荔湾建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“荔湾网站设计”,“荔湾网站推广”以来,每个客户项目都认真落实执行。
代码示例如下:
#includestdio.h
#includestdlib.h
int main ()
{
int a;
a=rand()%4;
printf("%d\n",a);
return 0;
}
C预先生成一组随机数,每次调用随机函数时从指针所指向的位置开始取值,因此使用rand()重复运行程序产生的随机数都是相同的,可以通过srand()函数来改变指针位置。
扩展资料:
C语言随机函数指针位置
void srand( unsigned int seed )
改变随机数表的指针位置(用seed变量控制)。一般配合time(NULL)使用,因为时间每时每刻都在改变,产生的seed值都不同。
基于毫秒级随机数产生方法:
#includewindows.h
种子设为:srand(unsigned int seed);
srand(GetTickCount());
参考资料:百度百科-C语言随机函数
这个题目还是不错的,比较考程序流程和函数的使用,我写了一个大概的样子。你看看有没有问题,有不懂的,请追问:
#include stdio.h
#include conio.h
#include stdlib.h
#include time.h
#include math.h
typedef struct // 定义结构体存储随机操作数
{
int a;
int b;
}RandNum;
// 获得随机操作数函数
RandNum GetRandNums()
{
RandNum rn = {0, 0};
rn.a = rand()%10 + 1;
rn.b = rand()%10 + 1;
return rn;
}
// 获得随机操作符函数
int GetOperator()
{
//srand((unsigned)time(NULL) );
return rand()%4+1;
}
// 任务1
int task1()
{
RandNum rn = GetRandNums(); // 获得随机操作数
int a=rn.a, b=rn.b;
int ans = 0; // 用户输入的答案变量
printf("%d*%d=?\t", rn.a, rn.b);
scanf("%d", ans);
if (ans == a*b)
{
printf("Right!");
return 1;
}
else
{
printf("Wrong!Please try again.\n");
return 0;
}
}
// 任务2
int task2()
{
int i;
for(i=0; i3; i++)
{
if(1 == task1())
break;
}
if(i == 3)
{
printf("Wrong!You have tried three times!Test over!");
return 0;
}
else
return 1;
}
// 任务3
int task3()
{
int i, RightNum=0;
printf("\tYou will answer 10 problems.\n");
for(i=0; i10; i++)
{
printf("Problem %d\t", i+1);
if(1 == task1())
RightNum += 1;
system("cls");
}
printf("Your total score is: %d\n", RightNum*10);
printf("You answer accuracy is: %d%%\n", RightNum*10);
return 0;
}
// 任务4
int task4()
{
int flag=0, RightNum = 0;
RandNum rn = {0, 0};
float a=rn.a, b=rn.b;
int op = 0; // 操作符变量 1234 对应于 +-*/
float ans = 0, err = 1;
printf("You will answer 10 problems.\n");
for(int i=0; i10; i++)
{
rn = GetRandNums(); // 获得新的随机操作数
op = GetOperator(); // 获得新的随机操作服
a = rn.a;
b = rn.b;
flag = 0; // 回答正确与否标志位,初始化为0
switch (op)
{
case 1: // 若为+
printf("%.0f+%.0f=?\t", a, b);
scanf("%f", ans);
err = abs(ans - (a+b));
if(err == 0 )
flag = 1;
break;
case 2: // 若为-
printf("%.0f-%.0f=?\t", a, b);
scanf("%f", ans);
err = abs(ans - (a-b));
if(err == 0)
flag = 1;
break;
case 3: // 若为*
printf("%.0f*%.0f=?\t", a, b);
scanf("%f", ans);
err = abs(ans - (a*b));
if(err == 0)
flag = 1;
break;
case 4: // 若为/
printf("%.0f/%.0f=?\t", a, b);
scanf("%f", ans);
err = abs(ans - (a/b));
if(err 1e-4)
flag = 1;
break;
}
if(flag) // 若回答正确
{
printf("\t\tRight!\n");
RightNum += 1;
}
else
printf("\t\tWrong!\n");
}
printf("Your total score is:%d", RightNum*10);
return RightNum*10;
}
// 任务5
int task5()
{
int accuracy = 0, i=0;
while (accuracy 75)
{
printf("This is your %d st try:\n", i+1);
accuracy = task4();
if(accuracy 75)
{
i++;
system("cls");
}
}
printf("\n\tGood!\n");
return 1;
}
// 对答案判别函数(任务6中用到),判别回答的精确度
// 答案误差1e-2 为Right,1e-3为Good,1e-4为Excellent,1e-5为Perfect
int judge(float err)
{
int option = 0;
float base = 1e5;
for (int i=0; i4; i++) // 判断误差级别
{
if (err*base 1)
{
option = 4-i;
break;
}
base = base / 10;
}
switch (option)
{
case 1: // 误差级别1, err1e-2
printf("\t\tRight!\n");
break;
case 2: // 误差级别2, err1e-3
printf("\t\tGood!\n");
break;
case 3: // 误差级别3, err1e-4
printf("\t\tExcellent!\n");
break;
case 4: // 误差级别4, err1e-5
printf("\t\tPerfect!!\n");
break;
default: // 若误差级别不在范围内,判为错误
printf("\t\tWrong!\n");
return 0;
break;
}
return 1;
}
// 任务6
int task6()
{
int flag=0, RightNum = 0;
RandNum rn = {0, 0};
float a=rn.a, b=rn.b;
int op = 0;
float ans = 0, err = 1;
printf("You will answer 10 problems.\n");
for(int i=0; i10; i++)
{
rn = GetRandNums();
op = GetOperator();
a = rn.a;
b = rn.b;
flag = 0;
switch (op)
{
case 1:
printf("%.0f+%.0f=?\t", a, b);
scanf("%f", ans);
err = abs(ans - (a+b)); // 获得用户的回答与答案的误差
flag = judge(err);
break;
case 2:
printf("%.0f-%.0f=?\t", a, b);
scanf("%f", ans);
err = abs(ans - (a-b));
flag = judge(err);
break;
case 3:
printf("%.0f*%.0f=?\t", a, b);
scanf("%f", ans);
err = abs(ans - (a*b));
flag = judge(err);
break;
case 4:
printf("%.0f/%.0f=?\t", a, b);
scanf("%f", ans);
err = abs(ans - (a/b));
flag = judge(err);
break;
}
if(flag)
{
RightNum += 1;
}
}
printf("Your total score is:%d", RightNum*10);
return RightNum*10;
}
// 主函数
int main(void)
{
srand((unsigned)time(NULL) );
task6();
getch();
return 0;
}
c语言中产生随机数的相关函数主要包括srand和rand函数,两者配合生成随机数据,测试代码如下,
#includestdio.h
#include stdlib.h
#include time.h
void main()
{
int i=0,j=0;
int p[5][5]={0};
srand(time(NULL));
for(i=0;i5;i++)
for(j=0;j5;j++)
p[i][j]=rand()%100+1;//产生1-100的随机数存入数组p中
printf("二维数组p为:\n");
for(i=0;i5;i++)
{
for(j=0;j5;j++)
printf("%d\t",p[i][j]);
printf("\n");
}
}
一般srand和rand配合使用产生伪随机数序列。rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子,rand根据这个种子的值产生一系列随机数。如果系统提供的种子没有变化,每次调用rand函数生成的伪随机数序列都是一样的。srand(unsigned seed)通过参数seed改变系统提供的种子值,从而可以使得每次调用rand函数生成的伪随机数序列不同,从而实现真正意义上的“随机”。通常可以利用系统时间来改变系统的种子值,即srand(time(NULL)),可以为rand函数提供不同的种子值,进而产生不同的随机数序列。