ustcanycall / OS

0 stars 0 forks source link

算法设计 #6

Open ustcanycall opened 10 years ago

ustcanycall commented 10 years ago

2.2数字积分

EX3

代码部分

#include <ctime>
#include <iostream>
#include <cstdlib>
#include<math.h>
using namespace std;

/*MC积分函数*/ 
void MC(double a,double b ,double c ,double d,double (*func)(double));

/*测试函数1*/ 
double test1(double x);

/*测试函数2*/ 
double test2(double x);

int main()
{
    srand(time(NULL));
    MC(0,4,-1,8,test1);
    MC(-1,1,-1,1,test2);
    system("pause");
}

void MC(double a,double b ,double c ,double d,double (*func)(double))
{

    int i,k=0,n=1000000;
    double x,y,f_x;
    for(i=0;i<n;i++)
    {
        x = a+(b-a)*(double)rand()/(double)(RAND_MAX);
        y = c+(d-c)*(double)rand()/(double)(RAND_MAX);
        f_x = func(x);
        if(y<f_x&&y>0) k++;
        if(y<0 &&y>f_x) k--;
    }
    printf("%6f\n",(double)k*36/n);
}

double test1(double x)
{
    return (x*x-2*x);
}

double test2(double x)
{
    return (x);
}

实验结果:

jdsfl kasdfk dsajfk
dsjkzld fdjkk ndaksf
jlsdj ka hfkdsa