[IT认证]第2章 数据类型、运算符和表达式.ppt

上传人:音乐台 文档编号:1995465 上传时间:2019-01-29 格式:PPT 页数:65 大小:638KB
返回 下载 相关 举报
[IT认证]第2章 数据类型、运算符和表达式.ppt_第1页
第1页 / 共65页
[IT认证]第2章 数据类型、运算符和表达式.ppt_第2页
第2页 / 共65页
[IT认证]第2章 数据类型、运算符和表达式.ppt_第3页
第3页 / 共65页
亲,该文档总共65页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《[IT认证]第2章 数据类型、运算符和表达式.ppt》由会员分享,可在线阅读,更多相关《[IT认证]第2章 数据类型、运算符和表达式.ppt(65页珍藏版)》请在三一文库上搜索。

1、第2章 数据类型、运算符和表达式,2.1 基本符号和标识符 2.2 基本数据类型 2.3 常量与变量 2.4 数据的输出与输入 2.5 运算符 2.6 表达式,2.1 基本符号和标识符,基本符号 即字符集,是高级语言的编译系统所能识别的字母、数字和特殊符号。 数字 英文字母 括号 运算符 标点符号 特殊符号 空白符,2.1.1 基本符号,数字:09十个数字。 英文字母:大小写字母52个(AZ az ) 括号:(), , 运算符:+ - * / = % & | ? ! 标点符号: ” : ; 特殊符号: _ $ # 空白符:空格符、换行符、制表符,2.1 基本符号和标识符,标识符 用来命名变量、

2、常量、类型、函数、语句等程序对象的字符序列。 一个合理的标识符由英文字母或下划线开头,后接零个或任意个字母、下划线等,其长度不超过8个。 关键字 特定字 用户定义字,关键字(保留字),C编译程序预先登录的标识符,它们代表固定的含义,用户不能随便用来标识程序对象。 C语言常用关键字: autu break case char const continue default do double else enum extern float for goto if int long register return short signed static struct switch typedef un

3、ion unsigned void volatile while,特定字,特定字是具有特殊含义的标识符,它们虽然不是C语言的关键字,但是习惯上把它们看成关键字,建议不要再程序中随便使用。 例如,在C程序预处理命令行中使用的特定字: define undef include ifdef ifndef endif line elif,用户定义字,程序员在程序设计时为变量、常量、函数等程序对象其起的名字。 为了便于联想和记忆,建议用户给程序对象命名时,使用能反映该对象意义的定义字。 通常要注意一下几点: (1)不能使用关键字和特定字。 (2)前8个字符不能相同。 (3)最好使用英文或汉语拼音缩写。

4、(4)注意区别大小写。 (5)避免使用容易混淆的字符。如1与I,0与o,2与z等。 (6)不能与库函数同名。,2.2 数据类型,数据类型在高级语言中是一个很重要的概念。 C语言数据的使用严格遵照“先说明类型后使用”的原则。 不同类型的数据在内存的存储方式不同,所占的字节数也不同。 高级语言能表示的数据类型越多,程序编写起来就越方便。,2.2.1 C语言数据类型,2.2.2 基本数据类型,短整型 short int (1)整型 长整型 long int 普通整型 int 单精度浮点型 float (2)浮点型 双精度浮点型 double (3)字符型 char,2.3 常量与变量,常量: 在程序

5、的执行过程中取值始终保持不变的量。 整型常量 浮点型常量 字符型常量 字符串常量 指针常量 变量 在程序的执行过程中取值可以改变的量。,整型常量,整型常量通常有三种表示方法: 十进制:正常表示法(不能以0开头) 八进制:以数字0 开头 十六进制:以数字0x 开头 例如: X=10 Y=010 Z=0x10,浮点型常量,在C语言中,浮点数有两种表示方法: 小数表示法 例如,0.857, 193.5 指数表示法即数学上的科学计数法。 由整数部分、小数部分和指数部分构成。 其中,整数部分和小数部分用小数点连接;小数部分和指数部分用e或E连接。 例如,193.5的指数表示法为: 1.235e-3表示的

6、浮点数为:,1.935E2,0.001235,浮点型常量,浮点常量的构成规则是: 整数部分和小数部分可以不写,但不能同时不写。 指数部分可以省略,省略时相当于小数表示法。 若有指数部分,e(或E)两边至少有一位数。 指数的数字必须是整数(13位),可以有正负号,正号可省略。,字符型常量,用单引号括起来的一个字符。 字符常量的构成规则是: (1)单引号中的字符只能有一个。 (2)字符仅能用单引号,不能使用双引号。 (3)非图形字符也可以表示成字符常量。 表示方法是使用转义符与一些特殊字符构成转义序列。例如n表示“回车换行”。 常见的转义字符如下表所示。,常见转义字符,字符串常量,在C中用双引号引

