【C++初级技能书】4.循环语句

各位同学大家好,这一次我们来学循环语句。

1.初识循环结构

 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int sum = 0;
 6     for (int i = 1; i <= 9; i++)
 7     {
 8         sum = sum + i;
 9         cout << i << "+";
10     }
11     cout << endl;
12     cout << "sum=" << sum << endl;
13  
14     getchar();
15     return 1;
16 }

我们先来看一个简单的例子,上面这个例子展示了,如何计算1到9的数字相加,如果我们日常计算,可能会用计算器一个一个按,从1按到9,但是如果我们要计算1+2+...+9999+10000呢?可能计算器都累了。如果用程序来实现的话,只需要简单的几行代码。上面这个程序,除去常见的语法不做说明,需要说明的是:我们使用sum这个变量来代表最终的和,然后利用一个循环,每次循环,我们都加上循环的次数,比如第一次循环我们加1,第二次循环我们加2,直到第九次循环加9,最后循环结束时,sum变量里存的就是最终我们需要的和。

2.for循环结构

1 for ([初始化]; [条件]; [循环迭代])
2 {
3     //每次循环要做的事
4 }

上面就是一个基本的for循环结构,在[初始化]部分,我们定义一个变量来控制整个循环,然后在[条件]部分,我们定义每次循环需要满足的条件,然后在[循环迭代]部分,处理我们用于控制循环次数的变量。

可以用这个规则来理解一下1.里的for (int i = 1; i <= 9; i = i + 1),我们定义了一个变量i,i的值是从1开始的,当i满足小于等于9的条件时,会执行循环体里的逻辑,每次执行完后,会将i加上1,代表进行了一次循环。
接下来我们用伪代码来写一个循环的例子(伪代码就是只表达逻辑但是不能直接执行的代码)。如果你要攒钱买一样东西,并且当天是星期几,你就攒几块钱,那么一个星期你能攒多少钱?这个例子用伪代码来表示是这样的:
1 int 已经攒的钱 = 0元
2 for(int 星期i = 1; i <= 星期七; i = i + 1)
3 {
4     已经攒的钱 + i
5 }

上面就是伪代码,不要在意伪代码的格式/语法是否正确,只要能理解这个意思就好。

3.while循环结构

那么除了2.的for循环,我们还要介绍while循环,基本的while结构如下:
1 while([条件])
2 {
3     //每次循环要做的事
4 }

我们用再while来重写一下1.里的例子

 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int sum = 0;
 6     int i = 1;
 7     while (i <= 9)
 8     {
 9         sum = sum + i;
10         cout << i << "+";
11         i++;
12     }
13     cout << endl;
14     cout << "sum=" << sum << endl;
15  
16     getchar();
17     return 1;
18 }

while()会在括号里的条件满足时,执行下方花括号里的逻辑,看起来好像就是把for拆开写了。

4.do...while循环结构

我们再来介绍一种循环结构,是do...while,基本的do...while结构如下:
1 do
2 {
3     //每次循环要做的事
4 }
5 while([条件])

do...while和while循环的区别在于,do...while是每次先执行一次花括号里的逻辑,再判断while里的条件是否符合,然后再执行下一次。那么用do...while来改写1.里的逻辑,就是这样的:

 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int sum = 0;
 6     int i = 1;
 7     do
 8     {
 9         sum = sum + i;
10         cout << i << "+";
11         i = i + 1;
12     } while (i <= 9);
13     cout << endl;
14     cout << "sum=" << sum << endl;
15  
16     getchar();
17     return 1;
18 }

虽然看起来好像没什么区别,但是还是要记住,while是先判断条件是否满足再执行,do...while是执行再判断条件是否满足(不要死记硬背,多用多记忆)。

5.无限循环

