《第3章 数据类型、运算符与表达式.ppt》由会员分享,可在线阅读,更多相关《第3章 数据类型、运算符与表达式.ppt(53页珍藏版)》请在三一办公上搜索。
1、第三章,数据类型、运算符与表达式,内容提要:,语言的基本元素各种数据类型的常量和变量变量的赋值不同类型之间的混合计算几种基本的运算符及表达式,3.0 C的基本元素,1.符号集(字符集)C语言使用的基本符号有以下种:(1)大写字母(2)小写字母 az(3)数字09(4)下划线_(5)标点符号和运算符()*/#$,.标识符用来标记常量、变量、函数名字的字符序列(int a,b;)p39第2段规则描述:由字母、下划线、数字组成。以字母、下划线开始。标示符最大有效长度在不同系统中有不同的规定。不能为系统保留字。(P365 附录),比如:合法:X,x,y1,_max,INT 非法:1x,int,$1,A
2、,super man,super-man,注意:1.语言区分大小写。Sun sun是个不同的标识符。2.标识符要见名示意:int price,total,aver;int a,b,c;,3.1 C语言的数据类型,数据是操作的对象,数据类型是指数据的内在的表现形式(存储、运算)C语言提供了以下一些数据类型:,数据类型,指针类型,空类型(无值类型)void,构造类型,3.2 常量与变量,.常量与符号常量(1)在程序执行过程中,其值不能被改变的量为常量。常量区分为不同的类型:,整型 100,125,-100,0实型 3.14,0.125,-3.789字符型 a,b,2,(2)符号常量用一个标识符表示
3、一个常量。使用方法:#define 标识符常量例如:#define PRICE 30 P38 例题3.1注:定义符号常量后不能再进行赋值PRICE=10;,#include#define PRICE 30(符号常量)void main()int num,total;num=10;total=num*PRICE;printf(total=%dn,total);结果:,.变量(1)值可以改变的,用标识符来(变量名)表示,在内存占有一定的存储单元.见 P39 图3-1,(2)定义变量的方法:类型符 标识符,标识符.;int i,j,imax;float length,heigth;,(3)注意事项:
4、见名知意,即选有含意的英文单词或其缩写作标识符。变量要先定义,后使用(P38 例题3.1.)一般,符号常量大写,变量名首字母小写,函数名首字母大写,3.3 整型数据,1.整型常量即整常数。在语言中,整常数可用以下三种形式表示:(1)十进制整数。如:123,-456。(2)八进制整数。以0头的数是八进制数。如:0123表示八进制数123,等于十进制数83,-011表示八进制数-11,即十进制数-9。,(3)十六进制整数。以0 x开头的数是16进制数。如:0 x123,代表16进制数123,等于十进制数 291。-0 x12等于十进制数10。,2.整型变量(1)整型数据在内存中的存放形式整数在内存
5、中是以二进制补码形式存放的。,注意:Turbo C+3.0为一个整型变量在内存中分配2个字节的存储单元(不同的编译系统为整型数据分配的字节数是不相同的)。,(2)整型变量的分类:,共六种,有符号基本整型有符号短整型有符号长整型无符号基本整型无符号短整型无符号长整型,(signed)int 2(signed)short(int)2(signed)long(int)4unsigned int 2unsigned short(int)2unsigned long(int)4,注意:括号表示其中的内容是可选的.(P43给出了各种整数类型的取值范围),(3)整型变量的定义:语言规定在程序中所有用到的变量
6、都必须在程序中定义,即“强制类型定义”。例如:int a,b;(指定变量、为整型)unsigned short c,d;(指定变量、为无符号短整型)long e,f;(指定变量、为长整型),例3.2 整型变量的定义与使用#include void main()int a,b,c,d;/指定、为整型unsigned;/指定为无符号整型变量 12;-24;10;printf(”a+u=%d,b+u=%dn”,c,d);结果:,3.4 浮点型数据,1.浮点数又称为实数,主要有2种表示方法,两种表示形式,小数指数,0.123,.123,1.3.1e-3 3.110-3,注意:字母e(或E)前后必须有数
7、字,且e后面的指数必须为整数.例如:1e3、1.8e-3、3.e-6、.1e-3e3、2.1e3.5、.e3、1e,2.浮点型变量的分类浮点型变量取值范围和精度与机器以及编译器有关系,不同的系统会有差异。浮点型变量分为单精度(float型)、双精度(double型)和长双精度型(long double)三类形式。(P46 表3-2),3.浮点型数据在内存中的存放形式虽然浮点型数据的表示形式有两种,但在内存中是按照指数形式存储的。系统把一个浮点型数据分成小数部分和指数部分,分别存放。(图3-7),例3.4 浮点型数据的舍入误差,#include void main()float a,b;a=12
8、3456.789e5;b=a+20;printf(“%f,%fn”,a,b);,4.浮点型常量的类型C编译系统将浮点型常量作为双精度来处理。例如:float f=2.45678*4523.65 系统先把2.45678和4523.65作为双精度数,然后进行相乘的运算,得到的乘也是一个双精度数。最后取其前7位赋给浮点型变量f。如是在数的后面加字母f或F(如1.65f,654.87F),这样编译系统就会把它们按单精度(32位)处理。,3.5字符型数据,1.字符常量用单引号包含的一个字符.如:有些以“”开头的特殊字符称为转义字符.(P48 表3-3),a,A,$abc、“a”,X,例如:n 换行t 横
9、向跳格(跳到下一个Tab位置)r 回车 反斜杠(代表一个反斜杠字符)ddd ddd表示1到3位八进制数字xhh hh表示1到2位十六进制数字,2.字符变量字符型变量用来存放字符常量,注意只能放一个字符。字符变量的定义形式如下:char c1,c2;可以用下面语句对c1,c2赋值:c1 a;c2 101(A);一个字符变量在内存中占一个字节,3.字符数据在内存中的存储形式将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。一个字符变量在内存中占一个字节。字符型数据和整型数据之间可以通用(整数数据必须在0-256之间)。一个
10、字符数据既可以以字符形式输出,也可以以整数形式输出。,例3.6 向字符变量赋以整数。,#include void main()char c1,c2;c1=97;(c1=a)/*p364*/c2=98;(c2=b)printf(“%c%cn”,c1,c2);printf(“%d%dn”,c1,c2);输出结果:,例3.7 大小写字母的转换,#include void main()char c1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;printf(“c c,c1,c2);结果:,说明:Turbo C 将字符变量定义为signed char型。其存储单元中的最高位作为符号位,
11、它的取值范围是-128127。如果在字符变量中存放一个ASCII码为0127间的字符,由于字节中最高位为0,因此用%d输出字符变量时,输出的是一个正整数。如果在字符变量中存放一个ASCII码为128255间的字符,由于在字节中最高位为1,用%d格式符输出时,就会得到一个负整数。,4.字符串常量字符串常量是一对双括号括起来的字符序列。如:“$123.45”,“a”(a)可以使用printf函数输出一个字符串,如printf(“How do you do.”);注意:是字符常量,”是字符串常量,二者不 同。如:假设被指定为字符变量:char c;c=a;c=”a”;c=”CHINA”;不能把一个字
12、符串常量赋给一个字符变量。,规定:在每一个字符串常量的结尾加一个“字符串结束标志”,以便系统据此判断字符串是否结束。规定以字符0作为字符串结束标志。如果有一个字符串常量”,实际上在内存中是:它占内存单元不是5个字符,而是6个字符,最后一个字符为0。但在输出时不输出0。,3.6 变量赋初值,1.语言允许在定义变量的同时使变量初始化如:int a=3;/指定为整型变量,初值为3 float f=3.56;/指定为浮点型变量,初值3.56 char c=a;/指定c为字符变量,初值为a,2.可以使被定义的变量的一部分赋初值如:int a,b,c=5;/表示指定、为整型变量,但只对初始化,c的初值为3
13、.如果对几个变量赋以同一个初值如:int a=3,b=3,c=3;表示的初值都是。不能写成 int a=b=c=3;4.定义的变量如果不赋值,则里面数值不确定。,3.7 各数值类型间的混合运算,在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算.类型转换是由系统自动进行的.例如:10+a+1.5f-8765.123*b在C语言中是合法的表达式.,double,long,float,int,unsigned,char,short,高,低,图3-10 变量类型转换规则,3.8 运算符和表达式,1.C运算符简介的运算符有以下几类:(1)算术运算符(+-*/%)(2)关系运算符(;!)(3)
14、逻辑运算符(!;|)(4)位运算符(|)第12章(5)赋值运算符()(6)条件运算符(?:)(7)逗号运算符(,),(8)指针运算符(*和)(9)求字节数运算符(sizeof)(10)强制类型转换运算符((类型))(11)分量运算符(-)(12)下标运算符()(13)其他(如函数调用运算符(),2.算术运算符和算术表达式(1)基本的算术运算符:+(加法运算符,或正值运算符。如:3+5,+3)-(减法运算符,或负值运算符。如:5-2,-3)*(乘法运算符。如:*)/(除法运算符。如:/)注意:两个整数相除,值为整数.如:3/2=1除数、被除数有1个为负数,结果向0取整.如:-5/3=-1除数、被
15、除数有1个为实数,结果为实数.3.0/2=1.5,(2)算术表达式和运算符的优先级与结合性将算术运算符和括号将运算对象连接起来、符合C语法的式子成为算术表达式。如:a*b/c-1.5+a附录C 运算符和结合性,(3)强制类型转换运算符可以利用强制类型转换运算符将一个表达式转换成所需类型。一般形式:(类型名)(表达式)例如:(double)将转换成double类型(int)(x+y)将x+y的值转换成整型(float)(5%3)将5%3的值转换成float型,例3.8 强制类型转换。#include void main()float;int i;3.6;(int);printf(“x=%f,i=
16、%dn”,x,i);结果:,(4)自增、自减运算符(+,-)作用是使变量的值增或减。i+(+i)i=i+1 i-(-i)i=i-1i+与+i的区别:+i是先执行后,再使用的值;i+是先使用的值后,再执行。,例如:int i=3;;i的值先变成4,再赋给,j的值均为;先将 i的值3赋给,的值为,然后变为 p57,注意:(1)自增运算符(+),自减运算符(-),只能用于变量,而不能用于常量或表达式。3+,+(a+b)是非法的。(2)和的结合方向是“自右至左”。-a+-(a+)(-a)+表达式是错误的,3.9 赋值运算符和赋值表达式1.赋值运算符(=)赋值符号“”就是赋值运算符,它的作用是将一个数据
17、赋给一个变量。如“”的作用是执行一次赋值操作(或称赋值运算)。把常量赋给变量。也可以将一个表达式的值赋给一个变量.如:a=b+3,2.类型转换如果赋值运算符两侧的类型不一致,在赋值时要进行类型转换.(1)将浮点型数据(包括单、双精度)赋给整型变量时,舍弃浮点数的小数部分。如:为整型变量,执行“i=3.56”的结果是使的值为,以整数形式存储在整型变量中.(2)将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中.,(3)将一个double型数据赋给float变量时,截取其前面7位有效数字,存放到float变量的存储单元(4个字节)中。但应注意数值范围不能溢出。如果将一个float
18、型数据赋给double变量时,数值不变,有效位数扩展到16位,在内存中以8个字节存储,(4)字符型数据赋给整型变量时,由于字符只占1个字节,而整型变量为个字节,因此将字符数据(个二进位)放到整型变量存储单元的低位中。,(5)将一个int、short、long型数据赋给一个char型变量时,只将其低8位原封不动地送到char型变量(即截断)。例如:int i=289;char c=a;c=i;(6)将带符号的整型数据(int型)赋给long型变量时,要进行符号扩展,将整型数的16位送到long型低16位中(7)将非unsigned型数据赋给长度相同的unsigned型变量,也是原样照赋(连原有的
19、符号位也作为数值一起传送)。,例3.9 有符号数据传送给无符号变量#include void main()unsigned;int;printf(%un,a);,3.复合的赋值运算符在赋值符“”之前加上其他运算符,可以构成复合的运算符。例如:=等价于*=等价于*()%=等价于,4.赋值表达式 由赋值运算符将变量、常量、表达式连接起来的式子称为“赋值表达式”。用法:例如:“5+3”是一个赋值表达式对赋值表达式求解的过程是:求赋值运算符右侧的“表达式”的值;赋给赋值运算符左侧的变量。,3.10 逗号运算符和逗号表达式,逗号运算符:将多个表达式连接起来,又称为“顺序求值运算符”一般形式:表达式,表达式求解过程:先求解表达式,再求解表达式。整个逗号表达式的值是表达式的值。,