Anonymous
Anonymous asked in 電腦與網際網路程式設計 · 1 decade ago

請問此C++程式碼要如何更改才能執行

以下是我的程式碼,請問各位大大們,我要如何修改它們,才能在DEV-c++裡執行呢?拜託各位了.

#define TRUNC(x)(((x)>=0) ? floor(x) : ceil(x))

#define C_FPREM (_finite(f[0]/f[1]) ? f[0]-(TRUNC(f[0]/f[1])*f[1]) : f[0]/f[1])

#define C_F2XM1 (((fabs(f[0])<=1) && (!_isnan(f[0]))) ? (pow(2,f[0])-1) : ((!_finite(f[0]) && !_isnan(f[0]) && (f[0]<0)) ? -1 : f[0]))

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#include <time.h>

float main(float v[])

{

long double f[8];

long double tmp = 0;

int cflag = 0;

v[0]=v[1]=v[2]=v[3]=v[4]=v[5]=2;

f[0]=f[1]=f[2]=f[3]=f[4]=f[5]=f[6]=f[7]=0;

f[0]-=0.002621650695800781f;

f[0]+=f[0];

f[0]-=v[1];

f[0]+=0.1756083965301514f;

f[0]*=-0.2360081672668457f;

f[0]*=v[3];

f[0]*=v[2];

f[0]/=v[1];

f[0]/=v[3];

f[0]+=-0.2360081672668457f;

f[0]=cos(f[0]);

f[0]+=f[0];

f[0]-=v[1];

f[0]*=v[3];

f[0]*=f[0];

f[0]=sqrt(f[0]);

f[0]*=v[4];

f[0]*=v[2];

f[0]/=v[1];

f[0]/=v[1];

f[1]+=f[0];

f[0]/=v[5];

f[0]+=v[2];

f[0]*=v[2];

f[0]*=-0.2360081672668457f;

f[0]=cos(f[0]);

f[0]*=f[0];

f[0]*=1.048232078552246f;

f[0]=sin(f[0]);

f[0]+=f[0];

f[0]+=f[0];

f[0]-=f[1];

f[0]-=v[1];

f[0]+=0.1756083965301514f;

f[0]*=-0.2360081672668457f;

f[0]*=v[3];

f[0]*=v[2];

f[0]/=v[1];

f[0]/=v[3];

if (!_finite(f[0])) f[0]=0;

return f[0];

}

1 Answer

Rating
  • 1 decade ago
    Favorite Answer

    這程式有些問題:

    1. 標準的 main 只能傳入 int, char*[],

     有的非標準還可再傳一個 char *[]。

    2. 標準的 main 只能傳回 int 或 void (不建議),

     你卻傳回 float!

    由 1. 和 2.,建議你要另外設一個函數。

    而且,下述的 3. 也讓你不能在有支援 float main(float []) 下這樣寫!

    3. 你的 v[] 多大根本不知道,

     只用了 v[1] ~ v[5],卻在副程式中把 v[0] ~ v[5]全都給了 2 當初值!

     所以,v[] 完全沒有傳入的必要!(除非你想用它改變 v[0]~v[5] 為 2)

    4. 你宣告了 f[8],卻只用了 f[0], f[1]!宣告建議改成 f[2]。

    5. 你 f 宣告成 long double,卻用 float 去給值!

     建議把 常數尾端的 f 去掉!

    6. 你的傳回型態宣告為 float,卻用 long double 傳回!

     這只有你才搞得清楚是怎麼回事!

    7. 你定義的三個 macro 都沒有用到!

    8. 你沒用到 time.h stdio.h, stdlib.h 裡的東西,不需要引入。

    我能改的部份,改完後程式如下:(執行結果:0.131339)

    #include <math.h>

    #define TRUNC(x) (((x)>=0) ? floor(x) : ceil(x))

    #define C_FPREM (_finite(f[0]/f[1]) ? f[0]-(TRUNC(f[0]/f[1])*f[1]) : f[0]/f[1])

    #define C_F2XM1 (((fabs(f[0])<=1) && (!_isnan(f[0]))) ? (pow(2, f[0] )-1) : ((!_finite(f[0]) && !_isnan(f[0]) && (f[0]<0)) ? -1 : f[0]))

    float calculation(float v[])

    { long double f[2];

    v[0] = v[1] = v[2] = v[3] = v[4] = v[5] = 2.f;

    f[0] = f[1] = 0.;

    f[0] -= 0.002621650695800781;

    f[0] += f[0];

    f[0] -= v[1];

    f[0] += .1756083965301514;

    f[0] *=-0.2360081672668457;

    f[0] *= v[3];

    f[0] *= v[2];

    f[0] /= v[1];

    f[0] /= v[3];

    f[0] += -0.2360081672668457;

    f[0] = cos(f[0]);

    f[0] += f[0];

    f[0] -= v[1];

    f[0] *= v[3];

    f[0] *= f[0];

    f[0] = sqrt(f[0]);

    f[0] *= v[4];

    f[0] *= v[2];

    f[0] /= v[1];

    f[0] /= v[1];

    f[1] += f[0];

    f[0] /= v[5];

    f[0] += v[2];

    f[0] *= v[2];

    f[0] *=-.2360081672668457;

    f[0] = cos(f[0]);

    f[0] *= f[0];

    f[0] *= 1.048232078552246;

    f[0] = sin(f[0]);

    f[0] += f[0];

    f[0] += f[0];

    f[0] -= f[1];

    f[0] -= v[1];

    f[0] += .1756083965301514;

    f[0] *=-.2360081672668457;

    f[0] *= v[3];

    f[0] *= v[2];

    f[0] /= v[1];

    f[0] /= v[3];

    if (!_finite(f[0])) f[0] = 0.;

    return f[0];

    }

    #include <stdio.h>

    #include <stdlib.h>

    int main(void)

    { float v[6];

    printf("%f\n", calculation(v));

    system("pause");

    return 0;

    }

Still have questions? Get your answers by asking now.