我怎么把它分成两个函数
How can I separate this into 2 functions
我想知道是否有人可以帮助我用一种更优雅的方式来编写我正在编写的这个程序。我所拥有的代码如下,我想知道是否有一种方法可以将打印出总数的部分分离成一个新的功能。我试过了,但我总是得到的总数是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);
}
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 两个函数模板候选项.将一个参数作为引用后,选择不太专业的模板
- 如何比较两个函数的速度和性能
- 如何在构造器的成员初始值设定项列表中调用两个函数?
- 如何将这两个函数组合成一个实现?
- 将具有相反操作数的两个函数重构为一个
- 创建整数的 2D 数组,该数组将使用两个函数用随机数填充矩阵.我做错了什么?
- 具有相同主体的两个函数具有不同的名称
- 通过作为类的公共成员的两个函数将函数作为参数传递
- 如何使用排序和比较这两个函数在 c++ 中对字符数组进行排序?
- 是否可以在C++中将两个函数一起添加
- C++ 两个函数除了一行之外执行相同的操作
- 如何编写连接两个函数的函数
- 如何执行两个函数参数具有相同的模板类型
- 当两个函数位于一行中时,堆栈框架的样子
- 为什么这两个函数的行为不同
- 为什么当我有两个函数时编译器没有显示错误,一个将采用基类,一个将派生类作为参数
- 系统堆栈中的两个函数的递归调用(将不同数量的数组作为参数传递)有什么区别
- 如何在一个构造函数中使用两个可变参数模板参数来绑定两个函数
- 如何在c++中的两个函数中传递对象的同一实例