我的代码假设计算工资的5%和工资的10%。在编制时,结果是5%的计算权,但我认为10%是在10%的基础上增加5%。我该如何解决这个问题?
#include <cstdlib>
#include <iostream>
using namespace std;
void fivePercentRaise(double &);
void tenPercentRaise(double &);
int main()
{
double salary = 0.0;
cout << "Please enter current salary: ";
cin >> salary;
fivePercentRaise(salary);
tenPercentRaise(salary);
system("pause");
return 0;
}
void fivePercentRaise(double & sal)
{
sal = sal * 0.05 + sal;
cout << "New salary if you receive a 5% raise: " << sal << endl;
}
void tenPercentRaise(double & sal)
{
sal = sal * 0.10 + sal;
cout << "New salary if you receive a 10% raise: " << sal << endl;
}
答案 0 :(得分:3)
您的代码是:
fivePercentRaise(salary);
tenPercentRaise(salary);
这些功能通过引用salary
并在原地修改它来工作。所以你确实计算了5%的加注,然后计算了10%加注(复合)。
您有几个选择:
salary
之前保存fivePercentRaise
的值,然后将其还原更常规的设计是你的函数执行加注,然后调用代码执行输出。如果你想在另一个你不想打印发生的事情的场景中应用5%加注,你就不需要修改这个功能。
答案 1 :(得分:1)
你按顺序加注两次。
假设100美元薪水:
5%提高:105
10%上调(105):115.50
答案 2 :(得分:1)
问题的原因是函数声明:
void tenPercentRaise(double & sal)
当您使用&
的引用时,您将修改用于调用该函数的变量。
请阅读&#34;通过参考&#34;并且&#34;传递价值。&#34;理解这种区别,修复功能应该很简单。
答案 3 :(得分:0)
问题在于,您要告诉您的功能(&#39; fivePercentRaise()&#39; tenPercentRaise()&#39;)通过引用获取输入变量,工资而不是价值。当你告诉函数通过引用获取变量时,&#39; fivePercentRaise()&#39;会提高存储在价值&#39;工资中的价值。减少5%。然后你将同一个变量传递给&#39; tenPercentRaise()&#39;谁高兴地提高同样的薪水&#39;变量为10%。
删除预处理器指令和函数定义中的&符号。