我怎么把它分成两个函数

How can I separate this into 2 functions

本文关键字:两个 函数      更新时间:2023-10-16

我想知道是否有人可以帮助我用一种更优雅的方式来编写我正在编写的这个程序。我所拥有的代码如下,我想知道是否有一种方法可以将打印出总数的部分分离成一个新的功能。我试过了,但我总是得到的总数是0,所以我一定是传递错了什么。

void printNumbers(int x, double y, double z, double v, int sum, double sum2,int sum3,int sum4){
while(x != 0){
    y = sqrt (x);
    z = pow (x,2);
    v = pow (x,3);
    sum = sum + x;
    sum2 = sum2 + y;
    sum3 = sum3 + z;
    sum4 = sum4 + v;
    cout << "       " << x << setw(12)  << setprecision (4) << y << setw(8) << z <<   setw(8) << v << endl;
    x--;
}
cout << "       total is" << sum << setw(12) << sum2 << setw(8)<< sum3 << setw(8) << sum4 <<    endl;
}

这是我尝试过的,当时我只有一个总要得到,但它仍然没有工作,只是给出了答案0:

void printFooters(int sum){
cout << " " << "====================================="<< endl;
   cout << "Totals " << sum << endl << endl;
cout << " " << "====================================="<< endl;
}

这是我在main()中调用它的方式:

printFooters(sum);

如果你想更新这些总和,你需要把它们变成引用。

void printNumbers(int x, double y, double z, double v, int& sum, double& sum2,int& sum3,int&  sum4)

如果你不这样做,总和是按值传递的,所以你只会得到当前总和值的副本。

或者,您可以使用指向和的指针,但这需要在访问sum变量时改变语法。

您应该首先决定哪些变量是输入,哪些变量应该进行输出。尽量不要在输入和输出中同时使用一个变量,这往往比有价值更令人困惑。

只有输入值是x,其他都是输出值。在您使用这些值的方式中,值的内容仅在函数printNumbers()内部的本地复制中被修改。它们会在功能结束时迷失方向。我希望你想从函数输出计算结果(然而,printNumbers是该函数的错误名称)。

C和c++总是按值传递变量给函数形参。这意味着,变量是从参数初始化的,但任何更改都只在函数内部完成。在函数结束时,copy将被丢弃,并且不会改变你传递给它的任何内容。

如果你想从函数中得到输出,你可以使用return,或者使用指向变量的指针或引用。我建议在c++中使用引用,它们更容易理解,更容易使用。

在函数中使用引用而不是复制变量。然后,当你在函数内部修改该值时,它将在函数返回后保留修改后的值。

void f1(int in, int out)
{
  out = in + 1;
}
void f2(int in, int &out)
{
  out = in + 1;
}
int o1=-1, o2=-1;
f1(1, o1);
f2(1, o2);
cout << o1 << "," << o2 << endl; // will print -1,2

所以声明你的函数为:void printNumbers(int x, double &y, double &z, double &v, int ∑ double &sum2,int &sum3,int &sum4);

你可以这样做:

double y,z;
int sum, sum2, sum3, sum4;
printNumbers(4, y, z, sum, sum2, sum3, sum4);
printFooters(sum);

这一次,它应该输出printNumbers计算的值。请参阅http://www.cprogramming.com/tutorial/references.html了解更多信息,或使用google。

您可以将所有这些参数批处理到结构中,并将所有计算和输出分开。
在您的情况下,这可能是多余的,并且是相当多的代码,但无论如何…

struct Powers
{
    double sqroot;
    int one;
    double square;
    double cube;
};
Powers calculatePowers(int x)
{
    Powers powers;
    powers.sqroot = sqrt(x);
    powers.one = x;
    powers.square = x * x;
    powers.cube = x * x * x;
    return powers;
}
struct Sums
{
    int sum1;
    double sum2;
    int sum3;
    int sum4;
};
Sums addPowers(Sums sums, Powers powers)
{
    sums.sum1 += powers.one;
    sums.sum2 += powers.sqroot;
    sums.sum3 += powers.square;
    sums.sum4 += powers.cube;
    return sums;
} 
void printPowers(Powers powers)
{
        cout << "       " << powers.one 
             << setw(12)  << setprecision (4) << powers.sqroot 
             << setw(8)   << powers.square
             << setw(8)   << powers.cube 
             << endl;    
}
void printTotals(Sums sums)
{
    cout << "       total is" 
         << sums.sum1 
         << setw(12) << sums.sum2 
         << setw(8)  << sums.sum3 
         << setw(8)  << sums.sum4 
         << endl;    
}
void doEverything(int x)
{
    Sums sums = {0, 0, 0, 0};
    while (x > 0)
    {
        Powers powers = calculatePowers(x);
        printPowers(powers);
        sums = addPowers(sums, powers);
        x--;
    }
    printTotals(sums);
}