320 likes | 433 Views
第二章 数据类型、运算符与表达式. (时间: 4 次课 6 学时理论 +2 学时实践). 2. 教学目的和要求:了解掌握 C 中基本数据类型;掌握常量、变量的正确使用;掌握 C 常用的运算符及其表达式。 重难点: C 基本数据类型、 C 变量及其运算符. 一、 C 基本数据类型. 计算机处理的对象是数据,而数据是以某种特定的形式存在的(例如整数、浮点数、字符等形式)。不同的数据之间往往还存在某些联系(例如由若干个整数组成一个整数数组)。数据结构指的是数据的组织形式。不同的计算机语言所允许使用的数据结构是不同的。处理同一类问题,如果数据结构不同,算法也会不同。.
E N D
第二章 数据类型、运算符与表达式 (时间:4次课 6学时理论+2学时实践) 2
教学目的和要求:了解掌握C中基本数据类型;掌握常量、变量的正确使用;掌握C常用的运算符及其表达式。教学目的和要求:了解掌握C中基本数据类型;掌握常量、变量的正确使用;掌握C常用的运算符及其表达式。 重难点:C基本数据类型、C变量及其运算符
一、C基本数据类型 计算机处理的对象是数据,而数据是以某种特定的形式存在的(例如整数、浮点数、字符等形式)。不同的数据之间往往还存在某些联系(例如由若干个整数组成一个整数数组)。数据结构指的是数据的组织形式。不同的计算机语言所允许使用的数据结构是不同的。处理同一类问题,如果数据结构不同,算法也会不同。
基本类型 整型 短整型(short int) 整型(int) 长整型(long int) 字符型(char) 浮点型 单精度型(float) 双精度型(double) 长双精度型(long double) 布尔型(bool)——又称逻辑型 构造类型 枚举类型(enum) 数组类型 结构体类型(struct) 共用体类型(union) 指针类型 引用类型 空类型(void)——即无值型 一、C基本数据类型
一、C基本数据类型 C的数据包括常量与变量,常量与变量都具有类型。由以上这些数据类型还可以构成更复杂的数据结构。例如利用指针和结构体类型可以构成表、树、栈等复杂的数据结构。 C并没有统一规定各类数据的精度、数值范围和在内存中所占的字节数,各C编译系统根据自己的情况作出安排。
二、常量与变量 常量:在程序运行过程中,其值一直保持不变的量为常量。 常量也区分不同的类型:整型、实型等,编辑器根据其表面形式判断其类型。 变量:在程序运行过程中,其值可以改变的量为变量。 变量在程序的执行中能够赋值,发生变化。变量有一个名字,并在使用之前要说明其类型,一经说明,就在内存中占据与其类型相应的存储单元。
二、常量与变量 • C语言中要求对所用到的变量做强制定义,即“先定义,后使用”。其好处是: • 可保证程序中变量名使用正确; • 每一变量被指定为一确定类型,编译时就能为其分配相应的存储单元; • 便于在编译时检查变量所进行的运算是否合法。
二、常量与变量 1、变量名的命名方法: 变量名、数组名、函数名均称为标识符。 标识符只能由字母、数字、下划线这三种字符组成,且第一个字符必须为字母或下划线,长度不大于247个字符,大小写不通用。 关键字不能作为标识符。关键字是C++的语法要求中使用的字。如 int if while 等。 注意:变量必须使用前定义,以分配空间。
二、常量与变量 整型常量:常量是根据其表面形式来判定,整型量即是没有小数点的整数,有三种形式: 1)十进制(默认方式):如43、1345、87654 2)八进制:以0开头。如043、056、011 3)十六进制:以0x开头。如0x12、0xa3、0xdf 整型变量:分为有符号型与无符号型。 说明:1)整型常量亦有长短之分,常量中无unsigned型,但一个非负的整型常量可以赋给unsigned型的变量。 2)若一个常量定义为长整型数,则在其后加l或L进行区分。
二、常量与变量 3、实型数据(又称浮点型数据) 实型数又称浮点数,有两种表示方式: 1)十进制形式:由数字和小数点组成。如23.0、24.5、3.56789 2)指数形式:靠字母e或E连接两边的数字组成。其中e的两边必须有数,且e后的指数部分必须是整型数。如23E1、145e-1、356789e1 实型变量分单精度float和双精度double两种形式: float:占四个字节,提供7~8位有效数字。 double: 占八个字节,提供15~16位有效数字。
二、常量与变量 4、字符型数据(char) 字符常量是指用单引号括起来的单个字符。字符型数据实际上是作为整型数据在内存中存储的。 计算机是以字符编码的形式处理字符的,因此在计算机内部是以ASCII码的形式表示所有字符的。
二、常量与变量 非打印字符:有些ASCII的字符代表某些操作,不能打印出来,如回车、退格等,可用两种方式表示这些字符。 1)用ASCII码的形式。如char re=13; 2)用转义字符。C允许用一种特殊形式的字符常量,即以一个“\”开头的字符序列,该类称为控制字符或转义字符。它们在屏幕上不能显示,在程序中也无法用一般形式(符号)的字符表示,只能用特殊形式表示。转义字符虽然包含2个或多个字符,但它只代表一个字符。编译系统在见到字符“\”时,会接着找它后面的字符,把它处理成一个字符,在内存中只占一个字节。
二、常量与变量 常见的转义字符有: \ n 10 换行,将光标移到下一行开头 \ t 9 水平制表(跳到下一个tab位置) \ b 8 退格,将光标移到前一列 \ r 13 回车,将光标移到本行首列 \ f 12 换页,将光标移到下页开头 \ \ 92 反斜杠字符“\” \ ‘ 39 单引号字符 \ “ 34 双引号字符 \ ddd 1到3位八进制数所代表的字符 \ xhh 1到2位十六进制数所代表的字符
二、常量与变量 例:转义字符的使用。(程序略) 字符型变量用来存放字符常量,一字符变量中只能存放一个字符,在内存中占一个字节,存储单元中存放的是该字符对应的ASCII码。 注:C语言中,字符型数据与整型数据在一定条件下是可通用的,因此,这两类型数据输出时有不同的输出形式,且可对字符型数据进行算术运算。
二、常量与变量 5、字符串常量 是用一对双引号" "括起来的字符序列。如:"CHINA" C规定:在每一个字符串的结尾加一个“字符串结束标志”,以便系统据此判断字符串是否结束,以字符‘\ 0 ’作为字符串结束的标志。所以一字符存储时须多占用一个存储单元。
二、常量与变量 6、标识符常量 在C中有二种方法定义标识符常量: 一种是使用编译预处理指令; 另一种是使用C的常量说明符const。 例如:#define PRICE 30 //在程序中凡是出现PRICE均用30替代 #define PI 3.1415926 #define S “China”
三、类型混合运算 在C语言中,不同的数据类型可以在同一表达式中进行混合运算,运算时要进行同型转换。转换方式有自动转换(隐式转换)和强制转换(显示转换)。
三、类型混合运算 1、类型的自动转换 该转换是系统自动进行,不须用户干预。 其规则是:按照低类型转换到高类型或赋值号的右边类型转换到赋值号的左边的类型来进行的。 字符型和短整型必定要先转换成整型; 单精度型必定要先转换成双精度型; 赋值号右边的类型转换为赋值号左边的类型,结果为赋值号左边的类型。 注:当把右边的浮点型转换成整型时,去掉小数部分;把右边的双精度型转换成单精度型时,进行四舍五入处理。
三、类型混合运算 2、类型的强制转换 是为达到某种目的而进行的转换。 它是用圆括号把须转换成的数据类型括起来,并放在被转换的变量前面的一种类型转换方式。 该方式一般用于若干变量运算后结果产生溢出时或变量类型不适于进行某种运算(如 % 只能对两整型数求余)而进行的一种类型转换。
四、算术运算符和算术表达式 1、表达式:是用运算符把操作数连接起来所构成的式子。 使用表达式时应注意: 各运算符可以使用的操作数的个数、类型都有各自的规定; 表达式的值:是指按照一定的规则(优先级或结合性)对操作数进行表达式中的运算符所规定的处理所得到的一个值。 语句和表达式的关系:表达式的后面加上分号就是一简单语句。 由于表达式是由运算符连接而成的,而C语言的运算符相当丰富,故其表达式也相当丰富(注:“函数调用语句”也属于表达式语句)。
四、算术运算符和算术表达式 2、算术运算符和算术表达式 算术运算符:+ - * / %(求余) 用算术运算符连接起来的式子是算术表达式。 说明:1)两个整数相除结果为整数。 如1/2=0 5/2=2 2)整数才可求余,余数符号与左边数符号相同。 如3%2=1 -3%2=-1 3%-2=1
四、算术运算符和算术表达式 3、强制转换类型 格式:(类型名)(表达式) 如:(double) a (int) (x+y) (int) 6.2%4=2 在强制类型运算后原变量类型不变,但得到一个所需类型的中间变量。
四、算术运算符和算术表达式 4、自增、自减运算符(++ --) 说明:1)++/--在前,先运算,后赋值;++/--在后,先赋值,后运算 2)自增、自减运算符只能用于变量,不可用于常量和表达式。因为表达式在内存内没有具体空间,常量所占的空间不能重新赋值 3)结合方式自右至左,优先级最高,向右取最大
四、算术运算符和算术表达式 5、表达式使用中的问题说明 1)C没有具体规定表达式中的子表达式的求值顺序,允许各编译系统自己安排,故使用时应避免出现歧义性; 2)为避免误解,表达式中可适当增加括号; 如:C编译系统在处理时尽可能多地(自左向右)将若干个字符组成一个运算符(在处理标识符、关键字时也按同一原则处理),如将i+++j解释为(i++)+j。 3)C在调用函数时,实参数的求值顺序并无统一规定。
五、关系运算符和关系表达式 关系运算符(比较运算):< > <= >= == != 其中< > <= >= 的优先级大于== != 注意==与=的区别:a=5; 赋值运算 a==5;判断是否相等 算术运算符的优先级大于关系运算符的优先级。 关系表达式:用关系运算符将表达式连接起来称为关系表达式。关系表达式的值为逻辑值,即“真”或“假”, 其值非真即假。而C语言没有逻辑型数据,故通常以整型数1代表真,以0代表假。即关系表达式结果只有两个,真为1,假为0。
六、逻辑运算符和逻辑表达式 运算符:与&& 或 || 非! 说明:1.优先级:! &&||(!算术关系逻辑赋值逗号) 2.作为条件,所有非0值均为真;作为结果,只有0或1两种。 3.不可写为:1<x<10 应为:1<x && x<10 4.当前面的表达式可以得出整个表达式的结果时,不必再求后面的表达式。 a&&b&&c 当a为0时,表达式为0,不必求b与c。 a||b||c 当a为1时,表达式为1,不必求b与c。
六、逻辑运算符和逻辑表达式 位运算符:按位(指二进制位)逻辑运算符有:&(按位与)、|(按位或)、^(按位加)、<<(左移)、>>(右移)、~(求反)。 <<和>>的优先级介于算术运算符与关系运算符之间;&、|、^的优先级低于关系运算符的优先级,而高于逻辑运算符&&和||的优先级;~的优先级与结合性和单目算术运算符(- ++ --)相同 逻辑表达式:用逻辑运算符将关系表达式或逻辑量连接起来的式子。 逻辑表达式的值应为逻辑量“真”或“假”,C编译系统在给出逻辑运算结果时,以数值1代表真,以0代表假,但在判断一逻辑量时,以非0代表真。
七、赋值运算符和赋值表达式 “=”是赋值运算符,其作用是将一个数据赋给一个变量。 “=”左边必须是变量名。当“=”两侧的类型不一致时,赋值时须进行类型转换。 C为了简化程序,也为了提高编译效率,给出一些复合赋值运算符(*=、-=、+=等)。 赋值表达式是将右边的(复合)式子赋予左边变量,若在其后加上“;”,则为赋值语句。
七、赋值运算符和赋值表达式 转换原则:根据左边变量的类型转换。 具体如下: 1、少字节多字节 1)若多字节变量为unsigned ,则转换后多余字节补零。 2)若多字节变量为有符号型,则转换后扩展少字节的最高位。转换后,数据的符号不变。 2、多字节少字节:低位照搬 复合的赋值运算符如+=、-=、*=、/=、%=等。 例:a=12; a+=a-=a*a;(计算过程略)
八、其它运算符 1、sizeof()运算符 sizeof()运算符是一个单目运算符,用于计算某一个操作数类型的字节数。 格式:sizeof(<类型>) 2、逗号运算符和逗号表达式 格式:表达式1,表达式2,表达式3,…,表达式n 顺序求解,结果为最后一个表达式的值,并且优先级最低。
八、其它运算符 3、条件运算符 它是C中的唯一的三目运算符。 格式:表达式1?表达式2:表达式3 说明:1)其执行顺序为:先计算表达式1的值,若非0,则计算表达式2的值,并以式2的值作为整个条件表达式的值;若式1的值为0,则计算表达式3的值,并以式3的值为整个条件表达式的值。 2)其优先级高于赋值运算符(如x=(x==3)?x+2:x-3),低于关系和算术运算符。 3)其结合性自右至左。 如 a>b?a:c>d?c:d 4)表达式1与表达式2、表达式3的类型可以不同,表达式2与表达式3的类型也可以不同。如z=a>b?'A':a+b
C基本数据类型; C常量、变量; C运算符和表达式。 小结