《二章基本数据类型运算符和表达式ppt课件.ppt》由会员分享,可在线阅读,更多相关《二章基本数据类型运算符和表达式ppt课件.ppt(76页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 C/C+C/C+程序设计二章基本数据类型运算符和表达式ppt课件 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望 C/C+C/C+程序设计b,B,KB,MB,GB,TBMegabyte(MB),中文叫法:兆,中文叫法:兆Kilobyte(KB),中文叫法:,中文叫法:KByte,中文叫法:字节,中文叫法:字节bit,中文叫法:位,中文叫法:位Gigabyte(GB),中文叫法:,中文叫法:GTerabyte(TB),中文叫法:,中文叫法:T1 TB 1 TB=1
2、,024 GB1,024 GB1 GB1 GB =1,024 MB1,024 MB1 MB1 MB =1,024 KB1,024 KB1 KB1 KB =1,024 B1,024 B1 B 1 B=8 b8 b2uangXi University C/C+C/C+程序设计b,B,KB,MB,GB,TB一个位有多大?一个位有多大?只能是“0”或者“1”,这叫二进制一个字节有多大?一个字节有多大?保存一个字符(英文字母、数字、符号)ASCII(美国标准信息交换码)编码两个字节保存一个汉字GB编码可以表示数字02553uangXi University C/C+C/C+程序设计第二章基本数据类型、运
3、算符和表达式第二章基本数据类型、运算符和表达式2.1 2.1 数据类型数据类型2.2 2.2 变量和常量变量和常量 2.3 2.3 运算符和表达式运算符和表达式2.4 2.4 指针指针2.5 typedef2.5 typedef语句语句2.6 2.6 应用举例应用举例4uangXi University C/C+C/C+程序设计2.1 2.1 数据类型数据类型数据为什么要区分类型?数据为什么要区分类型?不同类型的数据代表不同的不同类型的数据代表不同的数据表示形式合法的取值范围占用内存空间大小可参与的运算种类 数据类型的分类数据类型的分类(见下页见下页)5uangXi University C/
4、C+C/C+程序设计2.1 2.1 数据类型数据类型数据类型数据类型基本类型基本类型 构造类型构造类型 整型整型(int)(int)实型实型 字符型字符型(char)(char)布尔型布尔型(bool)(bool)空类型空类型(void)(void)单精度型单精度型(float)(float)双精度型双精度型(double)(double)数组数组指针指针结构型结构型(struct)(struct)共用体共用体(union)(union)枚举枚举(enum)(enum)类类(class)(class)6uangXi University C/C+C/C+程序设计2.1 2.1 数据类型数据类型
5、基本数据类型基本数据类型int整数,在目前绝大多数机器上占4个字节。TC2中是2个字节float单精度浮点数,一般是4个字节长double双精度浮点数,一般是8个字节长bool一般是1个字节长false(0),true(1)char字符,一般是1个字节长用来表示256个ASCII字符,或者0255的整数C/C+将char默认为带符号数,表示范围:-1281277uangXi University C/C+C/C+程序设计2.1 2.1 数据类型数据类型数据类型修饰符数据类型修饰符shortshort int,短整数,一般2个字节长。通常简写为shortlonglong int,长整数,一般是4
6、个字节长。通常简写为longlong double,长双精度(高精度)浮点数,VC中仍是8个字节,TC中是10个字节长。signed用来修饰char、int、short和long,说明他们是有符号的整数(正整数、0和负整数)。一般缺省都是有符号的,所以这个修饰符通常省略unsigned用来修饰char、int、short和long,说明他们是无符号的整数(正整数和0)8uangXi University C/C+C/C+程序设计2.2 变量和常量变量和常量2.2.1变量变量(1)变量的定义变量的定义程序运行过程中其值可变的量程序运行过程中其值可变的量,定义方式如下:定义方式如下:数据类型数据类
7、型 变量名表变量名表;C/C+规定:规定:程序中所有变量必须先定义后使用,可及时发现录入错误(如,程序中所有变量必须先定义后使用,可及时发现录入错误(如,定义的变量为定义的变量为data,而程序体中使用变量为,而程序体中使用变量为date),同时还可),同时还可限制非法运算限制非法运算(如:如:a%b,若若a,b为为float类型则出错类型则出错)。C+中变量可随时使用,随时定义。中变量可随时使用,随时定义。例如:例如:int a,b;(定义变量定义变量a和和b为整型为整型)float x,y;(定义变量定义变量x和和y为单精度实型为单精度实型)9uangXi University C/C+C
8、/C+程序设计2.2 变量和常量变量和常量(2)变量的初始化变量的初始化变量必须先有确定的值后才能参与各种相应的操变量必须先有确定的值后才能参与各种相应的操作,变量获取值的途径有三:作,变量获取值的途径有三:通过输入语句输入通过输入语句输入 (如:如:cina;)通过赋值语句赋值通过赋值语句赋值 (如:如:a=3;)通过初始化方式赋初值通过初始化方式赋初值 (如:如:int k=3;)所谓初始化是指在定义变量的同时指定变量的初所谓初始化是指在定义变量的同时指定变量的初值,形式有二:值,形式有二:数据类型数据类型 变量名变量名=表达式;表达式;数据类型数据类型 变量名(表达式);变量名(表达式)
9、;例如:例如:int k=3,m=3,n(3);()int k=m=n=3;/不允许为多个变量同时不允许为多个变量同时初始化初始化10uangXi University C/C+C/C+程序设计2.2 变量和常量变量和常量强调:强调:使用变量的基本原则使用变量的基本原则变量必须先定义,后使用所有变量一般在可执行语句前定义,不过并不是必须声明的顺序无关紧要声明的顺序无关紧要一条声明语句可声明若干个同类型的变量一条声明语句可声明若干个同类型的变量声明变量,是初始化变量的最好时机声明变量,是初始化变量的最好时机不被初始化的变量,其值为危险的随机数11uangXi University C/C+C/C
10、+程序设计2.2 变量和常量变量和常量(3)变量引用变量引用 C+中增加了中增加了“引用引用”这一概念,许多地方这一概念,许多地方可以代替指针实现相应的功能,比指针更安全。可以代替指针实现相应的功能,比指针更安全。所谓引用即给一个已知变量起个别名,系统不为所谓引用即给一个已知变量起个别名,系统不为引用另外开辟内存,而是与原变量共享同一段内引用另外开辟内存,而是与原变量共享同一段内存,引用好比是一个虚拟的变量,声明形式为:存,引用好比是一个虚拟的变量,声明形式为:数据类型数据类型&引用名引用名=已定义的变量已定义的变量 如:如:int a=3,&b=a;/定义定义b为为a的引用的引用b=5;/你
11、知道此时你知道此时a的值为多少吗?的值为多少吗?12uangXi University C/C+C/C+程序设计2.2 变量和常量变量和常量(4)变量使用应注意变量使用应注意不要对变量所占的内存空间字节数想当然不要对变量所占的内存空间字节数想当然用sizeof获得变量或者数据类型的长度现场演示程序在Turbo C2.0和Visual C下的运行结果#include#include mainmain()()printfprintf(Data type Number of bytesn);(Data type Number of bytesn);printfprintf(-n);(-n);prin
12、tfprintf(char%dn,sizeof(char);(char%dn,sizeof(char);printfprintf(int%dn,sizeof(int);(int%dn,sizeof(int);printfprintf(short int%dn,sizeof(short);(short int%dn,sizeof(short);printfprintf(long int%dn,sizeof(long);(long int%dn,sizeof(long);printfprintf(float%dn,sizeof(float);(float%dn,sizeof(float);prin
13、tfprintf(double%dn,sizeof(double);(double%dn,sizeof(double);所以为了程序的良好移值性,对于定义整型变量所以为了程序的良好移值性,对于定义整型变量 unsigned int zero=0;对其全对其全1变量的初始化不用变量的初始化不用 unsigned int compzero=0 xFFFF;而用而用 unsigned int compzero=0;13uangXi University C/C+C/C+程序设计2.2 变量和常量变量和常量实型数据提供的有效数字位数不同,使用不当导致舍入误实型数据提供的有效数字位数不同,使用不当导致舍
14、入误差差 float型数据提供型数据提供7位有效数字位有效数字 double型数据提供型数据提供16位有效数字位有效数字例如例如#include#include mainmain()()floatfloat a;a;doubledouble b;b;a=123456.789e4;a=123456.789e4;b=123456.789e4;b=123456.789e4;printfprintf(“%fn%fn”,a,b);(“%fn%fn”,a,b);1234567936.0000001234567890.00000014uangXi University C/C+C/C+程序设计2.2 变量和
15、常量变量和常量2.2.2常量常量 在程序运行过程中其值不能改变的量,有值在程序运行过程中其值不能改变的量,有值常量和符号常量两种。常量和符号常量两种。(1)整型常量整型常量进制形式实例错例十进制以数字19开始-3,+5,12045八进制以数字0开始(由07之间数字组成)023,-010078十六进制以0 x或0X开始(由09及AF组成)0XAF,-0X510XFG15uangXi University C/C+C/C+程序设计2.2 变量和常量变量和常量(2)实型常量实型常量十进制小数形式:由正负号、数字和小数点组成,十进制小数形式:由正负号、数字和小数点组成,如如1.25、-1.25、17.
16、和和.1 指数形式:由尾数、指数符号指数形式:由尾数、指数符号e(或或E)及指数构成,其及指数构成,其中指数必须是十进制整数。如中指数必须是十进制整数。如1.25e-5、+1e10、-1.25e5。注意:注意:e前面不能没有数字,前面不能没有数字,e后面的数字必须为整数,后面的数字必须为整数,也不能加圆括号。如也不能加圆括号。如1E(-3)、E-5、1e2.1都是错误都是错误的。的。阶码符号阶码符号阶码的数值阶码的数值尾数符号尾数符号尾数的数值尾数的数值阶码阶码j尾数尾数S浮点数格式浮点数格式16uangXi University C/C+C/C+程序设计2.2 变量和常量变量和常量 另外整型
17、与浮点常数还时常带后缀以表明是另外整型与浮点常数还时常带后缀以表明是何种类型何种类型,特别是在用,特别是在用#define定义中:定义中:整型常数整型常数18、-31长整型常量 123l、123L、123456l、123456L无符号型常量 123u、123U浮点常数浮点常数十进制小数形式 123.45、456.78指数形式 1e-2、4.5e3单精度实型常量 123.45f、456.78F、1e-2f、4.5e3F长双精度型常量 123.45l、456.78L、1e-2l、4.5e3L17uangXi University C/C+C/C+程序设计2.2 变量和常量变量和常量(3)字符常量字
18、符常量-C/C+提供了两类字符型常量:提供了两类字符型常量:普通字符常量普通字符常量:用单引号括起来的一个字符。如:用单引号括起来的一个字符。如:A、0、?。转义字符常量转义字符常量:以:以“”开头的用单引号括起来的字符开头的用单引号括起来的字符 序列。常序列。常用的转义字符用的转义字符:n 、t、v、b 、r、”、ooo 、xhh 注意:注意:a.0表示表示ASCII码为码为0的字符的字符,它是一个空字符,注意其与它是一个空字符,注意其与0的的区别,后者表示的是区别,后者表示的是ASCII码为码为48的数字字符。的数字字符。b.字符型数据在内存中以字符型数据在内存中以ASCII码存储,故整型
19、数据和字符型数据码存储,故整型数据和字符型数据在一定范围内可以通用。如:在一定范围内可以通用。如:x=a +2;printf(%d,a);18uangXi University C/C+C/C+程序设计2.2 变量和常量变量和常量ASCII码码表表19uangXi University C/C+C/C+程序设计2.2 变量和常量变量和常量例子:将小写字母转换为大写字母例子:将小写字母转换为大写字母#include main()char ch=b;ch=b-32;printf(%c,%dn,ch,ch);ch=b-(a-A);20uangXi University C/C+C/C+程序设计2.2
20、 变量和常量变量和常量(4)字符串常量字符串常量 字符串常量是用双引号括起来的字符序列字符串常量是用双引号括起来的字符序列,系统在字符串常量最后自动加字符串结束系统在字符串常量最后自动加字符串结束符号符号 0 。例如:字符串字符串“A”的存储形式:的存储形式:字符字符A的存储形式:的存储形式:A 0 A内存中实际存放的是这内存中实际存放的是这些字符的些字符的ASCII码码21uangXi University C/C+C/C+程序设计2.2 变量和常量变量和常量进一步说明:进一步说明:表示空字符串表示空字符串转义字符也可以在字符串中使用转义字符也可以在字符串中使用引号只作为字符串开始和结束的标
21、志引号只作为字符串开始和结束的标志除注释外,是唯一可以出现中文的地方除注释外,是唯一可以出现中文的地方里定义了一系列专门的字符串处里定义了一系列专门的字符串处理函数理函数22uangXi University C/C+C/C+程序设计2.2 变量和常量变量和常量(5)符号常量符号常量-以标识符形式出现的常量,作以标识符形式出现的常量,作用是便于程序阅读和修改。用是便于程序阅读和修改。C+中用中用define命命令或关键字令或关键字const定义符号常量定义符号常量,形式如下:形式如下:#define 标识符标识符 常量值常量值或或 const 数据类型数据类型 标识符标识符=常量值常量值注意:
22、注意:习惯上符号常量名大写,而变量名小写,以示区分。习惯上符号常量名大写,而变量名小写,以示区分。符号常量虽然用标识符来标识,但本质上是常量,具有常符号常量虽然用标识符来标识,但本质上是常量,具有常量值不能改变的性质。量值不能改变的性质。这两者定义的常是有区别的,后者有数据类型。这两者定义的常是有区别的,后者有数据类型。23uangXi University C/C+C/C+程序设计2.2 变量和常量变量和常量例如:例如:const int g=8;int const f=9;/这两个定义是一样的。这两个定义是一样的。进一步说明:进一步说明:const意味着意味着“只读只读”,声明一个参数为常
23、,声明一个参数为常量是为了告诉了用户这个参数的应用目的,量是为了告诉了用户这个参数的应用目的,使编译器很自然地保护那些不希望被改变的使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。参数,防止其被无意的代码修改。24uangXi University C/C+C/C+程序设计2.2 变量和常量变量和常量(6)枚举枚举(Enumeration)常量常量-一个被遗忘的角色,从程序来窥一个被遗忘的角色,从程序来窥其一斑其一斑 enum weeks MON,TUE,WED,THU,FRI,SAT,SUN;/标识符序列标识符序列,别的不行!,别的不行!enum weeks today;
24、enum response no,yes,none;enum response answer;today =TUE;answer=yes;if(answer=yes)printf(Today is Tuesday.n);else printf(Today is NOT Tuesday.n);25uangXi University C/C+C/C+程序设计2.2 变量和常量变量和常量 常数、常数、const常量常量、宏常量和枚举常量,宏常量和枚举常量,都可以用来表示一个永远不会改变的数。但都可以用来表示一个永远不会改变的数。但我们不建议直接使用常数,而用后三者代替。我们不建议直接使用常数,而用后
25、三者代替。5 5 const int a=5;const int a=5;#define a 5#define a 5 enum aT enum aT ZERO,ONE,TWO,THREE,FOUR,FIVE;ZERO,ONE,TWO,THREE,FOUR,FIVE;aT a=FIVE;aT a=FIVE;26uangXi University C/C+C/C+程序设计2.3运算符和表达式运算符和表达式2.3.1 基本概念基本概念运算符具有三个属性:运算符具有三个属性:优先级优先级:指运算的先后次序,共分指运算的先后次序,共分15个级别。个级别。结合性结合性:指相同优先级运算符连续出现时的计算
26、指相同优先级运算符连续出现时的计算顺序,分自左向右和自右向左两种,除特别声明顺序,分自左向右和自右向左两种,除特别声明外,皆指自左向右。外,皆指自左向右。目数目数:指运算符要求的操作数的个数,包括单指运算符要求的操作数的个数,包括单目、双目和三目,一般目数越少,优先级越高。目、双目和三目,一般目数越少,优先级越高。C/C+的运算符见教材中表的运算符见教材中表1.2.4。27uangXi University C/C+C/C+程序设计2.3运算符和表达式运算符和表达式表达式:表达式:由常量、变量、函数调用和运算由常量、变量、函数调用和运算符按一定规律组合在一符按一定规律组合在一 起构成的式子。起
27、构成的式子。-不管是什么表达式,经过运算后都能不管是什么表达式,经过运算后都能取得一个值,而且是有类型的。表达式取得一个值,而且是有类型的。表达式的值要根据运算符的意义、优先级、结的值要根据运算符的意义、优先级、结合性以及类型转换约定共同约定。合性以及类型转换约定共同约定。28uangXi University C/C+C/C+程序设计2.3运算符和表达式运算符和表达式2.3.2 运算符运算符(1)算术运算符算术运算符种类:种类:+(加法)(加法)-(减法)(减法)*(乘法)(乘法)/(除法)(除法)%(求余数)(求余数)+(自增)(自增)-(自减)(自减)+取正取正 -取负取负 优先级优先级
28、(从高到低从高到低):(+、-、+取正取正、-取负取负)(*、/、%)(+、-)右结合右结合29uangXi University C/C+C/C+程序设计2.3运算符和表达式运算符和表达式说明:说明:在除法运算中,当两个操作数都是整数时,商也为在除法运算中,当两个操作数都是整数时,商也为整数整数,小,小数部分一律舍去。如:数部分一律舍去。如:1/2 0 1.0/2 0.5%(求余运算)要求两个操作数都是(求余运算)要求两个操作数都是整型整型,结果为整除后余下,结果为整除后余下的整余数。的整余数。自增、自减运算符自增、自减运算符(+、-),操作数也必须是,操作数也必须是整型整型变量变量 +i
29、,-i(在使用在使用 i之前之前,先使先使i的值加减的值加减1)i+,i-(在使用在使用 i之后之后,使使i的值加减的值加减1)若若 i 的值为的值为3,则:,则:j=+i;j的值为的值为4,i的值为的值为4 j=i+;j的值为的值为3,i的值为的值为4 想一想,下面的表达式对吗?想一想,下面的表达式对吗?5+、(a+b)+30uangXi University C/C+C/C+程序设计2.3运算符和表达式运算符和表达式(2)关系运算关系运算种类:种类:(小于)、(小于)、(大于)(大于)=(等于)、(等于)、=(大于等于)、(大于等于)、!=(不等于)(不等于)优先级:优先级:(从高到低)(
30、从高到低)(、=)(=、!=)关系运算描述的是一种关系运算描述的是一种“判断关系判断关系”,其结果有,其结果有“真真(true)”和和“假假(false)”两种。用两种。用1代表代表“真真”(非零非零),用,用 0 代表代表“假假”例如:例如:53的结果为的结果为1,a B 的结果为的结果为0思考:思考:x为为0到到100之间的数能否表示为之间的数能否表示为 0=x=100?31uangXi University C/C+C/C+程序设计2.3运算符和表达式运算符和表达式(3)逻辑运算逻辑运算种类:种类:&(逻辑与)、(逻辑与)、|(逻辑或)、(逻辑或)、!(逻辑非)(逻辑非)优先级:优先级:
31、(从高到低从高到低)!&|其中,其中,“!”是单目运算符,优先级高于算术是单目运算符,优先级高于算术运算符。运算符。“”和和“|”低于关系运算符。低于关系运算符。逻辑运算通常用来连接关系运算,逻辑运算逻辑运算通常用来连接关系运算,逻辑运算符两端的操作数如为符两端的操作数如为“非非”,就当作,就当作“真真”来来处理,如果是处理,如果是“”,便当作,便当作“假假”来处理。逻来处理。逻辑运算的结果也只有辑运算的结果也只有 0(false)和和1(true)两种。两种。32uangXi University C/C+C/C+程序设计2.3运算符和表达式运算符和表达式运算符说明优先级说明例结果!取反2当
32、操作数为假时,结果为真!01&与11操作数均为真时,结果才为真2&05&301|或12操作数中有一个为真时,结果为真0|10|010说明:说明:当多个当多个&连续出现时,如表达式连续出现时,如表达式&表达式表达式&表达式表达式从左到右,只要一个操作数为从左到右,只要一个操作数为0,结果就为,结果就为0,不进行后续运,不进行后续运算。算。当多个当多个|连续出现时,如表达式连续出现时,如表达式|表达式表达式|表达式表达式从左到右,只要一个操作数为从左到右,只要一个操作数为1,结果就为,结果就为1,不进行后续运,不进行后续运算。算。33uangXi University C/C+C/C+程序设计2.
33、3运算符和表达式运算符和表达式例:分析下面的代码例:分析下面的代码#include iostream.hvoid main()int m,n=10,h=1;m=2&n+;h=h+n;coutm=m,n=n“,h=”=A)&(ch y?x:y);/将和中较大的一个数赋将和中较大的一个数赋值给变值给变max36uangXi University C/C+C/C+程序设计2.3运算符和表达式运算符和表达式思考题:思考题:对对n(0)个人进行分班,每班个人进行分班,每班k(0)个个人,最后不足人,最后不足k人也编一班,问要编几个人也编一班,问要编几个班?(试用条件运算符表达)班?(试用条件运算符表达)
34、n%k0?n/k+1:n/k37uangXi University C/C+C/C+程序设计2.3运算符和表达式运算符和表达式(5)位操作运算符位操作运算符&-按位与运算按位与运算|-按位或运算按位或运算-按位异或运算按位异或运算-按位右移运算按位右移运算-按位求反按位求反例如:对例如:对8 8位数运算位数运算45&54=36D45&54=36D45|54=63D45|54=63D4554=27D4554=27D452=180D452=11D452=11D45=11010010B45=11010010B?45:0010 1101B 54:0011 0110B 38uangXi Universi
35、ty C/C+C/C+程序设计2.3运算符和表达式运算符和表达式(6)赋值运算符赋值运算符格式:变量格式:变量 赋值运算符赋值运算符 表达式表达式 a =3.6作用:作用:将一个数据赋给一个变量,并将一个数据赋给一个变量,并以变量的以变量的值作为整个式子的值值作为整个式子的值。39uangXi University C/C+C/C+程序设计2.3运算符和表达式运算符和表达式 其中赋值运算符可以是其中赋值运算符可以是“=”,也可以是复合赋值运算符也可以是复合赋值运算符,如如+、-、*、/、%、&、|都可以与都可以与“=”复合。复合。这种形式看起来更直观,而且执行效率一般也能更高一些。这种形式看起
36、来更直观,而且执行效率一般也能更高一些。复合赋值运算符的等价形式:复合赋值运算符的等价形式:(以以“+=”为例为例)变量变量+=表达式表达式变量变量=变量变量+表达式表达式例如:例如:b/=a+2 等价于:等价于:b=b/(a+2)说明:说明:结合性自右向左结合性自右向左若两端类型不同,则系统自动将右端类型转换为左端类型。若两端类型不同,则系统自动将右端类型转换为左端类型。例如:有定义例如:有定义 int a=3.78;则则a中存放的值为中存放的值为3左端只能是变量左端只能是变量(或数组元素或数组元素),不能为表达式或常量,如:,不能为表达式或常量,如:a+2*=b ()a=b+2=c+5 (
37、)是一个整体是一个整体40uangXi University C/C+C/C+程序设计2.3运算符和表达式运算符和表达式(7)逗号运算逗号运算形式:形式:e1,e2,e3,其中其中e1、e2、e3均为表达式,从左向右依均为表达式,从左向右依次计算各个表达式的值,而将最后一个表次计算各个表达式的值,而将最后一个表达式的值作为整个表达式的值,逗号运算达式的值作为整个表达式的值,逗号运算符常用于循环语句的表达式中,将多个表符常用于循环语句的表达式中,将多个表达式连接成一个表达式,如:达式连接成一个表达式,如:for(i=0,j=n;i.!+-+-*&(类型类型)sizeof*/%+-=!=&|&|?
38、:=+=-=*=/=%=&=|=,42uangXi University C/C+C/C+程序设计2.3运算符和表达式运算符和表达式2.3.3表达式表达式pC/C+运算比较灵活,总的原则是:运算比较灵活,总的原则是:(1)单目运算单目运算多目运算,但要注意自增与多目运算,但要注意自增与自减运算;自减运算;(2)算术运算算术运算关系运算关系运算逻辑运算逻辑运算条件运条件运算符算符赋值运算符赋值运算符逗号运算符;逗号运算符;(3)在能确定表达式值的情况下停止后面的在能确定表达式值的情况下停止后面的运算。运算。43uangXi University C/C+C/C+程序设计2.3运算符和表达式运算符
39、和表达式pC/C+表达式应注意:表达式应注意:(1)乘号不能省略,如:乘号不能省略,如:x*y(2)括号必须成对出现,均使用圆括号,可括号必须成对出现,均使用圆括号,可以多次出现,但要配对以多次出现,但要配对(3)表达式从左到右要在同一基准上书写,表达式从左到右要在同一基准上书写,无高低之分无高低之分44uangXi University C/C+C/C+程序设计2.3运算符和表达式运算符和表达式例:例:(-b+sqrt(b*b-4*a*c)/(2*a)sin(45*3.14/180)+exp(7)+log(10)/(x*y)45uangXi University C/C+C/C+程序设计2.
40、3运算符和表达式运算符和表达式 C/C+中提供了多种内部函数供用中提供了多种内部函数供用户编程序时直接调用,只需把包含内部户编程序时直接调用,只需把包含内部函数的头文件,通过函数的头文件,通过#include 预处理命预处理命令装入到程序中。令装入到程序中。#include math.h“常用的函数有:常用的函数有:cos(x)、sin(x)、pow(x,y)、sqrt(x)、log(x)、exp(x)、fabs(x)46uangXi University C/C+C/C+程序设计2.3运算符和表达式运算符和表达式例:例:fabs(a)+exp(3)+sin(30*3.14/180)47uan
41、gXi University C/C+C/C+程序设计2.3运算符和表达式运算符和表达式2.3.4数据类型转换数据类型转换数据类型的转换:数据类型的转换:据类型的转换分为显式据类型的转换分为显式(强制强制)转换转换和隐式和隐式(自动自动)转换。转换。强制转换格式:强制转换格式:(类型名类型名)表达式表达式 或:类型名或:类型名(表达式表达式)将一种数据类型的值强制转换为另外一种数据类型。将一种数据类型的值强制转换为另外一种数据类型。常用于对函数的参数及返回值的操作。常用于对函数的参数及返回值的操作。假设、为假设、为float型数据,则型数据,则(int)(x+y)强行将强行将+的值转换成整型,
42、的值转换成整型,x和和y仍为仍为float型。型。48uangXi University C/C+C/C+程序设计2.3运算符和表达式运算符和表达式char short int unsigned longunsigned longfloatdoublelong double必定的转换必定的转换混合运算时由低向高转换混合运算时由低向高转换自动转换还包括自动转换还包括赋值运算赋值运算时赋值号右端类型向左端类型的转换。时赋值号右端类型向左端类型的转换。将取值范围将取值范围将取值范围将取值范围小小小小的类型的类型的类型的类型转为转为转为转为取值范围取值范围取值范围取值范围大大大大的类型是的类型是的类型
43、是的类型是安全安全安全安全的的的的,反之是不安全的:,反之是不安全的:,反之是不安全的:,反之是不安全的:如果如果如果如果大大大大类型的值类型的值类型的值类型的值在在在在小小小小类型能容纳的范围之内,则平安无事;但是,浮点数转为整数,会丢失小数部分,非类型能容纳的范围之内,则平安无事;但是,浮点数转为整数,会丢失小数部分,非类型能容纳的范围之内,则平安无事;但是,浮点数转为整数,会丢失小数部分,非类型能容纳的范围之内,则平安无事;但是,浮点数转为整数,会丢失小数部分,非四舍五入;其它,转换后的结果必然是错误的,具体结果与机器和实现方式有关。避免如四舍五入;其它,转换后的结果必然是错误的,具体结
44、果与机器和实现方式有关。避免如四舍五入;其它,转换后的结果必然是错误的,具体结果与机器和实现方式有关。避免如四舍五入;其它,转换后的结果必然是错误的,具体结果与机器和实现方式有关。避免如此使用。此使用。此使用。此使用。自动转换:自动转换:在不同类型数据进行在不同类型数据进行混合运算混合运算时,系统自动进行的类型转换。时,系统自动进行的类型转换。49uangXi University C/C+C/C+程序设计2.3运算符和表达式运算符和表达式例:下面的代码输出是什么,为什么?例:下面的代码输出是什么,为什么?void foo(void)unsigned int a=6;int b=-20;(a+
45、b 6)?printf(“6”):printf(“6”。原因是。原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此动转换为无符号类型。因此-20变成了一个非常大的正整数,所变成了一个非常大的正整数,所以该表达式计算出的结果大于以该表达式计算出的结果大于6。这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。如果你答错了这个问题,你也就到了得不到这份丰常重要的。如果你答错了这个问题,你也就到了得不到这份工作的边缘。工作的边缘。50uangXi
46、 University C/C+C/C+程序设计2.3运算符和表达式运算符和表达式字符串与数值类型之间的转换字符串与数值类型之间的转换int i=123这样用是不行地atof(),atoi(),atol()把字符串转为double,int和long定义在stdlib.h中sprintf()可以用来把各种类型的数值转为字符串定义在stdio.h中51uangXi University C/C+C/C+程序设计2.3运算符和表达式运算符和表达式例例2-0:void main()const int g=8;int const f=9;/这两个定义一样。这两个定义一样。/*求基本数据类型的字节长度求基
47、本数据类型的字节长度*/printf(Data type Number of bytesn);printf(-n);printf(char%dn,sizeof(char);printf(int%dn,sizeof(int);printf(short int%dn,sizeof(short);printf(long int%dn,sizeof(long);printf(float%dn,sizeof(float);printf(double%dn,sizeof(double);/float h;double j;h=123456.789e4;j=123456.789e4;printf(%fn%f
48、n,h,j);/注意精度注意精度/int a=30,b=4;double x;x=a+b;coutxendl;x=a/b;coutxendl;x=(double)a/b;coutxendl;x=(double)(a/b);coutxendl;x=b+a;/x=(b+)+acoutaendsbendsxendl;/int c=8,&d=c;coutcendl;d=5;coutcx;cin*q;*p=*p+100;y=y+200;coutx&x pendl;couty&y qab;cout*p1*p2endl;couta bendl;p=p1;p1=p2;p2=p;cout*p1*p2endl;c
49、outa b q p q p=q指针不与非指针量进行比较,但可与指针不与非指针量进行比较,但可与NULL(即即0值值)进行等或不等的关系运算进行等或不等的关系运算判断p是否为空指针P=NULLp!=NULL65uangXi University C/C+C/C+程序设计2.4指针指针(4)new和和deletepnew运算符运算符 形式为:形式为:指针指针=new 数据类型数据类型;指针指针=new 数据类型数据类型(初值初值);pdelete运算符运算符 用于释放用用于释放用new申请的动态申请的动态存储空间,形式为:存储空间,形式为:delete (指针指针);delete 指针指针;只能
50、释放由只能释放由new申申请的动态变量请的动态变量无需指明数组长度无需指明数组长度例:例:int a=3,*p=&a,*q;q=new int(6);delete p;()delete q;66uangXi University C/C+C/C+程序设计2.4指针指针例例2.3new与与delete的用法的用法#includeiostream.hvoid main()int*p=new int10;int*q=p+5;coutpendl;coutq=qendl;q+;cout(q+)=qendl;cout(q-p)=q-pendl;delete(p);p+;coutpendl;67uangXi