跳至主要內容

结构 - 结构化编程

LincZero大约 4 分钟

结构 - 结构化编程

结构化编程思想(逻辑控制)

语句块

  • 作用:允许把多条语句放到按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
  • 执行顺序

    • 初始值 > 执行测试 > 执行循环体 > 更新用于测试的值 > 从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==秒数

    而且ctimecloct_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