重庆出版社出版,李勇主编的大一C语言课程ppt第2章.ppt_第1页
重庆出版社出版,李勇主编的大一C语言课程ppt第2章.ppt_第2页
重庆出版社出版,李勇主编的大一C语言课程ppt第2章.ppt_第3页
重庆出版社出版,李勇主编的大一C语言课程ppt第2章.ppt_第4页
重庆出版社出版,李勇主编的大一C语言课程ppt第2章.ppt_第5页
已阅读5页,还剩27页未读, 继续免费阅读

下载本文档

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

文档简介

第2章 数据类型、运算符及表达式,教学要求:通过本章的学习,1读者必须掌握C语言的基本数据类型(整型、字符型、实型),了解不同类型数据间的转换原则; 2理解C语言中的常量、变量的定义与使用,运算符、运算符的优先级及结合规则; 3重点掌握C语言表达式(赋值表达式、算术表达式、关系表达式、逻辑表达式、条件表达式、逗号表达式)的应用和操作。 教学提示:C语言中介绍了多种数据类型(如整型、实型、字符型数据)的定义与使用,在给不同类型的变量赋值时,要注意数据和变量的类型一定要匹配,若遇数据与变量类型不匹配时,可以运用C中的强制类型转换规则进行强制转换。另C语言中还介绍了多种运算符及其表达式,在求解表达式值时需按照运算符的优先级和结合性求解。 教学内容:本章首先介绍了常量、符号常量、变量的定义与使用;C语言数据类型的分类及不同类型数据间的转换与运算;然后通过各类运算符及表达式的若干例子详细讲解了C运算符的种类、运算优先级和结合性以及表达式的种类和求值规则。,第2章 数据类型、运算符及表达式,2.1 常量和变量 2.1.1 常量与符号常量 所谓常量是指在程序运行的整个过程中其值始终不可改变的量称为常量。 分类 整型常量:18、0、-13 实型常量:4.6、-1.86 字符常量:b、g 常量一般从其字面形式即可判别。这种常量称为字面常量或直接常量 用一个标识符代表一个常量的,称为符号常量,即标识符形式的常量,第2章 数据类型、运算符及表达式,一、常量与符号常量 例2.1 符号常量的使用。 #define PRICE 20 main( ) int num , total; num = 30 ; total = num * PRICE ; printf (“total=%d”,total ) ; 提示:P13,第2章 数据类型、运算符及表达式,2.1.2 变量 在程序的执行过程中其值可以变化的量称为变量。一个变量应该有一个名字,在内存中占据一定的存储单元。在该存储单元中存放变量的值。 实质变量名实际上是一个符号地址,在对程序编译连接时由系统为每一个变量名分配一个内存地址。 在程序中从变量中取值,实际上是通过变量名找到相应的内存地址,从其存储单元中读取数据。,第2章 数据类型、运算符及表达式,2.1.2 变量 用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列成为标识符(identifier)。简单地说,标识符就是一个名字。 语言规定标识符只能由字母、数字和下划线三种字符组成,并且第一个字母必须为字母或下划线。 合法:sum,average,total,_day,name,month,_1_3,BASIC,LEE_li 不合法:*S.AA,¥54,111,4e32,A6 各个编译系统都有自己规定的标识符长度,建议变量名的长度不要超过8个字符。 在选择变量名和标识符时,应注意做到“见名知意”,即选有含意的英文单词(或其缩写)作标识符 如name、total、day、count、country、age等 先定义,后使用:P14【例题:change.c】,第2章 数据类型、运算符及表达式,2.2 C语言的数据类型 引入数据是程序处理的对象,数据可以依其本身的特点进行分类。 数学中有整数、实数等概念,在日常生活中需要用字符串来表示人的姓名和地址,有些问题的回答只能是“是”或“否”(即逻辑“真”或“假”) 不同类型的数据有不同的处理方法 整数和实数可以参加算术运算,但实数的表示又不同于整数,要保留一定的小数位;逻辑数据可以参加“与”、“或”、“非”等逻辑运算,第2章 数据类型、运算符及表达式,第2章 数据类型、运算符及表达式,2.2.1 整型数据 整型常量的表示方法 十进制整数:没有前缀;如456,-123,0 八进制整数:以0开头;如0123表示八进制数123,即(123)8其值为:182+281+380,等于十进制数83。-011表示八进制数-11,即十进制数-9 十六进制整数:以0x开头;如0x123,代表十六进制数123,即(123)16=1162+2161+3160=256+32+3=291。-0x12等于十进制数-18,第2章 数据类型、运算符及表达式,整型变量 整型数据在内存中的存放形式 数据在内存中是以二进制形式存放的,如int i;i=10; 整型变量的分类 基本整型int:长度与编译器位数一致(例如在像turbo c这样的16位编译器中,值的范围为-215215-1;在像VC+这样的32位编译器中,值的范围为-231231-1) 短整型short int:16位 长整型long int:32位 unsigned:表示非负P16,第2章 数据类型、运算符及表达式,整型变量的定义 int a,c; unsigned short d,e; long f; 例2.2 整型变量的定义与使用。 main( ) int a,b,c,d; unsigned u; a=10; b=-22; u=5; c=a+u; d=b+u; printf(“a+u=%d,b+u=%dn”,c,d); ,第2章 数据类型、运算符及表达式,2.2.2 实型数据 实型常量的表示方式 十进制小数形式:由数字和小数点组成(注意必须有小数点)。如.456、456.、456.0、0.0都是十进制小数形式 指数形式:字母e(或E)之前必须有一个数字,且e后面的指数必须为整数例如123.456可以表示为123.456e0、12.3456e1、1.23456e2、0.123456e3、0.0123456e4等 规范化指数形式:在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字,如2.213e2、3.0888E5 Turbo C用指数形式输出时(使用格式说明符%e),是按规范化指数形式输出的P17【举例】,第2章 数据类型、运算符及表达式,实型变量 实型变量的分类 实型数据的舍入误差(例2.3,P18) 实型常量的类型 C编译系统将实型常量作为双精度来处理 一个实型常量可以赋给一个float型(系统将按双精度数据存储(占64位)和运算,得到一个双精度数,然后取前7位赋给实型变量f )、double型或long double变量。P18【举例】,第2章 数据类型、运算符及表达式,2.2.3 字符型数据 一、字符常量 C的字符常量是用单引号括起来的一个字符 C中还允许使用一种特殊形式的字符常量,既以“”开头的字符序列 转义字符。详见表2.2 反斜杠()后面的字符转换成另外的意义。如n中的“n”不代表字母n而作为“换行”符 反斜杠可以和8进制或16进制数值结合起来使用,以表示相应于该数值的ASCII型P26 【举例】 例2.4P19【板书】,第2章 数据类型、运算符及表达式,字符变量 字符型变量用来存放字符常量,请注意只能放一个字符 字符变量定义的关键字:char 可以向字符变量赋值字符常量或者字符常量的ASCII码P245 在所有的编译系统中都规定以一个字节来存放一个字符,或者说一个字符变量在内存中占一个字节 例2.5 向字符变量赋以整数 main( ) char c1,c2; c1=100; c2=101; printf(%c %cn,c1,c2); printf(%d %dn,c1,c2); ,第2章 数据类型、运算符及表达式,字符串常量 字符串常量是一对双引号括起来的字符序列。如 how old are you?,CHINA,n,$12.34 假设b被指定为字符变量: char b; b=a; 是正确的。而 b=a; 是错误的。 b=CHINA 也是错误的。不能把一个字符串赋给一个字符变量。 C语言中没有专门设置存储字符串的变量,第2章 数据类型、运算符及表达式,2.3 运算符和表达式 2.3.1 C运算符简介 算术运算符 (+ - * / %) 关系运算符 ( = | &) 赋值运算符 (=及其扩展赋值运算符) 条件运算符 (? :) 逗号运算符 (,) 指针运算符 (* 和 &) 求字节数运算符 (s I z e o f) 强制类型转换运算符 ( (类型) ) 分量运算符 ( . ) 下标运算符 ( ) 其他,第2章 数据类型、运算符及表达式,2.3.2 算术运算符和算术表达式 1基本的算术运算符 + (加法运算符,或正值运算符。如2+8、+6) - (减法运算符,或负值运算符。如6-2、-4) * (乘法运算符。如3*7) / (除法运算符。如5/3) 两个整数相除的结果为整数,如5/3的结果值为1,舍去小数部分 如果除数或被除数中有一个为负值,则舍入的方向是不固定的。例如,-5/3在有的机器上得到结果-1,有的机器则给出结果-2。多数机器采取“向零取整”的方法,即5/3=1,-5/3=-1,取整后向零靠拢 【演示】 % (模运算符,或称求余运算符,%两侧均应为整型数据,如7%5的值为2) 如果参加+,-,*,/运算的两个数中有一个数为实数,则结果是double型,因为所有实数都按double型进行运算,第2章 数据类型、运算符及表达式,2算术运算符和运算符的优先级与结合性 用算术运算符和括号将运算对象(也称操作数)连接起来、符合C语法规则的式子,称C算术表达式。 例如a * b / c - 1.5 +a C语言规定了运算符的优先级。在表达式求值时,先按运算符的优先级别高低次序执行 如表达式a b * c , b的左侧为减号,右侧为乘号,而乘号优先于减号,因此,相当于a ( b * c )。如果在一个运算对象两侧的运算符的优先级别相同,如a b + c,则按规定的“结合方向”处理 C规定了各种运算符的结合方向(结合性),算术运算符的结合方向为“自左至右”,即先左后右,称为“左结合性” 在a-b+c中,b先与减号结合,执行a b 的运算,再执行加c的运算,第2章 数据类型、运算符及表达式,各类数值型数据(整型、实型、字符型)的混合运算 自动动转换(隐式转换) 自动转换发生在不同类型数据进行混合运算时,由编译系统自动完成。转换规则如图2.4所示: (1)类型不同,先转换为同一类型,然后进行运算。 (2)图中纵向的箭头表示当运算对象为不同类型时转换的方向。可以看到箭头由低级别数据类型指向高级别数据类型,即数据总是由低级别向高级别转换。即按数据长度增加的方向进行,保证精度不降低。 (3)图中横向向左的箭头表示必定的转换(不必考虑其它运算对象)。如字符数据参与运算必定转化为整数,float型数据在运算时一律先转换为双精度型,以提高运算精度(即使是两个float型数据相加,也先都转换为double型,然后再相加)。 (4)赋值运算,如果赋值号“=”两边的数据类型不同,赋值号右边的类型转换为左边的类型。这种转换是截断型的转换,不会四舍五入。,第2章 数据类型、运算符及表达式,3强制类型转换运算符 可以利用强制类型转换运算符将一个表达式转换成所需类型 (double) a /* 将a转换成double类型 */ (int)(x+y) /* 将x+y的值转换成整型 */ (float)(7%4) /* 将7%4的值转换成float型 */ 其一般形式为 (类型名)(表达式) 注意,表达式应该用括号括起来。如果写成 (int)x+y则只将x转换成整型,然后与y相加 在强制类型转换时,得到一个所需类型的中间变量,原来变量的类型未发生变化 例如 (int)x /* 不要写成int(x) */ 如果x原指定为float型,进行强制类型运算后得到一个int型的中间变量,它的值等于x的整数部分,而x的类型不变(仍为float型),第2章 数据类型、运算符及表达式,例2.6 强制类型转换【演示】 main( ) float x; int i; x=2.4; i=(int)x; printf(“x=%f,i=%d”,x,i); 运行结果如下: x=2.400000,i=2 x类型仍为float型,值仍等于2.4。,第2章 数据类型、运算符及表达式,2.3.3 自增自减运算符及表达式 增量和减量操作符表示为:+ 和 - ,作用是使变量的值增1或减1 增量操作符有前增量与后增量之分。前增量操作+a的意义:先修改操作数使之增1,然后将增1过的a值作为表达式的值。而后增量操作a+的意义为:先将变量a的值作为表达式的值确定下来,再将a增1。 +a; (在使用i之前,先使i的值加1) -a; (在使用i之前,先使i的值减1) a+; (在使用i之后,使i的值加1) a-; (在使用i之后,使i的值减1),第2章 数据类型、运算符及表达式,例 main( ) int a=3; int b=+a; /* 相当于a=a+1;b=a;*/ printf(d% d%n,a,b); int c=a+; /* 相当于c=a;a=a+1;*/(语法错误) printf(d% d%n,a,c); 输出的结果为: 4 4 5 4,第2章 数据类型、运算符及表达式,提示: 由于a+和+a已经是表达式,对于表达式不能进行自增自减运算,因此+(a+),+(+a),(a+)+,(+a)+均有语法错误【纠正教材,演示】 由于增量与减量操作包含有赋值操作,所以操作数不能是常量,它必须是变量。例如:3+; /* error */ 增量与减量操作符是两个+或两个-的一个整体,中间不能有空格。如果有多于两个+或两个-连写的情况,则编译首先识别前面两个+或-为增量或减量操作符 例如,对“int a=1,b=5,c;”的变量定义,下面5个表达式,有些不允许: c=a+b; /* ok:c=6 */ c=a+b; /* error:编译接收为a+ b */ c=a+b; /* ok:编译接收为a+ +b*/ c=a+b; /* error:编译接收为 a+ +b */ c=a+b; /* error:编译接收为a+ + +b */,第2章 数据类型、运算符及表达式,2.3.4 逗号运算符和逗号表达式 C语言提供一种特殊的运算符逗号运算符。用它将两个表达式连接起来。称为逗号表达式,又称为“顺序求值运算符” 逗号表达式的一般形式为 表达式1,表达式2 逗号表达式的求解过程是:先解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值 如,逗号表达式a = 3 * 5,a * 4 求解过程:赋值运算符的优先级别高于逗号运算符,因此应先求解a=3*5(也就是把“a=3*5”作为一个表达式)。经计算和赋值后得到a的值为15,然后求解a*4,得60。整个逗号表达式的值为60,第2章 数据类型、运算符及表达式,如 (a=3*5,a*4),a+5 求解过程:先计算出a的值等于15,再进行a*4的运算符的60(但a值未变,仍为15),再进行a+5得20,即整个表达式的值为20 逗号运算符是所有运算符中级别最低的 并不是任何地方出现的逗号都是作为逗号运算符。 例如函数参数也是用逗号来间隔的。如 printf(%d, %d, %d,a,b,c); “a,b,c”并不是一个逗号表达式,它是printf函数的3个参数,第2章 数据类型、运算符及表达式,2.3.5 赋值运算符与赋值表达式 C提供了几个赋值运算符,最简单的赋值运算符就是“=”。带有赋值运算符的表达式被称为赋值表达式 赋值表达式的结果值为等号左边对象被赋值后的值 赋值运算符运算的结合性为自右向左 a=5 表达式值为5。 a=b=c=5 表达式值为5,a,b,c均为5。这个表达式从右向左运算,在c被更新为5后,表达式c=5的值为5,接着b的值被更新为5,最后a被赋值为5。 a=5+(c=6) /* 表达式值为11,a为11,c为6。*/ a=(b=4)+(c=6) /* 表达式值为10,a为10,b为4,c为6。*/ a=(b=10)/(c=2) /* 表达式值为5,a为5,b为10,c为2。*/,第2章

温馨提示

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

评论

0/150

提交评论