第三章 数据类型、运算符与表达式
DESCRIPTION
第三章 数据类型、运算符与表达式. §3.1 C 数据类型 一个程序应包括两个方面的内容 1 、对处理数据的描述(数据结构) 2 、对处理数据的操作(算法描述) Wirth 提出的公式: 程序 = 数据结构 + 算法 C 提供的数据结构是以数据类型形式出现的. 由于算法千变万化,程序要处理的数据(对象)也是多种多样,在程序设计语言中就将数据处分为不同的类型,如数值型( int 、 float 等)、非数值型( char 等)不同类型数据在内存的存贮方式上、运算方式上都是不同的。 所以在对处理方法描述之前,要对处理过程中涉及到的数据进行类型说明。 - PowerPoint PPT PresentationTRANSCRIPT
第三章 数据类型、运算符与表达式
• §3.1 C 数据类型• 一个程序应包括两个方面的内容• 1 、对处理数据的描述(数据结构)• 2 、对处理数据的操作(算法描述)• Wirth 提出的公式:• 程序 =数据结构 +算法• C 提供的数据结构是以数据类型形式出现的
• 由于算法千变万化,程序要处理的数据(对象)也是多种多样,在程序设计语言中就将数据处分为不同的类型,如数值型( int 、 float 等)、非数值型( char 等)不同类型数据在内存的存贮方式上、运算方式上都是不同的。所以在对处理方法描述之前,要对处理过程中涉及到的数据进行类型说明。
• 对各种类型的数据,有两种存在形式即:常量和变量。
• C 程序要处理的各种数据• 一、有类型之分,所以要进
行类型说明,其作用有二,一是知其存贮方法,二是知其运算方式。
• 二、无论何种类型数据,在程序中都有两种出现形式,即常量和变量
• §3.2 常量与变量• 3.2.1 常量和符号常量• 常量定义• 常量类型: -3 , 4.6 ,‘ a’
• 常量的形式:以常量形式直接出现;• 符号常量: #define PRICE 35
• 程序中出现 35 处可以常量名(符号) PRICE 形式出现。符号常量名用大写,变量名用小写。
• 3.2.2 变量• 其值可以改变的量称为变量。变量要有
一个名字。变量名和变量值的区别。• 用来标记变量名、符号常量名、函数名、
数组名、文件名和有效字符序列称为标识符。
• C 语言规定标识符只能由字母、数字和下划线三种字符组成。且第一个字符必须是字母或下划线,长度的规定
• 合法名、大小写被认为是不同的字符。
• 在 C 语言中,要求对所有用到的变量作强制定义,也就是“先定义、后使用”
• 其意义有三:• 1 、保证变量名使用正确• 2 、根据类型分配存贮单元• 3 、根据类型判断其运算是否合法
• §3.3 整型数据• 3.3.1 整形常量• 整形常量即整形数。有三种形式:• 1 、十进制形式 如 123
• 2 、八进制形式 以 0 开头,如 0123
• 3 、十六进制形式 以 0x 开头,如 0x123
• 3.3.2 整型变量• 一、整型变量的分类• 1 、基本型,以 int 表示 (integer)
• 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;
• 三、整型常量的类型• 整型常量与整型变量之间的匹配关系• 四、整型量的运算• 进行各种类型的算术运算
• §3.4 实型数据• 3.4.1 实形常量• 实数在 C 中又称浮点数。实数有两种形式:• 1 、十进制数形式:它由数字和小数点组
成(必须有小数点)。
• 如 12.9 , 34.0 或 34.
• 2 、指数形式: 123e3 或 123E3 。注意的是 E (或 e )之前必须有数字且 E 后面指数必须是整数。
• 3.4.2 实形变量• 实型变量分类与类型说明• 分为两类:单精度( float )和双精度
( double )• 类型说明语句:• float x,y;
• double z;
• 在一般的系统中 , 一个 float 型数据在内存中占 32 位 , 一个 double 型数据在内存中占64 位 .
• 数据的范围和精度、实型常量不分 float 和double
• 实型量的运算
• §3.5 字符型数据• 3.5.1 字符常量• C 的字符常量有两种形式:• 1 、 C 的字符常量是用单引号(即撇号)括
起来的一个字符。如‘ A’ ,‘ a’ 等
• 2 、特殊形式的字符常量,就是以‘ \’ 开头的字符序列。如‘ \n’ 代表一个“换行”符。因为有些非显示字符难以用一般形式的字符表示,故规定用这种特殊形式表示。
• 以‘ \’ 开头的特殊字符见表,“转义字符”
• 自己看例 2.3• 3.5.2 字符变量• 字符变量用来存放字符常量。只能放一个
字符。字符变量的定义:• char c1,c2;
• 一个字符变量占用一个字节的内存空间。• 3.5.3 字符数据在内存中的存储形式及其
使用方法• 字符是以 ASCII 形式放在内存单元中的。
由于它在存储形式上与整数存贮形式相类似。 C 就使 char 数据与 int 数据可以通用。
• [ 例 2.4]• main()• {char c1,c2; c1=97;c2=98;• printf(“%c %c”, c1,c2);}• 其中:“ %c” 是输出字符的格式符
• [ 例 2.5]
• main()
• { int i ;• char c;
• i=‘a’;
• c=97;
• printf(“%c %d”, c,c);
• }
• 程序执行的输出结果
• 3.5.4 字符串常量• 字符串常量是一对双括号括起来的字符
序列。如:“ How do you do.” ,“ CHINA” 等。
• 可以输出一个字符串,如:• printf (“ How do you do.”);
• 要注意的是 :“A” 与‘ A’ 不同。• 在 C 中没有专门的字符串变量,需要用
字符数组。
• §3.6 变量赋初值• 程序中需要对一些变量预先设置初值。
C 中可在定义变量时同时使变量初值化。• 如:• int a=4;
• float h=3.567;
• char c=‘a’;
• 它等同于 :
• int a;
• a=4;
• §3.7 各类数值型数据间的混合运算• 数值型是整型与实型的总称。• 各类 int 、 float 和 double 数据可以混合
运算。由于 char 与 int 型通用,因此, int 、float 、 double 与 char 间可以混合运算。
• 例如:• 10+‘a’+1.5-8.68* ‘b’ 是合法的。• 但:在运算前,计算机要将不同类型的数
据先转换成同一类型,然后进行运算。• 转换规则是:
• 类型数据总结
• 一、常量和变量• 常量的形式、标识符• 二、变量• 1 、定义(说明)• 2 、内存中的存贮形式、导致数据范围
(精度)• 3 、 int 与 char 异同点• 三、不同类型的数据运算方式不同
• §3.8 算术运算符和算术表达式• 3.8.1 C 运算符简介• C 运算符范围很宽 ,除了控制语句和输入
输出以外的几乎所有操作都作为运算符处理。分为下面几类:
• 1 、算术运算符• 2 、关系运算符 < > == >= <= !=
• 3 、逻辑运算符 ! && ||
• 等等
• 3.8.2 算术运算符和算术表达式• 一、基本的算术运算符• + - * / % (模运算符,或称求余运
算符,要求 % 两侧都是整型数据)• 7%3=1
• 注意:整型数的除法• 如: 2/4=0 、 5/3=1 、 -5/3=?• 二、算术表达式和运算符的优先级与结
合性• 算术表达式概念:运算对象(操作数)经算术运算符和括号连接起来的式子
• C 规定运算符的优先级和结合性。• 在表达式求值时先按运算符的优先级别进
行。如: a-b*c• 如果在一个运算对象两侧的运算符的优先级别相同,如: a-b+c C 规定了各种运算符结合方向(结合性)。算术运算符的结合方向为“自左至右”,即 b 先与 - 号结合。这种结合性称为“左结合性”。
• 如果运算符两侧操作数的类型不同,先自动进行类型转换,然后进行运算。
• 注 : 运算符的意义和表达式值的确定• 三、强制类型转换• 将一个表达式转换成所需类型,其形式
为: ( 类型名 )( 表达式 )
• 例如:• main ()• { float x; int i;
• x=3.6; i=(int)x
• printf(“x=%f,i=%d”,x,i); }
• 从上可知:有两种类型转换,一种是运算时不必用户指定,而由系统按规则自动进行类型转换;另一种是强制类型转换。
• 四、自增、自减运算符• 该运算符的作用是使变量值增 1 或减 1 ,
如:• ++i , --i 是一种形• i++ , i-- 式的表达式• 粗看, ++i 和 i++ 都相当于 i=i+1 ,但有
不同之处,表达式的值什么, i 的值是多少
• 如 i=2 ,则 ++i 表达式的值为 3 , i 值也为 3 ;• 而 i++ 表达式的值为 2 , i 值却为 3 • 注意:• ( 1 )自增自减运算符的运算对象只能是变
量,不能是常量或表达式。如 5++ 或• ++ ( a+b )都是不合法的。• ( 2 ) ++ 和 -- 的结合方向是“自右至左”。
如: -i++ ,相当于 -(i++)• 五、有关表达式使用中的问题说明• 1 、表达式中包含自加或自减时的理解
• 如:若 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++);}
• 3.9 赋值运算符与赋值表达式• 一、赋值符号“ =” 的作用,将一个数据
赋给一个变量。如: c=‘k’ ;• 二、对赋值运算符两侧的类型不一致时,
类型转移问题。• 例:• main ()• {unsigned a ; int b=-1 ;• a=b ; printf (“ %u” , a ); }
• 注:这部分内容理解有一个前提。
• 三、复合的赋值运算符• 在赋值号之前加上其它运算符,构成复合
运算符。• 如: a+=3 理解为 a=a+3
• x*=y+8 理解为 x=x* ( y+8 ) ?• 四、赋值表达式• 赋值运算符将一个变量和一个表达式连接
起来的式子,一般形式为• < 变量 >< 赋值运算符 >< 表达式 >
• 注意 :
• (1) 赋值运算符有两种• (2) 赋值表达式作用有二。一是使变量得
值;二是使“赋值表达式”得值。• 将赋值表达式做为表达式的一种• main()
• { int a,b;
• a=1; b=a+=3;
• a-=a+=a*a;
• printf("%d %d\n",a,b);}
• 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
• 重点内容• 1 、数据类型,为什么要进行类型说明?• 2 、变量及变量名、标识符• 3 、表达式概念(算术、赋值和逗号)、
表达式求值、运算符优先级、运算符的结合性
• 习题• 3.2 , 3.10 , 3.12