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

下载本文档

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

文档简介

第2章 数据类型、运算符与表达式 2.1 程序设计概述 2.2 C语言的数据类型 2.3 常量和变量 2.4 整型数据 2.5 实型数据 2.6 字符型数据 2.7 算术运算与算术表达式 2.8 赋值运算与赋值表达式 2.9 C语言特有的运算和运算符 Return 2.1 程序设计概述 一个程序应包括对数据的描述和对数据处理的描述。 1对数据的描述,即数据结构。数据结构是计算机学 科的核心课程之一,有许多专门著作论述,本课程就不再 赘述。 在C语言中,系统提供的数据结构,是以数据类型的形 式出现的。 2对数据处理的描述,即计算机算法。算法是为解决 一个问题而采取的方法和步骤,是程序的灵魂。为此,著 名计算机科学家沃思(Nikiklaus Wirth)提出一个公式: 数据结构 + 算法 = 程序 实际上,一个程序除了数据结构和算法外,还必须使 用一种计算机语言,并采用结构化方法来表示。 Return 2.2 C语言的数据类型 C语言提供的数据结构,是以数据类型形式出现的。具体 分类如下: 1.基本类型 分为整型、实型(又称浮点型)、字符型和枚举型四种。 2.构造类型 分为数组类型、结构类型和共用类型三种。 3.指针类型。在第9章中介绍。 4.空类型 C语言中的数据,有常量和变量之分,它们分别属于上述 这些类型。 本章将介绍基本类型中的整型、实型和字符型三种数据。 Return 2.3 常量和变量 2.3.1 常量 1.常量的概念 在程序运行过程中,其值不能被改变的量称为常量。 2.常量的分类 (1)整型常量 (2)实型常量 (3)字符常量。 (4)符号常量。 常量的类型,可通过书写形式来判别。 2.3.2 变量 1.变量的概念 在程序运行过程中,其值可以被改变的量称为变量 。 2.变量的两个要素 (1)变量名。每个变量都必须有一个名字变量名 ,变量命名遵循标识符命名规则。 (2)变量值。在程序运行过程中,变量值存储在内 存中。在程序中,通过变量名来引用变量的值。 .标识符命名规则 (1)有效字符:只能由字母、数字和下划线组成, 且以字母或下划线开头。 (2)有效长度:随系统而异,但至少前个字符有 效。如果超长,则超长部分被舍弃。 例如,由于student_name和student_number的前个字 符相同,有的系统认为这两个变量,是一回事而不加区 别。 在TC V2.0中,变量名(标识符)的有效长度为 个字符,缺省值为。 (3)C语言的关键字不能用作变量名。 注意:C语言对英文字母的大小敏感,即同一字母的大 小写,被认为是两个不同的字符。 习惯上,变量名和函数名中的英文字母用小写,以增加 可读性。 思考题:在C语言中,变量名total与变量名TOTAL、 ToTaL、tOtAl等是同一个变量吗? 标识符命名的良好习惯见名知意: 所谓“见名知意”是指,通过变量名就知道变量值的含义 。通常应选择能表示数据含义的英文单词(或缩写)作变量 名,或汉语拼音字头作变量名。 例如,name/xm(姓名)、sex/xb(性别)、age/nl(年 龄)、salary/gz(工资)。 4.变量的定义与初始化 在语言中,要求对所有用到的变量,必须先定义、后 使用;且称在定义变量的同时进行赋初值的操作为变量初始 化。 (1)变量定义的一般格式 存储类型 数据类型 变量名, 变量名2; 例如,float radius, length, area; (2)变量初始化的一般格式 存储类型 数据类型 变量名=初值, 变量名2=初值 2; 例如,float radius=2.5, length, area; Return 2.4 整型数据 2.4.1 整型变量 1.分类 根据占用内存字节数的不同,整型变量又分为类: (1)基本整型(类型关键字为int)。 (2)短整型(类型关键字为short int)。 (3)长整型(类型关键字为long int)。 (4)无符号整型。无符号型又分为无符号基本整型( unsigned int)、无符号短整型(unsigned short)和无符号 长整型(unsigned long)三种,只能用来存储无符号整数。 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。 2.4.2 整型常量 .三种表示形式 整型常量即整常数,在语言中可用三种形式表示: (1)十进制。例如10、36。 (2)八进制(以数字开头)。例如012。 (3)十六进制(以数字+小写字母x开头)。例如0x36 。 .分类 (1)基本整型。在16位机中,用2字节存储,其数据范 围与int型变量一样。 (2)长整型(在数值后面加“L(l)”)。对超出基本 整型值域的整型常量,可使用长整型常量表示,其取值范 围可达-(-)。例如,123l、315等。 .类型匹配规则 类型匹配规则为:一个整型常量,可以赋给能容纳下其 值的整型变量。 例如,其值在-(-)的整型常量,可以赋 给int型变量和long int型变量;其值在-(-) 的整型常量,就只能赋给long int型变量。 注意:常量无unsigned型。但一个非负整型常量,只要 它的值不超过相应变量的值域(即取值范围),也可以赋 给unsigned型变量。 Return 2.5 实型数据 2.5.1 实型变量 语言的实型变量,分为两种: (1)单精度型。类型关键字为float,一般占字节(位)、提 供位有效数字。 (2)双精度型。类型关键字为double,一般占个字节、提供 1516位有效数字。 2.5.2 实型常量 .表示形式 实型常量即实数,在语言中又称浮点数,其值有两种表达形式: (1)十进制形式。例如3.14、9.8。 (2)指数形式:E(e)。例如3.0+5等。 .关于类型 实型常量不分float型和double型。一个实型常量,可以赋给一个 实型变量(float型或double型)。 Return 2.6 字符型数据 2.6.1 字符常量 1.字符常量的定义 用一对单引号括起来的单个字符,称为字符常量。 例如,A、等。 2.转义字符 语言还允许使用一种特殊形式的字符常量,就是以 反斜杠“ ”开头的转义字符。 注意:如果反斜杠或单引号本身作为字符常量,必须 使用转义字符:、。 案例2.1 用转义字符输出可打印字符和不可打印字符 。 /*案例代码文件名:AL2_1.C*/ /*程序功能:用转义字符输出可打印字符和不可打印 字符*/ main() printf(“x4Fx4Bx21n”); /* 等价于printf(“OK!n”); */ printf(“x15 xABn”); 程序运行结果如下: ! 程序演示 2.6.2 字符变量 字符变量的类型关键字为char,一般占用1字节内存单元 。 1.变量值的存储 字符变量用来存储字符常量。将一个字符常量存储到一 个字符变量中,实际上是将该字符的ASCII码值(无符号整 数)存储到内存单元中。 例如, char ch1, ch2; /*定义两个字符变量:ch1,ch2*/ ch1=a; ch2=b; /*给字符变量赋值*/ 2.特性 字符数据在内存中存储的是字符的ASCII码 一个无 符号整数,其形式与整数的存储形式一样(如图2-4所示) ,所以语言允许字符型数据与整型数据之间通用。 (1)一个字符型数据,既可以字符形式输出,也可以 整数形式输出。 案例2.2 字符变量的字符形式输出和整数形式输出。 /*案例代码文件名:AL2_2.C*/ /*程序功能:用字符形式和整数形式输出字符变量*/ 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码值进行算术运算。 案例2.3 字符数据的算术运算。 /*案例代码文件名:AL2_3.C*/ /*程序功能:字符数据的算术运算*/ 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); printf(“ch1+256=%cn“, ch1+256); 程序运行结果: ch1=A,ch2=b ch1+200=297 ch1+200=) ch1+256=353 ch1+256=a 程序演示 思考题:用字符形式输出一个大于256的数值,会得 到什么结果? 2.6.3 字符串常量 1.字符串常量的概念和字符串长度 字符串常量是用一对双引号括起来的若干字符序列。 字符串中字符的个数称为字符串长度。长度为0的字 符串(即一个字符都没有的字符串)称为空串,表示为“ ” (一对紧连的双引号)。 例如,“How do you do.”、“Good morning.”等,都是 字符串常量,其长度分别为14和13(空格也是一个字符 )。 如果反斜杠和双引号作为字符串中的有效字符,则 必须使用转义字符。 例如:(1)C:msdosv6.22 “C:msdosv6.22“ (2)I say:“Goodbye!“ “I say:“Goodbye!“ 2.字符串的存储 C语言规定:在存储字符串常量时,由系统在字符串 的末尾自动加一个0作为字符串的结束标志。 注意:在源程序中书写字符串常量时,不必加结束字 符0,否则画蛇添足。 如果有一个字符串为“CHINA”,则它在内存中的实 际存储如下所示: 最后一个字符0是系统自动加上的,它占用字节 而非字节内存空间。 CHINA0 综上所述,字符常量A与字符串常量“A“是两回事: (1)定界符不同:字符常量使用单引号,而字符串 常量使用双引号; (2)长度不同:字符常量的长度固定为1,而字符串 常量的长度,可以是0,也可以是某个整数; (3)存储要求不同:字符常量存储的是字符的 ASCII码值,而字符串常量,除了要存储有效的字符外, 还要存储一个结束标志0。 Return 2.7 算术运算与算术表达式 在语言中,除控制语句和输入输出函数外,其它所 有基本操作都作为运算符处理。 1.五种基本算术运算符 +、-(减法/取负)、*、/、%(求余数) (1)关于除法运算/ C语言规定:两个整数相除,其商为整数,小数部分 被舍弃。例如,5 / 2 = 2。 (2)关于求余数运算 要求两侧的操作数均为整型数据,否则出错。 2.表达式和算术表达式 (1)表达式的概念 用运算符和括号将运算对象(常量、变量和函数等 )连接起来的、符合语言语法规则的式子,称为表达 式。 单个常量、变量或函数,可以看作是表达式的一种特 例。将单个常量、变量或函数构成的表达式称为简单表达 式,其它表达式称之为复杂表达式。 (2)算术表达式的概念 表达式中的运算符都是算术运算符。例如,3 + 6 * 9、 (x + y) / 2 - 1等,都是算术表达式。 良好的源程序书写习惯:在表达式中,在双目运算符 的左右两侧各加一个空格,可增强程序的可读性。 请比较表达式“ (x + y) / 2 1”与“(x+y)/21”,您认为哪 个的可读性更好一些? 3.运算符的优先级与结合性 (1)语言规定了运算符的优先级和结合性。 所谓结合性是指,当一个操作数两侧的运算符具有相 同的优先级时,该操作数是先与左边的运算符结合,还是 先与右边的运算符结合。 自左至右的结合方向,称为左结合性。反之,称为右 结合性。 结合性是语言的独有概念。除单目运算符、赋值运 算符和条件运算符是右结合性外,其它运算符都是左结 合性。 (2)表达式求值 1)按运算符的优先级高低次序执行。例如,先乘除 后加减。 2)如果在一个运算对象(或称操作数)两侧的运算 符的优先级相同,则按语言规定的结合方向(结合性 )进行。 例如,算术运算符的结合方向是“自左至右”,即:在 执行“a b + c”时,变量b先与减号结合,执行“a - b”;然 后再执行加c的运算。 4.数据类型转换 (1) 在语言中,整型、实型和字符型数据间可以 混合运算(因为字符数据与整型数据可以通用)。 如果一个运算符两侧的操作数的数据类型不同,则系 统按“先转换、后运算”的原则,首先将数据自动转换成同 一类型,然后在同一类型数据间进行运算。转换规则如 图2-5所示。 1)横向向左的箭头,表示必须的转换。char和short 型必须转换成 int 型,float型必须转换成double型。 2)纵向向上的箭头,表示不同类型的转换方向。 例如,int型与double型数据进行混合运算,则先将int 型数据转换成double型,然后在两个同类型的数据间进行 运算,结果为double型。 注意:箭头方向只表示数据类型由低向高转换,不要 理解为int型先转换成unsigned型,再转换成long型,最后 转换成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型。 Return 2.8 赋值运算与赋值表达式 1.赋值运算 赋值符号“=”就是赋值运算符,它的作用是将一个表 达式的值赋给一个变量。 赋值运算符的一般形式为: 变量 = 赋值表达式 例如,x = 5 y = (float)5 / 2 如果表达式值的类型,与被赋值变量的类型不一致 ,但都是数值型或字符型时,系统自动地将表达式的值 转换成被赋值变量的数据类型,然后再赋值给变量。 思考题:假设变量num的数据类型为float,其值为2.5, 则执行“num = (int)num”后,num的值等于多少? 2.复合赋值运算 复合赋值运算符是由赋值运算符之前再加一个双目运 算符构成的。 复合赋值运算的一般格式为: 变量 双目运算符 = 表达式 复合赋值运算符 它等价于:变量 = 变量 双目运算符 (表达式)。 当表达式为简单表达式时,表达式外的一对圆括号才 可缺省,否则可能出错。 例如,x += 3 /* 等价于x=x+3 */ y *= x + 6/* 等价于y=y*(x+6),而不是y=y*x+6 */ C语言规定的10种复合赋值运算符如下: +=,-=,*=,/=,%=; /*复合算术运算符(5个)*/ printf(“x=%dn“,x); /*输出x的

温馨提示

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

最新文档

评论

0/150

提交评论