第3章(基本数据类型与数据运算)课件.ppt

上传人:飞****2 文档编号:82452302 上传时间:2023-03-25 格式:PPT 页数:94 大小:422.50KB
返回 下载 相关 举报
第3章(基本数据类型与数据运算)课件.ppt_第1页
第1页 / 共94页
第3章(基本数据类型与数据运算)课件.ppt_第2页
第2页 / 共94页
点击查看更多>>
资源描述

《第3章(基本数据类型与数据运算)课件.ppt》由会员分享,可在线阅读,更多相关《第3章(基本数据类型与数据运算)课件.ppt(94页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、学习目标学习目标 理解C语言标识符的概念并能灵活运用,理解并掌握基本数据类型及其相互转换,掌握常量与变量的概念并能灵活运用,重点掌握各种运算符及表达式的使用方法。第第3章章 基本数据类型与数据运算基本数据类型与数据运算1学习内容基本标识符基本标识符数据类型数据类型常量与变量常量与变量基本数据类型的转换基本数据类型的转换运算符和表达式运算符和表达式应用举例应用举例2基本标识符基本标识符n保留关键字保留关键字 在C语言中有一些标识符被称为保留关键字(共32个),系统已经预先定义了它们的具体含义,它们具有特殊的用途,不允许用户再作它用。1.标识数据类型 float,int,long,short,ch

2、ar,double等。2.标识流程控制 break,continue,else,for等。3.标识存储类型 auto,static等。4.标识运算符 sizeof3n预定义标识符预定义标识符1.编译预处理命令编译预处理命令define,include,ifdef等。等。2.标准库函数名标准库函数名fabs,sqrt,pow,printf等。等。基本标识符基本标识符4n用户自定义标识符用户自定义标识符命名规则:命名规则:(1)以字母或下划线开头)以字母或下划线开头,且后跟字母、数字、下划线的且后跟字母、数字、下划线的组合。组合。(2)变量名不能包含除)变量名不能包含除“_”(下划线)以外的任何特

3、殊(下划线)以外的任何特殊字符,如:字符,如:%、#、逗号、空格等。、逗号、空格等。(3)变量名不能包含空白字符(换行符、空格和制表符)变量名不能包含空白字符(换行符、空格和制表符称为空白字符)。称为空白字符)。(4)要区分字母的大小写。如)要区分字母的大小写。如SUN、SUn、Sun、sun等都是不同的标识符。等都是不同的标识符。基本标识符基本标识符5基本标识符基本标识符合法的标识符:sum,_total,month,student_name不合法的标识符:.D.John,¥123,33,3D64,ab6【注意注意】(1)通常变量名、函数名用小写,而符号常量名用大写。)通常变量名、函数名用小

4、写,而符号常量名用大写。(2)不要使用系统关键字、预定义标识符作为用户自定义)不要使用系统关键字、预定义标识符作为用户自定义的标识符。的标识符。(3)定义标识符时应该做到)定义标识符时应该做到“见名知意见名知意”,以增加程序的,以增加程序的可读性。可读性。(4)ANSI C和和C+标准都没有限定标识符的长度,但各标准都没有限定标识符的长度,但各个个C和和C+编译系统都有自己的规定。为保证程序的可编译系统都有自己的规定。为保证程序的可移植性,建议标识符的命名不要超过移植性,建议标识符的命名不要超过8个字符。个字符。基本标识符基本标识符7C程序的组成一个C程序应包括以下两方面内容:(1)对数据的描

5、述。即数据结构(data structure)。(2)对操作的描述。即操作步骤,也就是算法(algorithm)。数据是操作的对象,操作的目的是对数据进行加工处理,以得到期望的结果。打个比方,厨师做菜肴,需要有菜谱。菜谱上一般应包括:配料,指出应使用哪些原料;操作步骤,指出如何使用这些原料按规定的步骤加工成所需的菜肴。面对同一些原料可以加工出不同风味的菜肴。8C程序的组成著名计算机科学家沃思(nikiklaus Wirth)提出:程序=算法+数据结构+程序设计方法+语言工具和环境C语言的数据结构是以数据类型形式出现的。数据类型分类如下:9数据类型数据类型10数据数据类类型型全称全称类类型型说说