7、起来的若干个字符称为字符串常量。例如:“welcome”, “198.75”。 字符串常量在内存中是按顺序逐个存储的,存储的是字符串的ASCII码,并在最后一个存储单元存放一个“0”字符,表示串结束。 字符串的长度是指串中“0”字符之前的所有字符数量,包括不可见字符,因此字符串常量实际占用的字节数是:串长1。例如:“welcome”实际上占用的内存字节数是8,而不是7。,指针常量,任何类型的指针都可以赋以0值(NULL),称为空指针,表示当前该指针不指向任何类型的任何变量,而不是指向地址为0的存储单元。因此,NULL是一个指针常量。,2.3.2 变量,在C语言中,所有的变量都必须“先定义后使用

8、”,以明确变量的4个属性: 变量的名字 数据类型 允许的取值范围 合法的操作。 编译系统就会完成如下工作: 根据定义为变量预先分配内存空间; 未经定义的标识符,系统不允许作为变量名使用; 便于在编译期间进行语法检查。,变量的定义格式,定义变量的格式: 类型说明符 变量名表 ; 类型说明符 指定了变量的数据类型,可以是int、float、double、char等。 变量名 要符合用户定义字的命名规则,一般使用小写字母。 变量名表 一种类型有多个变量时,变量名之间用逗号“,”分隔。类型说明语句用分号结束。 【例2.4】定义2个整型变量,1个字符型变量。 int i,j; /*说明2个整型变量i,j

9、 */ char a; /*说明1个字符型变量 a */,变量的初始化,定义变量时,只是根据变量的类型分配了存储空间,并没有给该空间指定一个特定的值。该存储空间原来有什么值还是什么值,即是以前遗留的值。 定义变量后需要给变量初始化,即给变量赋初值。 变量初始化可以避免引用到随机变量。 【例2.5】变量的初始化举例。 int i,j; /*说明2个整型变量i,j */ char a; /*说明1个字符型变量 a */ i=1; /*变量i的值为1 */ j=100; /*变量j的值为100 */ a=A; /*变量a的值为大写字母A */,2.4 数据的输出与输入,在C程序中,数据的输入和输出分

10、别是通过下列函数实现的: 格式输入函数 格式输出函数 字符输入函数 字符输出函数 在C+程序中,主要是通过调用输入输出的流对象来实现的。 在输入操作中,输入字节流从输入设备流向内存 在输出操作中,输出字节流从内存流向输出设备,格式输出函数printf,调用printf()的一般格式为: printf ( 格式控制字符串,输出项表 ); 格式控制字符串:字符串表达式,通常是用双引号括起来的字符串。 格式控制字符串通常包含四类内容: 普通字符:要求按原样输出。 转义字符:要求按转义字符的意义输出。 格式转换说明:以“”开头,后跟修饰符和格式符。例如d,以十进制输出整数。 输出表项:每个输出项可以是

11、一个常量、变量或表达式。每个格式对应一个输出项,输出函数按指定的格式对输出项的值进行转换,并组织排版输出。,格式输出函数应用举例,【例2.6】格式输出举例。实例给出十进制、八进制、十六进制和浮点数形式的输出格式控制。分析如下程序的输出结果,理解输出格式符、格式修饰符的作用。源程序如下: #include “stdio.h“ void main() printf(“%d,%+6d,%6d,%ldn“,1234,1234,1234,1234567L); printf(“%#o,%4o,%6lon“,054,054,-1); printf(“%#x,%4x,%6lxn“,054,054,-1); p

12、rintf(“%f,%8.2f,%7.2f,%.7fn“,123.4567f,123.4567f, 123.4567f,123.456789); ,字符串的输出,字符串的输出有两种方法: 直接输出:printf(“welcome”); 转换输出:printf(“s”,“welcome”);,格式输入函数scanf,调用scanf()的一般格式为: scanf ( 格式控制字符串,数据存储地址项表 ) ; 格式控制字符串是字符串表达式,通常是用双引号括起来的字符串。 格式控制字符串通常包含三类内容: 普通字符:要求用户必须按原样输入。 格式转换说明:以“”开头,后跟修饰符和格式符。例如d,以十进

