循环语句控制结构在应用程序中主要用于重复执行代码体操作,直到条件不满足的情况下终止。循环语句主要包含while、do/while以及for三类控制语句,其基本概念及使用方式将会通过不同的小节分别介绍。
5.3.1 while语句
C++语言提供的控制结构最后一种就是循环控制结构,该结构可以让程序在设定的条件之内作重复执行操作。循环控制结构在C++中包含3个基本结构,while、do…while和for循环控制语句。这里首先看第一种循环while结构的基本语法定义如下所示。
while(表达式)
{
… //代码块
}
while循环控制,没有初始化以及更新条件值部分。只通过计算表达式的值是否为真,为真即执行随后的代码块,如此反复。直到测试条件不为真则跳出该循环体。通常为了能够正确退出while循环控制,那么该循环体中必须能够完成某种影响测试条件的操作。下面可以通过一个循环遍历字符串的实例了解while循环控制结构的基本使用。
1.准备实例
打开UE工具,创建新的空文件并且另存为chapter0503.cpp。该代码文件随后会同makefile文件一起通过FTP工具传输至Linux服务器端,客户端通过scrt工具访问操作。程序代码文件编辑如下所示。
/**
* 实例chapter0503
* 源文件chapter0503.cpp
* 计算字符串长度
*/
#include <iostream>
#include <string>
using namespace std;
/*主程序入口*/
int main()
{
stringvalue; //定义字符串变量value
int i= 0; //定义整型变量,并赋初值为0
cout<<"pleaseinput string:"<<endl; //打印输入字符串提示信息
cin>>value; //输入字符串
while(value[i]!= '\0') //while循环测试条件,当字符串中字符不为结束字符时为真
{
++i; //循环体,每循环判断一次计数增加1
}
cout<<"Thisstring's length:"<<i<<endl;
return0;
}
上述实例主要演示while循环结构的使用情况。程序中应用到字符串变量当作字符数组使用的情形,关于这部分知识详细讲述会在字符串章节介绍。初学者这时重点只需要掌握while循环结构的基本用法。
2.编辑makefile
Linux平台下需要编译源文件为chapter0503.cpp,相关makefile工程文件编译命令编辑如下所示。
OBJECTS=chapter0503.o
CC=g++
chapter0503: $(OBJECTS)
$(CC)$(OBJECTS) -g -o chapter0503
clean:
rm -fchapter0503 core $(OBJECTS)
submit:
cp -f -rchapter0503 ../bin
cp -f -r*.h ../include
上述makefile文件套用前面的模板格式,主要替换了代码文件、程序编译中间文件、可执行程序等。在编译命令部分-g选项的加入,表明程序编译同时加入了可调式信息。
3.编译运行程序
当前shell下执行make命令,生成可执行程序文件,随后通过make submit命令提交程序文件至本实例bin目录,通过cd命令定位至实例bin目录,执行该程序文件运行结果如下所示。
[developer@localhost src]$ make
g++ -c -ochapter0503.o chapter0503.cpp
g++ chapter0503.o -g -o chapter0503
[developer@localhost src]$ make submit
cp -f -r chapter0503 ../bin
cp -f -r *.h ../include
[developer@localhostsrc]$ cd ../bin
[developer@localhostbin]$ ./chapter0503
please input string:
teststring
This string's length:10
该实例程序主要利用while循环实现输入字符串长度计算,这里使用到string类型字符串。由于字符串都是由'\0'结尾,所以测试条件中可以判断字符是否为'\0'。如果不是,则继续计数变量i+1向下一个字符作判断,直到走到最末尾的'\0'为止跳出该循环。这里使用了整型计数变量i,用来记录字符串长度。
5.3.2 do…while语句
do…while循环不同于while结构。该结构首先需要执行一次循环体,随后再针对while条件进行判断是否需要继续执行循环体。do…while循环结构基本语法定义如下所示。
do
{
… //循环体
}while(测试条件);
该结构预先会执行do关键字之后的循环体中的代码块,之后开始判断while的测试条件。条件结果值为真,则继续执行do后续的循环体。条件结果值为假,则跳出该循环。最后以分号为结尾的do/while结构整体可以看作一条语句。do/while循环结构至少执行一次循环体,这是与while循环结构最大的区别之处。下面通过一个完整实例了解do/while结构区别于while结构的应用情况。
1.准备实例
打开UE工具,创建新的空文件并且另存为chapter0504.cpp。该代码文件随后会同makefile文件一起通过FTP工具传输至Linux服务器端,客户端通过scrt工具访问操作。程序代码文件编辑如下所示。
/**
* 实例chapter0504
* 源文件chapter0504.cpp
* 实例do…while结构
*/
#include <iostream>
using namespace std;
/*主程序入口*/
int main()
{
constint size = 3; //定义整型常量size,其值为3
int i= 0; //定义整型变量i,初始化0值
do //执行do结构部分
{
cout<<"ivalue:"<<i<<endl; //打印整型变量i值
i++; //更新整型变量i值
}while(i< size); //while条件,即为是否退出循环判断条件
return0;
}
上述实例主要演示do…while结构在实际应用中的使用情况。该程序主要用于循环打印输出条件之内的递增值,必须注意的是该结构至少会执行一次do中的代码体。
2.编辑makefile
Linux平台下需要编译源文件为chapter0504.cpp,相关makefile工程文件编译命令编辑如下所示。
OBJECTS=chapter0504.o
CC=g++
chapter0504: $(OBJECTS)
$(CC)$(OBJECTS) -g -o chapter0504
clean:
rm -fchapter0504 core $(OBJECTS)
submit:
cp -f -rchapter0504 ../bin
cp -f -r*.h ../include
上述makefile文件套用前面的模板格式,主要替换了代码文件、程序编译中间文件、可执行程序等。在编译命令部分-g选项的加入,表明程序编译同时加入了可调式信息。
3.编译运行程序
当前shell下执行make命令,生成可执行程序文件,随后通过make submit命令提交程序文件至本实例bin目录,通过cd命令定位至实例bin目录,执行该程序文件运行结果如下所示。
[developer@localhost src]$ make
g++ -c -o chapter0504.o chapter0504.cpp
g++ chapter0504.o -g -o chapter0504
[developer@localhost src]$ make submit
cp -f -r chapter0504 ../bin
cp -f -r *.h ../include
[developer@localhost src]$ cd ../bin
[developer@localhost bin]$ ./chapter0504
i value:0
i value:1
i value:2
如上实例中使用了do/while控制结构,主要用于打印符合测试条件的变量i值。首先定义整型常量size,该常量值为3在整个程序中保持不变。随后定义整型条件变量i并且初始化为0值。由于do/while结构第一次优先执行do后代码体,所以首先打印变量i的初始值0,后更新该条件变量i以便于能够达到退出该循环的条件,否则会陷入死循环中。随后while中判断i<size的条件是否成立,成立则继续执行do后的代码体,不成立则退出该循环结构。
5.3.3 for语句
C++提供for循环控制结构可以用来直接处理重复的任务,该结构基本语法定义如下所示。
for(初始化表达式;测试条件;更新表达式值)
{
… //循环体
}
for循环主要包括两个部分组成,即循环条件和循环体。循环条件则由初始化表达式、测试条件以及更新初始化表达式值三个部分组成。
下面通过一些for循环控制定义,了解for循环控制结构基本使用情况,实例定义如下所示。
const int size = 10; //定义整型常量size,常量值为10
for(int i = 0;i < size;i++) //for循环结构
{
cout<<”ivalue:”<<endl; //for控制结构的代码体
}
int i; //for表达式外部定义,此处为整型变量i
for(i = 0;i < size;i++) //外部定义内部初始化表达式的for结构
{
… //for控制结构的代码体
}
for(;i < size;) //只有判断条件的for控制结构
{
cout<<”ivalue:”<<i<<endl; //for控制结构的代码体
++i; //代码体中更新for表达式值
}
for(;;) //空for循环,表示无限循环
{
…
}
以上实例分别定义了for循环结构的四种操作方式,首先在外部定义了常量size表示for循环中判断值。随后第一个for循环结构,遵循for循环语法结构定义方式,分别为for循环中初始化表达式即定义整型变量i并初始化为0值,该初始化操作在这个for循环中只执行一次。之后定义for循环的测试条件即i值必须小于size值才能为真。随后执行代码体部分打印i值信息代码,之后执行更新表达式值操作,然后再进行测试条件直到不满足为止跳出循环体。
由于第一个表达式中整型变量i是在for循环中定义的,所以其变量域只能在for循环整个结构中操作,外部无法操作该变量。为了能使的外部也能操作该表达式,那么第二种情况在外部定义整型变量i,在for循环中进行初始化后使用。第三种for循环结构省略了表达式定义初始化以及更新表达式部分,直接使用测试条件,随后在for代码体内部更新该表达式值,再重新测试条件执行。
最后一个for结构省略了该循环中三个部分,此时程序陷入无限循环中,在某些特殊场合无限循环的应用是存在的,其代码体中可以执行一些检测类工作,用于那些应用进程启动后不断扫描检测处理事务的场合。
5.3.3 实例5-3循环语句程序
循环控制结构前两种while与do/while结构在讲述其基本语法概念同时都配合实例作了应用讲述。下面通过一个完整的简单实例来演示for循环控制结构通常在程序中的使用情况。
1.准备实例
打开UE工具,创建新的空文件并且另存为chapter0505.cpp。该代码文件随后会同makefile文件一起通过FTP工具传输至Linux服务器端,客户端通过scrt工具访问操作。程序代码文件编辑如下所示。
/**
* 实例chapter0505
* 源文件chapter0505.cpp
* 循环语句程序实例
*/
#include <iostream>
using namespace std;
/*主程序入口*/
int main()
{
intmax; //定义整型变量max
intsum = 0; //定义整型变量sum,表示1~max数之和
cout<<"pleaseinput a value:"<<endl; //提示输入max整型值
cin>>max; //输入max值
for(inti = 0;i <= max;i++) //以小于max值为循环条件,执行循环操作
{
sum+= i; //执行1~max值之和操作
}
cout<<"Thevalue's sum:"<<sum<<endl; //打印1~max之间数之和
return0;
}
上述实例主要演示for循环结构的一般性使用情况。本程序通过从键盘输入整型数,用来决定for循环的上限。初学者在本实例中主要掌握for循环结构的一般使用方法,更多for循环操作的技巧将会在后续各章实例程序中展示。
2.编辑makefile
Linux平台下需要编译源文件为chapter0505.cpp,相关makefile工程文件编译命令编辑如下所示。
OBJECTS=chapter0505.o
CC=g++
chapter0505: $(OBJECTS)
$(CC)$(OBJECTS) -g -o chapter0505
clean:
rm -fchapter0505 core $(OBJECTS)
submit:
cp -f -rchapter0505 ../bin
cp -f -r*.h ../include
上述makefile文件套用前面的模板格式,主要替换了代码文件、程序编译中间文件、可执行程序等。在编译命令部分-g选项的加入,表明程序编译同时加入了可调式信息。
3.编译运行程序
当前shell下执行make命令,生成可执行程序文件,随后通过make submit命令提交程序文件至本实例bin目录,通过cd命令定位至实例bin目录,执行该程序文件运行结果如下所示。
[developer@localhost src]$ make
g++ -c -o chapter0505.o chapter0505.cpp
g++ chapter0505.o -g -o chapter0505
[developer@localhost src]$ make submit
cp -f -r chapter0505 ../bin
cp -f -r *.h ../include
[developer@localhostsrc]$ cd ../bin
[developer@localhostbin]$ ./chapter0505
please input a value:
100
The value's sum:5050
以上实例主要实现1~max用户输入的最大值之间数相加取和的功能,根据用户输入的循环最大值max为for循环测试条件。当用户输入max值后,进入for循环操作部分,首先在for循环内部定义整型i并初始化为0,该操作在整个循环结构中只执行一次。随后执行测试条件,判断此时变量i是否正确在用户确定的范围值之内。如果条件为真,则执行for循环体中的操作,将1~max之间0~i数相加,之后更新条件表达式值,再继续判断for循环的测试条件,如果为真继续执行循环代码体,如果不为真则跳出循环体,最后打印1~max数和的值sum。