鱼C论坛

 找回密码
 立即注册
查看: 774|回复: 1

[已解决]c

[复制链接]
发表于 2020-5-4 17:51:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目: 给定抽取随机数的子函数
void rand(double *p, int n, double *r){
        int i,m;
    double s,u,v;
    s=65536.0; u=2053.0; v=13849.0;
    for (i=0; i<=n-1; i++)
      { *r=u*(*r)+v; m=(int)(*r/s);
        *r=*r-m*s; p[i]=*r/s;
      }
}
表示从均匀分布U(0,1)里抽取n个随机数,存储在数组p里。
本题要求从以上均匀均匀里抽取1000随机数。事实上,这1000个数是从连续的均匀分布里抽取的。要求此均匀分布的样本均值和样本方差。要求设置种子数为1,例如
Main(){
   double r=1,p[100];
   int n=100;
   rand(p,100,&r);
}
我写的:
#include <stdio.h>
#include<stdlib.h>
#include<math.h>
void rand(double *p, int n, double *r)
{
    int i,m;
    double s,u,v;
    s=65536.0;
    u=2053.0;
    v=13849.0;
    for (i=0; i<=n-1; i++)
    {
        *r=u*(*r)+v;
        m=(int)(*r/s);
        *r=*r-m*s;
        p[i]=*r/s;
    }
}

int main()
{
    double r=1,p[1000],a,s=0,m=0,d;
    int i,n=1000;
    void rand(double *p, int n, double *r);
    rand(p,n,&r);
    for(i=0; i<n; i++)
    {
        s+=p[i];
    }
    a=s/1000;
    printf("%lf\n",a);
    for(i=0; i<n; i++)
    {
        m+=(p[i]-a)*(p[i]-a);
    }
    d=m/1000;
    printf("%lf\n",d);

    return 0;
}
问题:为啥我编译错误说rand conflicting?这道题怎么做呀?
最佳答案
2020-5-8 11:12:29
本帖最后由 PC_ 于 2020-5-8 11:13 编辑

rand这个函数在<math.h>已经定义过了 , 程序其他地方没有问题 , 改过来之后输出结果是: 0.506232 和 0.085072
为了方便复制粘贴 , 我就直接把修改后的代码放上来吧:
#include <stdio.h>
#include<stdlib.h>
#include<math.h>
void Rand(double *p, int n, double *r);
void Rand(double *p, int n, double *r)
{
        int i ,m;
        double s ,u ,v;
        s = 65536.0;
        u = 2053.0;
        v = 13849.0;
        for (i = 0; i <= n - 1; i++)
        {
                *r = u * (*r) + v;
                m = (int)(*r / s);
                *r = *r - m * s;
                p[i] = *r / s;
        }
}

int main()
{
        double r = 1 ,p[1000] ,a ,s = 0 ,m = 0 ,d;
        int i ,n = 1000;
        Rand(p ,n ,&r);
        for(i = 0; i < n; i++)
        {
                s += p[i];
        }
        a = s / 1000;
        printf("%lf\n" ,a);
        for(i = 0; i < n; i++)
        {
                m += (p[i] - a) * (p[i] - a);
        }
        d = m / 1000;
        printf("%lf\n" ,d);
        
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-8 11:12:29 | 显示全部楼层    本楼为最佳答案   
本帖最后由 PC_ 于 2020-5-8 11:13 编辑

rand这个函数在<math.h>已经定义过了 , 程序其他地方没有问题 , 改过来之后输出结果是: 0.506232 和 0.085072
为了方便复制粘贴 , 我就直接把修改后的代码放上来吧:
#include <stdio.h>
#include<stdlib.h>
#include<math.h>
void Rand(double *p, int n, double *r);
void Rand(double *p, int n, double *r)
{
        int i ,m;
        double s ,u ,v;
        s = 65536.0;
        u = 2053.0;
        v = 13849.0;
        for (i = 0; i <= n - 1; i++)
        {
                *r = u * (*r) + v;
                m = (int)(*r / s);
                *r = *r - m * s;
                p[i] = *r / s;
        }
}

int main()
{
        double r = 1 ,p[1000] ,a ,s = 0 ,m = 0 ,d;
        int i ,n = 1000;
        Rand(p ,n ,&r);
        for(i = 0; i < n; i++)
        {
                s += p[i];
        }
        a = s / 1000;
        printf("%lf\n" ,a);
        for(i = 0; i < n; i++)
        {
                m += (p[i] - a) * (p[i] - a);
        }
        d = m / 1000;
        printf("%lf\n" ,d);
        
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 01:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表