1 / 32

第三章 数据类型、运算符与表达式

第三章 数据类型、运算符与表达式. §3.1 C 数据类型 一个程序应包括两个方面的内容 1 、对处理数据的描述(数据结构) 2 、对处理数据的操作(算法描述) Wirth 提出的公式: 程序 = 数据结构 + 算法 C 提供的数据结构是以数据类型形式出现的. 由于算法千变万化,程序要处理的数据(对象)也是多种多样,在程序设计语言中就将数据处分为不同的类型,如数值型( int 、 float 等)、非数值型( char 等)不同类型数据在内存的存贮方式上、运算方式上都是不同的。 所以在对处理方法描述之前,要对处理过程中涉及到的数据进行类型说明。

Download Presentation

第三章 数据类型、运算符与表达式

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第三章 数据类型、运算符与表达式 • §3.1 C数据类型 • 一个程序应包括两个方面的内容 • 1、对处理数据的描述(数据结构) • 2、对处理数据的操作(算法描述) • Wirth提出的公式: • 程序=数据结构+算法 • C提供的数据结构是以数据类型形式出现的

  2. 由于算法千变万化,程序要处理的数据(对象)也是多种多样,在程序设计语言中就将数据处分为不同的类型,如数值型(int、float等)、非数值型(char等)不同类型数据在内存的存贮方式上、运算方式上都是不同的。所以在对处理方法描述之前,要对处理过程中涉及到的数据进行类型说明。由于算法千变万化,程序要处理的数据(对象)也是多种多样,在程序设计语言中就将数据处分为不同的类型,如数值型(int、float等)、非数值型(char等)不同类型数据在内存的存贮方式上、运算方式上都是不同的。所以在对处理方法描述之前,要对处理过程中涉及到的数据进行类型说明。 • 对各种类型的数据,有两种存在形式即:常量和变量。

  3. C程序要处理的各种数据 • 一、有类型之分,所以要进行类型说明,其作用有二,一是知其存贮方法,二是知其运算方式。 • 二、无论何种类型数据,在程序中都有两种出现形式,即常量和变量

  4. §3.2 常量与变量 • 3.2.1常量和符号常量 • 常量定义 • 常量类型:-3,4.6,‘a’ • 常量的形式:以常量形式直接出现; • 符号常量:#define PRICE 35 • 程序中出现35处可以常量名(符号) PRICE形式出现。符号常量名用大写,变量名用小写。

  5. 3.2.2 变量 • 其值可以改变的量称为变量。变量要有一个名字。变量名和变量值的区别。 • 用来标记变量名、符号常量名、函数名、数组名、文件名和有效字符序列称为标识符。 • C语言规定标识符只能由字母、数字和下划线三种字符组成。且第一个字符必须是字母或下划线,长度的规定 • 合法名、大小写被认为是不同的字符。

  6. 在C语言中,要求对所有用到的变量作强制定义,也就是“先定义、后使用”在C语言中,要求对所有用到的变量作强制定义,也就是“先定义、后使用” • 其意义有三: • 1、保证变量名使用正确 • 2、根据类型分配存贮单元 • 3、根据类型判断其运算是否合法

  7. §3.3 整型数据 • 3.3.1 整形常量 • 整形常量即整形数。有三种形式: • 1、十进制形式 如123 • 2、八进制形式 以0开头,如0123 • 3、十六进制形式 以0x开头,如0x123 • 3.3.2 整型变量 • 一、整型变量的分类 • 1、基本型,以int表示(integer)

  8. 2、短整型,以short int表示,或short表示 • 3、长整型,以long int表示,或long表示 • 4、无符号型,又分无符号整形、短整型和长整型,分别以unsigned int、 unsigned short和unsigned long表示 • C规定各类数据所占字节数。 • 二、整型变量的定义 • int a,b; • unsigned short c,d; • long e,f;

  9. 三、整型常量的类型 • 整型常量与整型变量之间的匹配关系 • 四、整型量的运算 • 进行各种类型的算术运算 • §3.4 实型数据 • 3.4.1实形常量 • 实数在C中又称浮点数。实数有两种形式: • 1、十进制数形式:它由数字和小数点组成(必须有小数点)。

  10. 如12.9,34.0或34. • 2、指数形式:123e3或123E3。注意的是E(或e)之前必须有数字且E后面指数必须是整数。 • 3.4.2 实形变量 • 实型变量分类与类型说明 • 分为两类:单精度(float)和双精度(double) • 类型说明语句: • float x,y; • double z;

  11. 在一般的系统中,一个float型数据在内存中占32位,一个double型数据在内存中占64位.在一般的系统中,一个float型数据在内存中占32位,一个double型数据在内存中占64位. • 数据的范围和精度、实型常量不分float和double • 实型量的运算 • §3.5 字符型数据 • 3.5.1字符常量 • C的字符常量有两种形式: • 1、C的字符常量是用单引号(即撇号)括起来的一个字符。如‘A’,‘a’等

  12. 2、特殊形式的字符常量,就是以‘\’开头的字符序列。如‘\n’代表一个“换行”符。因为有些非显示字符难以用一般形式的字符表示,故规定用这种特殊形式表示。2、特殊形式的字符常量,就是以‘\’开头的字符序列。如‘\n’代表一个“换行”符。因为有些非显示字符难以用一般形式的字符表示,故规定用这种特殊形式表示。 • 以‘\’开头的特殊字符见表,“转义字符” • 自己看例2.3 • 3.5.2 字符变量 • 字符变量用来存放字符常量。只能放一个字符。字符变量的定义: • char c1,c2;

  13. 一个字符变量占用一个字节的内存空间。 • 3.5.3 字符数据在内存中的存储形式及其使用方法 • 字符是以ASCII形式放在内存单元中的。由于它在存储形式上与整数存贮形式相类似。C就使char数据与int数据可以通用。 • [例2.4] • main() • {char c1,c2; c1=97;c2=98; • printf(“%c %c”, c1,c2);} • 其中:“%c”是输出字符的格式符

  14. [例2.5] • main() • { int i; • char c; • i=‘a’; • c=97; • printf(“%c %d”, c,c); • } • 程序执行的输出结果

  15. 3.5.4 字符串常量 • 字符串常量是一对双括号括起来的字符序列。如:“How do you do.”,“CHINA”等。 • 可以输出一个字符串,如: • printf(“How do you do.”); • 要注意的是:“A”与‘A’不同。 • 在C中没有专门的字符串变量,需要用字符数组。

  16. §3.6 变量赋初值 • 程序中需要对一些变量预先设置初值。C中可在定义变量时同时使变量初值化。 • 如: • int a=4; • float h=3.567; • char c=‘a’; • 它等同于: • int a; • a=4;

  17. §3.7 各类数值型数据间的混合运算 • 数值型是整型与实型的总称。 • 各类int、float和double数据可以混合运算。由于char与int型通用,因此,int、float、double与char间可以混合运算。 • 例如: • 10+‘a’+1.5-8.68* ‘b’ 是合法的。 • 但:在运算前,计算机要将不同类型的数据先转换成同一类型,然后进行运算。 • 转换规则是:

  18. 类型数据总结 • 一、常量和变量 • 常量的形式、标识符 • 二、变量 • 1、定义(说明) • 2、内存中的存贮形式、导致数据范围(精度) • 3、int与char异同点 • 三、不同类型的数据运算方式不同

  19. §3.8 算术运算符和算术表达式 • 3.8.1 C运算符简介 • C运算符范围很宽,除了控制语句和输入输出以外的几乎所有操作都作为运算符处理。分为下面几类: • 1、算术运算符 • 2、关系运算符 < > == >= <= != • 3、逻辑运算符 ! && || • 等等

  20. 3.8.2 算术运算符和算术表达式 • 一、基本的算术运算符 • + - * / %(模运算符,或称求余运算符,要求%两侧都是整型数据) • 7%3=1 • 注意:整型数的除法 • 如:2/4=0、5/3=1、-5/3=? • 二、算术表达式和运算符的优先级与结合性 • 算术表达式概念:运算对象(操作数)经算术运算符和括号连接起来的式子

  21. C规定运算符的优先级和结合性。 • 在表达式求值时先按运算符的优先级别进行。如:a-b*c • 如果在一个运算对象两侧的运算符的优先级别相同,如: a-b+c C规定了各种运算符结合方向(结合性)。算术运算符的结合方向为“自左至右”,即b先与-号结合。这种结合性称为“左结合性”。 • 如果运算符两侧操作数的类型不同,先自动进行类型转换,然后进行运算。

  22. 注:运算符的意义和表达式值的确定 • 三、强制类型转换 • 将一个表达式转换成所需类型,其形式为: (类型名)(表达式) • 例如: • main() • { float x; int i; • x=3.6; i=(int)x • printf(“x=%f,i=%d”,x,i); }

  23. 从上可知:有两种类型转换,一种是运算时不必用户指定,而由系统按规则自动进行类型转换;另一种是强制类型转换。从上可知:有两种类型转换,一种是运算时不必用户指定,而由系统按规则自动进行类型转换;另一种是强制类型转换。 • 四、自增、自减运算符 • 该运算符的作用是使变量值增1或减1,如: • ++i,--i 是一种形 • i++,i--式的表达式 • 粗看, ++i和 i++都相当于i=i+1,但有不同之处,表达式的值什么,i的值是多少

  24. 如i=2,则++i表达式的值为3,i值也为3; • 而i++表达式的值为2,i值却为3 • 注意: • (1)自增自减运算符的运算对象只能是变量,不能是常量或表达式。如5++或 • ++(a+b)都是不合法的。 • (2)++和--的结合方向是“自右至左”。如:-i++,相当于-(i++) • 五、有关表达式使用中的问题说明 • 1、表达式中包含自加或自减时的理解

  25. 如:若i=3 • (i++)+ (i++)+ (i++)=? i=? • (++i)+ (++i)+ (++i)=? i=? • 2、表达式的理解问题 • 问题一:i+++j 编译系统将其理解为(i++)+j还是i+(++j)呢? • 问题二: • main() • { int i=3; • printf("%d %d\n",i,i++);}

  26. 3.9 赋值运算符与赋值表达式 • 一、赋值符号“=”的作用,将一个数据赋给一个变量。如:c=‘k’; • 二、对赋值运算符两侧的类型不一致时,类型转移问题。 • 例: • main() • {unsigned a;int b=-1; • a=b;printf(“%u”,a);} • 注:这部分内容理解有一个前提。

  27. 三、复合的赋值运算符 • 在赋值号之前加上其它运算符,构成复合运算符。 • 如:a+=3 理解为 a=a+3 • x*=y+8 理解为 x=x*(y+8) ? • 四、赋值表达式 • 赋值运算符将一个变量和一个表达式连接起来的式子,一般形式为 • <变量><赋值运算符><表达式> • 注意:

  28. (1)赋值运算符有两种 • (2)赋值表达式作用有二。一是使变量得值;二是使“赋值表达式”得值。 • 将赋值表达式做为表达式的一种 • main() • { int a,b; • a=1; b=a+=3; • a-=a+=a*a; • printf("%d %d\n",a,b);}

  29. 3.10 逗号运算符与逗号表达式 • 逗号表达式的一般形式 • 表达式1,表达式2 • 如:3+5,6+8 • a=3*5,a*4 • 逗号表达式求值过程是:先求表达式1的值,再求表达式2的值。整个逗号表达式的值是表达式2的值。 • 式1:x=(a=3,6*a) • 式2: x=a=3,6*a

  30. 重点内容 • 1、数据类型,为什么要进行类型说明? • 2、变量及变量名、标识符 • 3、表达式概念(算术、赋值和逗号)、表达式求值、运算符优先级、运算符的结合性 • 习题 • 3.2, 3.10 ,3.12

More Related