7-24练习 测试
/*
1.根據(jù)公式計(jì)算y的值。
?? ?其中∑表示求各項(xiàng)的和,
?? ?∏表示求各項(xiàng)的積。
定義一個(gè)類F,實(shí)現(xiàn)上述功能。具體要求如下:
(1)私有數(shù)據(jù)成員
?? ??? ?double x[5]:?? ??? ?//存放xi(i = 1,2,3,4,5)的值,xi不能為0。
?? ??? ?int n,k,h:?? ??? ?//公式中對(duì)應(yīng)的變量,n不能為0。
?? ??? ?double y:?? ??? ??? ?//存放計(jì)算結(jié)果。
(2)公有成員函數(shù)
?? ??? ?F(double a[], int _n, int _k, int _h):?? ??? ?//構(gòu)造函數(shù),分別初始化x、n、k、h。
?? ??? ?void calc():?? ??? ??? ??? ??? ??? ??? ??? ?//根據(jù)公式計(jì)算y的值。
(3)友元函數(shù)
?? ??? ?void print(F f):輸出對(duì)象f所有數(shù)據(jù)成員。
(4)在主函數(shù)中對(duì)該類進(jìn)行測(cè)試。
測(cè)試數(shù)據(jù)
xi取3.2、 - 2.5、 - 4.2、3.6、5.2,
n取5,
k取3,
h取4,
測(cè)試結(jié)果y = 2.59513×1040。
注意公式中用到的函數(shù)(乘方、對(duì)數(shù)、絕對(duì)值、平方根)
請(qǐng)?jiān)陬^文件math.h中查找。
正確的輸出結(jié)果如下:
3.2 - 2.5 - 4.2?? ?3.6?? ??? ?5.2
5?? ??? ?3?? ??? ?4
2.59513e+040
*/
#include <iostream>
#include <windows.h>
#include <math.h>
using namespace std;
class F
{
private:?? ??? ??? ??? ?//(1)私有數(shù)據(jù)成員
?? ?double x[5];?? ??? ?//存放xi(i = 1,2,3,4,5)的值,xi不能為0。
?? ?int n;
?? ?int k;
?? ?int h;?? ??? ??? ??? ?//公式中對(duì)應(yīng)的變量,n不能為0。
?? ?double y;?? ??? ??? ?//存放計(jì)算結(jié)果。
public:?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?//(2)公有成員函數(shù)
?? ?F(double a[], int _n, int _k, int _h);?? ??? ?//構(gòu)造函數(shù),分別初始化x、n、k、h。
?? ?void calc();?? ??? ??? ??? ??? ??? ??? ??? ?//根據(jù)公式計(jì)算y的值。
?? ?//(3)友元函數(shù)
?? ?friend void print(F f);?? ??? ??? ??? ??? ??? ?// 輸出對(duì)象f所有數(shù)據(jù)成員。
};
F::F(double a[], int _n, int _k, int _h)
{
?? ?for (int i = 0; i < 5; i++)
?? ?{
?? ??? ?x[i] = a[i];
?? ?}
?? ?n = _n;
?? ?k = _k;
?? ?h = _h;
}
void F::calc()
{
?? ?double sum = 1;
?? ?double sum2 = 0;//一開始我用的1 不好意思,忘記是加了
?? ?for (int i = 0; i < n; i++)
?? ?{
?? ??? ?sum *= pow(x[i], k)*log( fabs(x[i]) );
?? ?}
?? ?for (int i = 0; i < n; i++)
?? ?{
?? ??? ?sum2 += pow(x[i], h);
?? ?}
?? ?sum = sum / sum2;
?? ?for (int i = 0; i < n; i++)
?? ?{
?? ??? ?sum2 += sqrt( fabs(x[i]) );
?? ?}
?? ?sum2 = sum2 / n;
?? ?y = pow((sum - sum2) , (k + h));
}
void print(F f)
{
?? ?cout << "a[] = " << endl;
?? ?for (int i = 0; i < 5; i++)
?? ?{
?? ??? ?cout << f.x[i] << " ?" << endl;
?? ?}
?? ?cout << "h = " << f.h << " ?" << endl;
?? ?cout << "n = " << f.n << " ?" << endl;
?? ?cout << "k = " << f.k << " ?" << endl;
?? ?cout << "y = " << f.y << " ?" << endl;
}
int main()
{
?? ?double x[5] = { 3.2, -2.5, -4.2, 3.6, 5.2 };
?? ?F f1(x,5,3,4);
?? ?f1.calc();
?? ?print(f1);
?? ?system("pause");
?? ?return 0;
}
總結(jié)
- 上一篇: 7月24日 学习笔记
- 下一篇: 7-25日牛客网刷题 未知点、错题 集合