1、任课教师:刘白林,E-mail:,计算机程序设计基础,第2章 数据类型、运算符与表达式,第2章 数据类型、运算符与表达式,2.1 标识符、常量和变量 2.2 C语言的数据类型 2.3 不同类型数据的混合运算 2.4 运算符与表达式 2.5 位运算,2.1 标识符、常量和变量,2.1.1 标识符与关键字 2.1.2 常量 2.1.3 变量,2.1.1 标识符与关键字,标识符:用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列 标识符命名原则: 由三种字符组成:字母、数字和下划线 第一个字符:必须为字母或下划线 注意:C语言中,大小写字母是不同的 标识符字符长度:ANSI C
2、:无规定 MS C:8字符 Turbo C:32字符 起名原则:“见名知意” 可读性,2.1.1 标识符与关键字,关键字:又称为保留字预先定义的、具有特殊意义的标识符 关于关键字的规定:1. 不能重新定义关键字2. 不能将关键字定义为一般标识符 C语言中关键字的类型:1. 类型标识符 2. 控制流标识符3. 预处理标识符 4. 其他标识符,2.1.1 标识符与关键字,C语言中关键字: 1. 类型标识符:int , char , float , double , long , short , unsigned , void , struct , union , enum , auto , ext
3、ern , register , static , typedef 2. 控制流标识符:goto , return , continue , break , if , else , for , do , while , switch , default 3. 预处理标识符:define , include , undef , ifdef , endif 4. 其他标识符:sizeof , volatile,2.1.2 常量,常量:其值不能被改变的数据 直接常量:如:1,-7,3.14,t,”Program”等 符号常量:用一个标识符代表一个常量习惯上,符号常量名常用大写字母 符号常量的定义:#
4、define PI 3.14159,2.1.3 变量,变量的使用要求:先定义,后使用 变量的定义格式:类型名 变量名;如 int a, b ;,变量:其值可以改变的数据 本质:在内存中占据一定的存储单元,存储单元中存放变量的值,3,a,2.1.3 变量,C语言允许在定义变量的同时使变量初始化 如:int a = 3 ; /* 定义a为整型变量,初值为3 */float f = 3.12 ; /*定义f为整型变量,初值为3.12 */char c = a ; /* 定义c为整型变量,初值为a */int a = 3 ; 相当于 int a ; a = 3 ;int a = 100 , b = -
5、100 , c = 0 ;int a = 100 , b = -100 , c = 0 ;int a , b = 123 , c , i = 0 , j ;,2.2 C语言的数据类型,2.2 C语言的数据类型,2.2.1 整型数据 2.2.2 实型数据 2.2.3 字符型数据,2.2.1 整型数据(一),整型常量: 十进制整数:如 123,-456,0 八进制整数:(以0开头) 如 0123,-023 十六进制整数:(以0x开头) 如 0x123,-0x23,2.2.1 整型数据(二),整型变量:类型名:int 整型数据在内存中的存放形式:数值以补码表示 整型变量的分类:,2.2.1 整型数据
6、(三),ANSI标准定义的整数类型,2.2.1 整型数据(四),整型变量的定义: 整型数据的溢出: 整型常量的类型: 注:1)将一个整型常量赋值给一个整型变量是应注意对应的整型变量的取值范围2)在一个整型常量后面加一个字母 l 或 L,则表示long int型常量,2.2.2 实型数据(一),实型常量的表示: 十进制小数形式:如:.123、123. 、123.0、0.0 指数形式:如:123e3 ( 123E3 ) 123*103如:123e-2 ( 123E-2 ) 123*10-2,2.2.2 实型数据(二),实型变量: 实型数据在内存中的存放形式:如101101.011,实型变量的分类:
7、,2.2.2 实型数据(三),ANSI标准定义的实数类型,2.2.2 实型数据(四),实型数据的舍入误差:由于实型变量是用有限的存储单元存储的,因此能提供的有效数字是有限的,在有效位以外的数字将舍去。由此可能产生一些误差 实型常量的类型: 多数编译系统将实型常量作为双精度来处理 在一个实型常量后面加一个字母 f 或 F,则表示此常量按单精度来处理,2.2.3 字符型数据(一),字符常量的表示: 用单引号括起来的一个字符如:a、D、 5、 $ 、 转义字符:用开头的字符序列如:n、t、b、”如:10、121、xa、x41、x61 字符串常量:用双引号括起来的字符序列,转义字符,2.2.3 字符型
8、数据(二),字符型变量: 用来存放字符常量(单个字符),而非字符串 如:char c1 , c2 ; c1 = a ; c2 = n ; 字符型变量的存放: 存放的是对应字符的ASCII码值 字符型数据和整型数据是通用的 字符型数据占用内存空间的一个字符,只能存放0255 范围内的整数 程序举例:字符型数据与整型数据,2.3 不同类型数据的混合运算,2.3.1 数据混合运算与类型转换 2.3.2 赋值运算时的类型转换 2.3.3 强制类型转换,2.3.1 数据混合运算与类型转换,运算原则:进行运算时,不同类型的数据先转换为同一类型,然后进行运算 转换规则为:,此种数据类型转换是由系统自动进行的
9、,注:箭头表示当运算对象为不同类型时数据转换的方向,2.3.2 赋值运算时的类型转换,赋值运算符:= 说明:赋值运算符左侧必须为变量,右侧为表达式。将运算符右侧的数据赋值给运算符左侧的变量 规则:在进行赋值运算时,赋值运算符右侧的数据类型先转换为与赋值运算符左侧变量的数据类型 如:int a ; a = 3.14 ; /* a 的值为 3 */,2.3.2 赋值运算时的类型转换,赋值运算符:变量 = 表达式,2.3.3 强制类型转换,强制类型转换: (类型名)(表达式) 说明:将一个表达式的类型转换为指定的的数据类型 如:float a = 4.5; int b ; b = a * 2; 如:
10、float a = 4.5; int b ; b = ( int ) a * 2;,2.4 运算符与表达式,2.4.1 C语言运算符简介 2.4.2 算术运算符及表达式 2.4.3 赋值运算符及表达式 2.4.4 关系运算符及表达式 2.4.5 逻辑运算符及表达式 2.4.6 逗号运算符及表达式,2.4.1 C语言运算符简介,2.4.2 算术运算符及表达式,基本算术运算符:+ 加法或正值运算符 减法或负值运算符 * 乘法运算符 / 除法运算符% 模运算符,或求余算符如:3 + 5 5 9 9 / 4 3.5 * 2 7%4 算术表达式:用算术运算符和括号将运算对象(也称操作数)连接起来的、符合
11、C语法规则的式子。 操作对象包括:常量、变量、表达式、函数等 表达式的类型: 算术运算符的优先级和结合性:,2.4.2 算术运算符及表达式,自增、自减运算符 作用:+ i - - i 在使用 i 之前,使 i 的值加或减1i + i - - 在使用 i 之后,使 i 的值加或减1 说明:只能用于变量如: int i = 3, j, k ; j = i + ; k = + i ;int i = 3, j ; j = ( i + ) + ( i + ) + ( i + ) ;int i = 3, j ; j = ( + i ) + ( + i ) + ( + i ) ; 结合方向:“自右至左”,如
12、: - j +,i + j,2.4.3 赋值运算符及表达式,赋值运算符:变量 = 表达式 如:int a,b ; float d,e ; char c1, c2 ;a = 0 ; b = a+7 ;d = 3.14 ; e = 2 ;c1 = a ; c2 = 65 ; 复合的赋值运算符:赋值运算符前可以加其他运算符,构成复合运算符 如:a + = 3 相当于 a = a + 3x * = y + 8 相当于 x = x * ( y + 8 )x % = 3 相当于 x = x % 3,2.4.3 赋值运算符及表达式,赋值表达式:格式: 如:a = 5a = ( b = 5 )a = ( b
13、= 4 ) + ( c = 6 )a += a - = a * a,2.4.4 关系运算符及表达式,优先级比较 算术运算符 关系运算符 赋值运算符,关系表达式:用关系运算符将两个表达式连接起来的式子。 关系表达式的值:即“真”或“假”逻辑值C语言中,以 1 表示“真”,0 表示“假” 例: a=3,b=2,c=1d = a b e = a b c f = a b c,d 的值:1,e 的值:0,f 的值:1,2.4.5 逻辑运算符及表达式,逻辑运算符:逻辑与& 逻辑或 | | 逻辑非! 逻辑运算真值表:,优先级: ! & | |,优先级比较 非 ! 算术运算符 关系运算符& 和 | | 赋值运
14、算符,2.4.5 逻辑运算符及表达式,逻辑表达式的值:1)在给出逻辑运算结果时,1表示真,0表示假2)在判断一个量的值时,0表示假, 非0表示真 如果一个表达式中不同位置上出现数值,应区分该数值参与何种运算 参与逻辑运算的数据对象可以是任何类型的数据,可以是实型、字符型或指针类型等 逻辑表达式举例:若a = 3,b = 2,c = 1a b & b b ! a & b | | b c & c,2.4.5 逻辑运算符及表达式,逻辑表达式的求解: 只有在必要时才求解下一个逻辑运算例1:a & b & c只有a为真时,才求解b的值,只有a、b都为真时,才求解c例2:a | | b | | c只有a为
15、假时,才求解b的值,只有a、b都为假时,才求解c举例:int a = 1,b = 2,c = 3,d = 4,m = 1,n = 1;( m = a b ) & ( n = c d ) 应用举例:判断某年是否闰年闰年:y % 4 = 0 & y % 100 != 0 | | y % 400 = 0非闰年: ! ( y % 4 = 0 & y % 100 != 0 | | y % 400 = 0 )或: y % 4 != 0 | | y % 100 = 0 & y % 400 != 0,2.4.6 逗号运算符及表达式,逗号运算符:又称顺序求值运算符 格式:表达式1,表达式2 说明:依次求解各表达
16、式,整个表达式的值为表达式2的值。 如:( 3 * 5,2 * 4 ) 的值为8 如:a = 3 * 5,2 * 4a = 3 * 5,a * 4( a = 3 * 5,a * 4 ),a + 5 逗号表达式的扩展形式: 格式:表达式1,表达式2, ,表达式n 如:a = 3 * 5,a * 4,a + 5 逗号运算符的优先级最低,2.4.7 条件运算符及表达式,格式:表达式1 ? 表达式2 : 表达式3 说明:当表达式1的值为真时,条件表达式的值取表达式2的值;否则,条件表达式的值取表达式3的值。 优先级:,优先级比较 关系和逻辑运算符 条件运算符 赋值运算符,结合方向:“自右至左” 例:i
17、nt a = 2,b = 3,c = 0 ;a b ? a + b : a * bc ? a + b : a * b 例:a b ? a : c d ? c : d,2.5 位运算,位运算符: 按位逻辑与& 按位逻辑或 | 按位取反 按位异或 左移 ,操作举例:char a = 0x56,b=0x3b;,a&b : 00010010,a | b : 01111111,a b : 01101101,a : 10101001,a3: 10110000,b2 : 00001110,“异或”操作:参加运算的两个二进制位的值不同则结果为1,否则结果为0,运算符与表达式小结,表达式:由运算符和数据对象按C语言语法规则连接起来的式子。 注意问题: 1)运算符的书写形式与含义; 2)运算符要求的数据对象数目; 3)运算符的结合方向; 4)运算符的优先级; 5)表达式值的求解; 6)表达式的类型。,“C语言程序设计”课程答疑,任课教师:刘白林,一、每周有专业教师负责答疑:参考教务处的统一安排 二、教师邮箱: 三、公用邮箱:,