6、明符(明符(缩缩写写标识标识符符)长长度度范范 围围字符型字符型charchar8 8-128127-128127无符号字符型无符号字符型unsigned charunsigned char8 802550255有符号字符型有符号字符型signed charsigned char8 8-128127-128127整型整型intint1616-3276832767-3276832767无符号整型无符号整型unsigned intunsigned int(unsignedunsigned)1616065535065535有符号整型有符号整型signed intsigned int1616-3276

7、832767-3276832767短整型短整型short int(shortshort)1616-128127-128127无符号短整型无符号短整型unsigned short intunsigned short int(unsigned short)161602550255有符号短整型有符号短整型signed short intsigned short int1616-128127-128127长长整型整型long intlong int(longlong)3232-21474836482147483647-21474836482147483647有符号有符号长长整型整型signed lon

8、g intsigned long int3232-21474836482147483647-21474836482147483647无符号无符号长长整型整型unsigned long intunsigned long int(unsigned long)32320429496729504294967295单单精度型精度型floatfloat3232约约精确到精确到7 7位数位数双精度型双精度型doubledouble6464约约精确到精确到1515位数位数表表3.1 ANSI C3.1 ANSI C标标准中的数据准中的数据类类型型11【注意注意】n因字符型、整数的缺省定义是有符号数,所以sin

9、ged可省略。nC编译程序允许使用整型的简写形式,即所有的int均可缺省。12n常量常量n常量是指那些在程序执行过程中其值保持不变的常量是指那些在程序执行过程中其值保持不变的量。量。n语言的常量按其表现形式可以分为:语言的常量按其表现形式可以分为:n直接常量直接常量1.整型常量整型常量2.实型常量实型常量3.字符常量字符常量4.字符串常量字符串常量n符号常量符号常量常量与变量常量与变量13直接常量:直接常量:就是用数字直接表示的常量,在程序中可以直接就是用数字直接表示的常量,在程序中可以直接使用。使用。1.整型常量整型常量整型常量即整常数。有以下三种形式表示:整型常量即整常数。有以下三种形式表

10、示:(1)(1)十进制整数。如十进制整数。如123123,-456-456,0 0。(2)(2)八进制整数。以八进制整数。以0 0开头的数是八进制数。开头的数是八进制数。如:如:0123 180123 182 2+28+281 1+38+380 0十进制数十进制数8383 -011 -18 -011 -181 1+18+180 0 十进制数十进制数-9-9。(3)(3)十六进制整数。以十六进制整数。以0 x0 x开头的数是十六进制数。开头的数是十六进制数。如:如:0 x123 1160 x123 1162 2+216+2161 1+316+3160 0十六进制数十六进制数291291。-0 x

11、12 -116-0 x12 -1161 1+216+2160 0 十六进制数十六进制数-18-18。直接常量直接常量142.实型常量实数又称浮点数。实数有两种表示形式:(1)十进制小数形式。它由数字和小数点组成,注意必须有小数点。例:122.、122.0、0.0直接常量直接常量15(2)指数形式。n包括整数部分、尾数部分、指数部分和字母e(或E)。n格式:n1.n2E|e+|-n3nn1,n2,n3分别是一位或多位十进制数字(从09)n小数点之前是整数部分,小数点之后是尾数部分,它们是可省略的,小数点在没有尾数时可以省略,n指数部分幂指数可以为负,当没有符号时视为正,指数的基数为10 n1.2

12、10-3-1.2e-3实型常量实型常量16例如例如123.456可以表示为:可以表示为:123.456e0 12.3456e11.23456e2把其中的把其中的1.23456e2称为称为“规范化的指数形式规范化的指数形式”:即在字母即在字母e(或或E)之前的小数部分中,小数点左边应之前的小数部分中,小数点左边应有一位有一位(且只能有一位且只能有一位)非零的数字。非零的数字。实型常量实型常量17【说明说明】(1)默认情况下,实型常量为正值,如果要表示负值,需要在常量前使用负号。(2)在实型常量中不得出现任何空白符号。(3)所有的实型常量均视为双精度类型。所有的实型常量均视为双精度类型。(4)实型

13、常量的整数部分为0时可以省略。(5)注意字母E(或e)的前后都必须有数字,且E(或e)后面的指数必须为整数。合法的指数形式:-.12E-2,.23E2,12E-2,-2.3E-3,25E-4 不合法的指数形式:e8,2.3e,3.5,e,.e8实型常量实型常量183.字符常量n字符常量是指用一对单引号括起来的一个字符字符常量是指用一对单引号括起来的一个字符。n如 a ,9,!。n字符常量中的单引号仅起定界作用,并不表示字符本身。n在C语言中,一个字符占一个字节,字符是按其所对应的ASCII码值来存储的,见附录A。直接常量直接常量19【注意注意】(1)注意字符数字(09)和数字(09)的含义和在

14、计算机中的存储方式是截然不同的。(2)字符常量可以像整数一样在程序中参与相关的运算。例如:a-32;/*执行结果97-32=65*/8-8;/*执行结果56-8=48*/字符常量20n转义字符是转义字符是C语言中一种特殊的字符常量。语言中一种特殊的字符常量。n通常使用转义字符表示ASCII码字符集中不可打印的控制字符和特定功能的字符。n转义字符用反斜杠后面跟一个字符或一个八进制或一个十六进制数表示,见表3.2。转义字符21转义转义字符字符意意 义义ASCIIASCII码值码值(十十进进制制)aa响响铃铃(BEL)(BEL)007007bb退格退格(BS)(BS)008008ff换页换页(FF)

15、(FF)012012nn换换行行(LF)(LF)010010rr回回车车(CR)(CR)013013tt水平制表水平制表(HT)(HT)009009vv垂直制表垂直制表(VT)(VT)011011反斜杠反斜杠092092?问问号字符号字符063063单单引号字符引号字符039039双引号字符双引号字符03403400空字符空字符(NULL)(NULL)000000dddddd任意字符任意字符三位八三位八进进制制数数xhhxhh任意字符任意字符二位十六二位十六进进制制数数22nddd为三位八进制数。例如:141即为ASCII值为97对应的字符,即anxhh为两位十六进制数。转义字符23n如果在字

16、符常量中需要使用单引号、双引号和反斜杠,则必如果在字符常量中需要使用单引号、双引号和反斜杠,则必须使用转义字符来表示,即在这些字符前加上反斜杠须使用转义字符来表示,即在这些字符前加上反斜杠。#include void main()printf(“”);printf(“”);printf(“”);输出:输出:”【说明说明】转义字符中只能使用小写字母,每个转义字符只能看转义字符中只能使用小写字母,每个转义字符只能看作一个字符。作一个字符。转义字符244 字符串常量n字符串常量是指用一对双引号括起来的一串字符。字符串常量是指用一对双引号括起来的一串字符。n双引号仅起定界作用。n举例:China,C

17、program,122.45,AnC规定:在每一个字符串的结尾加一个“串结束标志”(即ASCII码值为0的字符NULL),用0表示。字符串“CHINA”,实际上在内存中是 C H I N A 0长度不是5个字符,而是6个字符。直接常量直接常量25【注意注意】(1)A与“A”是不同的。(2)“”和是不同的。“”它实际上包含了一个空字符0,在内存中占用一个字节的存储空间。则是非法的用法。字符串常量26n符号常量就是用一个标识符来代表的常量。n符号常量一般使用大写英文字母表示。n符号常量在使用前必须先用预处理命令“#define”进行定义。n格式:格式:#define 符号常量名 常量符号常量符号常

18、量27符号常量符号常量例:符号常量的使用。#define PRICE 30#include void main()printf(“PRICE=%d,PRICE);28符号常量符号常量n符号常量的本质是做替换。n使用符号常量的好处是:n含义清楚。定义符号常量名时应考虑“见名知意”。n在需要改变一个常量时能做到“一改全改”。29变量值可以改变的量称为变量。一个变量应该有一个名字(变量名),在内存中占据一定的存储单元(存储单元),在该存储单元中存放变量的值(变量值)。int a;a=3;或int a=3;30n声明变量类型的目的是告诉系统变量需要占用的存储单元数目,以便系统为变量分配相应的存储单元。

19、n变量名必须是合法的标识符。n变量在使用前必须先定义。n格式:,;n功能:定义变量名所指定的变量,并可以赋初值。变量31n同时定义多个变量时,多个变量之间用“,”来间隔。int a,b,c;n同一类型变量可以定义在一行,也可以定义在多行。int a,b,c;或int a;int b;int c;n不同类型的变量,使用不同的关键字。float a;char c;n类型和变量名之间至少要加一个空格。n变量的初始化int a=3;n变量的赋值int a;a=3;变量321.整型变量2.实型变量3.字符型变量变量的类型33整型变量n整型数据在内存中的存放形式数据在内存中是以二进制形式存放的。如果定义了

20、一个整型变量i:int i;/*定义为整型变量*/i=10;/*给i赋以整数10*/十进制数10的二进制形式为1010,在计算机上使用的c编译系统,每一个整型变量在内存中占2个字节。图(a)是数据存放的示意图。图(b)是数据在内存中实际存放的情况。34整型变量n实际上,数值是以补码表示的。一个正数的补码和其原码的形式相同。35整型变量有以下三种整型变量:(1)基本整型:以int表示。(2)短整型:以short int表示,或以short表示。(3)长整型:以long int表示,或以long表示。取值范围:long=int=shortint型变量的值范围:-215(215-1),即-32768

21、32767。在实际应用中,变量的值常常是正的,为了充分利用变量的表数范围,此时可以将变量定义为“无符号”(unsigned)类型。如果加上修饰符signed,则指定是“有符号数”。隐含为有符号(signed)。36整型变量归纳起来,可以用以下6种整型变量。即:有符号基本整型 signed int 无符号基本整型 unsigned int有符号短整型 signed short int无符号短整型 unsigned short int有符号长整型 signed long int无符号长整型 unsigned long int37整型变量无符号型变量只能存放不带符号的整数,而不能存放负数。一个无符号

22、整型变量中可以存放的正数的范围比一般整型变量中正数的范围扩大一倍。如果在程序中定义a和b两个变量:int a;/a的数值范围为-3276832767unsigned int b;/b的数值范围为06553538整型变量图(a)表示有符号整型变量a的最大值(32767)图(b)表示无符号整型变量b的最大值(65535)。39整型变量整型变量的定义nC规定在程序中所有用到的变量都必须在程序中定义,即“强制类型定义”。例如:int a,b;(变量a、b为整型)unsigned short c,d;(变量c、d为无符号短整型)long e,f;(变量e、f为长整型)n对变量的定义,一般是放在一个函数的

23、开头部分的声明部分。40整型变量例:整型变量的定义与使用。#include void main()int a,b,c,d;unsigned u;a=12;b=-24;u=10;c=a+u;d=b+u;printf(a+u=%d,b+u=%dn,c,d);运行结果为a+u=22,b+u=-1441整型变量整型数据的溢出在turbo c中一个int型变量的最大允许值为32767,如果再加1,会出现什么情况?例:整型数据的溢出。#include void main()int a,b;a=32767;b=a+1;printf(%d,%d,a,b);运行结果为32767,-3276842整型变量请注意:

24、此时就发生“溢出”,但运行时并不报错。它好像汽车的里程表一样,达到最大值以后,又从最小值开始计数。所以,32767加1得不到32768,而得到-32768。C的用法比较灵活,往往出现副作用,而系统又不给出“出错信息”,要靠程序员的细心和经验来保证结果的正确。-327683276743变量2实型变量(1)实型数据在内存中的存放形式 实型数据在内存中一般占4个字节(32位),按照指数形式存放。系统把一个实数分成指数部分和小数部分,分别按二进制存放。(2)实型变量的分类C实型变量分为单精度(float型)、双精度(double型)和长双精度型(long double)三类。如:floatx,y;(指

25、定x、y为单精度实数)double z;(指定z为双精度实数)long double t;(指定t为长双精度实数)44实型变量(3)实型数据的舍入误差实型数据的舍入误差请分析下面的程序:请分析下面的程序:例例:实型数据的舍入误差。实型数据的舍入误差。#include void main()float a,b;a=123456.789e5;b=a+20;printf(%f,b);a,b的值都为的值都为12345678848.000000一个实型变量只能保证的有效数字是一个实型变量只能保证的有效数字是7位有效数字。位有效数字。453.字符型变量字符型变量只能用来存放一个字符,而在一个字符型变量中不

26、可以存放字符串。charc1,c2;c1=a;c2=b;变量46字符型变量字符数据在内存中的存储形式及其使用方法将一个字符常量放到一个字符变量中,是将该字符的相应的ASCII代码放到存储单元中。如图:内存中的变量c1、c247字符型变量内存中,既然字符数据以ASCII码存储,那么就实现了字符型数据和整型数据之间的转换。例:向字符变量赋以整数。#include void main()char c1,c2;c1=97;c2=98;printf(%c%cn,c1,c2);printf(%d%dn,c1,c2);程序运行时输出如下:a b97 9848字符型变量例:大小写字母的转换。#include

27、void main()char c1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;printf(%c%c,c1,c2);运行结果为A B一个小写字母比它相应的大写字母的ASCII码大32。49基本数据类型的转换基本数据类型的转换n数据类型转换有两种方式:数据类型转换有两种方式:n自动类型转换自动类型转换n强制类型转换。强制类型转换。n无论是自动类型转换还是强制类型转换,都并没有无论是自动类型转换还是强制类型转换,都并没有改变变量本身的数据类型。改变变量本身的数据类型。50nC语言允许在整型、单精度浮点型和双精度浮点型数据之间进行混合运算。n其转换规则如图所示。其转换规则如图所

28、示。n图中图中横向箭头体现了“必必定转换定转换”原则。n纵向箭头体现了当运算对象为不同类型时的“就高不就高不就低就低”的转换原则。自动类型转换51例:已指定i为int变量,f为float变量,d为double变量,e为long变量,有下面式子:10+a+i*f-d/e在计算机执行时从左至右扫描,运算次序为:进行10+a的运算,先将a转换成整数97,运算结果为107。由于“*”比“+”优先,先进行i*f的运算。先将i与f都转成double型,运算结果为double型。整数107与i*f的积相加。先将整数107转换成双精度数(小数点后加若干个0,即10700000),结果为double型。将变量e

29、化成double型,d/e结果为double型。将10+a+i*f的结果与d/e的商相减,结果为double型。上述的类型转换是由系统自动进行的。自动类型转换52n利用强制类型转换运算符可以将一个表达式转换成所需的数据类型。n格式:格式:(类型说明符)表达式【例如】(double)x 将变量x转换成double型。(int)(x+y)将x+y的和值转换成int型。【注意注意】(1)不能将(int)(x+y)写成(int)x+y,因为后者是将x进行了强制类型转换,再与y相加。(2)强制类型转换一般用于自动类型转换不能达到目的的时候。强制类型转换53nint sum,n;nsum/nn(float

30、)sum/nnsum/(float)nn(float)(sum/n)54例:强制类型转换。#include void main()float x;int i;x=2.6;i=(int)x;/x本身的值并不改变 printf(x=%f,i=%d,x,i);运行结果如下:x=2.600000,i=2强制类型转换55运算运算符符和表和表达式达式概述概述运算符和表达式运算符和表达式56n运算符和运算对象(操作数)按一定的规则结运算符和运算对象(操作数)按一定的规则结合在一起就构成了表达式。合在一起就构成了表达式。表达式运算符运算对象表达式运算符运算对象n操作数可以是常量、变量或子表达式。n运算符可分为

31、单目运算符、双目运算符和三目运算符,它们分别对一个、两个或三个运算对象进行处理。表达式表达式57n双目算术运算符+(加法运算符,或正值运算符。如3+5、+3)-(减法运算符,或负值运算符。如5-2、-3)*(乘法运算符。如3*5)/(除法运算符。如5/3)%(模运算符,或称求余运算符,%两侧均应为整型数据,如7%4的值为3)。n对于除法运算来讲,当参与运算的量均为整型时,结果也为整型,自动舍去小数。当参与运算的量中只要有一个为实型数据,则结果为双精度实型。n所有算术运算符都可以对字符型数据进行操作。n求余运算的结果等于两数相除后的余数,且符号与被除数的符号相同。算术运算符与算术表达式58n33

32、/6=5n33.0/6=5.5n33/5.0=5.5nb/a=1na%b=97n15/(-4)=-3n15%4=3n15%(-4)=3n(-15)%4=-359n单目算术运算符自增、自减运算符为单目算术运算符,具有右结合性。n 作用是使变量的值增1或减1,如:+i,-i (在使用i之前,先使i的值加(减)1)i+,i-(在使用i之后,使i的值加(减)1)算术运算符与算术表达式60n前置+int res;int i=3;res=+i;求res和i的结果:i=i+1=4res=i=4n后置+int res;int i=3;res=i+;求res和i的结果:res=i=3i=i+1=461n例:ni

33、=3;printf(“%d”,+i);/输出4ni=3;printf(“%d”,i+);/输出362n单目算术运算符【说明】n自增、自减运算符只能运用于简单变量。常量和表达式是不能做这两种运算的。如123+、(x+y)+都是不合法的。n+和-的结合方向是“自右至左”。例:i=3;printf(“%d”,-i+);输出结果:-3n自增、自减运算的结果与系统有关,在使用时无统一规定,要具体分析。算术运算符与算术表达式63有关表达式使用中的问题说明n避免歧异性:i=3;a=i+;b=i+;c=i+;d=a+b+c;(i+)+(i+)+(i+)单目算术运算符64n关于在调用函数时,实参数的求值顺序。i

34、=3;printf(%d,%d,i,i+);i=3;j=i+;printf(%d,%d,i,j);单目算术运算符65算术表达式算术运算符操作数。例如,算术表达式:a*b/c-1.5+a算术表达式算术表达式66n赋值运算符赋值运算符1简单赋值运算符“=”n它是一个双目运算符,具有右结合性。n赋值号的左边只能是变量,而不允许是算术表达式或常量。n格式:格式:=“a=3”。n“”右边为任何合法的表达式,也可以是另一个赋值表达式,即“”可以连用。如:a=b=c=d=3;赋值运算符与赋值表达式赋值运算符与赋值表达式67【注意注意】当赋值运算符两侧的运算对象的数据类型不同时,在赋值兼容的前提下,系统自动进

35、行类型转换(即把赋值运算符右边的数据类型转换为赋值运算符左边的数据类型)。否则就是赋值不兼容,此赋值不兼容,此时应做强制类型转换时应做强制类型转换。赋值运算符与赋值表达式赋值运算符与赋值表达式68赋值运算符与赋值表达式赋值运算符与赋值表达式double d;int i=3;d=i;/OK!double d=3.67;int i;i=d;/warning!i=(int)d /OK!692复合赋值运算符 复合运算符:在赋值符“=”之前加上其他运算符构成。例如:a+=3等价于a=a+3 x*=y+8 等价于 x=x*(y+8)x%=3 等价于 x=x%3nc语言规定可以使用10种复合赋值运算符。+=

36、,-=,*=,/=,%=,=,&=,=,|=后5种是有关位运算的。n当复合运算符右侧是一个表达式时,由当复合运算符右侧是一个表达式时,由C语言编译系统给该表达式自动语言编译系统给该表达式自动加括号,加括号,即先计算这个表达式的值,再进行复合赋值运算。nC采用复合运算符的目的:n简化程序,使程序精炼。简化程序,使程序精炼。n提高编译效率。提高编译效率。赋值运算符与赋值表达式赋值运算符与赋值表达式703.赋值表达式n它的一般形式为:a=(b=5);/得到a=5赋值运算符按照“自右而左”的结合顺序。a=b=c=5;/c,b,a 值均为5a=5+(c=6);/c=6,a=11a=(b=4)+(c=6)

37、;/c=6,b=4,a=10a+=a-=a*a;如果a=12,此赋值表达式的求解步骤如下:先求“a-=a*a”,即a=a-a*a=12-144=-132。再求“a+=-132”,即a=a+(-132)=-132-132=-264。赋值运算符与赋值表达式赋值运算符与赋值表达式71n关系运算符关系运算符C语言提供6种关系运算符:优先级相同(高):(小于)=(小于或等于)(大于)=(大于或等于)优先级相同(低):=(等于)!=(不等于)关系运算符与关系表达式关系运算符与关系表达式72例如:cab等效于 c(ab)ab=c 等效于(ab)=c a=bc 等效于a=(bc)a=bc 等效于a=(bc)关

38、系运算符与关系表达式关系运算符与关系表达式73n关系表达式n关系表达式就是用关系运算符将两个任意类型的表达式连接起来的符合C语言语法规则的式子。n其结果为逻辑值。如果比较后关系式成立,则称之为“真”(结果为非0),如果比较后关系式不成立,则称之为“假”(结果为0)。例如:a=3,b=2,c=1ab 1(ab)=c 1bca 0d=ab d=1f=abc f=0关系运算符与关系表达式关系运算符与关系表达式74n关系表达式【注意注意】“=”和“=”是两种完全不同的运算符,前者为关系运算符中的相等运算符,后者为赋值运算符。关系运算符与关系表达式关系运算符与关系表达式75n逻辑运算符逻辑运算符语言中的

39、逻辑运算符有与、或、非。逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式(1)&逻辑与逻辑与(2)|逻辑或逻辑或(3)!逻辑非逻辑非 如:如:a&x,a|x,!a双目运算符双目运算符一目运算符一目运算符!a&b|xy&c76逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式n逻辑表达式逻辑表达式例如:(1)a=4 -!a值为0。(2)a=4,b=5 -a&b值为1,a|b值为1,!a|b值为1。(3)4&0|2 -值为1(4)53&84-!0-值为0(5)c&d -值为1例如:判别某一年例如:判别某一年year是否闰年,条件是符合下面二者之一:是否闰年,条件是符合下面二者之一:能被能被4整除,但不能被整

40、除,但不能被100整除。整除。能被能被4整除,又能被整除,又能被400整除。整除。(year4=0&year100!=0)|year400=077【说明说明】(1)对于逻辑与运算,如果第一个操作对象被判定为“假”,系统将不再判定或求解第二个操作对象。例如:85(2)对于逻辑或运算,如果第一个操作对象被判定为“真”,系统将不再判定或求解第二个操作对象。例如:83|65(3)在数学上形式为在数学上形式为10X20的式子,在的式子,在C语言中不可语言中不可以写成以写成10=X=10&Xy?100:500n如果xy,则条件表达式的值为100。n如果xb?a:b;min=ab?a:b;80n逗号运算符逗

41、号运算符“,”,也称为顺序求值运算符,它的作,也称为顺序求值运算符,它的作用就是把多个表达式连接起来。用逗号运算符连接起用就是把多个表达式连接起来。用逗号运算符连接起来的式子称为逗号表达式。来的式子称为逗号表达式。n格式:表达式格式:表达式1,表达式,表达式2,表达式,表达式nn功能:按照从左到右的顺序逐个求解表达式,而整个功能:按照从左到右的顺序逐个求解表达式,而整个逗号表达式的值就是表达式逗号表达式的值就是表达式n的值。的值。逗号运算符与逗号表达式逗号运算符与逗号表达式81注意:赋值运算符的优先级别高于逗号运算符。如:a=3*5,a*4/值为60 (a=3*5,a*4),a+5/值为20注

42、意:逗号运算符是所有运算符中级别最低的。x=(a=3,6*3)x=a=3,6*a第个是赋值表达式,x=18。第个是逗号表达式,x=3。逗号运算符与逗号表达式逗号运算符与逗号表达式82【说明说明】(1)逗号运算符具有左结合性。)逗号运算符具有左结合性。(2)在许多情况下,使用逗号表达式的目的只是想分别得到各)在许多情况下,使用逗号表达式的目的只是想分别得到各个表达式的值,而并非一定需要得到和使用整个逗号表达式个表达式的值,而并非一定需要得到和使用整个逗号表达式的值。的值。(3)逗号运算符和那些在同时定义的几个变量之间起分隔作用)逗号运算符和那些在同时定义的几个变量之间起分隔作用的逗号是两个完全不

