提前据透一下:《斗破CPP》第叁章将会分成上中下三部分分享给大家,(上)偏向于讲述循环;(中)讲2个中级难度的运算符;(下)偏向于讲解具有强大功能的语句以及控制符。不管有基础还是没基础的小伙伴,都可以重点看看(上)后半部分、(中)前半部分、(下)后半部分小总结。
目录
do-while语句
我们先来学习do-while 语句。使用该语句可以在特定条件成立期间循环执行任意次处理。
我们来看看下面有关于季节的程序:
//chap0301
#include <iostream>
using namespace std;
int main()
{
int hand;
do {
cout << "请选择手势(0...石头 1...剪刀 2...布):";
cin >> hand;
} while (hand < 0 || hand > 2);
switch (hand) {
case 0: cout << "石头\n"; break;
case 1: cout << "剪刀\n"; break;
case 2: cout << "布\n"; break;
}
}
我们来看看,chap0301 中的switch语句里的字符串中用的是\n而不是endl,看过我以前博客的小伙伴或许会有点小问号。其实对于输出字符串的话,用\n比endl这样写更加简洁。
再来看看 chap0301 程序,main 函数的大部分语句由do和while包围,这样的语句被称为do-while 语句,do的意思是“执行”,while的意思是“在……期间”。如下图所示:
循环称为loop,因此do-while 语句中作为循环对象的语句称为循环主题。后文会介绍到while语句和for语句,它们也是循环主体。
我们来看一下判断do-while 语句是否继续循环的表达式。
(hand < 0 || hand > 2)
如果变量输入的是小于0或者大于2的数字,则该表达式的求值结果为true,循环主体块将再次被执行。
也就是说,当求值结果为true时,程序流就返回至块的开头,从那里开始再次执行块。
如果变量输入的是小于0或者大于2之外的数字,则该表达式的求值结果为flase,do-while 语句将结束执行。
看到这里do-while 语句并没有过多的亮点。
while语句
while语句也能和do-while语句一样也可以实现在特定条件成立期间循环执行处理。我们来看看while语句如何使用:
//chap0302
#include <iostream>
using namespace std;
int main()
{
int x;
cout << "倒数。\n";
do{
cout << "正整数值:";
cin >> x;
} while (x <= 0);
while (x >= 0)
{
cout << x << endl;
x--; // x的值递减(值减1) ,第叁章(中)会介绍到,这里不过多介绍
}
}
首先我们来看看do-while语句。该语句仅在读入的x的值小于等于0时执行循环,因此在该do-while语句结束时,x必定为正值。正值出现,就进入了while语句,while语句在条件的求值结果为true期间循环执行语句。因此,该程序的while语句图如下:
while语句与do-while 语句在判断是否执行循环的时间点上不同。do-while 语句在执行循环主体之后判断,称为后判断循环,而while 和for语句在执行循环主体之前判断,称为前判断循环。
众星捧月般的for语句
for语句的语法就有必要说一下了,他不像while语句和do while语句那样容易理解:
for语句执行过程是这样的先进行1,然后用2来判断,如果满足条件的话就运行3,不满足的话则退出循环;执行完3以后,再通过4来对1进行改变。
for语句是由while语句修改而来的,由此可知,for语句和while语句可以互换。我们看看for语句和while语句的图:
我们通过列举奇数的程序来看看for语句如何使用:
//chap0303
#include <iostream>
using namespace std;
int main()
{
int n;
cout << "整数值:";
cin >> n;
for (int i = 1; i <= n; i += 2)
cout << i << endl;
}
chap0303 程序中出现的 += 是后面会讲到复合赋值运算符。
for语句为何处于众星捧月的地位?我总结了它的两大优势和两个建议:
for语句使得循环体更加循环
//chap0304
//打印1-10的数(for和while的较量)
#include <iostream>
using namespace std;
int main()
{
int i = 1;
while (i <= 10)
{
cout << i << " ";
i++;
}
cout << endl;
return 0;
}
int main()
{
int i;
for (i = 1; i < 11; i++)
{
cout << i << " ";
}
cout << endl;
return 0;
}
观察这两种写法,显然for语句更为地简单明了!
for循环提高了循环的容错率
后面会涉及到的contine语句这里先提一下,我们只知道它的作用是:程序流将跳过循环主体的剩余部分,直接跳转至循环主体的末尾。来上代码:
//chap0305
#include <iostream>
using namespace std;
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
continue;
cout << i << " ";
i++;
}
cout << endl;
return 0;
}
int main()
{
int i;
for (i = 1; i < 11; i++)
{
if (i == 5)
continue;
cout << i << " ";
}
cout << endl;
return 0;
}
我们通过if语句来试探出来了它们的优劣。用while语句的程序执行的结果是死循环,而用for语句的程序可以达到目的。
建议1
不要再for循环内改变循环变量,这样很容易使循环失去控制。
建议2
for循环很推崇对控制变量的取值采用“前闭后开写法”,这样就可以很清晰的计算到循环的次数啦。
for(int i = 0;i < 11;i++) //不推荐
for(int i = 0;i <= 10;i++) //推荐
多层循环
把循环语句的循环主体作为循环语句,就可以执行二重、三重循环。这样的循环是多重循环。下面我将通过两侧等腰三角形(有四侧,但都殊途同归,小伙伴自己去实现吧)来将多重循环的妙用分享给大家,我们先来看看左下侧为直角的等腰三角形:
//chap0306
#include <iostream>
using namespace std;
int main()
{
int n;
cout << "显示左下侧为直角的等腰直角三角形。\n";
cout << "行数:";
cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) // 显示i个'*'
cout << '*';
cout << endl;
}
}
结果如下:
上图所示为用来显示等腰直角三角形的程序流程图如下:
在外侧的for语句(行循环)中,变量i的值从1开始递增到n(即5)。这是与三角形的各行对应的纵向循环。
在各行中执行的内测的for语句(列循环)中,变量j的值从1开始递增到i,并进行显示。这是各行中的横向循环。
当i为1时,使j从1递增到1,并显示‘*’,然后换行。 | * |
当i为2时,使j从1递增到2,并显示‘*’,然后换行。 | ** |
当i为3时,使j从1递增到3,并显示‘*’,然后换行。 | *** |
当i为4时,使j从1递增到4,并显示‘*’,然后换行。 | **** |
当i为5时,使j从1递增到5,并显示‘*’,然后换行。 | ***** |
把三角形从上至下看作第1行--第n行,第i行显示i个‘*’,最后一行显示n个‘*’。接下来我们再来看看右下侧为直角的等腰直角三角形:
//chap0307
#include <iostream>
using namespace std;
int main()
{
int n;
cout << "显示右下侧为直角的等腰直角三角形。\n";
cout << "行数:";
cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n - i; j++) // 显示n-i个' '
cout << ' ';
for (int j = 1; j <= i; j++) // 显示i个'*'
cout << '*';
cout << endl;
}
}
未完待续
很感激阅读到这里的你,《斗破CPP》的精彩并不止于这些,学有余力的小伙伴可以看看下面这些博客,都是有着极多的技巧与干货❤!
《斗破CPP》 第壹章 ---- 初窥CPP_施律.的博客-优快云博客、
《斗破CPP》 第贰章(上) ---- 初识分支句_施律.的博客-优快云博客
《斗破CPP》 第贰章(下) ---- 拿捏运算符与标识符_施律.的博客-优快云博客
关于时间的函数,让你成为掌控时间的强者:(极力推荐!)关于时间的函数,让你成为掌控时间的强者_施律.的博客-优快云博客
如果觉得本篇博客对正在学习编程的你有帮助的话,请给施律.多一点的支持与关注!未来的一段时间里施律.将和小伙伴们一起斗破CPP,希望下次的我能为大家奉上更好的博客内容,也希望下次的博客有你!