#include "time.h"
#include "math.h"
#include "dos.h"
#define PI 3.1415926
main()
{ double x,y,sum=0
int i
for(i=0i<=100i++)
{ srand(time(0))
x=rand()%10000
x=x/10000*PI/2
sleep(1)
srand(time(0))
y=rand()%10000
y=y/10000
if(y<=sin(x)) sum++
clrscr()
printf("%d%",i)
}
clrscr()
printf("%f ",sum/--i)
}
TC上没问题 VC上有点问题~~~~
#include<stdio.h>#include <time.h>
#include <stdlib.h>
double jifen(int, int, int, int)
int main()
{
int a,b,d,n
double c
srand((unsigned)time(NULL))
printf("请输入a b\n")
scanf("%d %d",&a,&b)
printf("请输入n\n")
scanf("%d",&n)
d=1+b*b
c=jifen(a,b,d,n)
printf("积分为%lf\n",c)
return 0
}
double jifen(int a,int b,int d,int n)
{
int i,m=0
double x,y,result
for(i=1i<=ni++){
x=(double)rand()/(double)(RAND_MAX)*(b-a)+a
y=(double)rand()/(double)(RAND_MAX)*d
if(y<=1+x*x) m++
}
result=(double)m*(b-a)*d/n
return result
}
如上 使用double 在最后加入result的强制转换
另外在x定义那里,改为(rand/rand_max)*(b-a)+a
因为是a,b 之间的距离随机加a,当a不为0时原来的式子是错的。
dty@ubuntu:~$ cat pi.c#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
unsigned long i
unsigned long m
const unsigned long N=100000000
double x,y,pi
srand((unsigned)time(NULL))
for(i=0,m=0i<Ni++)
{
/*x,y在区间(-1,1)*/
x=2.0*rand()/RAND_MAX-1
y=2.0*rand()/RAND_MAX-1
if((x*x+y*y)<=1)
{
m++
}
}
pi=4.0*m/N
printf("%lf\n",pi)
return 0
}
dty@ubuntu:~$ gcc pi.c
dty@ubuntu:~$ ./a.out
3.141575