43、同的概念。的逗号是两个完全不同的概念。例如:printf(“%d,%d,%d”,a,b,c);/a,b,c不是逗号表达式printf(%d,%d,%d,(a,b,c),b,c);/“(a,b,c)”是一个逗号表达式逗号运算符与逗号表达式逗号运算符与逗号表达式83n取长度运算符是单目运算符,其运算对象可以是任何数据类型名或变量。格式:格式:sizeof(类型名|表达式)功能功能:取出类型名或表达式的长度。例如:#include void main()int i,j,k,l,m;i=sizeof(int);j=sizeof(float);k=sizeof(char);l=sizeof(double

44、);m=sizeof(long int);printf(“%d,%d,%d,%d,%dn”,i,j,k,l,m);取长度运算符取长度运算符84【注意】n上述结果会因机器不同而有所不同。n运算对象必须用圆括号括住。n长度运算符和单目算术运算符、单目逻辑运算符、优先级别相同。sizeof +-!取长度运算符取长度运算符85n运算符的优先级运算符的优先级n详细见表详细见表3.11运算符的优先级和结合性运算符的优先级和结合性86n运算符的结合性运算符的结合性n左结合性(自左至右)x-y+zn右结合性(自右至左)。x=y=z运算符的优先级和结合性运算符的优先级和结合性87应用举例应用举例【例3.24】理

