c语言中用蒙特卡洛法求积分输出info00

Python015

c语言中用蒙特卡洛法求积分输出info00,第1张

#include "stdio.h"

#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