用C编了个数学算法程序,移植到MFC后结果就不对了,为什么?

e_felix 2006-05-25 07:32:16
用C编了个数学算法程序,移植到MFC后结果就不对了,为什么? 难道常用数学符号被重载了???
...全文
201 14 打赏 收藏 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
clever101 2006-05-26
  • 打赏
  • 举报
回复
你的程序代码不能用到MFC中,因为MFC不支持printf,scanf这些用法?

没看到楼主在MFC中用了printf,scanf。

在C程序中:
for(i=0;i<m/2+1;i++) // 这里i<m/2+1
{if (f[i]!=0)
{if(i==0)
printf("%4.2f",f[i]);
else
{if (f[i-1]!=0)
printf("+%7.2fx(%d)",f[i],i) ;
else
printf("%7.2fx(%d)",f[i],i);
}
}
}


在MFC程序中:
for(i=0;i<m;i++) //这里是i<m,不知和上面的m是否一样?
{if (e[i]!=0)
{if(i==0){
str.Format("%4.2f",e[i]);
m_str1+=str;
}


koko_han 2006-05-25
  • 打赏
  • 举报
回复
关键是编译环境不一样,MFC有它自己的一套方法
mzjwx 2006-05-25
  • 打赏
  • 举报
回复
你的程序代码不能用到MFC中,因为MFC不支持printf,scanf这些用法,如果要用在vc++中的话,请在建立工程的第一步是选择win32 Application或者win30 Console Application。
e_felix 2006-05-25
  • 打赏
  • 举报
回复
运行结果出错 显示了一个很大的负数
pomelowu 2006-05-25
  • 打赏
  • 举报
回复
是什么错误?运行结果不对?编译出现问题?
e_felix 2006-05-25
  • 打赏
  • 举报
回复
这里要求用户输入m(m通过对话框mode获得),然后运行exp(nn),结果转换成CString格式的m_str1后用View中的OnDraw()输出
void CMathDispView::OnExp()
{
// TODO: 在此添加命令处理程序代码
CExpDlg mode;
if (mode.DoModal()==IDOK)
nn=atoi(mode.m);
exp(nn);
}

void CMathDispView::exp(int m)
{
CString str;
float a[2],b[20],c[20],d[20],e[20],f[20],p[20],q[20];
int i,j,n;
b[0]=1;
b[1]=1;
if(m>2)
{
for(i=2;i<m;i=i+2)

if (i/4==0)
b[i]= 2 ;
else
b[i]=-2;
for(i=3;i<m;i=i+2)

if ((i-1)/4==0)
b[i]= i ;
else
b[i]=-i;
}
for(i=0;i<m;i++)

for(i=1;i<m+2;i++)
{
c[i]=0;
d[i]=0;
e[i]=0;
p[i]=0;
q[i]=0;
}
c[0]=1;
d[0]=b[0];
for(n=1;n<m;n++)
{ a[0]=0;
a[1]=1;
for(i=0;i<2;i++)
for(j=0;j<m/2+1;j++)
p[i+j]=p[i+j]+a[i]*c[j];
for(i=0;i<m;i++)
q[i]=b[n]*d[i];
for(i=0;i<m;i++)
{
e[i]=p[i]+q[i];
c[i]=d[i];
d[i]=e[i];
p[i]=0;
}

}
for(i=0;i<m;i++)
{if (e[i]!=0)
{if(i==0){
str.Format("%4.2f",e[i]);
m_str1+=str;
}
....
芮言 2006-05-25
  • 打赏
  • 举报
回复
c语言下的数据类型和MFC定义有的是不一样的,你只贴了c的代码,那MFC的呢?
sunshinesky13 2006-05-25
  • 打赏
  • 举报
回复
MFC下的代码有吗?
sunshinesky13 2006-05-25
  • 打赏
  • 举报
回复
代码给人看看呀!
编译错,连接错,运行错?
e_felix 2006-05-25
  • 打赏
  • 举报
回复
是一个通过插值求exp(x)近似值的算法:

/* HELLO.C -- Hello, world */
#include "stdio.h"
#include"math.h"
main()
{ float a[2],b[20],c[20],d[20],e[20],f[20],p[20],q[20];
int i,j,n,m;
scanf("%d",&m);
printf("\n");
b[0]=1;
b[1]=1;
if(m>2)
{
for(i=2;i<m;i=i+2)

if (i%4==0)
b[i]= 2 ;
else
b[i]=-2;
for(i=3;i<m;i=i+2)

if ((i-1)%4==0)
b[i]= i ;
else
b[i]=-i;
}
for(i=0;i<m;i++)
printf("%f",b[i]);

for(i=1;i<m+2;i++)
{
c[i]=0;
d[i]=0;
e[i]=0;
p[i]=0;
q[i]=0;
}
c[0]=1;
d[0]=b[0];
for(n=1;n<m;n++)
{ a[0]=0;
a[1]=1;
for(i=0;i<2;i++)
for(j=0;j<m/2+1;j++)
p[i+j]=p[i+j]+a[i]*c[j];
printf("\n") ;
for(i=0;i<m;i++)
q[i]=b[n]*d[i];
for(i=0;i<m;i++)
{
e[i]=p[i]+q[i];
c[i]=d[i];
d[i]=e[i];
p[i]=0;
}

}
printf("\n");
for(i=0;i<m;i++)
{if (e[i]!=0)
{if(i==0)
printf("%4.2f",e[i]);
else
{if (e[i-1]!=0)
printf("+%7.2fx(%d)",e[i],i) ;
else
printf("%7.2fx(%d)",e[i],i);
}
}
}
printf("\n");
for(i=1;i<m+2;i++)
{
c[i]=0;
d[i]=0;
f[i]=0;
p[i]=0;
q[i]=0;
}
c[0]=0;
d[0]=1;
for(n=1;n<m;n++)
{ a[0]=0;
a[1]=1;
for(i=0;i<2;i++)
for(j=0;j<m/2;j++)
p[i+j]=p[i+j]+a[i]*c[j];
for(i=0;i<m;i++)
q[i]=b[n]*d[i];
for(i=0;i<m;i++)
{
f[i]=p[i]+q[i];
c[i]=d[i];
d[i]=f[i];
p[i]=0;
}

}
printf("----------------------------------");
printf("\n");
for(i=0;i<m/2+1;i++)
{if (f[i]!=0)
{if(i==0)
printf("%4.2f",f[i]);
else
{if (f[i-1]!=0)
printf("+%7.2fx(%d)",f[i],i) ;
else
printf("%7.2fx(%d)",f[i],i);
}
}
}
printf("\n");
getch();

}
clever101 2006-05-25
  • 打赏
  • 举报
回复
你等于说,我的程序有问题啊,快来帮帮我啊?
xing_xing_xing 2006-05-25
  • 打赏
  • 举报
回复
代码贴出来
浮点数运算?
e_felix 2006-05-25
  • 打赏
  • 举报
回复
那怎么办??? 高手解答啊!谢谢.
pomelowu 2006-05-25
  • 打赏
  • 举报
回复
使用的编译环境不一样,类库不一样吧。

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