C++控制结构-循环语句

时间:2022-04-19 18:25:12

分类: Linux c++开发 电子书 385人阅读 评论(0) 收藏 举报

目录(?)[+]

循环语句控制结构在应用程序中主要用于重复执行代码体操作,直到条件不满足的情况下终止。循环语句主要包含whiledo/while以及for三类控制语句,其基本概念及使用方式将会通过不同的小节分别介绍。

5.3.1  while语句

C++语言提供的控制结构最后一种就是循环控制结构,该结构可以让程序在设定的条件之内作重复执行操作。循环控制结构在C++中包含3个基本结构,whiledo…whilefor循环控制语句。这里首先看第一种循环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循环语句程序

循环控制结构前两种whiledo/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,表示1max数之和

         cout<<"pleaseinput a value:"<<endl;                           //提示输入max整型值

         cin>>max;                                                                          //输入max

         for(inti = 0;i <= max;i++)                                        //以小于max值为循环条件,执行循环操作

         {

                   sum+= i;                                                          //执行1max值之和操作

         }

         cout<<"Thevalue's sum:"<<sum<<endl;            //打印1max之间数之和

         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

以上实例主要实现1max用户输入的最大值之间数相加取和的功能,根据用户输入的循环最大值maxfor循环测试条件。当用户输入max值后,进入for循环操作部分,首先在for循环内部定义整型i并初始化为0,该操作在整个循环结构中只执行一次。随后执行测试条件,判断此时变量i是否正确在用户确定的范围值之内。如果条件为真,则执行for循环体中的操作,将1max之间0i数相加,之后更新条件表达式值,再继续判断for循环的测试条件,如果为真继续执行循环代码体,如果不为真则跳出循环体,最后打印1max数和的值sum