第2章 数据类型和表达式教材_第1页
第2章 数据类型和表达式教材_第2页
第2章 数据类型和表达式教材_第3页
第2章 数据类型和表达式教材_第4页
第2章 数据类型和表达式教材_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章数据类型和表达式第2章数据类型和表达式2.1词法构成2.2数据类型2.3常量与变量2.4运算符和表达式第2章数据类型和表达式2.1词法构成字符集标识符关键字注释符字符集C语言的字符集是ASCII字符集的一个子集,由字母,数字,标点符号和特殊字符构成。(1)英文字母:a~z,A~Z(2)数字:0~9(3)空白符:空格符,制表符,换行符等统称为空白符。(4)特殊字符:①标点符号②转义字符字符集表2.1常用转义字符表名称符号名称符号空字符(null)\0换行(newline)\n换页(formfeed)\f回车(carriagereturn)\r退格(backspace)\b响铃(bell)\a水平制表(horizontaltab)\t垂直制表(verticaltab)\v反斜线(backslash)\\问号(questionmark)\?单引号(singlequotationmarks)\'双引号(doublequotationmarks)\”1到3位8进制数所代表的字符\ddd1到2位16进制数所代表的字符\xhh标识符C语言规定,标识符只能是字母(A~Z,a~z)、数字(0~9)、下划线(_)组成的字符串,并且第一个字符必须是字母或下划线。注意(1)C语言中标识符严格区分大小写

(2)ANSIC标准规定标识符的长度可达31个字符

(3)标识符命名应“见名知义”; (4)变量名都要“先定义,后使用”。关键字ANSIC定义的关键字共32个,根据关键字的作用,可将其分为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类MicrosoftC在ANSIC基础上扩展的关键字有(19个)注释符C语言的注释符是以“/*”开头,并以“*/”结尾,其间的内容为注释,一般出现在程序语句行之后,用来帮助阅读程序。数据类型基本类型构造类型指针类型(

)空类型(void)字符型(char)枚举类型(enum)数组类型([])结构体类型(struct)共用体类型(union)整型实型单精度型(float)双精度型(double)2.2数据类型基本整型长整型短整型无符号整型整数类型 整型数就是通常使用的整数,分为带符号整数和无符号整数两大类。 1.基本类型定义

类型说明符:int例如,inta,b,c; 说明变量a,b,c被同时定义为基本整型数据类型。整数类型 2.整型数据的存储与取值范围表2.2VisualC++6.0环境中整型数据属性表数据类型占用字节数二进制位长度值域int432-2147483648~2147483647short[int]216-32768~32767long[int]432-2147483648~2147483647[signed]int216[signed]short[int]216[signed]long[int]432unsigned[int]2160~65535unsignedshort[int]216同unsignedintunsignedlong[int]4320~4294967295整数类型3.整型数据的表示形式十进制整数:254,-127,0都是正确的,而0291(不能有前导0)、23D(含有非十进制数码)都是非法的;八进制整数:021,-017都是正确的,它们分别代表十进制整数17,-15,而256(无前缀0)、03A2(包含了非八进制数码)是非法的;十六进制整数:0x12,0x1F都是正确的,它们分别代表十进制整数18,31,而5A(无前缀0x)、0x3H(含有非十六进制数码)是非法的。实数类型

1.基本类型定义类型说明符:float(单精度型),double(双精度型),longdouble(长双精度型) 2.实数存储与取值范围 在计算机中,实数是以浮点数形式存储的,所以通常将单精度实数称为浮点数。例如单精度实型数据在计算机中的存放形式见图2.1所示。其中,小数部分一般都采用规格化的数据形式。

图2.1单精度实型数据在计算机中的存放形式1位7位1位23位阶符阶码数符尾数指数部分小数部分实数类型 3.浮点数的表示形式 在C语言中,实数表示只采用十进制。它有二种形式:十进制数形式和指数形式。(1)十进制数形式。由整数、小数部分和小数点组成,整数和小数都是十进制形式。例如,0.123,-125.46,.78,80.0等都是合法形式。(2)指数形式。由尾数、指数符号e或E和指数组成,尾数是小数点左边有且只有一位非零数字的实数。e或E前面必须有数字,e或E后面必须是整数。指数形式用于表示较大或者较小的实数。字符类型 1.基本类型定义

类型说明符:char 2.字符型数据存储与取值范围 字符型数据的取值范围:ASCII码字符集中的可打印字符。字符数据存储占1个字节,存储时实际上存储的是对应字符的ASCII码值(即一个整数值)。字符类型 3.字符型数据的表示方法字符型数据在计算机中存储的是字符的ASCII码值的二进制形式,一个字符的存储占用一个字节。因为ASCII码形式上就是0到255之间的整数,因此C语言中字符型数据和整型数据可以通用。字符类型字符数据:指用单引号括起来的单个字符数据,如'A','%',':','9'等。而'12'或'abc'是不合法的字符数据。字符串数据:指用双引号括起来的单个或一串字符数据,如"good"、"0132"、"w1"、"a"等。注意"a"是字符串数据而不是字符数据。 为了便于C程序判断字符串是否结束,系统对每个字符串数据存储时都在末尾添加一个结束标志——即ASCII码值为0的空操作符'\0',它既不引起任何动作也不会显示输出,所以存储一个字符串的字节数应该是字符串的长度加1。字符类型例如"hello"在计算机中表示形式如图2.3所示:'h''e''l''l''o''\0'1041011081081110图2.3"hello"在计算机中的存储示意图2.3常量与变量2.3.1常量常量程序运行过程中不能被改变的量。整数在计算机中是准确表示的,可以用十进制、八进制和十六进制数表示。当用八进制数表示时,第一位数字前面必须加0;当用十六进制数表示时,第一位数字前而必须加0x:无符号整数的末尾必须加字母u或U;长整数的末尾必须加字母I或L。字符型常数是用单引号括住的单个字符。用转义字符表示不可显示字符。转义字符以“\”开头,后跟一个特定的字母或八进制数或十六进制数表示的ASCII代码值。2.3常量与变量符号常数是用标识符表示的常数,它具有变量的外表和常量的内涵。用#define定义的符号常数没有类型和值的含义。在预编译时由编译系统将宏名用宏体替换。define是编译预处理命令,不属于C语言关键字。用const定义的符号常数既有值又有类型的含义。该定义是在编译阶段完成的。2.3.2变量1.变量的有关概念在程序运行过程中,其值改变的数据,称为变量,变量用标识符表示,称为变量名。变量必须“先定义后使用”系统为变量分配存储单元,存储变量的值。编写程序时通过变量名来存、取变量值。x98变量值为变量分配的存储单元变量名例如:有变量x它的值是982.变量定义变量定义的一般格式:例如:inti,j;

longk,m;

floatx,y;

charch1,ch2;必须使用合法的标识符作变量名不能使用关键字为变量命名分号是语句的组成部分C语言的变量名和它的类型无关;在函数或复合语句中必须把要定义的变量全部定义,即不允许在后面的执行语句中插入变量的定义。

【类型修饰符】数据类型变量表;5.变量的初始化允许在说明变量的时候对变量赋初值。例如:inta=5,b=10+2;

doublex=23.568,y;

charch1='a',ch2=66,ch3='\142';表示定义变量并对变量存储单元赋值。错误的初始化:

inta=3+b,b=5;floatm=n=23.16;5.变量的初始化(1)注意变量在赋值或运算时,其值要在该数据类型的值域内,否则会产生数据溢出。(2)由于实型变量是由有限的存储单元组成的,因此能提供的有效数字总是有限的,在有效位以外的数字将被舍去,由此可能会产生一些误差。(3)字符型数据与整型数据可通用,增加了程序设计的自由度,例如对字符作多种转换就比较方便。但也需注意,字符型数据与整型数据的通用是有条件的,即在0~255的范围之内才可以通用。5.变量的初始化【例2.3】计算字符'B'与整型数据20的和。

#include"stdio.h" voidmain() {chara;/*说明a为字符型变量*/ intb;/*说明b为整型变量*/ a='B';/*为a赋字符常量'B'*/ b=a+20;/*计算66+20并赋值给字符变量b*/ printf("%c,%d,%c,%d\n",a,a,b,b);/*分别以字符型和整型两种格式输出a、b*/} 程序运行的输出结果如下: B,66,V,862.5运算符和表达式主要内容:算术运算符和算术表达式赋值运算符和赋值表达式关系运算符和关系表达式逻辑运算符和逻辑表达式位运算符和位运算表达式条件运算符和条件表达式逗号运算符和逗号表达式其他运算符及其运算运算符的有关概念作用:对运算对象完成规定的操作运算类型:按运算对象分:单目、双目、三目按功能分:算术、赋值、关系、逻辑条件、逗号、位、其他运算符的优先级和结合性优先级指各种运算符号的运算优先顺序例如:算术运算优先于关系运算算术运算中先*/后+-结合性指运算符号和运算对象的结合方向分为:从左向右(左结合)和从右向左(右结合)例如:算术运算符为左结合a-b+4赋值运算符为右结合a=b=5运算符的优先级和结合性表2.6

运算符优先级和结合性优先级运算符名称操作数个数结合规则1()[]->﹒圆括号运算符数组下标运算符指向结构指针成员运算符取结构成员运算符->(从左至右)2!~++---(类型)*&sizeof逻辑非运算符按位取反运算符自增运算符自减运算符负号运算符强制类型转换运算符取地址的内容(指针运算)取地址运算符求字节数运算符1(单目运算符)<-(从右至左)运算符的优先级和结合性优先级运算符名称操作数个数结合规则3*/%乘法运算符除法运算符求余运算符2(双目运算符)->4+-加法运算符减法运算符2(双目运算符)->5<<>>左移运算符右移运算符2(双目运算符)->6<<=>>=小于运算符小于等于运算符大于运算符大于等于运算符2(双目运算符)->7==!=等于运算符不等于运算符2(双目运算符)->运算符的优先级和结合性优先级运算符名称操作数个数结合规则8&按位“与”运算符2(双目运算符)->9^按位“异或”运算符2(双目运算符)->10|按位“或”运算符2(双目运算符)->11&&逻辑与运算符2(双目运算符)->12||逻辑或运算符2(双目运算符)->13?:条件运算符3(三目运算符)<-优先级运算符名称操作数个数结合规则14=+=-=*=/=%=>>=<<=&=^=|=赋值运算符2(双目运算符)<-15,逗号运算符(顺序求值运算符)->运算符的优先级和结合性表达式的有关概念什么是表达式表达式由运算符和操作数组成,操作数是运算符的操作对象,可以是常量、变量、函数和表达式。表达式的书写C语言的表达式采用线性形式书写。数学表达式应该写成1/6-i+j*j*j*j*j*j。C语言的表达式只能使用C语言中合法的运算符和操作数2πr应该写成2*3.14159*r例如:表达式:150+'b'*2-12.456b=(++a)-2a/=a*=(a=2)f=a>b>c--a||++b&&c++max=a>b?a:ba=3,a+=3,a*a 1/(float)a+6算术运算算术运算符的优先级

()+-++--

*/%

+-

同级同级同级

单目双目

低算术运算没有乘方运算符,要计算a3要写作a*a*a的连乘,或用标准库函数pow(a,3)“/”的运算对象可为各种类型数据,但是当进行两个整型数据相除时,运算结果也是整型数据“%”要求运算对象必须是整型数据,功能是求两数相除的余数,余数的符号与被除数的符号相同。自增自减运算++--是单目运算符有前缀和后缀两种形式前缀形式:先自增(自减)再引用;后缀形式:先引用再自增(自减);功能:前缀形式++a等价于

a=a+1

--

a

等价于

a=a–

1后缀形式a++等价于a=a+1

a--

等价于a=a–

1例如:当a=5时⑴++a表达式的值为6,且

a=6⑵

a++表达式的值为5,且a=6⑶b=++a

等价于a=a+1;b=a表达式的值为6,且a=6,b=6⑷b=a++等价于b=a;a=a+1表达式的值为5,且a=6,b=5

说明:自增、自减运算符只能用于整型变量,而不能用于常量或表达式。例如:5++、(a+2)++不合法。具有右结合性,结合方向为从右到左。例如:

–a++

等价于-(a++)

C语言的表达式中“++”,“--”运算符,如果使用不当,很容易导致错误。例如:设i=3,表达式k=(++i)+(++i)+(++i)”不同的C编译系统结合方式不一样,所以不同的编译系统中,针对上述表达式得出的答案并不一定同编程者的原意相同。说明:

【例2.6】自增自减运算的应用。

#include“stdio.h” voidmain() {inti,j; i=j=5; printf(“i++=%d,j--=%d\n”,i++,j--); printf(“++i=%d,--j=%d\n”,++i,--j); printf(“i++=%d,j--=%d\n”,i++,j--); printf(“++i=%d,--j=%d\n”,++i,--j); printf(“i=%d,j=%d\n”,i,j);

}运行结果:i++=5,j--=5++i=7,--j=3i++=7,j--=3++i=9,--j=1i=9,j=1关系运算关系运算符(左结合)

>>=<<=

==!=较高较低关系表达式用关系运算符将运算对象连接成的式子例如:12<'C'+1(字符型数据比较ASCII值)a==b>=c等价于a==(b>=c)与(a==b)>=c不等价关系运算符优先于赋值,低于算术说明:关系运算的结果应该是逻辑值。C语言用数值用1表示逻辑真,0表示逻辑假例如:7>5的值是1,5>7的值是0

'a'>'b'的值是0,'a'<'b'的值是1即关系表达式的值:0或1实型数可进行大于或小于比较,但通常不进行==或!=的关系运算逻辑运算符逻辑运算符&&||!逻辑运算符的运算规则运算对象逻辑运算结果aba&&ba||b!a非0非0110非000100非001100001逻辑表达式逻辑表达式用逻辑运算符将运算对象连接成的式子例如:0&&'b'a&&b||c&&d

