利息与循环

概念学习C++17

简介

循环

循环用于重复执行某段逻辑。最常见的是 while 循环,通常用于次数不确定的重复,以及 for 循环,通常用于次数明确的重复。还有一种逐元素循环,后续概念会介绍。

基本语法

for 循环由循环头和花括号包围的循环体组成。循环头有三部分,以分号 ; 分隔:初始化语句、条件和另一条表达式。每部分都可以为空。

for (init_statement; condition; expression) {
  some_statement;
}
  • 初始化语句:在循环开始前执行一次。
  • 条件:求值结果可以转换为布尔值,用来决定何时停止。只要为 true 就执行循环体;变为 false 后不再进入下一次循环。
  • 表达式:在每次循环结束时执行。

while 在条件为 true 时执行循环体。下面的示例展示了如何把一个 for 循环改写为 while。

init_statement;
while(condition) {
    some_statement;
    expression;
}

补充:递增与递减

使用循环时,经常需要给记录循环次数的计数变量加 1 或减 1。这种操作很常见,因此有专用运算符 ++ 和 --。

它们都有前缀和后缀形式。前缀形式在当前表达式使用该值前修改变量,后缀形式则先产生原值,再修改变量。多数只需要递增本身的场合可以使用前缀形式。

int a{3};
int b{--a};
// b is 2, a is now 2
int c{a++};
// c is 2, a is now 3

for 循环示例

初始化部分通常设置计数变量,条件部分决定继续还是停止,而末尾的表达式通常在每次重复结束时递增计数变量。

int sum{0};
for (int i{1}; i < 10; ++i) {
  sum += i;
}

这个循环会累加从 1 到 9 的数字,包括 9。

break 与 continue

在循环体内,可以用 break 直接结束整个循环:

int sum{2};
while(true) {
    sum *= 2;
    if (sum > 1000)
        break;
}
// sum is now 1024

continue 只停止当前这一次循环体的剩余部分,随后进入下一次循环:

int equal_sum{0};
for (int i{1}; i < 7; ++i) {
  if  (i%2 == 1) {
    continue;
  }
  equal_sum += i;
}
// equal_sum is now 12

注意 少用或不用 break 和 continue,有时更容易理解循环逻辑。这两个关键字会跳过代码的某些部分,过多使用可能使执行流程更难跟踪。

任务说明

本练习处理储蓄账户。每年,账户余额都会按利率更新。银行提供的利率取决于账户中的金额,即余额:

  • 余额小于 0:利率为 3.213%,余额会变得更负。
  • 余额大于或等于 0 且小于 1000:利率为 0.5%。
  • 余额大于或等于 1000 且小于 5000:利率为 1.621%。
  • 余额大于或等于 5000:利率为 2.475%。

你需要完成四个任务,每个任务都涉及余额及其利率。

1. 计算利率

实现 interest_rate 函数,根据给定余额返回利率:

interest_rate(200.75);
// => 0.5

2. 计算利息

实现 yearly_interest 函数,根据给定余额计算年度利息:

yearly_interest(200.75):
// => 1.003750

3. 计算年度余额更新

实现 annual_balance_update 函数,考虑利率后,计算年度更新后的余额:

annual_balance_update(200.75);
// => 201.75375

4. 计算达到目标余额所需年数

实现 years_until_desired_balance,计算达到目标余额至少需要多少年。每年的利息都加入余额,因此第一年结束的余额是初始余额加其对应利息;第二年结束的余额是第一年余额加第一年余额产生的利息。依此类推,直到当年余额大于或等于目标余额。

double balance {200.75};
double targetBalance {214.88};
years_until_desired_balance(balance, targetBalance)
// => 14

注意,返回值类型是 int。

需要一点帮助?查看分步提示

提示

1. 计算利率

  • 预期返回的是百分比。

2. 计算利息

  • 计算利息时,注意 interest_rate 返回的是百分比。
  • 可以使用上一任务中的 interest_rate 函数计算利息。

3. 计算年度余额更新

  • 可以复用前面任务定义的函数。

4. 计算达到目标余额所需年数

  • 可以用 for 循环不断更新余额,直到达到目标。
  • 有一个专门用于加 1 的运算符。