轨道
/
C++
C++
/
练习
/
自由职业者费率
自由职业者费率

自由职业者费率

学习练习

简介

C++ 内置的数字类型可以分为整数和浮点数。 整数是不带小数部分的数,例如0、691或-2。 浮点数是带小数点的数,例如6.02214076、0.1或-1.616。

整数

下面的例子展示了四个不同变量的声明和初始化

int m_morales{9241};              // base 10: 0-9
int a_apaec{0x24CD};              // base 16: 0-9 and A-F
int m_gargan{0b10010000011001};   // base  2: 0-1
int b_reilly{022031};             // base  8: 0-7
                                  // Leading with a 0 not the letter o.

给int变量赋值时,可以直接使用字面量。 字面量是像9241这样硬编码的数字。 针对不同的进制表示,有不同类型的整数字面量。 十进制整数字面量最常见,使用0到9这些数字。 加上特殊的前缀,比如0x,就可以使用其他进制。 上面的例子展示了数字9241的四种表示形式及对应的前缀。 所有变量都被初始化为同一个值。

想进一步了解各种进制表示法,可以看看这篇小教程。

你可以用撇号分隔数字,让代码更易读。 9'241与0b0100'100'0001'1001或92'4'1是同一个值。

浮点数

浮点数字面量有两种写法。 除了直观的0.0024,还可以使用它的科学计数法写法2.4e-3。 最常见的浮点类型是double。

算术

C++ 支持用+、-、*、/、(、)和%来构成表达式。 两个整数之间进行运算,结果也是整数。 5 / 2会返回2。 当参与运算的类型中有一个是浮点类型时,结果也会是浮点数。 5.0 / 2和5 / 2.0会返回2.5。 %是求模运算符,会返回整数除法的余数:5%3的结果是2。

赋值运算符

赋值运算符用字面量给变量赋值。 赋值总是从右向左进行,绝不会反过来。

int length = 5;
int width = 2;
length = width;

这里整数5被赋给变量length。 接着整数2被赋给变量width。 最后width的值被复制到变量length,原来的值5就丢失了。 还要注意,我们只是在赋值操作发生的那一刻把width的值赋给length。 因此,如果width的值之后发生变化,并不会影响length的值。

赋值运算符可以与其他运算符(算术运算符和位运算符)组合使用,这就是所谓的compound assignment运算符,包括+=、-=、*=、/=、%=。 这些运算符会先对变量的当前值执行一次运算,然后再修改它。

// we start with 0 people
int people{};
// we need 0 eggs
int eggs{};
// two people joined:
people += 2;
// people is now 2
// let's add 3 eggs per person
eggs += 3 * people;
// eggs is now 6

变量people和eggs被初始化为0。 然后,我们把整数2加到变量people原有的值0上,再赋值回people。 现在people变成了2。 接着,我们给每人加3个鸡蛋,总共就是6个鸡蛋。 现在把6加到变量eggs原有的值0上,再赋值回eggs。 现在eggs就是6了。 等价的表达式是people = people + 2和eggs = eggs + (3 * people)。

说明

在这个练习中,你将编写代码,帮助一位自由职业者与项目经理沟通。 你的任务是提供几个工具,用来快速计算日薪和月薪,并且可以选择性地应用给定的折扣。

我们先约定自由职业者和项目经理之间的几条规则:

  • 日薪是时薪的 8 倍。
  • 一个月有 22 个可计费工作日。

有时,自由职业者会愿意在日薪上给出折扣(例如针对最忠实的客户或非营利客户)。

折扣用表示百分比的小数来建模,例如25.0(25%)。

1. 根据时薪计算日薪

实现一个名为daily_rate的函数,接收时薪作为形参,计算日薪。 约定中规定一天有 8 个可计费工时。

daily_rate(60)
// => 480.0

返回的日薪应该是double类型。

2. 计算折扣后的价格

实现一个apply_discount函数,用来计算打折后的价格。 它应该接收两个形参:原价和以百分比表示的折扣。

apply_discount(150, 10)
// => 135.0

返回值应始终是double类型,不要做任何取整。

3. 根据时薪和折扣计算月薪

实现一个monthly_rate函数,用来计算折扣后的月薪。 它应该有两个形参:时薪和以百分比表示的折扣。

monthly_rate(77, 10.5)
// => 12130

返回的月薪应该向上取整(取上限)到最接近的整数。

4. 根据预算、时薪和折扣计算完整的工作日天数

实现一个days_in_budget函数,接收预算、时薪和折扣,计算出这些预算能覆盖多少个完整的工作日。

days_in_budget(20'000, 80, 11.0)
// => 35

返回的天数应该向下取整(取下限)到最接近的整数。

通过 GitHub 编辑 链接将在新窗口或新标签页中打开
C++ Exercism

准备好开始 自由职业者费率 了吗?

注册 Exercism,借助 19 个概念100 个练习 和真人导师指导,学习并掌握 C++,全部免费。