简介
基础知识
C++ 学习之旅从变量、函数调用和注释开始。
注释
注释分为单行注释和多行注释。// 之后同一行中的所有内容都会被编译器忽略。多行注释也称为 C 风格注释,用 /* 和 */ 包围,二者之间的内容同样会被忽略。
变量
C++ 是有类型的语言。所有类型都必须在编译时确定,而且通常需要显式声明。变量的类型不能改变。可以像下面这样声明一个名为 years 的整数变量:
int years;
声明变量时同时初始化是良好的编程习惯。C++ 提供了多种初始化方式,其中花括号形式更符合现代 C++ 的风格,等号形式也很常见。
int tomatoes{80};
int potatoes = 40;
注意:始终初始化变量 C++ 可能允许你写出使用未初始化变量的代码,但在明确赋值之前,不能依赖它的值。为了避免先使用后赋值及由此产生的未定义行为,应当始终初始化变量。未定义行为可能使程序在此前看似正常运行后,突然在最糟糕的时刻崩溃。务必避免依赖未定义行为。
算术运算
*、+、- 等算术运算符可以组成表达式,例如 3 * 2 或 tomatoes + potatoes。
更新变量
只要保持变量的类型不变,就可以重新赋值:
tomatoes = tomatoes - 5; // tomatoes is now 75
potatoes = (32 * 2) + 11; // potatoes is now 75 as well
函数
函数具有名称、返回类型和参数列表,参数列表也可以为空。下面的 always_fortyseven 函数始终返回 47:
int always_fortyseven() {
return 47;
}
下面是接收一个参数的 vip_fee 函数:
int vip_fee(int standard_fee) {
/*
vip_fee calculates the vip fee based on the standard_fee.
*/
int vip_multi{3};
return standard_fee * vip_multi;
}
下面的 total_fee 接收三个参数,并调用另一个函数:
int total_fee(int vips, int adults, int kids) {
/*
total_fee calculates the total price for a group of VIP and adult guests with kids.
Kids get a flat discount on the standard fee.
VIP guest fees are calculated by calling vip_fee.
*/
int standard_fee{30};
int kids_discount{15};
int kids_total_fee = kids * (standard_fee - kids_discount);
int vips_total_fee = vips * vip_fee(standard_fee);
int adult_total_fee = adults * standard_fee;
return vips_total_fee + adult_total_fee + kids_total_fee;
}
与某些语言不同,C++ 函数不会自动返回最后一条语句的值。需要返回值时,必须使用 return 关键字。
空白与格式
空白用于组织源代码,包括空格、制表符和换行。编译器通常忽略不影响语义的多余空白,因此可以用它们整理代码结构。恰当地使用空白有助于提高可读性。代码格式有多种规范,它们属于约定,而不是编译器强制执行的规则。
// Formatting makes it easier to find bugs
int eggs_yolks = 3;
int yeast = 15;
int flour=500;int sugar=200;// compact, but difficult to read
任务说明
卢西安的女朋友正在回家的路上,他却还没有做好纪念日晚餐!
本练习需要编写代码,帮助卢西安按照他最喜欢的食谱制作一份精致的千层面。
你需要完成四个任务,都与千层面的制作时间有关。
1. 定义预计烘烤时间,单位为分钟
定义不接收参数的 ovenTime() 函数,返回千层面应在烤箱中烘烤多少分钟。食谱规定的预计烘烤时间是 40 分钟:
ovenTime();
// => 40
2. 计算剩余烘烤时间,单位为分钟
定义 remainingOvenTime(int actualMinutesInOven) 函数。参数表示千层面已经烘烤的分钟数。根据上一任务中的预计烘烤总时间,返回还需烘烤多少分钟。
remainingOvenTime(30);
// => 10
3. 计算准备时间,单位为分钟
定义 preparationTime(int numberOfLayers) 函数。参数表示千层面的层数。假设准备每层需要 2 分钟,返回准备这些层一共花费的分钟数。
preparationTime(2);
// => 4
4. 计算已用总时间,单位为分钟
定义 elapsedTime(int numberOfLayers, int actualMinutesInOven) 函数。第一个参数表示千层面的层数,第二个参数表示已经烘烤的分钟数。函数返回截至目前制作千层面花费的总时间,即准备时间与已经烘烤时间之和。
elapsedTime(3, 20);
// => 26