数据类型和基本操作.ppt_第1页
数据类型和基本操作.ppt_第2页
数据类型和基本操作.ppt_第3页
数据类型和基本操作.ppt_第4页
数据类型和基本操作.ppt_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

1、第三章 数据的存储与处理,3.1 标识符、变量与常量 3.2 C语言的数据类型 3.3 运算符和表达式,3.1 标识符、变量与常量,字符集 字符集是高级语言的编译系统所能识别的字母、 数字、和特殊符号。每种高级语言都有自己特定的字 符集合。 (1) 大、小写英文字母: A ,B, ,Z,a,b,z (2) 数字: 0,1,2,9 (3) 运算符: + * / % = (6) 特殊符号: _ $ # (7) 空白符:空格符、换行符、制表符。,3.1.1 标识符,字符集中的字符按照C语言语法组合起来,就能通过编译系统的语法和词法分析。不在字符集中的字符可以在两个双引号之间出现,例如:“”。 标识符

2、 标识符是用来标识在C程序中的变量、常量(指符号常量)、数据类型和函数的。通俗一点说,标识符是程序员为变量、常量或者函数起的名字,它实际上是一个字符序列。,(1) 字母或下划线中的任一字符打头。 (2) 在第一个字符后,可以是任意的数字、字 母、下划线组成的序列。字符个数最长可达32个,但最好不超过8个。因为C语言通常只识别8个字符。例如,example_1和example_2在某些编译系统中被认为是同一个标识符。 关键字(保留字) 标识符的分类: 预定义标识符 用户标识符,任何一个标识符必须符合下列语法规则:,关键字:又称保留字,一般为小写字母。关键字是C编译程序预先登录的标识符,它们代表固

3、定的意义,用户不能随便使用。若随便使用,可能出现意想不到的错误,编译能通过,但运行结果不对,且不容易检查错误之所在。,关键字(保留字),由ANSI标准定义的关键字共32个: auto breakcasechar constcontinuedefaultdo double else enumextern float for goto if int long switchregister return short signedsizeof staticstruct typedefunion unsignedvoid volatile while,预定义标识符,预定义标识符:具有特殊含义的标识符。包

4、括库函数名(如:printf)及预处理命令(如:define、undef 、include、ifdef、ifndef、endif 、line ),用户按照语法规则定义的标识符。用户标识符可以用来标识用户自己使用的变量,符号常量、数据类型以及函数等。 注意 (1) 不能使用关键字,建议也不要使用预定义标识符。 (2) 用户标识符为了标识不同的对象,标识符的前8个(甚至7个)字符要有区别。 (3) 标识符最好有含义,尽量做好“见名知义”。 (4) 避免使用容易混淆的字符。如l与1,0与o, z与2等。 (5)大、小写代表不同的意义。,用户标识符,3.1.2 常量,常量 在程序的执行过程中数值不会发

