编译问题数学库c ++

时间:2011-03-31 03:41:29

标签: c++

我在为一个类编译代码时遇到了麻烦.... 这是我遇到麻烦的地方

 aavg=0; int count=0;
    for(int i=0; i<num;i++)
    {
    if ((math.abs(a[i])<25.0)
    {
 count++;
 aavg+=a[i];                            
     }
     } 
 aavg=aavg/count;
 cout << "The average a value in range, absolute value of a is less than 25.0 is: "<< aavg <<endl;

这是我的整个计划

 #include <iostream>
    #include <fstream>
    #include <math.h>
    #include <cmath>
    using namespace std;
    int main (void)
    {
        ifstream input ("measurements");
        int num=0;
        input >> num;
        float a[num];
        float b[num];
        float c[num];
        for(int i=0; i<num;i++)
        input >> a[i] >> b[i] >> c[i];
        //All DATA IN
        //Do A AVERAGE
        float aavg =0;
        for(int i=0; i<num;i++)
        aavg+=a[i]; 
        aavg=aavg/num;
        cout << "A average: " << aavg <<endl;
        //DO SMALLEST B
        float smallb=b[0];
        for(int i=1; i<num; i++)
        if(smallb>b[i])
        smallb=b[i];
        cout <<"Smallest b: " <<smallb <<endl;
        //PRINT ALL GISMO NUMBERS WHERE "a+c<60.0
            for(int i=0; i<num;i++)
            if((a[i]+c[i])<60.0)
         cout <<"Gismo number " <<i <<" has a and c values that total less than 60" <<endl;
        //PRINT SMALLEST C VALUE BETWEEN 25.0 AND 50.0
          float smallc=51;
          for(int i=0; i<num;i++)  
          if((25.0<c[i])&&(c[i]<50))
          if(smallc>c[i])
          smallc=c[i];
          if(smallc>50)
          cout <<"No values in range" <<endl;
          else
          cout <<"Smallest c in range was: "<<smallc <<endl;
          //LAST PART! woot!
          aavg=0; int count=0;
        for(int i=0; i<num;i++)
        {
        if ((math.abs(a[i])<25.0)
        {
     count++;
     aavg+=a[i];                            
         }
         } 
     aavg=aavg/count;
     cout << "The average a value in range, absolute value of a is less than 25.0 is: "<< aavg <<endl;
     //system("PAUSE");
    }

2 个答案:

答案 0 :(得分:4)

math.abs

math不是对象,它是库的名称。

该功能只是std::abs(如果你包含<cmath>)或abs(如果你包含<math.h>)。您只需要包含两个标题中的一个。


您的程序还有其他一些问题。数组的大小必须是C ++中的编译时常量,因此abc的声明无效。做你想做的最简单的方法是使用std::vector<float>std::vector是一个可以在运行时调整大小的容器。

虽然您的程序可以作为学习练习,但您应该始终检查任何输入操作以确保它成功。如果“测量”文件中的第一件事是Hello,则第一次提取将失败。 num将保持0,您的程序将不会读取任何进一步的输入,您最终将除以零(aavg=aavg/num;)。您可以在the answers to another question中找到有关流错误标志以及如何正确检查输入操作结果的更多信息。

答案 1 :(得分:0)

你有两个问题。你强调的是表达式:

math.abs(a[i])

你想要的只是:

fabs(a[i])

另一个是使用非const num作为数组大小。这不合法。您需要动态分配的数组:

float* a = new float[num];