13、制输入整数。常用的输出格式符见表2-5,常用的输出格式修饰符见表2-6。 数据存储地址表项:每个地址项是一个变量的地址,在变量名前加地址运算符&或指针。,scanf函数应用举例,【例2.7】格式输入举例。对应下列输入代码,要让变量x的值为11,变量y的值为567,经分析指出合理的输入语句应为哪一条? 01 scanf(%d,%d,字符输出函数putchar,要输出单个字符可调用字符输出函数putchar()。putchar()函数的作用是,将一个字符输出到标准输出设备上,这个设备通常指显示器。 调用putchar ()的一般格式为: putchar ( ch ) ; 其中,ch可以时字符型常量

14、或变量,也可以是整型常量或变量。,字符输出函数putchar应用举例,【例2.8】putchar()函数输出举例。在屏幕上输出字符“China”。 源程序清单如下: #include “stdio.h“ void main() char ch=h; int i=i; putchar(67); /* 输出字母C,对应的ASCII码值为67(十进制) */ putchar(ch); /* 输出字母h */ putchar(i); /* 输出字母i */ putchar(n) /* 输出字母n */ putchar(141); /* 输出字母a,对应的ASCII码值为141(八进制)*/ putch

15、ar(n); /* 换行 */ ,字符输入函数getchar,getchar()函数的作用是,从标准输入设备上读入一个字符,这个设备通常指键盘。调用getchar ()的一般格式为: getchar( ); 调用getchar函数不需要提供实际参数,调用该函数的返回值就是从输入设备上的得到字符的ASCII码值。,字符输入函数getchar应用举例,【例2.9】getchar()函数输入举例。在屏幕上显示由键盘输入的字符。 源程序清单如下: #include “stdio.h“ void main() char c; c=getchar (); /* 输入一个字符 */ putchar(c);

16、/* 输出由键盘读入的字符 */ printf(“n“); /* 换行 */ ,2.5 运算符,数据运算是由数据和运算符组成,C语言有丰富的运算符用来描述各种数据运算。 按照功能划分有赋值运算符、算术运算符、逻辑运算符、关系运算符、条件运算符、增/减1运算符、位逻辑运算符以及一些特殊的运算符。 按照运算对象划分: 单目运算:指运算符只有一个操作数,如取反操作。 双目运算:指运算符有两个操作数,如“”运算。 三目运算:指运算符有三个操作数,三目运算是C语言特有的。,2.5.1 赋值运算符,赋值运算符:“”。 所谓赋值是将一个数据值存储到一个变量中,这个数据值可以是常量、变量,还可以是能够求值的表

17、达式。 将数据值存储到变量中的过程称为赋值,赋值运算符分为两类: 普通赋值运算符 复合赋值运算符,普通赋值运算符,普通赋值运算的语法格式: 变量名表达式; 赋值运算的执行过程: 计算赋值运算符右端的表达式的值。 当赋值运算符两侧的类型不一致时,将表达式值的类型自动转换成变量的类型。 将表达式的值存储到有变量所占的存储单元中。,赋值运算举例,【例2.10】赋值运算举例。 假设已有定义int a,b,c; 则下列赋值语句是正确的。 a=10; b=a; c=a+b*2 【例2.11】连续有多个赋值运算时的举例。 假设已有定义: int a,b,c,x; double y; 则下列赋值语句是正确的。

18、 a=b=c5; yx3.5;,复合赋值运算符,在程序设计中,经常遇到在变量现有值的基础上作某种修正的运算。例如: x=x+2 y=y-2 这类运算的特点是:变量即是参与运算的分量,又是接受赋值的对象。 为了避免对同一个变量的地址重复计算,C/C+语言引入复合赋值运算。 把赋值运算符与算术运算符结合在一起,构成5个算术复合运算符:、*、/、。 把赋值运算符与移位和位逻辑运算符结合在一起,构成5个位运算的复合运算符:=、&=、 =、|=,赋值运算符举例,【例2.12】复合赋值运算符举例。 x+=1; /* 等价于x=x+1 */ x*=u+v; /* 等价于x=x*(u+v),括号不能省略 */

19、 a+=a-=b+2; /* 等价于a=a+(a=a-(b+2), 括号不能省略 */ 说明:用标记一个双目运算符(、*、),复合赋值运算: x=e的等效表达式为:x=x(e) 当e为一个复杂表达式时,等效表达式的括号是必须的,不能省略。 赋值运算符和所有复合赋值运算符的优先级全部相同,高于逗号运算符,低于其它所有运算符,并且它们的结合性都是“自左向右”的。,2.5.2 算术运算符,算术运算与数学的数值运算很相似,是C/C+中最简单和最容易理解的运算符。 算术运算按运算分量划分,可分为单目运算符和双目运算符两类: 单目运算符:+ (取正)、 (取负) 双目运算符:+ (加法)、 - (减法)、

20、 * (乘法)、 / (除法)、 % (求余),关于算术运算符的几点说明,算术运算符与数学运算的区别 “/”除法运算符 “%”求余运算符 算术运算符的优先级 先乘除后加减。 求余运算符的优先级与乘除相同。 如果有括号,先算括号内的,再算括号外的。 算术运算符的结合性 运算符的结合性是指如果一个操作数左边和右边的两个运算符的优先级相同,应该优先计算的操作符。 双目算术运算的结合性是“自左至右”,例如:x+y-z,算术运算符举例,【例2.13】使用printf函数显示表达式的值。 #include “stdio.h” void main() printf(“%d,%d,%dn”,9/5,10/5,

21、5/9); printf(“%f,%f,%fn”,9/5.0,9.0/5,9.0/5.0); printf(“%d,%d,%dn”,3%2, -3%2, 3%-2); ,2.5.3 关系运算符,关系运算就是比较两个数值大小的运算,比较两个数值大小的运算符就是关系运算符。 关系运算符共有6个: = = != 使用关系运算符时要注意以下几点: 6个关系运算符中的“=”和“!=”的优先级小于其它4个运算符 关系运算符的结合方向是“自左至右”。 关系运算符的优先级低于算术运算的优先级,关系运算符举例,【例2.14】关系运算符“”和赋值运算符“”的区别。 #include “stdio.h“ void

