我在为一个类编译代码时遇到了麻烦.... 这是我遇到麻烦的地方
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");
}
答案 0 :(得分:4)
math.abs
math
不是对象,它是库的名称。
该功能只是std::abs
(如果你包含<cmath>
)或abs
(如果你包含<math.h>
)。您只需要包含两个标题中的一个。
您的程序还有其他一些问题。数组的大小必须是C ++中的编译时常量,因此a
,b
和c
的声明无效。做你想做的最简单的方法是使用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];