650 likes | 800 Views
主要内容安排. 第一章: C++ 入门 第二章:基本数据类型与输入输出 第三章:表达式与语句 第四章:过程化语句 第五章:函数 第六章:程序结构 第七章:数组. 第三章 表达式和语句. 3.1 表达式 3.2 算术运算和赋值 3.3 算术类型转换 3.4 增量和减量 3.5 关系与逻辑运算 3.6 if 语句 3.7 条件运算符 3.8 逗号表达式 3.9 求值次序与副作用 小结. 3.1 表达式. 主要内容: 1. 表达式概述 2. 左值和右值 3. 优先级和结合性 4. 语句与块.
E N D
主要内容安排 第一章:C++入门 第二章:基本数据类型与输入输出 第三章:表达式与语句 第四章:过程化语句 第五章:函数 第六章:程序结构 第七章:数组
第三章 表达式和语句 3.1 表达式 3.2 算术运算和赋值 3.3 算术类型转换 3.4 增量和减量 3.5 关系与逻辑运算 3.6 if语句 3.7 条件运算符 3.8 逗号表达式 3.9 求值次序与副作用 小结
3.1 表达式 主要内容: 1. 表达式概述 2. 左值和右值 3. 优先级和结合性 4. 语句与块
1.表达式概述 定义:是操作符、操作数和标点符号组成的序列。其目的是用来说明一个计算过程,且表达式可以嵌套。 计算规则: (1)约定:类型转换。 (2)求值次序:指表达式中各个操作数的求值次序视编译器不同而不同。 (3)优先级:先做优先级高的操作。 (4)结合性:同等优先级时该先做哪个操作的规定。
1.表达式概述(续) 例: (1)float a; a=5/2; //a得到的值为2,属规则(1)(2)d=a+b+c; //C++规定:+-的结合性从左至右 d=a=3; //C++规定:=结合性从右至左 (3)d=a+b*c; //优先级次序:*+=
2.左值和右值 定义: 左值:能出现在赋值表达式左边的表达式。左值表达式具有存放数据的空间,并且存放是允许的。左值可作为右值表达式。 右值:只能出现在赋值表达式的右边。 表达式按值分类:左值、右值、不产生值。
2.左值和右值(续) 例: (1)int a=3; //a是变量,是左值 const int b=4;//b是常量,不是左值 (2)int a,b=6; a=b; //b是变量,所以是左值,此处为右值 a=8; //8是常量,只能作右值,不能作为左值 (3)int a; (a=4)=28; //OK:a=4是左值表达式,可以被赋为28
3.优先级和结合性 补充: 操作符分类: (1)单目:操作符 数 | 数 操作符 (2)双目:数 操作符 数 (3)三目:数 ? 数 :数
3.优先级和结合性(续) 优先级:按从高到低。 结合性: (1)从左至右:其余 (2)从右至左:单目、三目、赋值
优先级 操作符 结合性 1 ()[ ] —〉 左—〉右 2 !~ + - ++ —*(强制转换类型)sizeof new delete 右—〉左 3 . * -〉* 左—〉右 4 * / % 左—〉右 5 + - 左—〉右 6 << >> 左—〉右 7 < <= >= > 左—〉右 8 = = ! = 左—〉右 9 & 左—〉右 10 ^ 左—〉右 11 | 左—〉右 12 && 左—〉右 13 || 左—〉右 14 ?: 右—〉左 15 = *= /= += -= <<= >>= %= &= ^= &&= ||= 右—〉左 16 , 左—〉右
4.语句与块 语句作用:规定程序执行的控制流。 语句分类: (1)表达式语句: 表达式; (2)空语句: ; (3)复合语句/块: 括在一对花括号{}中的语句序列。
第三章 表达式和语句 3.1 表达式 3.2 算术运算和赋值 3.3 算术类型转换 3.4 增量和减量 3.5 关系与逻辑运算 3.6 if语句 3.7 条件运算符 3.8 逗号表达式 3.9 求值次序与副作用 小结
3.2 算术运算和赋值 主要内容: 1. 操作符种类 2. 赋值缩写 3. 溢出
1.操作符种类 优先级:+ - * / % + -(加、减)
2.赋值缩写 (1)当一个变量既出现在表达式左边又出现在右边时,可以缩写。 (2)赋值以及缩写都要求左边的表达式为左值。 (3)赋值构成一个表达式,因而它具有值。赋值表达式的值为赋值符左边表达式的值。 (4)优点:有效,可读性不差。
2.赋值缩写(续) 补充格式:变量名?=表达式 转化为:变量名=变量名?(表达式) 赋值缩写的操作符有: *= /= += -= |= <<= >>= %= &= &&= ||= 例:int x,y,z; x=x*y; //x*=y; x=x+z; //x+=z; x=x/y; //x/=y; x=x%y; //x%=y;
3.溢出 原因: 一个变量被赋予一个超出其数据类型表示范围的数值。 结果: 不会引起编译错误,但会使运行结果发生偏差。 例: 一个整型变量,用任何一个超过表示范围的整数初始化,得到的值为用该整型范围作模运算后的值。 int w=142896; //值为11824 w为2字节整型数时,142896=2*65536+11824
第三章 表达式和语句 3.1 表达式 3.2 算术运算和赋值 3.3 算术类型转换 3.4 增量和减量 3.5 关系与逻辑运算 3.6 if语句 3.7 条件运算符 3.8 逗号表达式 3.9 求值次序与副作用 小结
3.3 算术类型转换 主要内容: 1. 分类 2. 自动转换 3. 强制转换
3.3 算术类型转换(续1) 1.分类 (1)隐式(称自动转换) (2)显式(称强制转换) 2.自动转换 定义:C++遇到两种不同数据类型的数值进行运算时,会将两个数作适当的类型转换,再进行运算。
2.自动转换(续1) 规则:char unsigned char short unsigned short int unsigned int long int float unsigned long double long double 小结:转换总是朝表达数据能力更强的方向,并逐个运算符进行。
2.自动转换(续2) 例:float f=3.5; int n=6; long k=21; double ss=f*n+k/2;
3.强制转换 补充格式:(类型名)(表达式) 说明: (1)在一个数值或变量前加上带括号的类型名。 (2)类型名后跟带括号的数值或表达式(C不可以)。 例: cout<<(unsigned long)234*456/6<<endl; cout<<(unsigned long)(243)*456/6<<endl;
第三章 表达式和语句 3.1 表达式 3.2 算术运算和赋值 3.3 算术类型转换 3.4 增量和减量 3.5 关系与逻辑运算 3.6 if语句 3.7 条件运算符 3.8 逗号表达式 3.9 求值次序与副作用 小结
3.4 增量和减量 1.操作符:++ -- 优先级:高 结合性:从右至左 2.使用: (1)++a,--a 称前增量:先修改操作数使之增1/减1,再将增1/减1后的a值作为表达式的值。 (2)a++,a-- 称后增量:先将变量a的值作为表达式的值确定下来,再将a 增1/减1。
3.4 增量和减量(续1) 3.注意: (1)增量和减量的操作数必须是左值,但前增量的结果仍是左值,而后增量的结果不是左值。 (2)++,--是一个整体,不能有空格,且编译首先识别++,--。
3.4 增量和减量(续2) 例: c=a+b; //对 c=a++b; //错 c=a++ b c=a+++b; //对 c=a++ +b c=a++++b; //错 c=a++ ++b c=a+++++b; //错 c=a++ ++ +b
第三章 表达式和语句 3.1 表达式 3.2 算术运算和赋值 3.3 算术类型转换 3.4 增量和减量 3.5 关系与逻辑运算 3.6 if语句 3.7 条件运算符 3.8 逗号表达式 3.9 求值次序与副作用 小结
3.5 关系与逻辑运算 主要内容: 1. 运算符 2. 比较运算符 3. 不等于运算符 4. 嵌入赋值 5. 逻辑非运算符 6. 逻辑运算 7. 短路表达式
1.运算符 (1)关系运算符: > >= < <= 大于 大于等于 小于 小于等于 == != 等于 不等于 结合性:从左至右 结果: 真假(1或0)
1.运算符(续) (2)逻辑运算符: ! 逻辑非 && 逻辑与 || 逻辑或 注意: (1) >= <= != == && ||都是一个操作符的整体,中间不能有空格。 (2) >= <= !=字符顺序不能颠倒。
2.比较运算符 (1) =:称赋值运算符,产生的值是所赋的值。 (2) ==:称比较运算符,产生的值是比较的结果(1/0)。 例: (1)x=somevalue; if (x=9) cout <<”x is not 0\n”;//总会执行 (2) x=somevalue; if (x=0) cout <<”x is 0\n”; //总是不会执行
3.不等于运算符 (1)!=:称不等于运算符 (2)=!:称等于非运算符 关系:二者意义完全不同,不能互替。 例: (1)if (x!=9) cout <<”x is not 0\n”;//可能会执行 (2)if (x=!9) cout <<”x is not 0\n”;//总是不会执行
4.嵌入赋值 有时候,需要将一个函数值赋给一个变量,然后比较该变量的值与预定值是否相等。 例: x=func( ); if(x==somevalue) //语句 相当于: if((x=func( ))==somevalue) //语句
5.逻辑非运算 !:称逻辑非运算符,求反。 例: (1)!0=1 (2)!1=0 (3)if(!(x==9)) cout <<”x is not 9.\n” ;
6.逻辑运算 &&:称逻辑与运算符,同真则真,有假则假。 || :称逻辑或运算符,有真则真,全假则假。 例: int temp=90,humi=80; if(temp>=80 && humi>=50) //语句 if(temp<60 || temp >80) //语句
7.短路表达式 (1)如果多个表达式用&&连接,则一个假表达式将整个连接都为假。 (2)如果多个表达式用||连接,则一个真表达式将使整个表达式都为真。 例: (1)int n=3,m=6; if (n>4 && m++<10) //语句 (2)int temp=10; if (temp<60 || temp>80) //语句
第三章 表达式和语句 3.1 表达式 3.2 算术运算和赋值 3.3 算术类型转换 3.4 增量和减量 3.5 关系与逻辑运算 3.6 if语句 3.7 条件运算符 3.8 逗号表达式 3.9 求值次序与副作用 小结
3.6 if语句 主要内容: 1. if语句(单分支) 2. 空语句 3. if…else语句(双分支) 4. 解决二义性
1.if语句(单分支) 格式: (1)if (条件表达式) 语句; (2)if (条件表达式) {语句;} //复合语句 执行过程:如果条件表达式进行一次测试,且测试为真,则执行后面的语句。
1.if语句(续1) 例: #include <iostream.h> #include <conio.h> void main( ) { cout <<”please input the b key to hear a bell.\n”; char ch=getche( ); if (ch==’b’) cout <<’\a’; }
2.空语句 格式: if (条件表达式) ; 说明: ;标志if语句的的结束,不管条件表达式为T/F,总是接着执行后面的语句。
3.if…else语句 格式: if(条件表达式) //语句1 else //语句2 执行过程: “不是---/就是”,如果条件表达式为真,则执行语句1,否则执行语句2。 说明:语句1、语句2可以是简单语句或复合语句。
3.if…else语句(续1) 补充:if语句的嵌套 if (条件表达式) if (条件表达式1) 语句11 else 语句12 else if (条件表达式2) 语句21 else 语句22 实现:多选一
3.if…else语句(续2) 变形:多分支 if (条件1) 语句1 else if (条件2) 语句2 else if (条件3) 语句3 else … else if (条件n) 语句n else 语句n+1
3.if…else语句(续3) 例: #include <iostream.h> #include <conio.h> void main( ) { cout <<”please input the b key to hear a bell.\n”; char ch=getche( ); if (ch==’b’) cout <<’\a’; else if(ch==’\n’) cout<<”what a boring selection on…\n”; else cout <<”bye!\n”; }
4.解决二义性 C++规定: if…else 语句成对的规则是: else连接到上面第1个没有配对的且为可见的if上。 说明: 编译并不看程序的缩进格式,而只关心语句。
补充习题 1.分段函数 1 x>0 Y= 0 x=0 -1 x<0
补充习题(续1) 方法1:三个单分支if语句 #include <iostream.h> void main( ) { int x,y; cout <<”please input a number.\n”; cin>>x; if (x>0) y=1; if (x==0) y=0; if (x<0) y=-1; cout <<“y=”<<y<<endl; }
补充习题(续2) 方法2:一个if语句的嵌套 #include <iostream.h> void main( ) { int x,y; cout <<”please input a number.\n”; cin>>x; if (x>0) y=1; else if (x==0) y=0; else y=-1; cout <<“y=”<<y<<endl; }