免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3514 | 回复: 4
打印 上一主题 下一主题

[C] 我想问一个关于正态分布的C语言问题,下面是我写的程序和出现的问题,球帮忙修改。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-04-16 20:40 |只看该作者 |倒序浏览
程序代码如下:
#include<stdio.h>
#include<math.h>
#include<limits.h>
#define pi 3.141592653

//正态函数式
float fun(float x)
{
float val;
val=(1/sqrt(2*pi))*exp(-x*x/2);
return val;
}

//使用梯形求积分的方法,其中a代表积分下限,b代表积分上限,n代表分得的梯形数目
long integral(float(*fun)(float x),float a,float b, float n){
                float s,h,y;
                int i;
                //步长
                h=(b-a)/n;
                s=0;
                y=0;
                //利用离散求和求积分
                for(i=0;i<n;i++)
                        s+=(fun(a+(i+1)*h)+fun(a+i*h))/2;
                y=s*h;
                return y;
               
        }


main()
{
        int i,j;
        float val[32][10];
        FILE *fp;
        fp=fopen("D:\01.xls","w");
       
        //文件打开出错处理
        if(fp==NULL)
                {printf("fail to open file!\n");
                return -1;
                }

        //循环完成正态分布数据的生成和存入
        for(j=0;(-3.0+j*0.1)<=3.0;j++)
                for(i=0;i<10;i++){
                val[j][i]=integral(fun,LONG_MIN,(-3.0+j*0.1+0.01*i),ULONG_MAX);
                }

        //循环完成正态分布数据读入到文件中去。
                for(j=0;(-3.0+0.1*j)<=3.0;j++){
                        for(i=0;i<10;i++)
                        {
                                fprintf(fp,"%c\t",val[j][i]);
                        }
                fp=fprintf(fp,"\n");
                }
        fclose(fp);
}

出现的问题如下:

Compiling...
01.cpp
D:\编程\正态分布\正态分布\01.cpp(10) : warning C4244: '=' : conversion from 'double' to 'float', possible loss of data
D:\编程\正态分布\正态分布\01.cpp(26) : warning C4244: 'return' : conversion from 'float' to 'long', possible loss of data
D:\编程\正态分布\正态分布\01.cpp(47) : warning C4305: 'argument' : truncation from 'const unsigned long' to 'float'
D:\编程\正态分布\正态分布\01.cpp(47) : warning C4244: 'argument' : conversion from 'double' to 'float', possible loss of data
D:\编程\正态分布\正态分布\01.cpp(47) : warning C4244: '=' : conversion from 'long' to 'float', possible loss of data
D:\编程\正态分布\正态分布\01.cpp(56) : error C2440: '=' : cannot convert from 'int' to 'struct _iobuf *'
        Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
执行 cl.exe 时出错.

01.obj - 1 error(s), 0 warning(s)

请问,为什么使用fprintf函数,会出现“cannot convert from ‘int’ to ‘struct_iobuf’。”这样的问题呢?我在其他程序中使用fprintf函数也是这样写的,并没有出现这样的问题啊。有人说要强制转换类型,我想知道应该在哪里、怎么强制转换类型呢?

论坛徽章:
0
2 [报告]
发表于 2013-04-16 20:43 |只看该作者
本程序主要是想实现从-3.00到3.09的正态分布函数的数据的生成以及写入到EXCEL表哥当中。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2013-04-16 22:39 |只看该作者
那个 %c 闹得?

楼主求积分用 boost 提供的 odeint 就好,别自己折腾了

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2013-04-17 09:03 |只看该作者
回复 1# carsion0833


    用python 比较容易解决 这类问题

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
5 [报告]
发表于 2013-04-17 14:14 |只看该作者
本帖最后由 yulihua49 于 2013-04-17 14:16 编辑
carsion0833 发表于 2013-04-16 20:40
程序代码如下:
#include
#include

fprintf();
不要
fp=fprintf();
尽量不用flaot类型,用double。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP