1、单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第2章 数据类型和表达式,C,语言程序设计,本章主要内容,本章介绍,C,语言的基础,包括:,数据类型,运算符和表达式,均是程序设计的基本知识,为什么讨论,这些知识,?,通常,程序,要对数据进行操作处理:,处理的对象是,数据,通过,运算符和表达式,进行操作,2,例如:,【例2.1】计算圆的面积,半径为 5,cm,。,程序如下:,main(),float,r,area,;,r,=,5,;,area,=,3.14,*,r,*,r,;,printf,(%fn,area,);,运算结果是输出,圆的面积:,78.
2、500000,程序中用到的数据:,r,、,area,、,5,、,3.14,对数据进行的运算:,*,、,=,3,分析:,计算机操作处理时,要完成以下工作,:,在内存中给半径,r,和运算结果,area,开辟存储空间,存放它们的值。,应该留多大的地方来存放它们的值?,数据,5,和,3.14,与,r,、,area,不同,它们是在编写程序时就给出确定的值,在运算过程中不会改变。,这样的数计算机怎么处理?,对,整数 5,和,小数3.14,,计算机,存放时是否有区别?,涉及数据类型,的基本知识,4,C,语言的数据类型,C,数据类型,数组类型,结构体类型,共用体类型,枚举类型,整型,字符型,实型(浮点型),空
3、类型,单精度型,双精度型,基本类型,指针类型,构造类型,本章讨论,基本类型数据,5,方括号表示可选项,int,分配,2,Byte,,,long,分配,4,Byte,类型名称,类型符,bit,取值范围,整型,(短整型),signed,int,signed,short,int,16,2,15,2,15,-1,(-32768,32767),无符号整型,unsigned,int,16,0,2,16,-1,(0,65535),长整型,signed,long,int,32,-2,31,2,31,-1,无符号长整型,unsigned long,int,32,0,2,32,-1,2.1.1 整型数据,6,2.
4、1.2 实型数据,1,实型数据的类型,单精度实型数据,float,,分配,4,Byte,双精度实型数据,double,,分配,8,Byte,2,实型数据的存储,单精度实型,指数部分,小数部分,小数的符号位,指数的符号位,7,实型数据的类型及规定,C,标准并未具体规定各种实型数据所占字节数,也不规定具体小数和指数部分的位数。,一般而言,小数部分位数多,数据表示的有效数字多,精度就高;而指数部分位数多,则表示的数据范围更大。,有效数字的意义?,类型,类型符,Byte,绝对值的范围,有效数字,单精度型,float,4,10,-37,10,38,78,位,双精度型,double,8,10,-307,1
5、0,308,1516,位,8,2.1.3 字符型数据,字符型数据,char,,,分配,1,Byte,字符型数据是指,字母、数字、各种符号等,用,ASCII,值,表示的字符,例如,a,是一个,char,类型数据,称作字符常量,存储:,0 1 1 0 0 0 0 1,2.1.4,空类型,空类型,void,通常与指针或函数结合使用,9,2.2 常量、变量与标准函数,主要内容:,常量,变量,标准库函数,10,2.2.1 常量,在运行程序的过程中值保持不变的量,1整型常量,十进制,:09,八进制,:07,以,0,开头,十六进制,:09,,AF/af,,以,0,x,或,0,X,开头,例如:,100 -8
6、0 +123,010 024 0100 073,0,x38 0 x10 0X10 0XFF 0 x0a,11,1.整型常量,整型常量的类型:,根据值大小默认类型。,整型常量后面加,l,或,L,,,则认为是,long,int,型,例如:123,L,、0,L,、432,l,、0 x100,l,注意:,十六进制常量中可以使用大写字母,AF,,也可以使用小写字母,af。,八进制常量中不能出现数字 8 或 9,例如:,018,、,0921,非法,12,2.实型常量,十进制形式,1.0 1.+12.0 -12.0 0.0,指数形式,1,e3 1.8e-3 -123E-6 -.1E-3,等价于:110,3,
7、1.810,-3,-,12310,-6,-,0.110,-3,指数只能是整数,而尾数则可以是整数也可以是小数,无论指数或尾数均不能省略,例如:,1,e,、,E.5,、,E-3,非法,实型常量的类型:默认为,double,型,后面加,F,(,或,f,),,则强调表示该数是,float,类型,例如:3.5,f,、1e2,F,13,3.字符型常量,可视字符常量,单引号括起来的单个可视字符,例如:,a,、,A,、,+,、,3,、,等,转义字符常量,单引号括起来的,与,可视字符,组合,例如:,0,字符串结束标志,n,回车换行,t,跳到下一个输出位置,双引号字符,ddd,ddd,为,1,到,3,位八进制数
8、所代表的字符,xhh,hh,为1到2位十六进制数所代表的字符,14,4.字符串常量,用双引号括起的一个字符序列,例如:,ABC,、,123,、,a,、,nt,nGood,morning,字符串常量的长度,:,所包含的字符个数,字符串常量的存储方式:,n,G,o,o,d,m,o,r,n,i,n,g,0,a,0,所占存储单元数:,串长度1,例如:,字符串,结束标记,15,5.符号常量,以标识符来代表的常量,事先编译预处理命令,define,定义,编译时先由系统替换为它所代表的常量,再进行编译,例如:,#,define,LEN,2.5,main(),float a,b;,a=2*3.14*,LEN,
9、b=3.14*,LEN,*,LEN,;,printf(a,=%,f,b,=%,fn,a,b,);,定义符号常量,使用符号常量,编译前系统进行替换,16,5.符号常量,main(),float a,b;,a=2*3.14*,2.5,;,b=3.14*,2.5,*,2.5,;,printf(a,=%f,b=%fn,a,b);,define,是编译预处理命令,必须以“,#,”开头,编译预处理命令在第7章讨论。,替换为,17,2.2.2 变量,1.变量的有关概念,在程序运行过程中,其值改变的数据,称为变量,变量用标识符表示,称为,变量名,。,变量必须“先定义后使用”,系统为变量分配存储单元,存储变
10、量的值。,编写程序时通过变量名来存、取,变量值,。,a,510,变量值,为变量分配的存储单元,变量名,例如:,有,变量a,它的值是5,10,18,2.变量定义,变量定义的一般格式:,数据类型说明符 变量列表,;,例如:,int,i,j;,long k,m;,float x,y;,char ch1,ch2;,必须使用合法的标识符作变量名,不能使用关键字为变量命名,19,3.变量的初始化,允许在说明变量的时候对变量赋初值。,例如:,int,a=5,b=10+2;,double x=23.568,y;,char ch1=a,ch2=66,ch3=142;,表示定义变量并对变量存储单元赋值。,错误的初
11、始化:,int,a=3+b,b=5;,float m=n=23.16;,20,2.2.3 标准库函数,由,C,编译系统定义的一种函数,存放在系统函数库中,用户可以根据需要随时调用,常用函数,如:,printf、scanf、fabs、sqrt、sin,、,(常用数学函数参见教材,P418,附录,),函数调用形式,:,函数名(参数表),例如:,putchar(a,),sqrt(x,),21,main(),float x;,int,y;,2.3.1,指针和指针变量的概念,变量的两个物理意义,2000,2001,2002,2003,2004,2005,x,y,变量的内容,变量的地址,2.,3,指针类型
12、22,2.3,指针和指针变量,main(),int,a,b,c;,a=5;,b=3;,c=a,+b;,2.3.1,指针和指针变量的概念,2000,2001,2002,2003,2004,2005,a,b,c,5,直接将整数,5,存入变量,a,3,直接将整数,3,存入变量,b,8,直接,将变量,a,、b,的值取出,相加后存入变量,c,利用变量名存取数据的方式称为“,直接存取,”方式。,23,C,语言还提供了对内存单元的“,间接存取,”方式,p,2000,2001,2002,2003,2004,2005,2006,2007,a,b,c,5,3,2004,a,和,b,相加的结果(,*,p,=,a,
13、b,),存放到变量,p,所指向的,内存单元,中去。此时,c,称为指针变量,p,的,目标变量。,p,2004,c,p=,&c,8,main(),int,a=5,b=3,c,*p;,p=,*p=a+b;,2.3,指针和指针变量,2.3.1,指针和指针变量的概念,变量的地址称为变量的指针,存放地址的变量称为指针变量,24,main(),int,a,*p,=&a,;,float x,*q,=&x,;,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,a,p,x,q,2004,2.3,指针和指针变量,2.3.2,指针变量的定义,2000,main()
14、int,a,*p;,float x,*q;,p,=&a,;,q,=&x,;,指针变量定义的形式,指针变量初始化,25,main(),int,a,*p,=&a,;,float x,*q,=&x,;,*,p,=5;,printf(,a+3=%dn,*p,+3);,间接存取运算,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,a,p,x,q,2004,2.3,指针和指针变量,2.3.3,指针的基本运算,2000,*,p=,main(),int,a,*p;,float x,*q;,p,=&a,;,q,=&x,;,赋值运算,5,26,作业:,1,,,2,,,3,(,1,),27,






