根据公式计算y的值。其中∑表示求各项的和,∏表示求各项的积。定义一个类F,实现上述功能。具体要求如下:
(1)私有数据成员
double x[5]:存放xi(i=1,2,3,4,5)的值,xi不能为0。
int n,k,h:公式中对应的变量,n不能为0。
double y:存放计算结果。
(2)公有成员函数
F(double a[], int _n, int _k, int _h):构造函数,分别初始化x、n、k、h。
void calc():根据公式计算y的值。
(3)友元函数
void print(F f):输出对象f所有数据成员。
(4)在主函数中对该类进行测试。测试数据xi取3.2、-2.5、-4.2、3.6、5.2,n取5,k取3,h取4,测试结果y=2.59513×1040。注意公式中用到的函数( 乘方、对数、绝对值、平方根)请在头文件math.h中查找。正确的输出结果如下:
3.2 -2.5 -4.2 3.6 5.2
5 3 4
2.59513e+040
// class3_1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
#include<math.h>
using namespace std;
class F;
class F1
{
public:
void print(F f);
};
class F
{
public:
F(double a[], int _n, int _k, int _h)
{
int i;
for(i=0;i<5;i++)
{
x[i]=a[i];
}
n=_n;
k=_k;
h=_h;
} ;//:构造函数,分别初始化x、n、k、h。
void calc();//:根据公式计算y的值。
friend void F1::print(F f);
private:
double x[5];
double y;
int n,k,h;
};
void F::calc()
{
double mul=1,sum=0;
double fsum=0;
int i;
double xk[5],xh[5];
xh[0]=1;
xk[0]=1;
for(i=0;i<5;i++)
{
sum+=pow(x[i],h);
mul*=pow(x[i],k)*log(fabs(x[i]));
}
for(i=0;i<n;i++)
{
fsum+=sqrt(fabs(x[i]));
}
fsum=(0.2)*fsum;
y=pow(mul/sum+fsum,k+h);
}
void F1::print(F s)
{
int i;
s.calc();
cout<<"y= "<<s.y<<endl;
cout<<" n:"<<s.n<<" k:"<<s.k<<" h:"<<s.h<<endl;
for(i=0;i<5;i++)
{
cout<<s.x[i]<<" ";
}
cout<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
double xi[5]={ 3.2,-2.5,-4.2,3.6,5.2};
F f(xi,5,3,4);
F1 f1;
f1.print(f);
return 0;
}