看到这里,其实你已经会了基本的几个循环结构,那么这里就必须说明一个在使用循环结构时要注意的点:无限循环(也可以叫死循环)。
无限循环就是程序一直处于循环状态。死循环顾名思义,就是程序“死”在了循环里结束不了了。
那么死循环表现形式是什么呢?其实就是程序无法结束了,程序会一直运行。比如在电脑上造成一个死循环后,如果用控制台运行程序,那么这个就一直是个黑框框,像这样:

 

 那么怎么造成一个死循环呢?上面我在介绍几个循环结构的时候,都会做一个迭代,就是i=i+1,聪明的你肯定发现了,如果不写这一句迭代,那么就会一直满足执行条件,程序也就一直会运行下去。

6.跳出/跳过循环

这里我们来思考一下,你有10块钱,假设有一颗糖,单价4块钱,用循环模拟一下买糖的过程:
1 int money = 10;
2 while(1)
3 {
4     money = money - 4;
5     cout<<"买到一块糖";
6 }

不要在意这个死循环,我们来看看,如果程序一直执行,那将会出现剩余钱数为-2块钱的情况,我们可以用while(money>=4)来控制循环结束,当然我们还有一种控制循环结束的方式,就是使用break;语句,像这样:

 1 int money = 10;
 2 while(1)
 3 {
 4     money = money - 4;
 5     cout<<"买到一块糖";
 6     if(money<4)
 7     {
 8         break;
 9     }
10 }

当剩余钱数小于4块钱的时候,就不买了,跳出了while循环,同样,如果你使用其他循环语句,也可以用break跳出整个循环。

我们再来看看这个问题:
我们输出100以内能被4整除的数。
1 for(int i=0;i<=100;i++)
2 {
3     if(i % 4 != 0)
4     {
5         continue;
6     }
7     cout<<i<<"能被4整除"<<endl;
8 }

我们这里用%来计算余数,100%4代表100除以4取余数,100%4结果是0。例子中使用了continue,continue语句意思是跳过本次循环,开始下一次循环。所以上面例子中当i不能被4整除时,就跳过了cout<<i<<"能被4整除"<<endl;这一输出部分。

总结一下:
break和continue都是用于跳过的,区别在于,break是跳出最近的整个循环,而continue是跳过本次循环,这就是二者的区别。

注意!看到这里你已经掌握了最基本的循环语句写法,后边的内容为扩展内容,如果你不会,或者看不懂,并不妨碍你学会循环语句,但是你可以看一下,如果看懂了,说明你很厉害,不想看的同学,请直接跳至练习题。

7.goto语句

接下来我们要看一个非常特别的循环:goto语句,不过我非常不建议日常使用goto语句,因为goto极其容易造成死循环。
 1 #include <iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int sum = 0;
 6     int i = 0;
 7  
 8     while (1)
 9     {
10         cout << "i:" << i++ << endl;
11         if (i > 10)
12         {
13             goto condition1;
14         }
15     }
16 condition1:
17     cout<<"跳到了condition1后"<<endl;
18  
19     getchar();
20     return 1;
21 }

上面就是最基本的goto语句用法,需要在一个地方使用 [位置:] 这个结构来指定跳转位置,例子里用的是 condition1:,然后在其他地方使用 [goto 位置:] 这个结构来跳转到指定位置,这是一个比较特殊的结构,在程序中可以使用goto来制造循环。

思考一下(答案不唯一)

  • 编程计算3+4+5+...+11+12的和。
    •  1 #include <iostream>
       2 using namespace std;
       3 int main()
       4 {
       5     int sum = 0;
       6     for(int i=3;i<=12;i++)
       7     {
       8         sum += i;
       9     }
      10     cout << "sum=" << sum << endl;
      11  
      12     getchar();
      13     return 1;
      14 }
      点+看答案
  • 输出99乘法表。
    •  1 #include <iostream>
       2 using namespace std;
       3 int main()
       4 {
       5     for (int i = 1; i <= 9; i++)
       6     {
       7         for (int j = 1; j <= i; j++)
       8         {
       9             cout << i << "*" << j << "=" << i * j << " ";
      10         }
      11         cout << endl;
      12     }
      13 
      14     getchar();
      15     return 1;
      16 }
      点+看答案

       

posted @ 2020-09-06 20:28  odin1994  阅读(287)  评论(0)    收藏  举报