用C编了个数学算法程序,移植到MFC后结果就不对了,为什么? 难道常用数学符号被重载了???

解决方案 »

  1.   

    是一个通过插值求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();}
      

  2.   

    这里要求用户输入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;
     }
         ....
      

  3.   

    你的程序代码不能用到MFC中,因为MFC不支持printf,scanf这些用法,如果要用在vc++中的话,请在建立工程的第一步是选择win32 Application或者win30 Console Application。
      

  4.   

    关键是编译环境不一样,MFC有它自己的一套方法
      

  5.   

    你的程序代码不能用到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;
     }