轨道
/
C++
C++
/
练习
/
利息很有趣
利息很有趣

利息很有趣

学习练习

简介

循环

循环用于重复执行某些逻辑。 最常见的两种是 while loop(不定次数循环)和 for loop(定次数循环,也就是计数循环)。 此外还有 for each 循环,它会在后面的概念中出现。

通用语法

for loop 由一个头部和一个代码块组成,代码块里是包裹在花括号中的循环体。 头部由 3 个用分号 ; 分隔的部分组成:初始化语句、条件和另一个表达式。 这几个部分都可以为空。

for (init_statement; condition; expression) {
  some_statement;
}
  • init_statement部分是只在循环开始之前运行一次的代码。
  • condition部分必须是一个求值为 boolean 的表达式,它控制循环何时停止。 只要这个条件求值为 true,循环里的代码就会一直运行。 一旦这个表达式求值为 false,循环就不会再进行任何迭代。
  • expression部分是在每次迭代结束时运行的代码。

while loop只要其条件检查为 true,就会一直执行循环体。 下面的代码片段展示了如何把一个 for 改写成 while loop。

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
Note

当 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类型。

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

准备好开始 利息很有趣 了吗?

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