45、解下列各错误常量的写法。(1)089123 非法十进制(因为以0开头);又非八进制(因为有数字8、9)。(2)0 x12mn 非法十六进制(因为有非法字母m、n)。(3)123abc 非法十进制(含有字母abc),又非十六进制(不是以0 x开头)。88【例3.27】理解下列复合赋值运算符使用的例子。变量定义如下:int k1=10,k2=10,k3=10,k4=10,k5=10,k6=10,k7=10;则:(1)k1+=k2运算后,k1的值为20,k2的值不变,表达式值为20(2)k1-=k2运算后,k1的值为0,k2的值不变,表达式值为0(3)k1*k2运算后,k1的值为100,k2的值不变

46、,表达式值为100(4)k1/=k2运算后,k1的值为1,k2的值不变,表达式值为1(5)k4+=k5-=k6*=k7/=2运算后,k4、k5、k6、k7的值依次为-30、-40、50、589【例3.28】理解下列算术、关系、逻辑、赋值等运算符混合使用的例子。#include void main()int a,b,c,d;a=118866-!99;b=!(11!(8866-!99);c=1122%3&33|44!=8866-!99;d=1122%3&33|44!=8866-!99=0;printf(a=%d,b=%d,c=%d,d=%dn,a,b,c,d);输出结果:a=1,b=1,c=1,d

