C语言数据类型、运算符与表达式.ppt_第1页
C语言数据类型、运算符与表达式.ppt_第2页
C语言数据类型、运算符与表达式.ppt_第3页
C语言数据类型、运算符与表达式.ppt_第4页
C语言数据类型、运算符与表达式.ppt_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

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

文档简介

第2章 数据类型、运算符与表达式,2.1 程序设计概述 2.2 C语言的数据类型 2.3 常量和变量 2.4 整型数据 2.5 实型数据 2.6 字符型数据 2.7 算术运算与算术表达式 2.8 赋值运算与赋值表达式 2.9 C语言特有的运算和运算符,2.1 程序设计概述,一个程序应包括对数据的描述和对数据处理的描述。 1对数据的描述,即数据结构。数据结构是计算机学科的核心课程之一. 。 在C语言中,系统提供的数据结构,是以数据类型的形式出现的。 2对数据处理的描述,即计算机算法。算法是为解决一个问题而采取的方法和步骤,是程序的灵魂。为此,著名计算机科学家沃思(Nikiklaus Wirth)提出一个公式: 数据结构 + 算法 = 程序 实际上,一个程序除了数据结构和算法外,还必须使用一种计算机语言,并采用结构化方法来表示。所以可以这样表示: 程序=数据结构 + 算法+程序设计方法+语言工具和环境,C语言提供的数据结构,是以数据类型形式出现的。具体分类如下: 1.基本类型 分为整型、实型(又称浮点型)、字符型和枚举型四种。 实型又分为单精度和双精度。 2.构造类型 分为数组类型、结构体类型和共用体类型三种。 3.指针类型。在第9章中介绍。 4.空类型 C语言中的数据,有常量和变量之分,它们分别属于上述这些类型。 本章将介绍基本类型中的整型、实型和字符型三种数据。,2.2 常量和变量,2.2.1 常量 1.常量的概念 在程序运行过程中,其值不能被改变的量称为常量。 2.常量的分类 (1)整型常量:1,20,-314 (2)实型常量:4.8,3.24,-1.23 (3)字符常量:a, B (4)符号常量: 例:#define PRICE 40 main() int a=10,b; b=a*PRICE; printf(“b=%d”,b); 程序运行结果: b=400 符号常量不同于变量,值在作用域内不能改变,也不能再被赋值,若用赋值语句给PRICE赋值: PRICE40; 常量的类型,可通过书写形式来判别。,2.2.2 变量 1.变量的概念 在程序运行过程中,其值可以被改变的量称为变量。 2.变量的两个要素 (1)变量名。每个变量都必须有一个名字变量名,变量命名遵循标识符命名规则。 (2)变量值。在程序运行过程中,变量值存储在内存中。在程序中,通过变量名来引用变量的值。 .标识符命名规则 用来标示变量名,符号常量名,函数名,数组名,类型名,文件名的有效字符序列为标示符。 (1)有效字符:只能由字母、数字和下划线组成,且以字母或下划线开头。 (2)有效长度:随系统而异,但至少前个字符有效。如果超长,则超长部分被舍弃。,例如,由于student_name和student_number的前个字符相同,有的系统认为这两个变量,是一回事而不加区别。 可改为: stud-name stud-num (3)C语言的关键字既保留字不能用作变量名。 注意:C语言对英文字母的大小敏感,即同一字母的大小写,被认为是两个不同的字符。 习惯上,变量名和函数名中的英文字母用小写,以增加可读性。 思考题:在C语言中,变量名total与变量名TOTAL、ToTaL、tOtAl等是同一个变量吗?,标识符命名的良好习惯见名知意: 所谓“见名知意”是指,通过变量名就知道变量值的含义。通常应选择能表示数据含义的英文单词(或缩写)作变量名,或汉语拼音字头作变量名。 例如: name/xm(姓名)、sex/xb(性别)、age/nl (年龄)、salary/gz(工资),4.变量的定义与初始化 在语言中,要求对所有用到的变量,必须先定义、后使用: (1)变量定义的一般格式 存储类型 数据类型 变量名, 变量名2; 例如,float radius, length, area;,目的:1.凡未被事先定义的,不作为变量名,这就能保证程序 中变量 名使用正确. 如: 定义部分: int student 执行语句: statent=30 编译时会输出“变量statent未经定义”,便于发现错误。,2.每一个变量名被指定为一个确定类型,在编译时就能为其分配相应的存储单元. 3.每一个变量属于一个类型,就便于在编译时据此检查该变量所进行的运算是否合法。 例:整型变量a和b进行求余运算。 a%b的值应为整数 若a,b为实型,则不允许求余,编译会指出出错。,程序中有时候会对一些变量预先设置初值。称在定义变量的同时进行赋初值的操作为变量初始化。 (2)变量初始化的一般格式 存储类型 数据类型 变量名=初值, 变量名2=初值2; 例如,float radius=2.5, length1.3, area=-7.6; 也可以在定义的变量的一部分赋初值: float radius, length, area=-7.6; 如果对几个变量赋同一个初值,不能写成: float radiuslengtharea=-7.6; 而应写成: float radius= -7.6, length -7.6, area=-7.6; int a=3; 等价于 : int a; a=3;,变量初始化,2.2.3 整型数据,整型变量 1.分类 根据占用内存字节数的不同,整型变量又分为类: (1)基本整型(类型关键字为int)。 (2)短整型(类型关键字为short int)。 (3)长整型(类型关键字为long int)。 (4)无符号整型。无符号型又分为无符号基本整型 (unsigned int)、无符号短整型(unsigned short)和无符号长整型(unsigned long)三种,只能用来存储无符号整数。可比一般整型变量中的数大一倍。,例: int a,b; short a; unsigned short b; unsigned c; long a,b; unsigned long c;,整型变量的使用:,1.使用一个整型变量,首先必须先定义此变量,但 变量并无值,因此常常要赋初值。赋值方法有多种: 声明的同时赋初值,如:int i=8;或者先声明再赋值, 如: int i,j; i=8; j=i+8; i=j+2;,注意: 如果对n个变量赋初值 不能 int a=b=c=3; 而应 int a=3,b=3,c=3; int a,b,c=3; int a,b,c; c=3;,2.不同的整型变量存放不同类型的整型数据,一个 整型变量的类型决定了它可存放值的范围。若一个 值不在这个范围,则仍然以变量的类型为准。 如: int a=a; 说明:a的二进制为01100001,而int a为2个字节, a实际的存储为:0000000001100001。 在如: Unsigned int b= -1; 说明:以b类型为准,-1补码为11111111111111111, b的值为65535.,若整型常量超过了整型变量的范围就会溢出。 例: main () int a,b; a=32767; b=a+1; printf(“%d”,b); 运行结果:-32768,2.占用内存字节数与值域 上述各类型整型变量占用的内存字节数,随系统而异。在16位操作系统中,一般用字节表示一个int型变量,且long型(字节)int型(字节)short型(字节)。 显然,不同类型的整型变量,其值域不同。占用内存字节数为n的(有符号)整型变量,其值域为:-2n*8-1(2n*8-1-1);无符号整型变量的值域为:0(2n*8-1)。 例如,PC机中的一个int型变量,其值域为-22*8-1(22*8-1-1),即-3276832767;一个unsigned型变量的值域为:0(22*8-1),即065535。 。,整型常量 .三种表示形式 整型常量即整常数,在语言中可用三种形式表示: (1)十进制。例如10、36。 (2)八进制(以数字开头)。例如012。 (3)十六进制(以数字+小写字母x开头)。例如 0x36,.分类 (1)基本整型。在16位机中,用2字节存储,其数据范围与int型变量一样。 (2)长整型(在数值后面加“L(l)”)。对超出基本整型值域的整型常量,可使用长整型常量表示,其取值范围可达-(-)。例如,123l、315等。 .类型匹配规则 类型匹配规则为:一个整型常量,可以赋给能容纳下其值的整型变量。 例如,其值在-(-)的整型常量,可以赋给int型变量和long int型变量;其值在-(-)的整型常量,就只能赋给long int型变量。 注意:常量无unsigned型。但一个非负整型常量,只要它的值不超过相应变量的值域(即取值范围),也可以赋给unsigned型变量。,2.2.4 实型数据,实型变量 语言的实型变量,分为两种: (1)单精度型。类型关键字为float,一般占字节(位)、提供位有效数字。 如:float a; (2)双精度型。类型关键字为double,一般占个字节、提供1516位有效数字。 如:double b;,舍入误差:数据是无穷的,但存储器有限,有效位以外的 数字将被舍去。如: float a; a=111111.111 最后两位不起作用。,实型常量 .表示形式 实型常量即实数,在语言中又称浮点数,其值有两种表达形式: (1)十进制形式。例如3.14、9.8。 注意必须有小数点。 (2)指数形式:E(e)。 例如3+5等。注意e前面必须有数字,e后一定为整数 .关于类型 实型常量不分float型和double型。一个实型常 量,可以赋给一个实型变量(float型或double型)。,2.2 .5 字符型数据,字符常量 1.字符常量的定义 用一对单引号括起来的单个字符,称为字符常量。 例如,a 、A、等。 2.转义字符 语言还允许使用一种特殊形式的字符常量,就是以反斜杠“ ”开头的转义字符。 注意:如果反斜杠或单引号本身作为字符常量,必须使用转义字符:、。,转义字符除用来形成一个外设控制命令外,还用来输出不能直接从键盘上输入或不能用字符常量书写出的ASC字符。这时要在反斜杠后跟一个代码值,这个代码值最多用三位八进制码数(不加前缀)或两位十六进制数(以x作前缀)表示。,案例 用转义字符输出可打印字符和不可打印字符。 main() printf(“x4Fx4Bx21n”); /* 等价于printf(“OK!n”); */ 程序运行结果如下: !,例 打印人民币符号” main( ) printf(“Yb=n”); 输出结果为:=,字符变量 字符变量的类型关键字为char,一般占用1字节内存单元。分为有符号和无符号两种类型的字符型变量。 取值范围分别为-128127和0255。 1.变量值的存储 字符变量用来存储字符常量。将一个字符常量存储到一个字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到内存单元中。 例如:char ch1, ch2; /*定义两个字符变量:ch1, ch2*/ ch1=a; ch2=b; /*给字符变量赋值*/,2.特性 字符数据在内存中存储的是字符的ASCII码 一个无符号整数,其形式与整数的存储形式一样,所以语言允许字符型数据与整型数据之间通用。 (1)一个字符型数据,既可以字符形式输出,也可以整数形式输出。 例 字符变量的字符形式输出和整数形式输出。 main() char ch1,ch2; ch1=a; ch2=b; printf(“ch1=%c,ch2=%cn”,ch1,ch2); printf(“ch1=%d,ch2=%dn”,ch1,ch2); 程序运行结果: ch1=a,ch2=b ch1=97,ch2=98,(2)允许对字符数据进行算术运算,此时就是对它们的ASCII码值进行算术运算。 例 字符数据的算术运算。 main() char ch1,ch2; ch1=a; ch2=B; /*字母的大小写转换*/ printf(“ch1=%c,ch2=%cn”,ch1-32,ch2+32); /*用字符形式输出一个大于256的数值*/ printf(“ch1+200=%dn“, ch1+200); printf(“ch1+200=%cn“, ch1+200); printf(“ch1+256=%dn“, ch1+256); ,程序运行结果: ch1=A,ch2=b ch1+200=297 ch1+200=) ch1+256=353 思考题:char ch=257是否正确?,2.3 算术运算与算术表达式,在语言中,除控制语句和输入输出函数外,其它所有基本操作都作为运算符处理。 1.算术运算符:+,-,*,/,%,+,- 2.赋值运算符: =及其扩展赋值运算符 3.关系运算符:= =,!=,, = 4.逻辑运算符:&, | ,! 5.逗号运算符:, 6. 强制类型转换运算符:(类型) 7.条件运算符: ?: 8. 求字节运算符:sizeof() 9.位运算符:,, ,&, , | 10.指针运算符:*,& 11.成员运算符:. ,、, 12.下标运算符: 13.其他:如函数调用运算符(),1.五种基本算术运算符 +、-(减法/取负)、*、/、%(求余数) (1)关于除法运算/ C语言规定:两个整数相除,其商为整数,小数部分被舍弃。例如,5 / 2 = 2。 (2)关于求余数运算 要求两侧的操作数均为整型数据,否则出错。 3.运算符的优先级与结合性 (1)语言规定了运算符的优先级和结合性。 所谓结合性是指,当一个操作数两侧的运算符具有相同的优先级时,该操作数是先与左边的运算符结合,还是先与右边的运算符结合,自左至右的结合方向,称为左结合性。反之,称为右结合性。 结合性是语言的独有概念。除单目运算符、赋值运算符和条件运算符是右结合性外,其它运算符都是左结合性。 (2)表达式求值 1)按运算符的优先级高低次序执行。例如,先乘除后加减。 2)如果在一个运算对象(或称操作数)两侧的运算符的优先级相同,则按语言规定的结合方向(结合性)进行。 例如,算术运算符的结合方向是“自左至右”,即:在执行“a b + c”时,变量b先与减号结合,执行“a - b”;然后再执行加c的运算。,4.数据类型转换 (1) 在语言中,整型、实型和字符型数据间可以混合运算(因为字符数据与整型数据可以通用)。 如果一个运算符两侧的操作数的数据类型不同,则系统按“先转换、后运算”的原则,首先将数据自动转换成同一类型,然后在同一类型数据间进行运算。转换规则为: (char,short)intunsignedlongdoublefloat 例如,int型与double型数据进行混合运算,则先将int型数据转换成double型,然后在两个同类型的数据间进行运算,结果为double型。 注意:箭头方向只表示数据类型由低向高转换,不要理解为int型先转换成unsigned型,再转换成long型,最后转换成double型。,例如: char a; int i; float f; double d; long l; d=a-i+i*f-d/l; 结果为double型 注意:算术运算符的结合方向为自左向右,(2)除自动转换外,语言也允许强制转换。 数据类型强制转换的一般格式为: (要转换成的数据类型)(被转换的表达式) 当被转换的表达式是一个简单表达式时,外面的一对圆括号可以缺省。 例如, (double)a (等价于(double)(a) /*将变量a的值转换成double型*/ (int)(x + y) /*将x+y的结果转换成int型*/ (float)5 / 2(等价于(float)(5)/2) /*将5转换成实型,再除以2(=2.5)*/ (float)(5 / 2) /*将5整除2的结果(2)转换成实型 (2.0)*/ 注意:强制转换类型得到的是一个所需类型的中间量,原表达式类型并不发生变化。例如,(double)a 只是将变量a的值转换成一个double型的中间量,其数据类型并未转换成double型。,2 自增(+)、自减(-)运算 1.作用 自增运算使单个变量的值增,自减运算使单个变量的值减。 2.用法与运算规则 自增、自减运算符都有两种用法: (1)前置运算运算符放在变量之前:变量、变量 先使变量的值增(或减),然后再以变化后的值参与其它运算,即先增减、后运算。 如:y=+i+5 i=i+1后y=i+5,(2)后置运算运算符放在变量之后:变量、 变量变量先参与其它运算,然后再使变量的值增 (或减),即先运算、后增减。 例如: y=i+ y=i后i=i+1,注意:1.自增运算符,自减运算符只能用于变量,而 不能用于常量和表达式。 如 : 5+ (a+b)+ 2.+和-的结合方向是自左向右 如: -i+ -(i+),2.3.2 赋值运算与赋值表达式,1.赋值运算 赋值符号“=”就是赋值运算符,它的作用是将一个数据或者表达式的值赋给一个变量。 赋值运算符的一般形式为: 变量 = 赋值表达式 例如,x = 5 y = (float)5 / 2 赋值运算符的优先级只比逗号运算符高,结合方向自右向左。 如果表达式值的类型,与被赋值变量的类型不一致,但都是数值型或字符型时,系统自动地将表达式的值转换成被赋值变量的数据类型,然后再赋值给变量。,转换规则: 1.实型整型时,舍去小数部分 2.整型实型,值不变,但以浮点数存储 3.doule float,截取前7位有效数字 4.字符型整型,所得整型数为字符的 ASCII值 5.整型字符型,只取低8位,2.复合赋值运算 复合赋值运算符是由赋值运算符之前再加其他运算符构成的。 C语言规定的10种复合赋值运算符如下: +=,-=,*=,/=,%=; /*复合算术运算符(5个)*/ &=,=,|=,=; /*复合位运算符(5个)*/ 复合赋值运算的一般格式为: 变量 其他运算符 = 表达式 复合赋值运算符 它等价于:变量 = 变量 双目运算符 (表达式)。 例如,x += 3 /* 等价于x=x+3 */ y *= x + 6 /* 等价于y=y*(x+6),而不是y=y*x+6 */,例 自增、自减运算符的用法与运算规则示例。 main() int x=6, y; printf(“x=%dn“,x); /*输出x的初值*/ y = +x; /*前置运算*/ printf(“y=+x: x=%d,y=%dn“,x,y); y = x-; /*后置运算*/ printf(“y=x-: x=%d,y=%dn“,x,y); 程序运行结果: x=6 y=+x: x=7,y=7 y=x-: x=6,y=7,思考题:如果将案例“y=+x;”语句中的前置运算改为后置(y=x+;),“y=x-;”语句中的后置运算改为前置(y=-x;),程序运行结果会如何? 3.说明 (1)自增、自减运算,常用于循环语句中,使循环控制变量加(或减),以及指针变量中,使指针指向下(或上)一个地址。 (2)自增、自减运算符,不能用于常量和表达式。 例如,5+、-(a+b)等都是非法的。 (3)在表达式中,连续使同一变量进行自增或自减运算时,很容易出错,所以最好避免这种用法。,2.3.4 关系运算,关系运算就是比较运算,运算的结果只有2个,真(1) 或假(0) 关系运算符的优先级低于算术运算符,高于赋值符, 结合原则是自左向右,每个关系运算的操作数可以是任 何表达式。 例:若a=3,b=4,c=5 ab+c /值为0/ ab /值为0/ a= =bc /值为0/ 注意:=和= =的区别。=的作用是指=右边的值付给左边 的变量,其值为变量的值。而= =是比较左右两边表达式 的值是否相等,相等为1,不相等为0。,2.3.5 逻辑运算 逻辑运算符是表示操作数的逻辑关系,他通常 是用来连接关系表达式或其他表达式,他把所连接 的表达式看成两类,一类为0,另一类非0。其运算 结果为0和1。 分别是: ! & |,1.逻辑非 是一元运算符,优先级很高,结合原则自右向左,如: !56 !(3-3),2.逻辑与 优先级相对较低,结合原则自左向右 5&6 3+9&0 注意:数学式1x5在c中应为1x&x5,3.逻辑或 优先级较低,且&比|高,结合原则自左向右,如: 5 | 6 3+9 | 0 0 | !5,注意:逻辑表达式中,并非所有的逻辑运算符都 被执行,例: 0&3&+a 说明:0&3逻辑与为0,不管后面为什么,整个表达式 值为0,与+a的逻辑与根本没有被执行,因此a 的值不会加1,2.3.6 其他运算 1.逗号运算符 语言提供一种用逗号运算符“,”连接起来的式子,称为逗号表达式。逗号运算符又称顺序求值运算符。 1.一般形式 表达式, 表达式, , 表达式n 2.求解过程 自左至右,依次计算各表达式的值,“表达式n” 的值即为整个逗号表达式的值。 例如,逗号表达式“a = 3 * 5, a * 4”的值=60:先求解a = 3 * 5,得a=15;再求a * 4 = 60,所以逗号表达式的值=60。 又例如,逗号表达式“(a = 3 * 5, a * 4), a + 5”的值=20:先求解a = 3 * 5,得a=15;再求a * 4=60;最后求解a + 5=20,所以逗号表达式的值=20。 注意:并不是任何地方出现的逗号,都是逗号运算符。很多情况下,逗号仅用作分隔符。如:int a,b;,2.强制类型运算,3.条件运算 条件运算的表达式形式是: 表达式1?表达式2:表达式3 含义:先求表达式1的值,若为非0,则在求表达式2的 只,并把表达式2的值作为整个条件表达式的值;若为 0,求表达式3的值,此值作为整个条件表达式的值。,注意:1.优先级高于赋值运算符和逗号运算符,结合原 则自左向右。如: a=35?6:4= =7?1:0 a=(35?6:(4= =7?1:0) 2.表达式2和表达式3只能求一个值 如:j=2,a=89?- -j:+j 结果:j=3,a=3,4.求字节运算 求字节运算符为sizeof(),他返回变量或符号中的类型 说明符的字节长度,如: float f; printf(“%f”

温馨提示

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

评论

0/150

提交评论