资源描述
单击以编辑母版标题样式,单击以编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,第二章,基本数据类型、运算符和表达式,2.1 数据类型,2.2 变量和常量,2.3 运算符和表达式,2.4 指针,2.5 typedef语句,2.6 应用举例,1,第二章 基本数据类型、运算符和表达式2.1 数据类型1,2.1 数据类型,程序中要对各种各样的数据进行描述和操作,用到的数据都必须指明其类型。数据类型的作用:,指出了应为数据分配的存储空间的大小,规定了数据所能进行的操作,数据类型,基本类型,构造类型,整型,(int),实型,字符型(char),布尔型(bool),空类型(void),单精度型(float),双精度型(double),指针,数组,结构型(struct),共用体(union),枚举(enum),类(class),2,2.1 数据类型程序中要对各种各样的数据进行描述和操作,用,2.2 变量和常量,1.变量的定义,程序运行过程中其值可变的量,定义方式如下:,C/C+规定:,程序中所有变量必须先定义后使用,可及时发现录入错误(如,定义的变量为data,而程序体中使用变量为date),同时还可限制非法运算(如:a%b,若a,b为float类型则出错)。,C+中变量可随时使用,随时定义。,例如:,int a,b;(定义变量a和b,为整型),float x,y;(定义变量x和y为单精度实型),数据类型 变量名表;,2.2.1 变量,3,2.2 变量和常量1.变量的定义C+中变量可随时使用,随时,2.变量的初始化,变量必须先有确定的值后才能参与各种相应的操作,变量获取值的途径有三:,通过输入语句输入 (如:cina;),通过赋值语句赋值 (如:a=3;),通过初始化方式赋初值 (如:int k=3;),所谓初始化是指在定义变量的同时指定变量的初值,形式有二:,例如:,int k=3,m=3,n(3);,(,)int k=m=n=3;/不允许为多个变量同时初始化,数据类型 变量名=表达式;,数据类型 变量名(表达式);,4,2.变量的初始化数据类型 变量名=表达式;4,3.变量引用,C+中增加了“引用”这一概念,许多地方可以代替指针实现相应的功能,比指针更安全。,所谓引用即给一个已知变量起个别名,系统不为引用另外开辟内存,而是与原变量共享同一段内存,引用好比是一个虚拟的变量,声明形式为:,数据类型&引用名=已定义的变量,如:,int a=3,/定义b为a的引用,b=5;/你知道此时a的值为多少吗?,5,3.变量引用C+中增加了“引用”这一概念,许多地方可以代,2.2.2 常量,在程序运行过程中其值不能改变的量,有值常量和符号常量两种。,1.整型常量,进制,形式,实例,错例,十进制,以数字19开始,-3,+5,12,045,八进制,以数字0开始,(由07之间数字组成),023,-010,078,十六进制,以0 x或0X开始,(由09及AF组成),0XAF,-0X51,0XFG,6,2.2.2 常量1.整型常量进制形式实例错例十进制以数字1,2.实型常量,十进制小数形式:由正负号、数字和小数点组成,如1.25、-1.25、17.和.1,指数形式:由尾数、指数符号e(或E)及指数构成,其中指数必 须是十进制整数。如1.25e-5、+1e10、-1.25e5。,注意:,e前面不能没有数字,e后面的数字必须为整数,也不能加园括号。如1E(-3)、E-5、1e2.1都是错误的。,7,2.实型常量7,3.字符常量,C/C+提供了两类字符型常量:,普通字符常量:用单引号括起来的一个字符。如:A、0、?。,转义字符常量:以“”(反斜杠)开头的用单引号括起来的字符 序列。如:n 、t 、x61,等。常用的转义 字符见p26。,注意:,0表示ASCII码为0的字符,它是一个空字符,注意其与0的区别,后者表示的是ASCII码为48的数字字符。,字符型数据在内存中以ASCII码存储,故整型数据和字符型数据在一定范围内可以通用。如:x=a +2;printf(%d,a);,8,3.字符常量8,4.字符串常量,字符串常量是用双引号括起来的字符序列,系统在字符串常量最后自动加字符串结束符号 0 。,例如:,字符串“A”的存储形式:,字符A的存储形式:,5.符号常量,是以标识符形式出现的常量,作用是便于程序阅读和修改。C+中用define命令或关键字const定义符号常量,形式如下:,A 0,A,内存中实际存放的是这些字符的ASCII码,#define 标识符 常量值,const 数据类型 标识符=常量值,或:,9,4.字符串常量 A 0 A内存中,注意:,习惯上符号常量名大写,而变量名小写,以示区分。,符号常量虽然用标识符来标识,但本质上是常量,具有常量值不能改变的性质。,#define PI 3.14 /,const double PI=3.14,#include iostream.h,void main(),float r=3.0,s,l;,l=2*PI*r;,s=PI*r*r;,coutl=l,s=s=(大于等于)、!=(不等于),优先级:(从高到低),(=),(=、!=),关系运算描述的是一种“判断关系”,其结果有“真(true)”和“假(false)”两种。用“1”代表“真”,用“0”代表“假”,例如:53的结果为1,,a,B,的结果为0,思考:,x为0到100之间的数能否表示为 0=x=100?,14,2.关系运算种类:14,3.逻辑运算,种类:,&(逻辑与)、|(逻辑或)、!(逻辑非),优先级:(从高到低),!&|,其中,“!”是单目运算符,优先级高于算术运算符。“”和“|”低于关系运算符。,逻辑运算通常用来连接关系运算,逻辑运算符两端的操作数如为“非”,就当作“真”来处理,如果是“”,便当作“假”来处理。逻辑运算的结果也只有 0(false)和1(true)两种。,15,3.逻辑运算种类:15,说明:,当多个&连续出现时,如表达式&表达式&表达式从左到右,只要一个操作数为0,结果就为0,不进行后续运算。,当多个|连续出现时,如表达式|表达式|表达式从左到右,只要一个操作数为1,结果就为1,不进行后续运算。,16,说明:16,#include iostream.h,void main(),int m,n=10;,m=2,coutm=m,n=y?x:y);/,将和中较大的一个数赋值给变量max,条件运算符的结合性是由右向左,思考题:,对n(0)个人进行分班,每班k(0)个人,最后不足k人也编一班,问要编几个班?(试用条件运算符表达),n%k0?n/k+1:n/k,5.赋值运算,格式:,作用:,将一个数据赋给一个变量,并以变量的值作为整个式子的值。,变量 赋值运算符 表达式,18,如:n%k0?n/k+1:n/k5.赋值运算变量,其中赋值运算符可以是“=”,也可以是复合赋值运算符,如“+=”、“-=”、“*=”、“/=”和“%=”等等。,复合赋值运算符的等价形式:(以“+=”为例),例如:,b/=a+2 等价于:b=b/(a+2),结合性自右向左,若两端类型不同,则系统自动将右端类型转换为左端类型。,例如:有定义 int a=3.78;则a中存放的值为3,左端只能是变量(或数组元素),不能为表达式或常量,如:a+2*=b (,),a=b+2=c+5 (,),变量+=表达式,变量=变量表达式,是一个整体,19,其中赋值运算符可以是“=”,也可以是复合赋值运算符,如“,6.逗号运算,形式:,e1,e2,e3,其中e1、e2、e3均为表达式,从左向右依次计算各个表达式的值,而将最后一个表达式的值作为整个表达式的值,逗号运算符常用于循环语句的表达式中,将多个表达式连接成一个表达式,如:,for(i=0,j=n;ij;i+,j-),逗号运算符的优先级别最低。,20,6.逗号运算20,7.数据类型的转换,数据类型的转换分为显式(强制)转换和隐式(自动)转换。,强制转换格式:,或:,将一种数据类型的值强制转换为另外一种数据类型。常用于对函数的参数及返回值的操作。,假设、为float型数据,则(int)(x+y)强行将+的值转换成整型,x和y仍为float型。,自动转换:,在不同类型数据进行混合运算时,系统自动进行的类型转换。,(类型名)表达式,类型名(表达式),21,7.数据类型的转换(类型名)表达式类型名(表达式)21,char short,int unsigned longunsigned longfloatdoublelong double,必定的转换,混合运算时由低向高转换,自动转换还包括赋值运算时赋值号右端类型向左端类型的转换,8.内部函数,C/C+中提供了多种,内部函数供用户编程序时直接调用,只需把包含内部函数的头文件,通过#include 预处理命令装入到程序中。例如,程序中要使用平方根函数sqrt,应该在程序加入:,#include math.h“,22,char short 必定的转换混合运算时由低向高转换自动,2.4 指针,1.基本概念,每个变量在内存中存放都对应一段地址,第一个字节的地址就是变量的地址,将存放地址的变量称为指针变量。,&求地址,变量的地址在编程阶段是不知道的,在程序中可以使用&运算符求得变量的地址。,int x;,&x就是变量的地址,23,2.4 指针1.基本概念&求地址23,取内容*,*(地址)表示根据地址取内容,如图中所示,*(&x)的值为4,指针,指针是一种变量,存放另一个变量的地址。,int x=4;,int *p;,p=,p就是一个指针,存放x的地址。,p指向x,*p的值为4,*p就是x。,出现x的地方可以用*p代替,出现*p的地方可以用x代替。,1001,4,p,x,24,取内容*10014px24,2.定义及初始化,定义,例如:,int *p;,float *q;,指针所指对象的类型。,初始化,在定义的同时赋初值,称为指针变量的初始化。,例如:,float d=1.5,*p=&d;,可改写为:,float d=1.5,*p;,p=,/注意不能写做*p=&d,数据类型 *标识符;,不是指针名的一部分,&d,1.5,p,d,25,2.定义及初始化 定义数据类型 *标识符;不是指,假定有定义:int*p,a;,p=NULL;,指针的值为NULL(0)表示不指向任何对象。,p=,p指向变量a。,p1=,p2=p1;,相同类型的指针变量可以相互赋值,例,假设有定义:,int a,*p;,float f;,则以下形式不允许:,(,),p=,(,),p=100;,3.运算,赋值运算,26,假定有定义:int*p,a;3.运算26,算术运算,p+n(或p-n):,p+n:指向后面的第个元素。,p-n:指向前面的第个元素。,p+n的值为:p的值n*sizeof(p指向的类型),如,有定义:,int a,*p=,假设a的地址为1000,则:,p的值为1000,p+3的值为:,1000+3*sizeof(int)=1000+3*4=1012,27,算术运算如,有定义:27,自增(+)和自减(-),p+、+p、p-、-p,自增或自减后p指向前一个或后一个元素,指针相减,两个类型相同的指针可以相减,结果为这两个地址差之间能够存放的数据个数(数据类型为指针所指的类型)。,如,有定义:,int*p1,*p2;,假设p1指向1000,p2指向1008,,则p2p1的值为:,(1008-1000)/sizeof(int)=2,*p+,*(p+),*p,p +,(*p)+,*p,(*p)+,28,自增(+)和自减(-)*p+,4.new和delete,new运算符,形式:,指针=new 数据类型;,指针=new 数据类型(初值);,或,29,4.new和delete指针=new 数据类型;或29,delete运算符,用于释放用new申请的动态存储空间,形式为:,delete 指针;,delete ,指针,;,或,无需指明数组长度,
展开阅读全文