a||b-5||c/4!x+y>=z逻辑运算符的优先级和结合性:!是单目运算符,右结合,高于算术&&和||是双目运算符,左结合,高于赋值运算符,低于关系运算符逻辑运算规则从左到右依次进行逻辑计算运算对象为非0表示逻辑真运算对象为0表示逻辑假逻辑运算的结果为0或1例如设:a=15,b=0,c=-2

a&&b&&c结果为0a||b||c结果为1(a+c)||b&&c结果为1逻辑运算规则(续)运算按照从左至右的顺序进行,一旦能够确定逻辑表达式的值,就立即结束运算——逻辑运算的短路性质例如设:a=1,b=0,c=-2a&&b&&c(a++)||++b&&--c为0,运算终止,表达式值为0为非0,运算终止,表达式值为1且a为2,b为0,c为-2(b,c保持原值)关系与逻辑运算符的应用表示数学公式a>b>c判断a,b,c三条线段能否组成一个三角形

a,b不同时为负

a+b>c&&a+c>b&&b+c>aa>=0||b>=0!(a<0&&b<0)(a<0&&b>=0)||(a>=0&&b<0)||(a>=0&&b>=0)a>b&&b>c条件表达式运算条件运算符:?:条件表达式的一般形式表达式1?表达式2:表达式3例如:m<n?x:a+3a++>=10&&b-->20?a:bx=3+a>5?100:200C语言中唯一的三目运算符,要正确区分用?和:分隔的表达式涉及条件运算符的优先级与结合性条件运算符优先级条件运算符优先级高于赋值、逗号运算符,低于其他运算符例如:⑴m<n?x:a+3⑵a++>=10&&b-->20?a:b⑶x=3+a>5?100:200等价于:(m<n)?(x):(a+3)等价于:(a++>=10&&b-->20)

?a:b等价于:x=

((3+a>5)

?100:200)逗号表达式运算逗号表达式的一般形式

表达式1,表达式2,……,表达式n逗号表达式的值从左向右,依次对表达式求值,最后得到表达式n的值就是逗号表达式的值例如:⑴a=5,

a++,

a*3

表达式值为18,且a=6⑵t=1,t+5,t++表达式值为1,且t=2⑶x=(a=3*5,a*4)赋值表达式的值为60,且x=60,a=15赋值运算赋值运算符(右结合)

=+=-=*=/=%=&=|=^=>>=<<=赋值表达式将表达式的值存入变量对应的内存单元中m=12b=(++a)-2m%=3+n等价于m=m%(3+n)x*=(x=5)说明:【例2.8】赋值运算应用实例。 #include"stdio.h" voidmain() {inti,j; floatx,y; i=j=1; x=y=1.1f; printf("i=%d,j=%d\n",i,j); x=i+j; y+=1;/*等价于y=y+1*/ printf("x=%4.2f,y=%4.2f\n",x,y); i=i+++j; x=2*x+y; printf(“i=%d,x=%4.2f\n”,i,x); }运行结果为:i=1,j=1x=2.00,y=2.10i=3,x=6.10位运算符~&^|<<>>位逻辑运算符移位运算符单目位运算符的运算对象只能是整型数据或字符型数据,不能是实型数据运算对象一律按二进制补码参加运算,并按位进行运算位运算的结果是一个整型数据低于单目、算术运算符,高于其他运算符低于单目、算术和关系运算符,高于其他运算符位运算符(1)位逻辑运算按位取反运算 按位取反运算符:~按位取反运算用来对一个二进制数按位求反,即“1”变为“0”,“0”变为“1~运算常用于产生一些特殊的数。~运算还常用于加密子程序。例如:初始字节内容00000101取反后

11111010位运算符按位与运算按位与运算符:& 按位与运算的规则是当两个操作数的对应位都是1时,则该位的运算结果为1,否则为“0“。例如:0x29&0x37的运算0x29:001010010x37:00110111与运算结果为:00100001,即0x21。位运算符按位或运算按位或运算符:| 按位或运算的规则是当两个操作数的对应位都是0时,则该位的运算结果为0,否则为1。例如:0x29|0x37的运算0x29:001010010x37:00110111按位或结果:00111111,即等于0x3f。位运算符按位异或运算按位异或运算符:^ 按位异或运算的规则是当两个操作数的对应位相同时,则该位的运算结果为0,否则为1。例如:0x29^0x37的运算0x29:001010010x37:00110111按位异或结果:00011110,即等于0x1e位运算符

移位运算向左移位运算左移位运算符:<<

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论