22、main() int a,b,c1,c2; a=3; b=3; c1=(a=b); c2=(a=b); printf(“%d,%dn“,c1,c2); ,关系运算符举例,【例2.15】算术运算符和关系运算符在一个表达式中混合使用。 01 #include “stdio.h“ 02 void main() 03 04 int a,b,c; 05 bool i,j; 06 a=2;b=3;c=4; 07 i=(a=b+2); 13 ,2.5.4 逻辑运算符,逻辑运算用于判断分析,逻辑运算的操作数和运算结果均为逻辑值。 逻辑运算符有3个: ! 逻辑非 单目 & 逻辑与 双目 | 逻辑或 双目,操作数

23、为真时,结果为假 操作数为假时,结果为真。 两个操作数全为真时,结果为真, 否则为假。 两个操作数中只要有一个为真时, 结果为真,否则为假。,逻辑运算符的运算规则,说明: C语言系统对于任何非0的值都认为是逻辑真,仅将0认为是逻辑假。 逻辑非“!”是单目运算符,其结合性是“自右向左”;逻辑与“&”和逻辑或“|”是双目运算符,其结合性是“自左向右”。,逻辑运算符的优先级,在逻辑运算中, “!” “&” “|” 与其它运算符相比, “!”算术运算符关系运算符 “&”“|” 若不用圆括号表示运算的先后次序,而将算术、关系、逻辑等运算符混合用于一个表达式,其运算结果是一个很难分析的事情。,逻辑运算符举

24、例,【例2.16】算术、关系、逻辑运算符在一个表达式中混合使用。 源程序清单如下: 01 #include “stdio.h“ 02 void main() 03 04 int a,b,c; 05 bool i,j; 06 a=2;b=3;c=4; 07 i=(a+6)(8-(!0); 09 printf(“%2d,%2d n “,i,j); 10 ,2.5.5 条件运算符,C语言中唯一一个三目运算符,需要三个操作数 语法格式为: 表达式1 ?表达式2 :表达式3 条件运算的执行过程是: 计算表达式1的值; 若表达式1的值为真(非0),则计算表达式2,并以表达式2为条件运算的结果,不再计算表达

25、式3; 若表达式1的值为假(0),则计算表达式3,并以表达式3为条件运算的结果,不再计算表达式2。,条件运算符的优先级,条件运算符(?:)的优先级高于赋值运算符,低于逻辑运算符,也低于关系运算符和算术运算符。 条件运算符的结合性为“自右向左”。,条件运算符举例,【例2.17】条件运算符的使用。 源程序清单如下: 1 #include “stdio.h“ 2 void main() 3 4 int a,b,c,i,j; 5 a=2;b=3;c=4; 6 i=(a+6)c?8:4; 7 j=ac?a:c; 8 printf(“%2d,%2d n “,i,j); 9 ,2.5.6 自增/自减运算符,

