zoukankan      html  css  js  c++  java
  • (C/C++学习笔记) 六. 表达式

    六. 表达式

    ● 表达式

    表达式 expression

    An expression consists of a combination of operators and operands. (An operand is what an operator operates on.) The simplest expression is a lone operand, and you can build in complexity from there. E.g.:

    4

    -6

    4+21

    a*(b + c/d)/20

    q = 5*2

    x = ++q % 3

    q > 3

    表达式的副作用

    对于因操作数计算的次序不同产生不同结果的表达式为带副作用的表达式。在计算时会影响其他操作数的值,引起副作用的运算符为带副作用的运算符。如++--以及各种赋值运算符为带副作用的运算符。例如:

    x=1,(x+2)*(++x)

    //先计算x+2表达式的值为6;

    //若先计算++x,由于修改了x+2x的值,计算结果为8。

     

    ● 语句

    语句 statement

    语句是程序中可以独立执行的最小单元,类似于自然语言中的句子。

    语句一般由分号结束。

    ※ 有下面几种语句: ① 表达式语句; ② 赋值语句; ③ 空语句; ④ 说明语句; ⑤ 块语句

    语句通常是由表达式构成的,表达式尾部加上分号构成表达式语句。

     

    a=b+c; //由赋值表达式构成的语句,通常称其为赋值语句。

    i+j;    //由算术运算表达式构成的语句。

    ; //由一个空的表达式构成的语句叫做空语句。空语句常用于在程序中某处根据语法要求应该有一条语句,而实际上又没有什么操作可执行的场合。

     

    //空语句的案例:

    例如 while(getchar()!=' ');    //一般的while()条件后面本来是不能加分号的

    //本语句的功能是,只要从键盘输入的字符不是回车则重新输入。这里的循环体为空语句

     

    变量的说明必须以分号结束,所以变量的说明也是语句,叫做说明语句。

    由一对花括号{}括起来的多条语句叫做一个块语句。块语句也叫复合语句,它在语法上等价于一条语句。主要用于在程序的某处只允许存在一条语句,而需要执行一项必须由多条语句才能完成的操作。

    例如:

    {

    int i=5;    //变量说明语句。

    i=(i+5)/2;

    cout<<i<<endl; //花括号{}内的3条语句构成一个块语句。

    }

     

    ● 运算符和运算表达式的综合案例

    #include <iostream.h>

    void main()

    {

        int a=10;

        int b = a+5.2/3.0-9/5;

        cout<<"b= "<<b<<endl;

        int x=10,result;

        double y=8.5;

        result=x++;                                                            //递增表达式

        cout<<"result= "<<result<<" "<<"x= "<<x<<endl;                    //" "表示不可显示的ASCII字符(跟可以显示的字符一样也是字符常量),类似的字符称为

                                                                            //转义字符(escape character)/转义序列(escape sequence)

        result=--x;                                                            //递减表达式

        cout<<"result= "<<result<<" "<<"x= "<<x<<endl;

        result=x>y;                                                            //关系表达式

        cout<<"result= "<<result<<endl;

        result=x>0&&y<0;                                                    //逻辑表达式

        cout<<"result= "<<result<<endl;

        result=!x || y<1;                                                    //逻辑表达式

        cout<<"result= "<<result<<endl;

        result=(x++,y+=x,x-y);                                                //逗号表达式

        cout<<"result= "<<result<<" "<<"x= "<<x<<" "<<"y= "<<y<<endl;

        result=(x>y?x++:y);                                                    //条件表达式;此时逻辑表达式为假,因此(x>y?x++:y)这整个条件表达式的值为y的值,因为

                                                                            //resultint,所以y原来的值19.5转换成了19

        cout<<"result= "<<result<<" "<<"x= "<<x<<endl;

    }

     

    ● 条件运算符与条件表达式

    #include <iostream.h>

    int main()

    {

        int score;    //一定要先声明下面即将用到的变量score的数据类型

        cout<<"Input score:"<<endl;

        cin>>score;

        cout<<(score>=60?"pass":"fail")<<endl;

        return 0;

    }

     

    ● 自增与自减

    #include <iostream>

    using namespace std;

     

    int main()

    {

        int x=10,y;

        y=2*x++;    //first, multiply x by 2 assign to y; then, increment x by 1

        cout<<"y="<<y<<" "<<"x="<<x<<endl;

        return 0;

    }

     

    #include <iostream>

    using namespace std;

     

    int main()

    {

        int x=10,z;

        z=2*++x;    //first, increment x by 1; then, multiply x by 2 and assign to z

        cout<<"z="<<z<<" "<<"x="<<x<<endl;

        return 0;

    }

     

    #include <iostream>

    using namespace std;

     

    int main()

    {

        int x=10,y,z;

        y=2*x++;

        z=2*++x;

        cout<<"x="<<x<<" "<<"y="<<y<<" "<<"z="<<z<<endl;

        return 0;

    }

    ++i: 先让i1, 再让i参加其它运算

    i++: 先让i参加其它运算, 然后i1

    前置形式

    int i=5x=++iy=i// i 先加1(增值)后再赋给x (i=6, x=6,y=6)

    int i=5++ix=y=i// (i=6, y=6,x=6)

    后置形式

    int i=5x=i++y=i// i 赋给后再加1(x=5, i=6,y=6)

    int i=5i++x=y=i// (i=6, y=6,x=6)

    再如, 前缀运算是先变化后运算,后缀运算是先运算后变化。

     

  • 相关阅读:
    P1093 奖学金
    『模板』快速排序
    [模板]选择排序&&冒泡排序&&插入排序
    CF898A Rounding
    计算细胞数【BFS】
    字符串匹配问题(lfyzoj)
    [HDU]4694 Important Sisters(支配树)
    [BZOJ]4650: [Noi2016]优秀的拆分
    [BZOJ]4908: [BeiJing2017]开车
    [洛谷]P3729 曼哈顿计划EX(最小割树/等价流树)
  • 原文地址:https://www.cnblogs.com/ArrozZhu/p/8377709.html
Copyright © 2011-2022 走看看