结构 - 结构化编程
结构 - 结构化编程
结构化编程思想(逻辑控制)
语句块
- 作用:允许把多条语句放到按C++句法只能放一条语句的地方(逗号运算符同样可以做到相同的工作)
 - 使用:两个花括号能构造一条复合语句(代码块)
 - 局部变量:语句块中可定义局部变量,执行完语句块后变量将被释放
 
循环
for [- else](与C不同)
使用
- 通式:
for (initialization; test-expression; update-expression) body - 举例:
for (i=0; i<5; i++) a++(单行执行语句可以不加大括号) 
- 通式:
 组成
- 初始化(loop initialization) 
- 循环初始化(initialization)
 - 循环测试(test-expression)
 - 更新表达式(update-expression)
 
 - 循环体(loop body)
 
- 初始化(loop initialization) 
 执行顺序
- 初始值 > 执行测试 > 执行循环体 > 更新用于测试的值 > 从2开始重复
 
声明语句表达式、新的for语句
声明语句表达式(旧)
- C++曾定义了声明语句表达式,允许在for初始化处声明变量(语法糖,本质还是for前声明变量)
 - 而本来在for中只能初始化值,需要提前声明变量
 - 声明语句表达式只能在for中使用,在其他地方声明语句不被视作表达式
 - 这种修改后来被取消,取而代之使用新的for语句
 
新的for语句(新)
将for语句从
for(expression, expression, expression) expression改为
for(for-init-statement condition; expression) expression(初始化和条件都在前面,一并视作语句)与在for前声明相比,这种变量之存在for语句中,当程序离开循环后变量将消失(一些老式编译器仍视作在循环前声明)
while [- else]
- 使用: 
- 通式:
while (test-condition) body 
 - 通式:
 - 执行顺序: 
- 执行测试 > 执行循环体 > 从头开始重复
 
 
do-while [- else]
- 区别 
- for循环和while:入口条件(entry-condition)循环(每轮循环之前都计算测试表达式的值)
 - do-whild:出口条件(exit condition)循环
 
 - 使用 
- 通式:
do body while (test-expression) 
 - 通式:
 
三种foreach高级循环
基于范围的for循环(引用循环和值循环)
常用于数组遍历
一般是通过str.size()限制范围,用中括号法取元素
但C++11新增了一种循环:基于范围(range-based)的for循环,可用于数组和容器类(如vector和array)
- 使用 
- 例如
for (double x : prices) cout << x << std::endl;(只能输出) - 例如
for (double &x : prices) x = x*0.8;(可以改变数组的内容) 
 - 例如
 
_
引用和值的循环
for (double x : prices) cout << x << std::endl;	// 只能输出
for (double &x : prices) x = x*0.8;				// 可以改变数组的内容QT的foreach
Qt提供的替代C++中for循环的关键字
foreach(int, QList<int>)
{
    // process
}STL容器循环
for (auto it = my_array.begin(); it != my_array.end(); ++it)
{
	*it *= 2;
    cout << *it << endl;
}延时循环
方案一:
clock(),返回程序开始执行后所用的系统时间但返回单位不一定是秒,而且返回的类型不确定
方案二:头文件
ctime定义了常量CLOCKS_PER_SEC,等于每秒种包含的系统时间单位数,即系统时间/CLOCKS_PER_SEC==秒数而且
ctime将cloct_t作为clock()返回类型的别名
条件
if [- else if - else]
使用:
if (test-condition) statement1 else statement2,或if - else if - else自由排列:
if - else if - else的写法基于C++的自由排列规则if (test-condition1) statement1 else if (test-condition2) statement2 else statement3 // 可被排列成: if (test-condition1) statement1 else if (test-condition2) statement2 else statement3
switch
使用:
switch (interger-expression) { case label1 : statement(s) case label2 : statement(s) // ... default : statement(s) }
技巧——枚举量用作标签
enum {red, orange, yellow, green, blue, violet, indigo} switch (颜色号): case red : // ... // ...
与if语句区别
- 需要
break:case是行标签而不是选项之间的界限,程序不会在执行到下一个case处自动停止,必须使用break语句跳出 - 比较局限性:不能处理取值范围、浮点测试,只能进行整数测试
 - 性能:快很多
 
- 需要
 
三目运算符(条件运算符)
- 使用: 
expression1 ? expression2 : expression3
 - 与if语句区别:三目运算符生成一个表达式,是一个值
 
跳转
break和continue语句
break:用于循环体和switch(还能跳出switch语句)- 循环体使用:跳出全部循环,即跳过循环的剩余部分并到达下一条语句
 - switch使用:跳出switch语句(默认执行完case后的语句不会停止)
 
continue:用于循环体(不能用于switch语句)- 循环体使用:跳出本次循环,即跳过循环体剩余部分并开始新一轮循环
 
goto
异常捕捉
try-catch
throw
链接到当前文件 0
没有文件链接到当前文件