C++感受8-Hello World 循环版

重点学习如何使用 while 创建循环,和如何借助 break 打破循环……有破有立。

  1. 含十数个知识点:bool类型、bool字面值、定义整数、如何从控制台计入整数,整数后置自增、如何求余,逻辑“或”运算等。
  2. 含五个例程。

 0. 先听课

南老师在讲爱情故事,听听吧?

这节课对于单身狗可能会有些超标,毕竟,爱情这种东西,没经历过的人听起来大概会比数学奥赛还难……

ff11-HelloWorld-Loop

1.循环流程

2.例程1:爱你永不变

// 例程1:爱你永远不变
#include <iostream>

int main()
{
   while(2>1)
   {
      std::cout << "爱你又一天!" << std::endl;
   }
}

爱你永不变的不变,在这个例程中,使用 “2>1”这样一个没学编程的人(比如你女朋友)也能理解和放心的方式来表达。

提醒:如果你是在本地编译运行这段程序,那么程序运行起来之后,你可能需要通过 Ctrl+C (在Windows下)等方式来强行停止一段天长地久不死不休的爱情……

3.例程2:真的爱你,一天又一天

上面的爱情有瑕疵:每天都在重复昨天的甜言蜜语,一点变化没有……
既然寻求变化,那就像前面的 “Hello World 交互版”一样,引入变量吧!
我们使用一个 int (整数)类型的变量,取名 “day”,来记录当前是相爱的第几天,然后在甜言蜜语中加入这个一天一变的元素:

// 例程2:真的爱你,一天又一天
#include <iostream>

int main()
{
   int day = 1; // 相爱的天数,初始为 1
   while(true) // 改用 bool 类型的字面量:true (真)
   {
      std::cout << "爱你第" << day << "天!" << std::endl;
      day++;
   }
}

变化:

  • 第6行:定义了一个 day 的变量,类型是整数(int),初始为1天,一见钟情?
  • 第9行:使用 day 变量;
  • 第10行:通过自增操作符 ++,让 day 的值,从1到2,从2到3增长。

知识点:

  • int: 即 integer 。在C/C++中表示 整数。整数即: ……-3,-2,-1,-3,0,1,2,3……这类的数。在C/C++中,两个整数做什么计算,其结果中的小数部分,都会被直接丢弃,比如 5 ÷ 2,得到 的是另一个整数:2,而不是 2.5;
  • true:是 C/C++ 中,一种专用来表达逻辑真假的数据类型,称为布尔类型,对应类型名称为 bool (boolean),这种类型的字面值只有两个:true、false。true为真,false为假,没有中间值。本例中使用 true 作为循环的条件;
  • 死循环:无法结束的循环,比如本例中的 while 循环;
  • day++。++ 在C/C++表示自增操作符,即可以让操作数的值加1,比如day++,每执行一次,day的值就增加1。++放在操作数后面,称为 “后置自增”,对应的是“前置自增”,比如: ++day。二者区别我们以后再学习。

4.例程3:爱情的保质期有多长?

天长地久的爱情少见,多见的是保质期的爱情。
同样,一层不变的死循环操作少见,多见的是通过每次的变化,最终触发循环条件不成立,从而结束循环。

// 例程3:爱情的保质期有多长?
#include <iostream>

int main()
{
    int expire; // 保质期(天数)
    std::cout << "你的爱情保质期有几天?";
    std::cin >> expire; // 让用户输入天数

    int day = 1;
    while(day <= expire) // 没有天长地久的爱情,仅当在保质期内,才进入爱的循环
    {
       std::cout << "爱你第" << day << "天!" << std::endl;
       day++;
    }
}

要点解释:

  • 新引入变量,又是 int 类型,名为 expire。
  • 通过 std::cin 配合 流输入操作符,实现将用户在键盘上输入的整数,赋值给 expire。
    之前我们有学过配合 std::getline()函数和 std::cin 配合,实现将用户的一整行输入内容,作为名字读入,之所以使用 getline(),是因为它能读取输入中的空格——外国人姓名通是含有空格的;
  • 今天直接使用 流输入操作符 >> 读入整数,因为整数不能包含空格;
  • <= 就是小于等于之意。假设 expire 是 100,那么在第100天,还是会输出爱的表达的;
  • 千万别忘记写 day++;否则,保质期光标示,但不起作用,爱情市场监督局会找你罚款。

这段代码很可贵,它可贵就可贵在:一、支持了爱情有保质期这一普遍存在的业务特性,二、仍然将爱情的时长,交给用户自行决定。

5.例程4:爱到某一天,心就break

// 例程4:爱到某一天,心就break
#include <iostream>

int main()
{
    int expire; // 保质期(天数)
    std::cout << "你的爱情保质期有几天?";
    std::cin >> expire; // 让用户输入天数

    int day = 1;
    while(day <= expire) // 没有天长地久的爱情,仅当在保质期内,才进入爱的循环
    {
       // “渣男”条件:
       if (day % 3 == 0 && day % 13 == 0 && day % 17 == 0)
       {
            std::cout << "对不起,今天、突然、烦了……" << std::end;
            break;
       }

       std::cout << "爱你第" << day << "天!" << std::endl;
       day++;
    }
}

核心区别就在第14行新增的渣男条件判断与操作。
表面上看这段爱情还是有保质期保障的,但其实,在循环执行层面,多了一个简化的条件分支,相比我们前面课堂学习 if/else 或 if/else if/else …,这里只有 if :

代码A;

if (条件)
{
   代码B;
}

代码C;

如果条件成立,上面示例代码走的是:代码A → 代码B → 代码C。条件不成立,走的是:代码A → 代码C ;即:代码B 仅在条件成立时才执行。

例中的条件使用到了 C/C++ 中的 “求余”操作符。即:求余数的操作。因为day和3、13、17等操作数都是整数类型,所以如前所述,它们的除法结果中,不会带小数,但可以通过此处的求余操作符(更专业的术语是“求模”) % ,取得余数(余数当然也是整数类型),比如:

  • 4 % 2 得 0 (能整除)
  • 5 % 2 得 1 (不能整除)

如此,渣男条件用嘴巴描述,即:如果相爱的天数,能同时被3、13、17整数,那么老子就要走人了……

6.先别管爱情,回上班路……

不上班哪来的收入?没有收入哪来的爱情……
所以不要纠缠什么爱情保质期,什么渣男条件了……

回到上班路,基于上一节《Hello World分支版》的代码,本课的问候程序加入以下功能:

如果你能完整自主地写出本课的最后例程,事实上,你哪怕是一位正在实习的大学生,你也可以在有人带的和安排的情况下,帮助一家软件企业写一些简单的业务逻辑了。比如:

业务需要:用 C++ 读入一个日志文件,循环检查,并累加其中是否有包含 “127.0.0.1” 内容的行数。

你还不懂得如何“读入一个日志文件”?哦,就相当于例中的 Input(int i) 这个函数,你不会写嘛?没关系,比如你早入职15天的另外一个实习生,他学习了《白话C++》这本书的更多课程,那就他写 Input(i),你写别的……显然,再有什么别的你不会写了。

至于如何从文件中读写,也快了,《快速感受与探索之旅》很快就会上到 “XXX 文件版” 这堂课。

  • 26
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南郁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值