47、=0应用举例应用举例90【例3.29】理解转义字符使用的例子。#include void main()char x,y,z,s;x=p;y=m;z=n;s=376;/*八进制376代表的字符是“”*/printf(%c%c%c%cn,x,y,z,s);printf(%ct%ct%ct%cn,x,y,z,s);printf(%cn%cn%cn%cn,x,y,z,s);结果:pmn p m n p m n 应用举例应用举例91【例3.30】理解下列算术运算符的优先级和结合性的例子。#include void main()int x,y=66;float f=12.3;x=(int)f+88+-y*

48、66;printf(x=%d,y=%d,f=%fn,x,y,f);输出结果:x=4390,y=65,f=13.300000应用举例应用举例92小结n理解:标识符的概念并能灵活运用。n掌握:C语言的基本数据类型以及各种不同类型数据的特点;常量与变量定义和使用;C语言的运算符的运算规则以及灵活的使用这些运算符;C语言各种类型的表达式和各种类型的表达式的求值规则以及含有混合运算的表达式的求值规则。n重点内容:各类运算符及表达式的使用方法。n教学难点:+和-运算符的含义和正确使用;赋值表达式的正确使用;混合运算的优先级及结合方向。93作业:.1做在书上上机验证和编程:.2(1)(2)(3)(5)3.3(1)(3)94

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