好文档 - 专业文书写作范文服务资料分享网站

信息学奥赛培训教程C++版

天下 分享 时间: 加入收藏 我要投稿 点赞

= += -= *= /= %= 从右向左 赋值 , 从左向右 逗号

图 6.15 前面所介绍的运算符优先级和结合律

6.12 计数器控制循环的要点

计数器控制循环要求:

l.控制变量(或循环计数器)的名称(name)。 2.控制变量的初始值(initial value)。

3.测试控制变量终值(final value)的条件(即是否继续循环)。

4.每次循环时控制变量修改的增量或减量(increment decrement)。

考虑图6.16所示的简单程序,打印1到10的数字。声明: int counter = 1;

指定控制变量(counter)并声明为整数,在内存中为其保留空间并将初始值设置为1。需要初始化的声明实际上是可执行语句。在C++中,将需要分配内存的声明称为定义(definition)更准确。

1 // Fig. 2.16: fig02_16.cpp

2 // Counter-controlled repetition 3 #include 4

5 int main() 6 {

7 int counter = 1; // initialization 6

9 while ( counter <= 10 ) { // repetition condition 10 cout << counter << endl;

11 ++counter; // increment 12 } 13 15 }

输出结果: 2 4 5 0 8 9 10

图6.16计数器控制循环

-91-

counter的声明和初始化也可以用下列语句完成: int counter; counter=1;

声明不是可执行语句,但赋值是可执行语句。我们用两种方法将变量初始化。 下列语句: ++counter;

在每次循环时将循环计数器的值加1。while结构中的循环条件测试控制变量的值是否小于或等于10(条件为true的终值)。注意,即使控制变量是10时,这个while结构体仍然执行。控制变量超过10时(即counter变成11时),循环终止。

图6.16的程序也可以更加简化,将counter初始化为。并将while结构换成: while (++counter <= lO) cout << counter << endl;

这段代码减少了语句,直接在while条件中先增加计数器的值再测试条件。这段代码还消除了while结构体的花括号,因为这时while只包含一条语句。

6.13 for重复结构

for重复结构处理计数器控制循环的所有细节。要演示for的功能,可以改写图6.16的程序,结果如图6.17。

执行for重复结构时,声明控制变量counter并将其初始化为1。然后检查循环条件counter<=10。由于counter的初始值为1,因此条件满足,打印Counter的值(1)。然后在表达式Counter++中递增控制变量counter,再次进行循环和测试循环条件。由于这时控制变量等于2,没有超过最后值,因此程序再次执行语句体。这个过程一直继续,直到控制变量counter递增到11,使循环条件的测试失败,重复终止。程序继续执行for结构后面的第一条语句(这里是程序末尾的return浯句)。

1 // Fig. 2.17:fig02 17.cpp

2 // Counter-controlled repetition with the for structure 3 #include 4

5 int main() 6 {

7 // Initialization, repetition condition, and incrementing 8 // are all included in the for structure header. 9

10 for ( iht counter = 1; counter <= 10; counter++ ) 11 cout << counter << endl; 12

13 return O; 14 }

-92-

图 6.17 用for结构的计数器控制重复

图6.18更进一步研究了图6.17中的for结构。注意for结构指定计数器控制重复所需的每个项目。如果for结构体中有多条语句,则应把语句体放在花括号中。

注意图6.17用循环条件counter<=10。如果循环条件变为counter

for

关键字 控制变量名 控制变量终值 ↓ ↓ ↓ for ( int counter = 1; counter <= 10; counter++) -------------

↑ ↑ ↑

控制变量初始化 循环条件 控制变量递增

图 6.18 典型for首部的组件

for结构的一般格式如下:

for (expression1;expression2;expression3) statement

其中expression1初始化循环控制变量的值,expression2是循环条件,expression3递增控制变量。大多数情况下,for结构可以表示为等价的while结构:

expression1

while (expression2) { statement expression3; }

如果for结构首部中的expression1(初始化部分)定义控制变量(即控制变量类型在变量名前面指定).则该控制变量只能在for结构体中使用,即控制变量值是for结构之外所未知的。这种限制控制变量名的用法称为变量的作用域(scope)。变量的作用域定义其在程序中的使用范围。

for结构中的三个表达式是可选的。如果省略expression2,则C++假设循环条件为真,从而生成无限循环。如果程序其他地方初始化控制变量,则可以省略expression1。如果for语句体中的语句计算增量或不需要增量,则可以省略expression3。for结构中的增量表达式就像是for语句体末尾的独立语句。因此,下列表达式:

counter = counter + 1; counter += 1; ++counter; counter++;

在for结构的递增部分都是等价的。许多程序员喜欢counter++,因为递增在执行循环体之后发生,因此,后置自增形式似乎更自然。由于这里递增的变量没有出现在表达式中,因此前置自增与后置自增的效果相同。for结构首部中的两个分号是必需的。

for结构的初始化、循环条件和递增部分可以用算术表达式。例如,假设x=2和y=10,如果

-93-

x和y的值在循环体中不被修改,则下列语句:

for (int j= x; j <= 4* x* y; j += y/ x ) 等于下列语句:

for(int j=2;j<=80;j+=5)

for结构的增量也可能是负数(实际上是递减,循环向下计数)。

如果循环条件最初为false,则for结构体不执行,执行for后面的语句。

for结构中经常打印控制变量或用控制变量进行计算,控制变量常用于控制重复而不在for结构

体中提及这些控制变量。

for结构的流程图与while结构相似。例如,图6.19显示了下列for语句的流程图: for(int counter=l;counter>=10;counter++) cout<< counter<< endl;

从这个流程图可以看出初始化发生一次,井在每次执行结构体语句之后递增。注意,流程图(除了小圆框和流程之外)也只能包含表示操作的矩形框和表示判断的菱形框。这是我们强调的操作/判断编程模型。程序员的任务就是根据算法使用堆栈和嵌套两种方法组合其他几种控制结构,然后在这些框中填入算法所要的操作和判断,从而生成程序。

6.14 for结构使用举例

下面的例子显示for结构中改变控制变量的方法。在每个例子中,我们都编写相应的for结构首部。注意循环中递减控制变量的关系运算符的改变。

a)将控制变量从1变到100,增量为1。 for(int i=l;i<=100;i++)

b)将控制变量从100变到1,增量为-1。 for(int i=100;i>=1; i--)

