NO2数据类型、运算符和表达式电子课件C++程序设计案例教程.ppt
数据类型、运算符和表达式数据类型、运算符和表达式 常常量量和和变变量量是是C+语语言言中中最最基基本本的的数数据据元元素素,它它是是C+语语言言编编程程的的基基础础。C+语语言言有有着着丰丰富富的的数数据据类类型型,分分为为基基本本数数据据类类型型和和非非基基本本数数据据类类型型(复复合合数数据据类类型型)两两大大类类。本本章章将将讲讲述述基基本本数数据据类类型型,非非基基本本数数据据类类型型将将在在第第6章章讲讲解解。本本章章还还将将讲讲述述C+语语言言中中常常用用的的运运算符和表达式。算符和表达式。2.1 常量和变量常量和变量 Add your text in here 计算圆的周长和面积计算圆的周长和面积 定义符号常量定义符号常量PI和变量,根据键盘输入的圆的半径计算该圆的周长和和变量,根据键盘输入的圆的半径计算该圆的周长和面积。面积。2.1 常量和变量常量和变量 源代码展示源代码展示#include stdafx.h#include int main(int argc,char*argv)const double PI=3.1415926;/定义符号常量并赋初值定义符号常量并赋初值double r,zc,area;/定义变量定义变量cout请输入圆的半径:请输入圆的半径:r;/接收用户输入的半径接收用户输入的半径 cout该圆的周长为:该圆的周长为:2*PI*rendl;/计算圆周长计算圆周长cout该圆的面积为:该圆的面积为:PI*r*rendl;/计算圆面积计算圆面积return 0;2.1 常量和变量常量和变量 运行结果运行结果程序分析程序分析 上述程序定义了符号常量上述程序定义了符号常量PI,用于表示圆周率的值;,用于表示圆周率的值;3个变量个变量r、zc和和area,分别表示圆的半径、周长和面积。,分别表示圆的半径、周长和面积。知识讲解知识讲解常量常量常量常量 在在C+C+语言中,通过关键字语言中,通过关键字constconst来定义符号常量,其来定义符号常量,其语法格式如下:语法格式如下:const const 类型名类型名 常量名常量名=值值;变变变变量量量量 变量名也是一种标识符,其命名规则和标识符的命名规则相变量名也是一种标识符,其命名规则和标识符的命名规则相同。即在同。即在C+C+中,变量名只能由字母、数字及下划线组成,并且必中,变量名只能由字母、数字及下划线组成,并且必须以字母或下划线开头。变量名不能与须以字母或下划线开头。变量名不能与C+C+语言中的关键字、系统语言中的关键字、系统函数名和类名相同。函数名和类名相同。在在C+C+中,变量名也对大小写敏感,如中,变量名也对大小写敏感,如ZCZC和和zczc是两个不同的变是两个不同的变量名。一般变量名用小写字母表示。量名。一般变量名用小写字母表示。C+C+语言本身对变量名的长度没有限制,但为了便于阅读和理语言本身对变量名的长度没有限制,但为了便于阅读和理解,变量名不易过长。解,变量名不易过长。2.2 基本数据类型基本数据类型 Add your text in here 使用整型数据类型使用整型数据类型定义整型变量,并给其赋值,观察其输出。定义整型变量,并给其赋值,观察其输出。2.2.1 整型数据类型整型数据类型2.2.1 整型数据类型整型数据类型源代码展示源代码展示#include stdafx.h#include int main(int argc,char*argv)int a;/定义整型变量定义整型变量a=10;/给变量给变量a赋值赋值couta=aendl;a=10.3;/给变量给变量a重新赋值重新赋值couta=aendl;return 0;2.1 常量和变量常量和变量 运行结果运行结果程序分析程序分析 在上述程序中,第一次给变量在上述程序中,第一次给变量a赋值为赋值为10,因此输出是,因此输出是10。第二次给。第二次给a赋值为赋值为10.3,编译时将给出警告信息,意思是将,编译时将给出警告信息,意思是将10.3转化为整型数据类转化为整型数据类型时可能会丢失数据,因此只取整数部分输出。型时可能会丢失数据,因此只取整数部分输出。知识讲解知识讲解 整型变量的声明方式如下:整型变量的声明方式如下:修饰符修饰符 int 变量名变量名;修饰符为可选项,包括修饰符为可选项,包括unsigned(无符号)、(无符号)、signed(有符(有符号)、号)、short(短)和(短)和long(长)(长)4种。这样,整型数据类型可种。这样,整型数据类型可分为分为4种,即无符号整型、有符号整型、短整型和长整型。种,即无符号整型、有符号整型、短整型和长整型。2.2.2 浮点型数据类型浮点型数据类型 Add your text in here使用浮点型数据类型使用浮点型数据类型定义浮点型变量,并给其赋值,观察其输出。定义浮点型变量,并给其赋值,观察其输出。2.2.2 浮点型数据类型浮点型数据类型 源代码展示源代码展示#include stdafx.h#include int main(int argc,char*argv)float f;/定义浮点型变量定义浮点型变量double d;/定义浮点型变量定义浮点型变量f=3.1415926;/给变量给变量f赋值赋值d=3.1415926;/给变量给变量d赋值赋值coutf=fendl;coutd=dendl;return 0;2.1 常量和变量常量和变量 运行结果运行结果程序分析程序分析 由于没有设置输出精度,系统默认输出由于没有设置输出精度,系统默认输出6位(包含小数点)小数。如位(包含小数点)小数。如果希望双精度变量输出更多的小数位数,可以通过函数果希望双精度变量输出更多的小数位数,可以通过函数setprecision(n)来来设置输出位数,设置输出位数,n表示小数位数(包含小数点)。例如,下面的语句可表示小数位数(包含小数点)。例如,下面的语句可以将变量以将变量d的小数部分全部输出:的小数部分全部输出:coutd=setprecision(8)dendl;使用使用setprecision(n)函数时需要引用头文件函数时需要引用头文件iomanip.h。知识讲解知识讲解 小数在计算机中称为浮点型数。在小数在计算机中称为浮点型数。在小数在计算机中称为浮点型数。在小数在计算机中称为浮点型数。在小数在计算机中称为浮点型数。在小数在计算机中称为浮点型数。在C+C+C+语言中,语言中,语言中,语言中,语言中,语言中,浮点型数据类型包括浮点型数据类型包括浮点型数据类型包括浮点型数据类型包括浮点型数据类型包括浮点型数据类型包括floatfloatfloat(单精度浮点数)、(单精度浮点数)、(单精度浮点数)、(单精度浮点数)、(单精度浮点数)、(单精度浮点数)、doubledoubledouble(双精度浮点数)和(双精度浮点数)和(双精度浮点数)和(双精度浮点数)和(双精度浮点数)和(双精度浮点数)和long doublelong doublelong double(长双精度(长双精度(长双精度(长双精度(长双精度(长双精度浮点数)浮点数)浮点数)浮点数)浮点数)浮点数)3 33种。种。种。种。种。种。单精度浮点数占用单精度浮点数占用单精度浮点数占用单精度浮点数占用单精度浮点数占用单精度浮点数占用323232位存储空间,双精度浮点数位存储空间,双精度浮点数位存储空间,双精度浮点数位存储空间,双精度浮点数位存储空间,双精度浮点数位存储空间,双精度浮点数占用占用占用占用占用占用646464位存储空间。位存储空间。位存储空间。位存储空间。位存储空间。位存储空间。2.2.3 字符型数据类型字符型数据类型 Add your text in here使用字符型数据类型使用字符型数据类型定义一个字符型变量和一个整型变量,并给它们赋相同的值,观察输定义一个字符型变量和一个整型变量,并给它们赋相同的值,观察输出结果。出结果。2.2.3 字符型数据类型字符型数据类型 源代码展示源代码展示#include stdafx.h#include int main(int argc,char*argv)char c1;/定义字符变量定义字符变量int c2;/定义整型变量定义整型变量c1=A;/给字符变量赋值给字符变量赋值c2=A;/给整型变量赋值给整型变量赋值 coutc1=c1endl;coutc2=c2endl;return 0;2.2.3 字符型数据类型字符型数据类型 运行结果运行结果程序分析程序分析 程序中将字符程序中将字符A赋值给整型变量赋值给整型变量c2。在。在C+语言中,字符型数据是语言中,字符型数据是转换为整型数据来操作的,系统会自动将字符转换为整型数据来操作的,系统会自动将字符A转换为对应的转换为对应的ASCII码值码值65,因此,因此c2的输出为的输出为65。知识讲解知识讲解 在在C+语言中,字符型数据类型占用语言中,字符型数据类型占用1字节空间。字符型变量声明字节空间。字符型变量声明方式如下:方式如下:修饰符修饰符 char 变量名变量名;修饰符包括修饰符包括unsigned和和signed,分别表示无符号字符型和有符号字符型。,分别表示无符号字符型和有符号字符型。字符常量是用一对单引号括起的一个字符,不能字符常量是用一对单引号括起的一个字符,不能使用双引号,如使用双引号,如aa,AA,#,%都是合法的字符都是合法的字符常量。需要注意的是,常量。需要注意的是,aa和和AA是不同的字符常量。是不同的字符常量。字符字符常量常量 C+语言提供了一种特殊形式的字符常量,以语言提供了一种特殊形式的字符常量,以字符字符“”开头,这类字符常量称为转义字符。开头,这类字符常量称为转义字符。转义转义字符字符2.2.4 布尔型数据类型布尔型数据类型 Add your text in here使用布尔型数据类型使用布尔型数据类型定义一个布尔型变量和一个整型变量,并给它们赋相同的值,观察输定义一个布尔型变量和一个整型变量,并给它们赋相同的值,观察输出结果。出结果。2.2.3 布尔型数据类型布尔型数据类型 源代码展示源代码展示#include stdafx.h#include int main(int argc,char*argv)bool flag1;/定义布尔变量定义布尔变量int flag2;/定义整型变量定义整型变量flag1=true;/给布尔变量赋值给布尔变量赋值flag2=true;/给整型变量赋值给整型变量赋值coutflag1=flag1endl;coutflag2=flag2endl;2.2.4 布尔型数据类型布尔型数据类型 运行结果运行结果程序分析程序分析 程序中定义了一个布尔变量程序中定义了一个布尔变量flag1和一个整型变量和一个整型变量flag2,将布尔值,将布尔值true赋值给赋值给flag1后,输出为后,输出为1,而不是,而不是true;将布尔值;将布尔值true赋值给赋值给flag2后,输出也是后,输出也是1。知识讲解知识讲解 布尔型数据类型用布尔型数据类型用bool表示,布尔型变量取值只有表示,布尔型变量取值只有两个:两个:true和和false,分别表示逻辑真和逻辑假。布尔值,分别表示逻辑真和逻辑假。布尔值true和和false与整型值与整型值1和和0存在对应关系,整型值存在对应关系,整型值1对应布对应布尔值尔值true,整型值,整型值0对应布尔值对应布尔值false。2.3 运算符和表达式运算符和表达式 Add your text in here 算术运算符的应用算术运算符的应用从键盘输入从键盘输入4个整数个整数a,b,c,d,计算表达式,计算表达式a-b/c*d的值的值。2.2.1 算术运算符与表达式算术运算符与表达式2.3.1 算数运算符与表达式算数运算符与表达式 源代码展示源代码展示#include stdafx.h#include int main(int argc,char*argv)int a,b,c,d;double result;cout请输入四个整数:请输入四个整数:abcd;result=a-b/c*d;/计算表达式计算表达式couta-b/c*d=resultendl;return 0;2.3.1 算数运算符与表达式算数运算符与表达式 运行结果运行结果程序分析程序分析 上述程序首先从键盘输入上述程序首先从键盘输入4个整数,在计算表达式个整数,在计算表达式a-b/c*d的值时,的值时,根据算术运算符的优先级和结合性,可以计算得出根据算术运算符的优先级和结合性,可以计算得出a-b/c*d=8-1*2=6。在计算算术表达式的值时,需要注意算术运算符的优先级,即先乘除,在计算算术表达式的值时,需要注意算术运算符的优先级,即先乘除,再取模,最后加减。在执行除法操作时,如果商中有小数部分,则小再取模,最后加减。在执行除法操作时,如果商中有小数部分,则小数部分将被截掉,如数部分将被截掉,如6/4结果为结果为1。知识讲解知识讲解 算术运算符包括加(算术运算符包括加(+)、减()、减(-)、乘()、乘(*)、除()、除(/)和求模运算符(和求模运算符(%),求模运算符用于计算两个数相除的余),求模运算符用于计算两个数相除的余数。数。算术运算符是双目运算符,其操作数一般是整数和浮算术运算符是双目运算符,其操作数一般是整数和浮点数。点数。算术运算符的优先级为:算术运算符的优先级为:“*”“”“/”最高,最高,“%”其次,其次,“+”“”“-”最低。最低。算术运算符的结合性是指运算符和操作数的结合方式,算术运算符的结合性是指运算符和操作数的结合方式,包括包括“从左到右从左到右”和和“从右到左从右到左”两种。对于优先级相同两种。对于优先级相同的算术运算符,其结合性是从左到右。的算术运算符,其结合性是从左到右。2.3.2 关系运算符与表达式关系运算符与表达式 Add your text in here关系运算符的应用关系运算符的应用从键盘输入两个整数,将两个数进行关系比较并输出比较结果。从键盘输入两个整数,将两个数进行关系比较并输出比较结果。2.3.2 关系运算符与表达式关系运算符与表达式 源代码展示源代码展示#include stdafx.h#include int main(int argc,char*argv)int a,b;bool r1,r2;cout输入两个整数:输入两个整数:ab;r1=a!=b;/关系运算关系运算 r2=a=b;/关系运算关系运算coutr1=r1endl;coutr2=r2endl;return 0;2.3.2 关系运算符与表达式关系运算符与表达式 运行结果运行结果程序分析程序分析 执行执行a!=b时,关系表达式成立,因此其值为时,关系表达式成立,因此其值为true,输出为,输出为1;反之输;反之输出出0。知识讲解知识讲解 关系运算符的功能是将两个分量进行比较,其结果类关系运算符的功能是将两个分量进行比较,其结果类型为布尔型。如果关系表达式成立,则结果为型为布尔型。如果关系表达式成立,则结果为truetrue,否则,否则为为falsefalse。在。在C+C+语言中,主要的关系运算符有语言中,主要的关系运算符有6 6种:小于种:小于()、小于等于()、小于等于(=)、大于等于()、大于等于(=)、)、等于(等于(=)和不等于()和不等于(!=!=)。其中,前)。其中,前4 4种优先级相同,它种优先级相同,它们的优先级高于后两种。此外,关系运算符的优先级低于们的优先级高于后两种。此外,关系运算符的优先级低于算术运算符,其结合性是从左到右。算术运算符,其结合性是从左到右。2.3.3 逻辑运算符与表达式逻辑运算符与表达式 Add your text in here逻辑运算符的应用逻辑运算符的应用 在程序中定义逻辑运算表达式,将其赋值给布尔型变量,并输出该在程序中定义逻辑运算表达式,将其赋值给布尔型变量,并输出该变量的值。变量的值。2.3.3 逻辑运算符与表达式逻辑运算符与表达式 源代码展示源代码展示#include stdafx.h#include int main(int argc,char*argv)int a=3,b=4;bool r1;r1=(ab);/逻辑表达式逻辑表达式coutr1=r1endl;return 0;2.3.3 逻辑运算符与表达式逻辑运算符与表达式 运行结果运行结果程序分析程序分析 上述程序中由于关系表达式上述程序中由于关系表达式ab不成立,因此逻辑表不成立,因此逻辑表达式(达式(ab)不成立,所以其值为)不成立,所以其值为false,输出为,输出为0。如果逻辑。如果逻辑表达式是(表达式是(ab),则关系成立。),则关系成立。知识讲解知识讲解 C+C+语言提供了语言提供了3 3种逻辑运算符,分别为逻辑非(种逻辑运算符,分别为逻辑非(!)、逻辑与)、逻辑与(&)和逻辑或()和逻辑或(|)。)。“!”运算符是单目运算符,运算符是单目运算符,“&”和和“|”运算符是双目运算符。逻辑运算符的真值表如下表所示。运算符是双目运算符。逻辑运算符的真值表如下表所示。ab!aa&ba|btruetruefalsetruetruetruefalsefalsefalsetruefalsetruetruefalsetruefalsefalsetruefalsefalse2.3.4 自增和自减运算符自增和自减运算符 Add your text in here自增和自减运算符的应用自增和自减运算符的应用对于自增和自减运算符,分别使用前缀和后缀两种形式,观察变量值对于自增和自减运算符,分别使用前缀和后缀两种形式,观察变量值的变换。的变换。2.3.4 自增和自减运算符自增和自减运算符源代码展示源代码展示#include stdafx.h#include int main(int argc,char*argv)int i=3;int j=4;couti+=i+endl;cout+i=+iendl;coutj-=j-endl;cout-j=-jendl;return 0;2.3.4 自增和自减运算符自增和自减运算符运行结果运行结果程序分析程序分析 上述程序中第一条输出语句的结果为上述程序中第一条输出语句的结果为3,因为,因为i+是后缀自增语句,是后缀自增语句,所以表达式的值是所以表达式的值是i自加之前的值,即自加之前的值,即3。第一条语句执行结束后,变。第一条语句执行结束后,变量量i的值变为的值变为4。执行第二条输出语句时,因为。执行第二条输出语句时,因为+i是前缀自增语句,所是前缀自增语句,所以此时表达式的值是以此时表达式的值是i自加之后的值,即自加之后的值,即5。知识讲解知识讲解 前缀自增和自减运算符的形式为:前缀自增和自减运算符的形式为:+(-)i;+(-)i;表示先对变量表示先对变量i i进行自增或者自减操作,然后再使用变量的值。进行自增或者自减操作,然后再使用变量的值。后缀自增和自减运算符的形式为:后缀自增和自减运算符的形式为:i+(-);i+(-);表示先使用变量表示先使用变量i i的值,然后再对变量进行自增或者自减操作。的值,然后再对变量进行自增或者自减操作。2.3.5 赋值运算符赋值运算符 Add your text in here赋值运算符的应用赋值运算符的应用使用赋值运算符和复合赋值运算符计算使用赋值运算符和复合赋值运算符计算150的累加和。的累加和。2.3.5 赋值运算符赋值运算符源代码展示源代码展示#include stdafx.h#include int main(int argc,char*argv)int i=1;int sum=0;while(i=50)sum+=i;/复合赋值运算符复合赋值运算符i+;/自增运算符自增运算符cout1到到50的累加和为:的累加和为:sumendl;return 0;2.3.5 赋值运算符赋值运算符运行结果运行结果程序分析程序分析 上述程序使用了循环控制结构的上述程序使用了循环控制结构的while语句,语句,while语句将在后续章语句将在后续章节详细讲解。此外,程序中还使用了复合赋值运算符(节详细讲解。此外,程序中还使用了复合赋值运算符(+=),语句),语句sum+=i的作用相当于的作用相当于sum=sum+i,即将变量,即将变量sum的值加上变量的值加上变量i的值的值后,再将结果赋值给后,再将结果赋值给sum。知识讲解知识讲解 C+语言中的赋值运算符为语言中的赋值运算符为“=”,该运算符的结,该运算符的结合性为从右向左,作用是将一个数据赋给一般变量。合性为从右向左,作用是将一个数据赋给一般变量。赋值赋值运算符运算符 在赋值运算符在赋值运算符“=”之前加上其他运算符构成复合赋之前加上其他运算符构成复合赋值运算符值运算符。复合赋值复合赋值运算符运算符2.3.6 强制类型转换运算符强制类型转换运算符 Add your text in here强制类型转换运算符的应用强制类型转换运算符的应用使用强制类型转换运算符实现数据类型之间的显式转换。使用强制类型转换运算符实现数据类型之间的显式转换。2.3.6 强制类型转换运算符强制类型转换运算符源代码展示源代码展示#include stdafx.h#include int main(int argc,char*argv)int a1=100;/定义整型变量定义整型变量long a2;/定义长整型变量定义长整型变量a2=(long)a1;/强制类型转换强制类型转换couta2=a2endl;float b1=3.14;/定义浮点型变量定义浮点型变量int b2;/定义整型变量定义整型变量b2=(int)b1;/强制类型转换强制类型转换 coutb2=b2endl;char c1=A;/定义字符型变量定义字符型变量int c2;/定义整型变量定义整型变量c2=(int)c1;/强制类型转换强制类型转换coutc2=c2endl;return 0;2.3.6 强制类型转换运算符强制类型转换运算符运行结果运行结果程序分析程序分析上述程序将整型强制转换为长整型时精度没有变化,将浮点型强制转上述程序将整型强制转换为长整型时精度没有变化,将浮点型强制转换为整型时精度损失了,将字符型转换为整型时输出字符对应的换为整型时精度损失了,将字符型转换为整型时输出字符对应的ASCII码值。码值。知识讲解知识讲解 强制类型转换是数据类型的显式转换。在强制类型转换是数据类型的显式转换。在C+C+语言中,数据类型的显式转换可以使用运算语言中,数据类型的显式转换可以使用运算符符()()来实现,方法是:在来实现,方法是:在()()运算符中加上需要运算符中加上需要转换的目标数据类型,然后放在变量之前。转换的目标数据类型,然后放在变量之前。类型转换还有一种方式,即隐式转换。隐式类类型转换还有一种方式,即隐式转换。隐式类型转换是系统默认的,不需要声明即可实现类型转换是系统默认的,不需要声明即可实现类型的转换。型的转换。2.3.7 条件运算符条件运算符 Add your text in here条件运算符的应用条件运算符的应用 从键盘输入两个整数,使用条件运算符比较其值的大小,并输出其从键盘输入两个整数,使用条件运算符比较其值的大小,并输出其中较大的数。中较大的数。2.3.7 条件运算符条件运算符源代码展示源代码展示#include stdafx.h#include int main(int argc,char*argv)int a,b,result;cout请输入两个整数:请输入两个整数:ab;result=ab?a:b;/条件运算符条件运算符couta和和b中较大的数是:中较大的数是:resultb?a:b时,时,先判断表达式先判断表达式ab是否成立,如果成立,则将是否成立,如果成立,则将a的值赋给的值赋给result;否则;否则将将b的值赋给的值赋给result。知识讲解知识讲解 在在C+C+语言中,条件运算符(语言中,条件运算符(?:?:)是唯一的)是唯一的一个三目运算符。其语法格式如下:一个三目运算符。其语法格式如下:expr1?expr2:expr3;expr1?expr2:expr3;其含义是:如果表达式其含义是:如果表达式expr1expr1的结果为的结果为truetrue,那么整个表达式的结果就是,那么整个表达式的结果就是expr2expr2的值,否则的值,否则就是就是expr3expr3的值。的值。2.3.8 位运算符位运算符 Add your text in here位运算符的应用位运算符的应用对变量进行按位与、按位或、按位异或等位运算,并将结果输出。对变量进行按位与、按位或、按位异或等位运算,并将结果输出。2.3.8 位运算符位运算符源代码展示源代码展示#include stdafx.h#include int main(int argc,char*argv)int a=3,b=4;couta&b=(a&b)endl;/按位与按位与couta|b=(a|b)endl;/按位或按位或coutab=(ab)右移位右移位101020010左移位左移位101021000按位取反按位取反10100101