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)。
在这个练习中,你将编写代码,帮助一位自由职业者与项目经理沟通。 你的任务是提供几个工具,用来快速计算日薪和月薪,并且可以选择性地应用给定的折扣。
我们先约定自由职业者和项目经理之间的几条规则:
有时,自由职业者会愿意在日薪上给出折扣(例如针对最忠实的客户或非营利客户)。
折扣用表示百分比的小数来建模,例如25.0(25%)。
实现一个名为daily_rate的函数,接收时薪作为形参,计算日薪。
约定中规定一天有 8 个可计费工时。
daily_rate(60)
// => 480.0
返回的日薪应该是double类型。
实现一个apply_discount函数,用来计算打折后的价格。
它应该接收两个形参:原价和以百分比表示的折扣。
apply_discount(150, 10)
// => 135.0
返回值应始终是double类型,不要做任何取整。
实现一个monthly_rate函数,用来计算折扣后的月薪。
它应该有两个形参:时薪和以百分比表示的折扣。
monthly_rate(77, 10.5)
// => 12130
返回的月薪应该向上取整(取上限)到最接近的整数。
实现一个days_in_budget函数,接收预算、时薪和折扣,计算出这些预算能覆盖多少个完整的工作日。
days_in_budget(20'000, 80, 11.0)
// => 35
返回的天数应该向下取整(取下限)到最接近的整数。