C++ Primer 5th - 1.4 控制流

语句一般都是顺序执行的:语句块中的第一句话是首先被执行的,接下来是第二句,以此类推。极少数程序—包括我们的书店问题的程序—可以只写顺序执行的语句就可以解决问题。事实上,C++提供了若干种控制流语句使我们可以实现更多复杂的执行顺序。

1.4.1 whlie循环

一条while语句当给定的条件为真时会重复地执行一个语句块中的所有代码。我们可以使用while语句来写一个从1到10并一直累加其和的程序,代码如下:
#include <iostream>
int main()
{
    int sum = 0, val = 1;
    while (val <= 10) {
    sum += val; // assigns sum + val to sum
    ++val; // add 1 to val
}
    std::cout << "Sum of 1 to 10 inclusive is "
    << sum << std::endl;
    return 0;
}
当我们编译并运行这个程序时会打印出结果:

    Sum of 1 to 10 inclusive is 55

在程序的一开始我们包含了iostream的头文件并定义了main函数。在main函数中我们定义了两个int型变量sum和val,sum用于保存和,val用于保存从1到10之间不同的值,并且将sum初始化为0,val初始化为1。

这个程序的新成员是这条while语句。一条while语句的套路是:
while (条件)
    需执行的语句
while语句的执行过程是判断条件是否为真,若为真,则执行相关的语句,就这样一直执行下去,直到当条件为假时才会跳出while语句。在我们的程序里while语句是这样的:

while (val <= 10) 
{
    sum += val; // assigns sum + val to sum
    ++val; // add 1 to val
}

while语句里的条件用<=来对当前的val的值和10进行比较。当val小于等于10时条件为真。当条件为真时,程序会执行while的循环体。在这个例子中,循环体是这两句:

{
    sum += val; // assigns sum + val to sum
    ++val; // add 1 to val
}

循环体是被大括号包围的一系列0条或多条语句。在这个例子中,循环体内的第一句话使用了+=操作符。这个操作符将它的右操作数与左操作数相加并将结果存储在左操作数中。这和写sum = sum + val是一样的结果。

下一句话:++val;使用了前置自增操作符。这个自增操作符对操作数进行+1操作,这和写val = val+1;的结果是一样的。

一旦val比10大时,程序将跳出while循环并执行while循环后面的语句。在这个例子中,跳出循环后会打印输出。

1.4.2 for循环

在我们的while循环中使用val来控制我们的循环执行的次数。使用一个变量作为条件并且没做一次循环后自增的套路在编程语言里极其常见,在C++里也并不例外,所以就有了for循环。我们可以使用for循环来重写从1加到10的例子,代码如下:
#include <iostream>
int main()
{
    int sum = 0;
    // sum values from 1 through 10 inclusive
    for (int val = 1; val <= 10; ++val)
    sum += val; // equivalent to sum = sum + val
    std::cout << "Sum of 1 to 10 inclusive is "
    << sum << std::endl;
    return 0;
}
之前的while循环的版本中,我们定义一个sum变量并初始化为0,val初始化为1。在这个for循环的版本中,我们定义val变量为for循环的内部变量。

每个for循环都有两个部分:一个头和一个块。头用来控制块执行的频率和次数。头由3个部分组成:初始化语句、条件、表达式。在这个例子中int val = 1;为初始化语句。定义一个int类型的对象叫val并把它初始化为1。变量val只存活于for循环内部,也就是说for循环执行完后val变量就不存在了。初始化语句只执行一次。val <= 10;是条件。将val的值和10进行比较,条件会每次执行循环体中的语句之前执行。当val小于等于10时,for循环会执行循环体内的代码。++val为表达式,使用前缀自增操作符来对val进行+1操作。当执行完表达式之后,for循环会重置条件。如果新的条件,即val的值小于等于10,那么循环体将会继续执行,直到条件返回假。

1.4.3 读取一个未知数的输入

在之前的2个小章节,我们写了一个从1到10计算其累加和的程序。对这个程序拓展一下我们可以询问用户想要进行累加和计算的一个范围。现在我们不想知道有多少个数字需要进行累加。我们可以一直读取用户输入的数字,直到用户不再输入为止:
#include <iostream>
int main()
{
    int sum = 0, value = 0;
    while (std::cin >> value)
    sum += value; // equivalent to sum = sum + value
    std::cout << "Sum is: " << sum << std::endl;
    return 0;
}
如果我们对这个程序输入:3 4 5 6 那么程序将会输出结果:Sum is:18。

main函数中第一行定义了两个变量一个叫val另一个叫sum,它们都初始化为0。我们会将读取输入的代码写到while循环的条件部分中,来实现val保存我们从用户那里输入数字时的值:while (std::cin >> value)

std::cin >> value表示从标准输入中读取下一个数字并将其存储到val中。输入操作符的返回值是它的左操作数也就是std::cin,因此在while循环中的条件判定时会判定std::cin是否为真。

当我们使用输入流对象(即istream的对象)作为条件时的效果是检测流的状态。如果流的状态是合法的或有效的(当一个流没有碰到错误时,状态是成功的,有效的)。当我们输入文件结束符或者非法输入(如程序想要你输入一个整数但你输入了一个字符串)时,istream的状态将会变成无效的。当istream的状态为无效或非法时将会导致条件表达式的结果为假。

在我们的例子中,我们的while循环会一直执行,并且当我们输入文件结束符或者非法输入时会跳出while循环。

1.4.4 if语句

和其他大多数编程语言一样,C++同样提供了if语句来支持条件执行。我们可以使用if来写一个程序来统计在输入过程中有多少数是与上次输入不一样的数。代码如下:
#include <iostream>
int main()
{
    int currVal = 0, val = 0;
    // read first number and ensure that we have data to process
    if (std::cin >> currVal) {
    int cnt = 1; // store the count for the current value we're //processing
    while (std::cin >> val) { // read the remaining numbers
    if (val == currVal) // if the values are the same
        ++cnt; // add 1 to cnt
    else { 
        std::cout << currVal << " occurs "
        << cnt << " times" << std::endl;
        currVal = val; // remember the new value
        cnt = 1; // reset the counter
        }
    } // while loop ends here
    // remember to print the count for the last value in the file
    std::cout << currVal << " occurs "
    << cnt << " times" << std::endl;
    } // outermost if statement ends here
    return 0;
}
如果程序的输入是:42 42 42 42 42 55 55 62 100 100 100 那么结果是:
42 occurs 5 times
55 occurs 2 times
62 occurs 1 times
100 occurs 3 times

这段代码中的很多部分都和我们以前写的程序很相似。我们一开始定义一个变量val和currVal。currVal将会跟踪我们正在统计哪个数;val用来保存我们输入的数。我们来看看if语句吧,第一个if:
    if (std::cin >> currVal) {
    // ...
    }
确定输入是否为空。和while一样,if同样有条件表达式。第一个if中的条件表达式为从标准输入读入一个值存到currVal中。如果读取成功,条件表达式则返回true,并执行用大括号括起来的语句。

我们来看看第二个if,这个if语句中的条件表达式用了==操作符来判断val是否与currVal相等。如果相等,则执行大括号括起来的语句。如果条件返回为false,即val与currVal不相等的情况,我们会执行else语句下的语句块。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值