26、自增/自减运算符是C语言最有特色的运算符:, 这两个运算符都是单目运算符,且运算对象只能是整型变量或指针 自增/自减运算符的功能是使变量的值增1或减1,有以下四种表示方式: +i前缀形式:表示在引用变量之前,先使i加1,以加1后的i值为运算结果 -i前缀形式:表示在引用变量之前,先使i减1,以减1后的i值为运算结果 i+后缀形式:表示在引用变量之后,才使i加1,以加1前的i值为运算结果 i-后缀形式:表示在引用变量之后,才使i减1,以减1前的i值为运算结果,自增/自减运算符,自增/自减运算符使用时需要注意以下几点: 自增/自减运算符的操作对象是变量 自增/自减运算符的优先级高于算术运算符与单目

27、运算符的优先级相同,结合方向自右向左 多数情况下自增/自减运算符是单独使用的,尽量不要与其它运算符混合使用。,2.5.6. 其它运算符,逗号运算符 位运算符(略) sizeof运算符,逗号运算符,用于将若干个表达式连接起来,构成逗号表达式。 逗号运算符属于单目运算符,语法格式为: 表达式1, 表达式2 求值过程是: 首先求解表达式1; 然后求解表达式2; 将表达式2的结果作为表达式的值。,逗号运算符举例,【例2.19】逗号运算符举例。定义三个整型变量,并组成一个逗号表达式,输出逗号表达式的结果。 源程序清单如下: #include “stdio.h“ void main() int x,y,z

28、; x=2; z=(y=3,x*y); printf(“%d n “,z); ,位运算符,位运算是C语言提供的特殊功能,使C语言具备了部分低级语言的特征。 位运算符包括两种类型:,逻辑运算符 移位运算符, 位反 & 位与 位异或 | 位或 右移运算符,位逻辑运算符的功能, 位反:单目, 将操作数按位取反,0变1,1变0 & 位与:双目, 将操作数按位与操作,都为1时结果才为1 位异或:双目, 将操作数按位比较,有一个为1时结果就为1 | 位或:双目, 将操作数按位或操作,只要有一个为1时结果就为1,移位运算符,用来将整数或字符型数据作为二进制的位串,整体向左或向右移动。 双目运算符,左操作数为

29、移位的数据对象,右操作数的值为移位位数。 优先级低于算术运算符,高于关系运算符和逻辑运算符, 结合方向是自左向右 左移扩大原数的倍数,右移缩小原数的倍数,sizeof运算符,单目运算符,用于动态分配存储空间。 语法格式为: sizeof(表达式) 表达式可以是变量名、常量以及数据类型名 功能:返回表达式中的变量、常量或数据类型所占用的字节数。 注意:运算的结果是字节数,而不是位数。,2.6. 表达式,由变量、常量等运算分量和运算符组成的式子。 表达式按运算符的优先级和结合性规则进行运算,最终得到的结果称为表达式的值。 常见的表达式有以下六种: 算术表达式 关系表达式 逻辑表达式 赋值表达式 条

30、件表达式 逗号表达式,表达式,书写表达式时,要注意以下几点: 连续出现两个运算符时,为避免二义性,要使用空格或圆括号进行分隔 可以使用圆括号强制改变运算符的优先级 优先级用来决定表达式的运算顺序 圆括号单目运算 算术运算 逻辑运算 条件运算 赋值运算 逗号运算 结合性也可确定表达式的运算顺序,2.6.2 表达式的类型转换,C语言允许在一个表达式中出现不同类型的数据混合运算,这时就需要进行数据类型转换在进行计算。 由于各种数据类型在表示范围和精度上的不同,数据被类型转换后,可能会丢失数据的精度。 类型转换有两种: 隐式类型转换 显式类型转换,隐式类型转换,表达式中有类型不符的情况时,自动依据一定的规则处理类型转换工作。 通常的规则为: 占用字节少的转换成占用字节多的 如果一个操作数为无符号型,另一个操作数也会转换为无符号型 如果某个操作数为double浮点数,另一个操作数也会转换成double浮点数 两个相同类型的数据直接运算,不需要转换,强制类型转换,强制类型转换是将一种表达式的数据类型强制转换为另一种类型数据。 一般格式如下: (类型名)操作对象 或 类型名(操作对象) 说明:前一种是C语言使用的格式,后一种是C+语言新增加的格式,其功能是将操作对象强制地转换成类型名所指定的类型 强制类型转换不改变操作对象本身的数据类型和数值。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1