资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第二章 数据类型、运算符与表达式,第二章数据类型、运算符与表达式,2.1,C,的数据类型,2.2 常量与变量,2.3 整型数据,2.4 实型数据,2.5 字符型数据,2.6 变量的赋值,2.7 各类数值型数据之间的转换,2.8 算术运算符和算术表达式,2.9 赋值运算符和赋值表达式,2.10 逗号运算符与逗号表达式,第二章数据类型、运算符与表达式2.1 C的数据类型,1,2.1,C,的数据类型,整型,字符型,基本类型,实型(浮点型)单精度型,双精度型,枚举类型,数据类型 数组类型,构造类型 结构体类型,共用体类型,指针类型,空类型,2.1 C的数据类型 整型,2,2.2 常量与变量,一、,常量与符号常量,常量:在程序运行中,其值不可能被改变的,量称为常量。如任何数字值、单个字,符或字符串及转义符均为常量。,类型:常见的常量类型有,int,char,float(double),字符常量要用单引号引起来(或双引,号括起来),2.2 常量与变量一、常量与符号常量,3,符号常量:用标识符代表一个常量。格式为:,#,define PRICE 30,(,宏定义命令),注,:#,define,为宏定义命令,表示用,PRICE,来代表常量30。,宏定义#,define,的作用域由定义的起始位 置至宏定义解除(#,undef,标识符)处 或本程序末尾。,宏定义命令#,define,必须写在函数的最 前面,,,且此句之后不带分号。,符号常量:用标识符代表一个常量。格式为:,4,在宏定义的作用域内,该符号(标识符)不能再被重新赋值。,习惯上符号常量用大写,变量用小写,以示区别。,二、变量,定义:程序执行过程中其值可以被改变的量称,为变量。,标识符:,C,语言中用来标识变量名,函数名,数组名,类型名,文件名的有效字符 序列称为标识符。,在宏定义的作用域内,该符号(标识符)不能再被重,5,变量的定义:,C,语言中所有变量都必须,先定义后使用。,标识符规定:只能由,字母,数字,下划线,三种字符组成,且第一个字符必须为 字母或下划线。,标识符长度:系统不同,允许的长度不同,一般取长度8即可,标识符大小写不 通用。,变量的基本类型有:,int,float,char,num.,变量的定义:C语言中所有变量都必须先定义后使用。,6,例1 指出以下哪些是非法变量名?,value$,sum,Piece Flag,s5_9,3sp,_sy5tem,int,$为非法变量名字符,变量名中间不允许有空格,不允许数字打头,C,语言中的保留名或关键字,例1 指出以下哪些是非法变量名?value$,7,2.3 整型数据,一、整型常量:,整型常量即整常数(可正可负),,C,中的(,int),常量有三种形式:十进制、八进制、十六进制。,1.,十进制整数:,由正负号与09共10个数字组,成,终端输出时,printf,中的格式为,%,d,。,2.八进制整数:,由正负号与07共8个数字组成,,且八进制整常量第一个数字一定为,0,,例-011,,终端输出时,printf,中的格式为,%,o,(,字母,o),2.3 整型数据一、整型常量:,8,十六进制整数:,由正负号与0,F,共16个字符组成,此类常数最前面要由数字0和字母,x,引导,如:-0,x12,输出函数,printf,中格式规定为,%,x,。,二、整型变量:,有四类:,int,short(int),long(int),unsigned(int),或:,unsigned(short)、unsigned(long)。,十六进制整数:由正负号与0F共16个字符组成,此类常数最前,9,各类型整型变量所占内存字节数,在,C,语言中没有统一规定,看,P1,13,表2.1,类型,比特数,bit,最小取值范围,signed int,16,-3276832767,即-2,15,(2,15,-1),Unsigned int,16,065535,即0(2,16,-1),signed short int,16,-3276832767,即-2,15,(2,15,-1),Unsigned short int,16,065535,即0(2,16,-1),long int,32,-21474836482147483647,即-2,31,(2,31,-1),Unsigned longint,32,04294967295 即0(2,32,-1),各类型整型变量所占内存字节数,在C语言中没有统一规定,看,10,三、整型常量与变量的关系:,1常量在-2,15,2,15,-1之间可以赋给,int,和,long int,型变量(16位)。,2常量在-2,31,2,31,-1之间可以赋给,long int,型变量(32位)。,3若,short,型长度与,int,数范围相同,则它们可互相赋值。,4非负的整常量可以赋给相应的,unsigned,变量。,5在一个整常量后面加字母,l,或,L,,,则此整常,量被认为是,long,型常量。,三、整型常量与变量的关系:,11,2.4 实型数据,一、实型常量:,有两种表示方法:,1.十进制表示形式:由小数点、正负号和十个数字表示,必须有小数点,且小数点最前面和最后面的0均可省,但两者不可同时省略。,2指数形式(科学计数法):由数字、正负号、,小数点和字母,e,或,E,组成。要求字母,e,或,E,之,前必须有数字(,1也不可省,),e,或,E,后面的数字,必须为整数(可带正负号)、此数字代表10的,幂次。例:123,E3=123 10,3,2.4 实型数据一、实型常量:有两种表示方法:,12,二、实型变量:(浮点数),有,float,和,double,两种。其中:,float,实数提供,7,位有效数字,赋值时当多余7位数字,则7位以上的数字不被变量接收。,float,实数一般在内存中占,4,个字节。(32位),double,变量可接受大约,16,个十进制数,在内存中占,8,个字节。,long double,有效数字为,19,位,占,16,个字节。,二、实型变量:(浮点数),13,三、,整数与浮点数的转换:,规定:如果将一个浮点数赋给整型变量,则系统自动将该浮点数的小数部分截取。,如果将一个整数赋给实型变量,则在 数值上不会引起任何变化。,实型数据的舍入误差:,三、整数与浮点数的转换:,14,main(),float a,b;,a=123456.789e5;,b=a+20;,printf(“%f”,b);,输出结果为:,123456788848.000000,注意:,应当避免将一个很大的数和一个很小的,数直接相加减,否则就会“丢失”小数。,main()输出结果为:123456788848.00000,15,2.5,字符型数据,一、字符常量:,有两类:,1,单个的,ASCII,字符:用单引号引起来,在内,存中以,ASCII,码值的形式存储,看,P,374,附录。,2以反斜杠“”开头的字符系列:他们是一些,特殊字符的转义字符,,看,P,48,表3.3,。,2.5 字符型数据一、字符常量:有两类:,16,字符形式,含义,ASCII,代码,n,换行,将当前光标位置移到下,一行开头,10,t,水平制表(跳到下一个,tab,位置),9,b,退格,将当前位置移到前一列,8,r,回车,将当前位置移到本行开头,13,f,换页,将当前位置移到下页开头,12,反斜杠字符“”,92,单引号(撇号)字符,39,双引号字符,34,ddd,1到3位8进制数所代表的字符,xhh,1到2位16进制数所代表的字符,字符形式含义ASCII代码n换行,将当前光标位置移到下10,17,例2,转义字符的使用,。,main(),printf(,ab,ct,derftgn);,printf(htibbj,k);,程序运行时在显示屏上得到的结果是:,f,gde,h,j,k,程序运行时在打印机上得到的结果是:,fab,c,gde,h,jik,例2 转义字符的使用。,18,二、字符变量:,用,char,定义,每一个字符变量只能存放一个字符,不能存,放字符串,字符串需用数组来存放。,可以给字符变量赋0255的正整数。因为这,是,ASCII,码值。,字符变量显示时,可用格式%,c,显示字符本身,,也可用%,d,显示字符的,ASCII,码值。,(若定义为,signed,字符变量时,当,ASCII,值在0127时显示,ASCII,码值,若,ASCII,值在128255时显示-128-1)。,二、字符变量:用char定义,19,例3 向字符变量赋以整数。,main(),char cl,c2;,cl=97;,c2=98;,printf(%c%cn,cl,c2);,printf(%d%dn,cl,c2);,程序运行时输出结果是:,a b,97 98,例3 向字符变量赋以整数。程序运行时输出结果是:,20,例4 大小写字母的转换。,main(),char cl,c2;,cl=a;,c2=b;,cl=cl-32;,c2=c2-32;,printf(%c%c,cl,c2);,程序运行时输出结果是:,A B,例4 大小写字母的转换。程序运行时输出结果是:,21,三、字符串常量与变量:,字符串常量:,用双引号引起来的字符序列。,字符串在内存中存放时,系统会自动为字符,串末尾加上结束符,O,但书写时不加,O,显,示也不会出现任何操作。例:,a,与“,a”,不同。,其中:,a,在内存中以一个字节61,H(97),存储,,“,a”,用2个字节61,H,和00,H,存储。,字符串常量值若要存放在变量中,必须用字符,数组来存放。做,P,66,习题3.63.8。,三、字符串常量与变量:,22,例5,写出以下程序运行的结果。,main(),char cl=a,c2=b,c3=c;,char c4=101,c5=116;,printf(a%c,b%ctc%ctabcn,cl,c2,c3);,printf(tb%c%c,c4,c5);,程序的运行结果为:,aa,bb,cc,abc,A,N,例5 写出以下程序运行的结果。程序的运行结果为:aabb,23,例6,要将“,China”,译成密码,密码规律是:用原,来的字母后面第个字母代替原来的字母。,例如,字母“”后面第个字母是“”,用,“”代替“”。因此,“,China”,应译为,“,Glmre”。,请编一程序,用赋初值的方法使,c1、c2、c3、c4、c5,五个变量的值分别为、,h、i、n、a,,经过运算,使,c1、c2、c3、,c4、c5,分别变为,G、l、m、r、e,,并,输出。,例6 要将“China”译成密码,密码规律是:用原,24,main(),char c1=C,c2=h,c3=i;,char c4=n,c5=a;,c1+=4;c2+=4;c3+=4;,c4+=4;c5+=4;,printf(,密码是%,c%c%c%c%cn,c1,c2,c3,c4,c5);,程序的运行结果为:,密码是,Glmre,main()程序的运行结果为:密码是 Glmre,25,例7,例3能否改成如下:运行时显示什么内容?,为什么?,main(),int cl,c2;(,原为,char cl,c2),cl=97;,c2=98;,printf(%c%cn,cl,c2);,printf(%d%dn,cl,c2);,解:可以。因为在可输出的字符范围内,使,用整型和使用字符型作用相同。,例7 例3能否改成如下:运行时显示什么内容?解:可以。因为,26,2.6 变量的赋值,程序中常需要对变量赋予初值,,C,中赋初值,的方法有以下几种:,在定义变量的同时赋值。,例:,float b=3.14;int a,b,c=5;,在变量定义之后再为变量赋值。,例:,int a,b,c;a=1;,定义变量的同时可同时给多个变量赋初值。,例:,int a=b=c=1;,(TC,不承认),2.6 变量的赋值程序中常需要对变量赋予初值,
展开阅读全文