zoukankan      html  css  js  c++  java
  • 第五章 循环和关系表达式

    第五章  循环和关系表达式

    5.1  for循环

        5.1.1  for循环的使用

        For循环的组成部分完成下面4个步骤:

        1)        设置初始值;

        2)        执行测试,看看循环是否应当继续运行;

        3)        执行循环体;

        4)        更新用于测试的值。

          For循环的形式如下:

        for (init-expresstion; test-expresstion; update-expresstion)
            body-statement

      说明:  

        1)        C++将整个for看做一条语句,虽然循环体可以包含一条或多条语句。

        2)        For循环只执行一次初始化表达式,初始化表达式可以空,空时最好写入NULL,或者0,这样可以代表并不是程序员忘记了写初始化语句。

        3)        Test-expression可以用任意类型表达式,C++将把结果强制转化为bool类型,其中0值代表false,非0值代表true。通样test-expression可以空,空的时候等价于true,空的时候最好写入true,或者1,这样代表并不是程序员忘记了写初始化语句。

        4)        For循环是入口条件(entry-condition)循环,在每轮循环之前计算测试表达式的值。Update-expression在每轮循环结束时执行。同样Update-expression可以空,空时最好写入NULL,或者0,这样可以代表并不是程序员忘记了写初始化语句。

        5)        C++常用的方式是在for与圆括号之间加上一个空格,while与if类似。而函数与圆括号之间不要空格。

        5.1.2  带变量声明的for循环

        C++在C的基础上为for加入一个特性,可以在for的init-expresstion中声明变量。这时for循环的形式可以表述为: 

        for (init-statement test - expresstion; update - expresstion)
            body - statement

        5.1.3  副作用与顺序点  

        副作用(side effect)是指计算表达式时对某些变量进行了修改。顺序点(sequence point),可以认为一个分号就是一个顺序点。顺序点意味着处理下一条语句之前,赋值运算符、递增运算符、递减运算符进行的所有修改都必须完成。任何完整的表达式末尾都是顺序点。

        完整表达式是指:不是另一个更大的表达式的子表达式。

        例如: 

        y = (4 + x++) + (6 + x++);

        4 + x++不是一个完整的表达式,C++不保证x值在4+x++后加1。而这条语句是一个完整的表达式,C++只保证在下一条语句之前,x被递增2次。 

        5.1.4  前缀格式与后缀格式

        前缀格式如++x与后缀格式x++。如果表达式的值未被使用,则只存在副作用。值用前缀格式还是后缀格式对程序行为没有什么影响。但执行速度有细微差别。

        对于前缀格式,将变量值加1,然后返回结果。

        对于后缀格式,先复制一个变量的副本,然后将变量加1,然后返回复制的副本。

        对于内置类型和现代编译器,这看似不是问题,然而对于类而言,前缀格式比后缀格式效率更高。因此,应当养成好习惯,尽量使用前缀格式。

        5.1.5  递增/递减运算符和指针

        将*和++同时用于指针时,运算符的优先级和结核性将决定计算结果。

        前缀递增、前缀递减与解除引用运算符的优先级相同,都是以从右到左结合。

        后缀递增、后缀递减优先级相同,但是比前缀递增优先级高,以从左到右结合。例如下面的一些表达式: 

        *++pt;        //先把++作用于pt, 然后将*作用于被递增后的pt;
        (*pt)++;        //先将*作用于pt,然后把取出的值递增;
        *pt++;        //先把++作用于pt,后将*作用于被递增的pt;

        5.1.6  复合语句(语句块) 

        C++和C使用两个花括号{}构造一个复合语句(语句块)。代码被一堆花括号包含组成将被视为一条语句。

        5.1.7  逗号运算符

        逗号运算符允许将两个表达式语句(必须是表达式语句,声明语句不行)放到C++语句只允许一个表达式的地方。一个逗号是一个顺序点。被逗号分隔的表达式将按照从左到右的顺序执行。如—j,++i;

        逗号并不都是逗号运算符。在声明语句中,逗号的作用是将变量列表中相邻的变量名分隔开。如int i, j;

        逗号运算符多用于for的init-expression和update-expression。这样带来了很多灵活性。

        5.1.8  比较运算符

        C++的比较运算符如下

    操作符

    含义

    小于

    <=

    小于或等于

    ==

    等于

    大于

    >=

    大于或等于

    !=

    不等于

        说明:C风格的字符串比较,应该使用函数strcmp(),这个函数在头文件《cstring》中。C++风格的字符串string类可以使用比较运算符。

        5.2  while循环

        While循环可以看做是没有初始化和更新部分的for循环。While循环也是入口条件循环。只有测试条件和循环体,形式如下: 

        while (test-condition)
            body-statement

        首先,计算test-condition,如果为true执行循环体中的语句。 

        其次,返回再执行测试条件。

        在C++中,for循环和while循环本质上是相同的。如

        for (init-expresstion; test-expresstion; update-expresstion)
            body-statement

          可以转换为

        init-expresstion;
        while (test-condition){
            body-statement
        update-expresstion;
        }

    5.3  do-while循环 

        Do-while循环是出口条件(exit condition)循环。形式如下:

        do
            body-statement
        while (test-condition);

      Do-while循环,先执行循环体,在执行测试条件。   注意while后面的圆括号后面要加分号。

      通常,入口条件循环比出口条件循环好。也有例外,do-while循环多用于获取用户输入。    

    5.4  基于范围的for循环(C++11)

      基于范围的for循环简化了常用的循环,对数组(或容器类,如vector、array)。看下面的例子:

        //对数组使用基于范围的for循环
        double v[4] = { 1.0, 2.0 };
        for (double d : v)
        {
            cout << v << endl;
        }

       如果想修改数组内容,需要使用引用,引用将在后面讲解,这里看下例子:        

        //使用引用修改数组内容
        double v[4] = { 1.0, 2.0 };
        for (double &d : v)
        {
            d *= 0.8;
        }

     这里的数组也可以是初始化列表:

        //使用初始化列表
        for (double d : {1.0, 2.0, 3.0})
        {
            cout << d << endl;
        }

    5.5  二维数组 

        C++没有提供二维数组,但是用户可以创建每个元素本身都是数组的数组。如int matrix[4][5]; 将建立一个5大小的矩阵。二维数组在内容是一块连续的空间,是多个一维数组连续存放。

        二维数组的初始化:

        int matrix[2][2] = { { 1, 2 }, { 2, 2 } };    //初始化列表

      

  • 相关阅读:
    java 输出质数
    各大OJ
    使用css让图片居中
    poj 1250 Tanning Salon
    Struts2 中整合DWR3实现文件上传
    C语言I博客作业02
    The first essay.
    tar命令
    wBox Demo
    缓存记录
  • 原文地址:https://www.cnblogs.com/Dream-Fish/p/3954697.html
Copyright © 2011-2022 走看看