如何将其分为2个功能

时间:2013-04-18 11:43:41

标签: c++

我想知道是否有人可以用更优雅的方式帮助我编写我正在写的这个程序。我的代码如下所示,我想知道是否有办法将打印出总数的部分分成新的函数。我已经尝试了,但我总是得到总数是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);

3 个答案:

答案 0 :(得分:4)

如果您希望更新它们,则需要将总和作为参考。

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

如果你没有按值传递总和,那么你只需获得总和的当前值的副本。

或者,您可以使用指向和的指针,但这将涉及在访问和变量时更改语法。

答案 1 :(得分:0)

您应该首先决定输入什么变量以及哪些变量应该输出。尽量不要将一个变量用于输入和输出,它通常比有价值的更令人困惑。

仅输入值为x。其他一切都是输出值。在使用该值的过程中,仅在函数printNumbers()内的本地副本中修改值的内容。他们会在功能结束时迷路。我希望你想从函数输出计算结果(但是printNumbers是该函数的错误名称)。

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

如果要从函数输出,可以使用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&amp; y,double&amp; z,double&amp; v,int&amp; sum,double&amp; sum2,int&amp; sum3,int&amp; 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。

答案 2 :(得分:0)

您可以将所有这些参数分组到结构中,并将所有计算和输出分开 在你的情况下,这可能有点过头了,并且是相当多的代码,但无论如何......

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);
}