在程序设计过程中,有时候需要多次去执行相同的过程,例如打印“我爱我的祖国”这句话100次。如果我们像下面这样编写程序:
cout<<"我爱我的祖国\n";
cout<<"我爱我的祖国\n";
cout<<"我爱我的祖国\n";
.....
cout<<"我爱我的祖国\n";
不断的编写100条相同的语句,这会使得程序变得冗长。在C++编程语言中,通过引入一些循环语句来解决该问题,这些语句主要包含三种:for循环、while循环、do whie循环。本博客简单的对这三种循环语句进行相应的说明。
1 for 循环
在C++语言中,for循环语句的通用格式为:
for (initialization; test-expression; update-expression)
loop body
for循环语句大致包含了两部分部分,一部分有初始化(initialization)、测试表达式(test-expression)、更新表达式(update-expression)这三个组成的控制部分,这三个由括号括起来,每部分都是一个表达式,且使用分号隔开。另外一个是循环体(loop body)。例如打印100次“我爱我的祖国”
for(int i = 1; i<=100; i++)
cout<<"i = "“我爱我的祖国。\n”;
for循环在执行过程中,其三个控制部分与循环体的先后执行步骤为:
- 设置初始值;
- 执行测试,判断循环条件是否满足,从而决定是否执行循环体;
- 如果条件满足,则执行循环体,否则跳出循环;
- 更新用于测试的值。
其详细的流程图如下
1.1 表达式和语句
for循环语句中的三个控制部分都使用的是表达式。表达式为任何值或任何有效的值和运算符组合而形成的都属于表达式,在C++中,任何表达式都有值。例如
10 //
22+27
x = 20 // 赋值表达式的值定义为左侧成员的值
在C++语言中,表达式+分号便形成语句,也称为表达式语句。所有表达式+分号都可以成为语句,但是相反并不成立,即语句去掉分号后并不一定是表达式,比如返回语句、声明语句等。
1.2 for循环的三个控制部分
在C++语言中,对for循环的控制部分有下述一些特性:
- 在初始化部分可以直接声明变量,这种声明的变量只能存在于for语句中,离开了循环后改变量便会消失;
- 更新部分可以通过修改步长来更新表达式。
1.3 循环处理字符串
for循环处理字符串时,一般有两种模式:C-风格字符串,string类。
当处理C风格字符串时,需要注意的是关系表达式并不能应用到字符串的判断,这主要是由于数组名是数组的地址,同理,由引号括起来的字符串常量也是其地址,因此字符串的直接比较是查看的这两个字符串是否存在相同的地址上。比较字符串可以借助于C-风格字符串库中的strcmp()函数来实现。
对于string类字符串来说,可以通过关系运算符来直接对两个字符串进行比较判断。
2 while循环
相比于for循环,while循环式没有初始化和更新部分,只有测试条件和循环体,其通过格式为:
while (test-condition)
body
while循环和for循环都属于入口条件循环,即先判断循环条件,看是否能够执行循环体。while循环与for循环之间是可以相互转变的,其转换形式如下:
// for循环体
for (init-expression; test-expression; update-expression)
{
statement; // loop body
}
// 转变后的while循环
init-expression;
while (test-expression)
{
statement;
update-expression;
}
我们可以通过下列一个例子来理解for循环与while循环的转变:
例子: 输入五个数,输出该五个数的值和平均值。
- for循环语句
#include<iostream>
using namespace std;
int main()
{
cout << "The Amazing Account will sum and average five numbers for you.\n";
cout << "Please enter five values:\n";
double number;
double sum = 0.0;
for (int i = 1; i <= 5; i++)
{
cout << "Values " << i << ": ";
cin >> number;
sum += number;
}
cout << "Five exquisite choice indeed! They sum to " << sum << endl;
cout << "and average to " << sum / 5 << " .\n";
return 0;
}
- while循环语句
#include<iostream>
using namespace std;
int main()
{
cout << "The Amazing Account will sum and average five numbers for you.\n";
cout << "Please enter five values:\n";
double number;
double sum = 0.0;
int i = 1; // init-expression
while (i <= 5)
{
cout << "Values " << i << ": "; // statement
cin >> number;
sum += number;
i++; // update-expression
}
cout << "Five exquisite choice indeed! They sum to " << sum << endl;
cout << "and average to " << sum / 5 << " .\n";
return 0;
}
3 do while循环
不同于for循环与while循环,do while循环属于出口条件循环,即先执行循环体,再判断测试条件。其通用的格式为:
do
loop body
while (test-expression);
一般情况下,入口条件循环比出口条件循环好,因为入口条件循环在循环开始之前对条件进行检查。