重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
(1)设定要求运算的次数N
成都创新互联公司是一家专注于成都做网站、成都网站制作、成都外贸网站建设与策划设计,宝应网站建设哪家好?成都创新互联公司做网站,专注于网站建设十年,网设计领域的专业建站公司;建站业务涵盖:宝应等地区。宝应做网站价格咨询:18980820575
(2)用随机函数得到在区间[-1,1]内的随机数,分别赋值给X,Y,计录满足X*X+Y*Y=1点的个数K,4K/N即为所求的派。
#includestdio.h
#includewindows.h
#include"time.h"
double AverageRandom(double min,double max)
{
int minInteger = (int)(min*10000);
int maxInteger = (int)(max*10000);
int randInteger = rand()*rand();
int diffInteger = maxInteger - minInteger;
int resultInteger = randInteger % diffInteger + minInteger;
return resultInteger/10000.0;
}
void main( )
{
int i, n,k=0;
double x,y,z;
srand((unsigned)time( NULL ));
printf("请输入运算的次数:\n");
scanf("%d",n);
for( i= 1;i =n; i++)
{
x= AverageRandom(-1,1);
y=AverageRandom(-1,1);
if( x*x+y*y=1) k++;
}
z=4*(double)k/(double)n;
printf("%f",z);
}
参考答案:
先用srand函数设置随机数种子,再用rand函数取两个随机数作为运算数字,而运算符只有+和-,那么用rand()%2来得到0~1的随机数来决定运算符号。
下面演示代码,随机生成10道加减题,输入回答,判断正确性。
#includestdio.h
#includestdlib.h
#includetime.h
#define M 10//题目数量
int main(void)
{
int n=M,num1,num2,s,y,a;
srand(time(NULL));
while(n--)
{
y=rand()%2;
num1=rand();
num2=rand();
if(y)
printf("问题%d:%d+%d=",M-n,num1,num2),s=num1+num2;
else
printf("问题%d:%d-%d=",M-n,num1,num2),s=num1-num2;
scanf("%d",a);
if(a==s)printf("回答正确!\n\n");
else printf("回答错误!正确答案:%d\n\n",s);
}
return 0;
}
#includestdio.h
#includestdlib.h
#includetime.h
int main(void)
{
srand(time(0));
int i=0; //用于下面的循环
int a[20]={0}; //用于存储产生的20个随机数。
double ave=0; //用于求20个随机数的和,为了求他们的平均数。
for(i =0;i=19;i++)
{
a[i]=rand()%90+10; //rand()%90产生0-89的随机数,加上10后就是10-99的随机数。
ave=ave+a[i];
printf("第%d个随机数是:\n",i+1,a[i]);
}
ave=ave/20;
for(i =0;i=19;i++) //打印大于平均数值的随机数;
{
if(a[i]ave)
{
printf("第%d个随机数等于%lf大于平均数%lf\n",i+1,a[i],ave)
}
}
return 0;
}
结果:
第1个随机数是:34
第2个随机数是:32
第3个随机数是:86
第4个随机数是:20
第5个随机数是:86
第6个随机数是:43
第7个随机数是:26
第8个随机数是:65
第9个随机数是:98
第10个随机数是:57
第11个随机数是:98
第12个随机数是:59
第13个随机数是:72
第14个随机数是:27
第15个随机数是:25
第16个随机数是:55
第17个随机数是:53
第18个随机数是:83
第。。。。。。。。
i++;是i=i+1;的缩写,c++之所以后面有++,就是因为有这样的缩写。
rand()是个函数,每次调用会给你返回一个unsigned int数,即无符号整数,具体这个函数可以百度百科rand(),返回的数用伪随机算法,在你看起来是随机变化的,范围在0~4294967295之间
%是c++的整数运算符,如果写a%b就是求a除以b以后的余数
rand()生成的数大于0~100之间的范围,rand()%100就会生成在0~99之间的随机整数
由于题目要求生成1~100之间的整数,所以用表达式rand()%100+1
如果想生成[0~3000)的随机数可以用表达式rand()%3000
如果想生成[a,b]范围的随机数,可以用表达式rand()%(b-a+1)+a来生成
比如要生成10~20之间的随机数,包含10和20在内,那么表达式是rand()%(20-10+1)+10
完整版纯C程序:
#includestdio.h
#includestdlib.h
#includetime.h
#define N 20
void sel_sort(int [],int); //选择排序
int search(int [],int,int); //查找
void insert(int [],int [],int,int); //插入
int num_by_mechine(void) //产生随机数
main()
{
int a[N],x;
int i,index,b[N+1];
srand(time(NULL)); //为随机数发生器rand()播种
for(i=0;iN;i++)
a[i]=num_by_mechine();
printf("before sel_sort...\n");
for(i=0;iN;i++)
printf("%4d",a[i]);
printf("\n");
sel_sort(a,N);
printf("after sel_sort...\n");
for(i=0;iN;i++)
printf("%4d",a[i]);
printf("\n");
printf("please input x:");
scanf("%d",x);
index=search(a,x,N);
if(index!=-1)
{
printf("find x,x=a[%d]!\n",index);
printf("delete a[%d]...\n",index);
for(i=index+1;iN;i++)
a[i-1]=a[i];
for(i=0;iN-1;i++)
printf("%4d",a[i]);
}
else
{
printf("no find!\n");
printf("after insert...\n");
insert(a,b,x,N);
for(i=0;iN+1;i++)
printf("%4d",b[i]);
}
}
int num_by_mechine(void)
{
return(rand()%100+1); //产生一个分布在1~100之间的随机整数
}
void sel_sort(int a[],int n)
{
int cur,i,t;
for(cur=0;curn-1;cur++)
for(i=cur;in;i++)
if(a[i]a[cur])
t=a[cur],a[cur]=a[i],a[i]=t;
}
int search(int a[],int x,int n)
{
int front=0,back=n-1,middle;
while(front=back)
{
middle=(front+back)/2;
if(xa[middle])
back=middle-1;
else if(xa[middle])
front=middle+1;
else
return(middle);
}
return -1;
}
void insert(int a[],int b[],int x,int n)
{
int i,j;
for(i=0;in;i++)
b[i]=a[i];
for(i=0;in;i++)
if(a[i]x)
{ for(j=n;ji;j--)
b[j]=b[j-1];
b[i]=x;
return;
}
b[n]=x;
}
#include stdio.h
#include stdlib.h
#include "time.h"
char op(int j) //打印 + - * / 符号
{
switch(j)
{
case 1: return '+';
case 2: return '-';
case 3: return '*';
case 4: return '/';
}
}
int result(int a, int b, int operation) //返回正确的结果
{
switch(operation)
{
case 1: return a+b;
case 2: return a-b;
case 3: return a*b;
case 4: return a/b;
}
}
int main(int argc, char *argv[])
{
srand((unsigned)time(0)); //初始化随机种子
int a,b,sum,operation;//operation为操作符,1:+ 2:- 3:* 4:/
int i;
for(i=1;i=10;i++) //循环为1到10题
{
int wrong_count=0; //错误次数
int n; //每题输入的答案
int k; //倍数,以便得到10-200之间的数
k=rand()%20+1;
a=(rand()%10+1)*k; //随机取得a
b=(rand()%10+1)*k; //随机获得b
operation=rand()%4+1; //随机+-*/
while(1)
{
system("cls"); //清屏
printf("第%d题:\n",i);
printf("%d %c %d = ",a,op(operation),b);
fflush(stdin); //清空输入缓冲,防止上次的输入被本次读取
scanf("%d",n);
if(n==result(a,b,operation))
{
printf("\nRight");
_getch(); //按任意键断续
break; //退出while循环,进行下一题
}
else
{
wrong_count++;
if(wrong_count=3) //连错3次,打印后退出
{
printf("\nWrong! You have tried three times! Test Over!");
return 0;
}
printf("\nWrong! Please try again.");
_getch();//按任意键再答一次
continue; //断续while循环
}
}
}
return 0;
}