c)控制变量的变化范围为7到77。 for(int i= 7;i <= 77; i+= 7) d)控制变量的变化范围为20到2。 for(int i=20;i>=2;i-=2)

c)按所示数列改变控制变量值:2、6、8、11、14、17、20。 for(int j=2;j<=20;j+=3)

f)按所示数列改变控制变量值:99、88、77、66、55、44、33、22、ll、0。 for(int j=99; j>=0; j-=11)

下面两个例子提供for结构的简单应用。图2.20所示的程序用for结构求2到100的所有整数的总和。

注意图2.20中for结构体可以用下列逗号运算符合并成for首部的右边部分: for(int number = 2; // initialization

number <= 100; // continuation condition sum += number, number += 2) // total and increment 初始化sum=0也可以合并到for的初始化部分。

1 // Fig. 2.20: fig02_20.cpp 2 // Summation with for

-94-

3 #include 4

5 int main() 6 {

7 int sum = 0; 8

9 for (int number = 2; number <= 100; number += 2 ) 10 sum += number; 11

12 cout << \13

14 return 0; 15 }

输出结果: sum is 2550

图6.20 用for语句求和

下列用for结构计算复利。考虑下列问题:

一个人在银行存款1000.00美元,每利率为5%。假设所有利息留在账号中,则计算10年间每年年末的金额并打印出来。用下列公式求出金额:

a=P(1+r)n 其中:

P是原存款(本金) r是年利率 n是年数 a是年未本息

这个问题要用一个循环对10年的存款进行计算。解答如图6.21

for结构执行循环体10次,将控制变量从1变到10,增量为1。C++中没有指数运算符,因此要用标准库函数pow。函数pow(x,y)计算x的y次方值。函数pow取两个类型为double的参数并返回double值。类型double与float相似,但double类型的变量能存放比float精度更大的数值。C++把常量(如图6.21中的1000.0和.05)当作double类型处理。

1 // Fig. 2.21: fig02_21.cpp

2 // Calculating compound interest 3 #include 4 #include 5 #include 6

7 int main() 8 {

9 double amount, // amount on deposit 10 principal = 1000.0, // starting principal 11 rate = .05; // interest rate 12

-95-

信息学奥赛培训教程C++版

=+=-=*=/=%=从右向左赋值,从左向右逗号图6.15前面所介绍的运算符优先级和结合律6.12计数器控制循环的要点
推荐度:
点击下载文档文档为doc格式
7147t1zw3j3ef8l93ts6
领取福利

微信扫码领取福利

微信扫码分享