5、生改变的 量。 无名常量(也称文字常量或直接常量) a=100; 100是无名常量 符号常量(用预处理命令#define为常量命名) #deine MAX 100,例:求圆的面积。 #define PI 3.14 main() float r,s; r=2.0; s=PI*r*r; printf(“%fn”,s); 使用符号常量的优点: 1.提高程序可读性。 2.减少输入工作量,且便于修改。,3.1.3 变量,变量 变量是由程序命名的一块计算机内存区 域,是用来存储一个可以变化的数值。,在使用一个变量之前,程序员必须为每个变量起个名字,同时还要声明它的数据类型,以便编译系统根据不同的数据类型为

6、其静态地分配内存空间。我们称之为定义变量。 定义变量的格式为: 类型说明符 变量名表 ;,定义变量,3.2 C语言的数据类型,整型 int short long 基本数据类型 浮点型 float double 字符型 char 数组 以 为标志 结构 struct 构造类型 复杂数据类型 联合 union 枚举 enum 指针类型 以 * 为标志 空类型 void,C 语言的数据类型,整型 短整型 short int 长整型 long int 普通整型 int 浮点型 普通浮点型 float 双精度浮点型 double 字符型 char,不同数据类型的数据由于其在内存的存储方式不 同,存储所占

7、的二进制位(bit)大多不相同。即使是 相同类型的数据在不同种类的计算机所占位(bit)数 也不完全相同。如:在TC环境下,int占2个字节。在VC 环境下,int占4个字节。,3.2.1 整型数据,整型数据在内存中的存储方式 整型变量 整型常量,在IBM PC机上,普通整型占 16位(bit),短整型也占 16位(bit),而长整型占32位(bit)。根据整型数据所占的位数,计算一个整型数据能表示的数据的取值范围。(2班) 第位是符号位,如果符号位为0,表示是正整数,从到15位全为1时表示的数最大。 01111 1215 15个1 则16bit能表示的最大整数是215 1 ,即32767。,

8、整型数据在内存中的存储方式,如果符号位为1,表示是负整数,从到15 位都为0时表示的数最小。 10 00 15个0 在计算机中,这个数是-215的补码表示。因此, 最小整数是-215,即 -32768。,按照整型变量所占的二进制位数来分类: short(短整型) int (普通整型) long (长整型) 根据整型变量是否带符号位来分类: 不带符号的整型变量 带符号的整型变量 无符号用关键字unsigned表示 1班 说明整型变量的语法是: 限定词 int 变量名表;,整型变量,整型常量表示: 十进制表示 八进制表示 以数字 0开头 十六进制表示 以数字0和x开头。 注:在C语言中,不存在二进

9、制整型常量。 int a,b,c; a = 10; b = 010; c = 0 x10; 长整型:要在数字后加上字母L (或l)。 long s; s=10L ; 无符号长整型:要在数字后加上字母L U(或lu)。,整型常量,需要注意的是:如果整型常量超过机器所能表示的范围,则会发生溢出,而在C语言中的整数溢出并不会使程序出错,而是得到一个非正确的值。 int a,b; a = 10000; b = 10000000; 变量b的值会被系统认为是-27008。,3.2.2 浮点数,浮点数据在内存中的存储方式 浮点变量与浮点常量 浮点数据的输入和输出,浮点数在机器中的表示一般分为三部分:符号位、

10、阶码、尾数。 32位浮点数的有效数字的个数是7位十进制数字,取值范围为10-38 1038,64位浮点数的有效数字的个数是15位十进制数字,取值范围为10-308 10308。不同的机器可能会有一些微小的差别。,浮点数据在内存中的存储方式,0 1 7 8 31符号位 阶码 尾数,浮点变量 单精度浮点数(float) 双精度浮点数(double) long double 定义浮点变量: float a,b; double c,d; 单精度浮点数和双精度浮点数两者在计算机 上的表示方式是完全相似的,只是所占的二进制 位数不同,单精度浮点数的有效数字(或称精度) 和取值范围与双精度浮点数不同。,浮点

11、常量 小数表示法 127.3 科学计数法 1.273102 在C语言中,实际上也是用这两种方式,只不过102 用E+2表示。 C程序中的浮点常数由整数部分、小数部分、指数 部分构成。 浮点常量构成规则是: (1) 整数部分可以不写,小数部分也可以不写,但不能同时不写。 (2) 指数部分可以省略(相当于使用小数表示法) (3) 若有指数部分,e(或E)两边都至少有一位数。 (4) 指数的数字必须是整数(范围为1到3位的整数),可以为负或正,正号可以省略。,例如, 4.50E3、1.0、1.、.1234、123.4都是合法的浮点常量。 注意: 浮点常量在存储时按double类型存储,即占32位(b

12、it)。 浮点常量也象整型常量一样,如果浮点常量超过机器所能表示的范围,则会发生溢出。 浮点溢出也不会使程序出错,而是得到一个非正确的值 。,3.2.3 字符型数据,字符变量与字符常量 转义字符 字符串常量,字符变量 数据类型说明符 char 例如, char aloha,beta,c; 一个字符变量能存储一个字节的信息,每 个字符有固定的编码,最常用的就是ASCII 编 码。 标准ASCII编码是把每个字符和与0127的 数值联系起来,用7位二进制表示,再将最高位 充0,就是一个字节了。 例如,在ASCII编码表中,A用数值65表示, 其8位二进制表示是: 01000001,字符常量 C语言

13、中的字符常量是用单引号将一个字符括起 来。例如a、b。可以用字符常量为字符变量赋值: char alpha=a; char beta=b; 注意: (1)引号中的字符只能是一个字符。 (2)不能用双引号括起一个字符表示单个字符常量。 (3)非图形字符,如退格,换行等,也可以表示成字符 型常量。表示方法是使用转义符与一些特殊字符构成转 义序列。例如n就是一个转义序列,表示“回车换行”。 (4)字符型数据可以像整型数据一样参与四则运算。 b- a=1 98-97=1,转义字符 转义字符是一种特殊的字符常量。转义字符以反斜线开头,后跟一个或几多字符。转义字符具有特定的含义,不同于字符原有的意义,故称

14、转义字符。 转义字符及其含义: 0 空操作 a 报警 f 走纸换页 反斜杠字符 t 横向跳格 单引号字符 b 退格 ” 双引号字符 r 回车(不换行) ddd 八进制数代表的字符 n 回车换行 xhh 十六进制数代表的字符 v 竖向跳格,字符串常量 用双引号括起来的字符序列是字符串常量。 how are you 1234.5 字符串的存储与字符不同。C编译程序在存储字符 串常量时自动采用0作为字符串结束标志。 how实际上所占的字节数是4。 “a”与a是完全不同的,前者是字符串常量,占的字节数是2,后者是字符常量,占的字节数是1。 字符串常量的输出 printf(how are you);,3

15、.3 运算符和表达式,3.3.1 表达式与简单语句 3.3.2 算术运算符 3.3.3 赋值运算符 3.3.4 增1/减1运算符 3.3.5 位逻辑运算符 3.3.6 逗号运算符 3.3.7 求字节运算符 3.3.8 不同数据类型数据间的混合运算 3.3.9 赋值表达式的类型转换,3.3.1 表达式与简单语句,表达式的概念 表达式是用运算符与圆括号将操作数连接起来所 构成的式子。C语言的操作数包括常量、变量、函数值 等。 根据表达式进行运算,得到的数值即为表达式的解。 表达式与简单语句 在C语言中,在一个表达式的后面加上分号“;”就构成了简单语句。 有意义的简单语句 无意义的简单语句,4.3.

16、2 算术运算符,种类及运算 + - * / % 注意: 两个整数相除,结果仍为整数,商向下取整。 取模运算符%实际上是数学运算的求余数运算,其两个操作对象都必须是整数 。 减法运算符还可以用做单目运算符,是取负 运算。其余操作符均为双目运算符。,算术表达式及算术运算符的优先级 算术表达式就是用算术运算符和圆括号将 操作数连接起来的式子。算术表达式的解就是 经过算术运算得到的表达式的值。 算术运算符的优先级与数学基本相同,即 先乘除,后加减。取模运算的优先级与乘除相 同。函数和圆括号的优先级最高。,注意: 算术表达式应能正确的表达数学公式。 例如:数学表达式是 3+x 2a 相应的C语言表达式应

17、该是什么呢? 算术表达式的结果应该不超过其所能表示的 数的范围。例如,最大的整型数是32767, 那么,32767+3就不会是正确的结果。而 32767L+3的结果是正确的,因为32767L是长 整型数。,算术运算符的结合性 运算符的结合性是指如果一个操作数左边和右边的两个运算符的优先级相同,应该优先计算的操作符。 例如:a+b-c 操作数b左右的运算符+和-的优先级相同, 那么,是先计算b-c,还是先计算a+b呢?C语言 规定双目算术运算符的结合性是自左至右,也就 是b先与左边a结合,再与右边c结合。所以是先 计算a+b,然后用a+b的结果减c。 双目运算符的结合性与数学运算并无不同。,3.

18、3.3 赋值运算符,普通赋值运算符 赋值表达式的一般形式是: 变量名=表达式 赋值语句的一般形式是: 变量名=表达式; 赋值运算符的优先级小于算术运算符。 赋值运算符的结合性是自右至左, 以a=b=2为例,复合赋值运算符 把赋值运算符与算术、位逻辑、移位运算 符放在一起,就构成复合赋值运算符。 复合算术赋值运算符有5个+= 、- =、*=、/=、%=。 还有与移位和位逻辑结合的复合赋值运算符5个(=、和i+;前缀与 后缀并无区别(减符号也一样)。但是,将 它们用在表达式中则前缀与后缀是有区别的。,前缀表示法是先将i值增/减1,再在表达 式中使用;而后缀表示法是先在表达式中使 用i的值,再将i值

19、增/减1。 例如: i=3; i=3; j=i+; j=+i; 结果 j的内容为3 j的内容为4 i的内容为4 i的内容为4,注意: 增1/减1运算符的操作对象是一个变量 2+、-2以及(x/y)+均为非法 增1/减1运算符的优先级高于算术运算符, 与单目运算符-(取负)、!(逻辑非)的 优先级相同,结合方向自右至左。 例如表达式 -i+ 等价于 -(i+) 副作用:printf(“ %d ,%d”,i,i+);在不同 的编译环境下结果有可能不同。 尽量不要在一般的表达式中将增1/减1运算 符与其它运算符混合使用。,3.3.5 位逻辑运算符, w1=10; w2=8; w3= w1|w2 ;

20、w3的内容可以通过下式运算: 00001010 00001000 (按位或 |) 00001010 (结果),按位异或 按位或的运算规则是: 0 0=0 0 1=1 1 0=1 1 1=0 例如: char w1,w2,w3; w1=10; w2=8; w3= w1w2 ; w3的内容可以通过下式运算: 00001010 00001000 (按位异或 ) 00000010 (结果),按位取反 按位取反的规则是: 0 = 1 1 = 0 注意: 对于位逻辑反来说,0 x7在16位机上的 表示是1111111111111000即0 xfff8,但在32位 机上的表示是0 xfffffff8,所以通

21、常用0 x7 来表 示7的逻辑非,而不用0 xfff8或oxfffffff8。,移位运算符 左移 双目运算符,运算符右边的表达式表示移位的位数。 x=x2 表示把x进行左移以后赋值给x, 注意 不能只用x2 左移可以扩大原数的倍数,左移位扩大 倍,左移位扩大倍,。右移可以缩小 原数的倍数。右移时,若符号位为,则右边 填零。若符号位为,根据机器不同分为算术 移位(填充)逻辑移位(填充)。,3.3.6 逗号运算符 表达式1,表达式2 逗号表达式的求值过程是:先求解表达式1, 再求解表达式2,并将表达式2的解作为逗号表达 式的解。 例如5,6 的值是6 z=(y=3,x*y) 与z =x*(y=3)

22、是等价的 逗号运算符一般用于循环for语句,不提倡使 用在其它的表达式中。,4.3.7 求字节数运算符 sizeof是一个比较特殊的单目运算符,也 是一个非常有用的运算符,经常用于动态分 配空间。 其语法格式为: sizeof(表达式) 表达式可以是变量名、常量、以及数据 类型名。,它的功能是:求表达式中变量名所代表的 存储单元所占的字节数;或是求表达式中常量 的存储单元所占的字节数;或是求表达式中的 数据类型表示的数据在内存单元中所占的字节 数。 sizeof(int)的结果是2, sizeof运算符比较灵活,同样是求整型int 数据所占的字节数,可以使用三种办法: (1) 求sizeof(

23、int) (2) 求sizeof(10) (3) 使用int a; 求sizeof(a),例2.13 求各种数据类型在内存中所占的字节数。 #include stdio.h void main() printf(char =%d byten,sizeof(char); printf(short int =%d byten,sizeof(short int); printf(int =%d byten,sizeof(10); printf(long int =%d byten,sizeof(10L); printf(float =%d byten,sizeof(float); printf(double =%d byten,sizeof(2.3); printf(china=%d byten,sizeof(china); ,3.3.8 不同数据类型数据间的混合运算 自动转换 所谓“自

温馨提示

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

评论

0/150

提交评论