第五章 循环和关系表达式
计算机除存储数据外,还可以对数据进行分析、合并、充足、抽取、修改、推断、合成以及其他操作
5.1 for循环
1)for循环的组成
//forloop.cpp -- introducing the for loop
#include <iostream>
int main()
{
using namespace std;
int i; //create a counter
// initialize; test ; update
for (i = 0; i < 5; i++)
cout<<"C++ knows loops.\n";
cout<<"C++ knows when to stop.\n";
return 0;
}
其中,for语句中含四个部分:
初始化(loop initialization): i = 0
循环测试(loop test): i < 5 (检查 i 是否小于5,是则执行接下来的语句——循环体)
循环更新(loop update):i++(++是递增运算符(increment operator),i++ 等同于 i = i + 1)
循环体(loop body):cout<<"C++ knows loops.\n";
直到测试失败(i = 5)时,执行循环后面的语句(cout<<"C++ knows when to stop.\n";
实际操作步骤为:
1、设置初始值(初始化)
2、执行测试,看看循环是否一定继续进行(循环测试)
3、执行循环操作(循环体)
4、更新用于测试的值(循环更新)
1、2、3构成了控制部分,由括号括起,每部分都是一个表达式,彼此有分号隔开
4的控制语句叫做循环体,只要测试表达式为ture,它便被执行
格式: for (initialization; test-expression; update-expression)
body
//num_test.cpp -- use numeric test in for loop
#include<iostream>
int main()
{
using namespace std;
cout<<"Enter the starting countdown value: ";
int limit;
cin>>limit;
int i;
for (i = limit; i; i--) //quits when i is 0
cout<<"i = "<<i<<"\n";
cout<<"Done now that i = "<<i<<"\n";
return 0;
}
这里练习了i-- ,递减运算符
bool类型被引入前,若关系表达式为true,则判为1,如果为false,判为0,引入后就直接判为true和false,这样不会导致不兼容问题
for是入口条件(entry-condition)循环,每轮循环前,都将计算测试表达式的值
更新表达式(update-expression)在每轮循环结束时执行,此时循环体一执行完毕
2)表达式和语句
表达式:任何值或任何有效的值和运算符的组合都是表达式,每个C++表达式都有值
e.g cooks=4 的值为4,
C++允许这样的语句:x=y=z=0; 这种方法可以快速地将若干变量设置为相同的值
赋值运算符是从右到左结合的,即0先赋给z,然后在将z=0赋给y……
//express.cpp -- values of expressions
#include<iostream>
int main()
{
using namespace std;
int x;
cout<<"The expression x = 100 has the value ";
cout<<(x = 100)<<endl;
cout<<"Now x = "<<x<<endl;
cout<<"The expression x < 3 has the value ";
cout<<( x < 3 )<<endl;
cout<<"The expression x > 3 has the value ";
cout<<( x > 3 )<<endl;
cout.setf(ios_base::boolalpha);
cout<<"The expression x < 3 has the value ";
cout<<( x < 3 )<<endl;
cout<<"The expression x > 3 has the value ";
cout<<( x > 3 )<<endl;
return 0;
}
通常cout在显示bool值前将它们转换为int, 但cout.setf(ios_base::boolalpha)函数调用设置了一个标记,该标记命令cout显示true和false,而不是1和0
判定表达式会有副作用:修改被赋值者的值
e.g x=100;
x 的值被修改了
x+15
这里没有副作用,x的值没有被修改
++x+15
有副作用,它将x加1
表达式转变成语句只需要加分号(;)即可
e.g age=100 ——表达式
age=100;——语句
任何表达式加分号都是有效的语句
有效的表达式不代表有意义
e.g rodents + 6; ——有效,仅仅是计算和,而没有使用结果
【从语句中删除分号不代表一定能转换为表达式】
e.g int load不是表达式,因为它没有值
【不能把for循环赋给变量,for循环不是表达式,因此没有值,也不能给它赋值】
3)修改规则
for(for-iinit-statement condition; expression;)
statement
e.g for (int i = 0; i < 5; i++)
cout<<"C++ knows loops.\n";
cout<<i <<endl;
【在for-init-statement中声明的变量,在程序离开循环后,将消失】