ImageVerifierCode 换一换
格式:PPT , 页数:145 ,大小:1.93MB ,
文档编号:7252966      下载积分:22 文币
快捷下载
登录下载
邮箱/手机:
温馨提示:
系统将以此处填写的邮箱或者手机号生成账号和密码,方便再次下载。 如填写123,账号和密码都是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

优惠套餐
 

温馨提示:若手机下载失败,请复制以下地址【https://www.163wenku.com/d-7252966.html】到电脑浏览器->登陆(账号密码均为手机号或邮箱;不要扫码登陆)->重新下载(不再收费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  
下载须知

1: 试题类文档的标题没说有答案,则无答案;主观题也可能无答案。PPT的音视频可能无法播放。 请谨慎下单,一旦售出,概不退换。
2: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
3: 本文为用户(ziliao2023)主动上传,所有收益归该用户。163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

1,本文(程序设计与C语言(第二版)章-课件3.ppt)为本站会员(ziliao2023)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!

程序设计与C语言(第二版)章-课件3.ppt

1、第3章 C语言基本知识 第第3章章C语言基本知识语言基本知识 3.1 C语言基本元素语言基本元素 3.2 C的基本数据类型的基本数据类型 3.3 C的运算符及表达式的运算符及表达式 习题习题3 第3章 C语言基本知识 3.1 C语言基本元素语言基本元素3.1.1 C的字符集的字符集C语言中可用的字符有以下几类:(1)大小写的英文字母:A,B,Z,a,b,z。(2)阿拉伯数字:0,1,2,3,4,5,6,7,8,9。(3)特殊字符:+,-,*,/,%,=,-,(,),&,!,|,;,:,?,,共29个。(4)不可打印的字符:空格,换行符,制表符。第3章 C语言基本知识 3.1.2 标识符标识符标

2、识符是某种对象的名字或标记,这些对象可以是变量名、函数名、标号等。标识符的构成成分是:字母、数字和下划线;构成规则是:以字母或下划线开头的字符序列。对象的取名最好能直观表达该对象的意义,这样能很自然地引起联想,便于阅读和理解。比如表示圆周率可取名pi,表示求和可取名sum等。在C语言中,大写、小写字母表示不同的意义,这样sum和SUM就是两个不同的名字,甚至sum和sUm也不相同。正确的标识符:abc,_ab2,_123,total等。不正确的标识符:123,ab c,ab*c等。第3章 C语言基本知识 3.1.3 关键字关键字C语言中有一种特殊的标识符,它们在程序中有特定的含义,用在特定的地

3、方,不能随便移作它用。这些标识符是C语言本身带来的,用户在定义对象名时不能使用它们。这样的标识符称为关键字或保留字,它们都是一些英文单词或缩写。C语言的关键字如下:auto break case char const continue default dodouble else enum extern float for goto ifint long register return short signed sizeof staticstruct switch typedef union unsigned void volatile while共有 32 个,不需要死记,当学习过它们如何使用

4、后,自然就会熟悉起来。而在以后的学习中,就要注意它们都用在什么地方,起什么作用,如何使用它们来构成程序。第3章 C语言基本知识 3.1.4 变量和常量变量和常量1.常量常量常量是其值在程序执行过程中不变的量,如123,45.2,a,abc等,这样的常量也称为常量直接量,因为其含义是由其字面意义直接表达的。还有一种常量称为符号常量,是用一个名字来代表常量。定义符号常量的方法是用define命令把一个常量名和常量联系起来。如 define NULL 0就定义了一个常量名NULL,它代表0,以后在程序中遇到NULL,就用 0 来代替。符号常量一般用大写字母表示,以区别于变量。当然也不一定非要大写,也

5、可以用小写字母表示。第3章 C语言基本知识 2.变量变量变量是其值在程序执行过程中可以改变的量。如定义sum是个变量,则执行语句 sum=0;后,它的值为0,再执行语句 sum=1;之后,它的值就变为1。之所以会有这些变化,是因为变量实际上是内存中的一段存储单元,里面可以存放变化的数据。要想把内存中的某段存储单元和一个变量名联系起来,必须首先对变量进行定义或声明。变量声明的一般形式是:变量类型 变量列表;第3章 C语言基本知识 其中,变量类型是C语言中可以使用的数据类型;变量列表则由一个或多个用逗号分开的标识符(即变量名)组成,最后以分号结束。如语句 int sum,i;就定义了两个变量sum

6、和i,它们的类型是整型。这样就在内存中开辟出了两个能存放整数的存储单元。当执行语句 sum=0;i=1;之后,变量sum和i的存储单元为:0sum1 i第3章 C语言基本知识 如果再执行语句 sum=i+2;则存储单元变为:对i来说,是取出它的值 1 去和 2 相加,其存储单元并未加以改变,这称为“非破坏性读出”;而变量sum的存储单元却发生了改变,这称为“破坏性读入”。当把一个值放入一个存储单元时,都会覆盖掉该单元中原有的内容。3sum1 i第3章 C语言基本知识 对变量必须先声明后使用的原因在于:(1)不同类型的数据在编译时分配的内存空间大小不同,如字符型占一个字节,整型占两个字节,而浮点

7、型占四个字节。(2)不同类型的数据在内存中的存储形式不同,如字符型是以ASCII码形式存储的,整型是以补码形式存储的,浮点型是以指数形式存储的。(3)对不同类型的数据所使用的运算符不同,比如%(求余)运算符只能用于整型变量而不能用于浮点型变量。因此变量在使用前必须先作类型声明。第3章 C语言基本知识 3.1.5 字符串常量字符串常量字符串常量在C程序中有着广泛的使用,它是用双引号括起来的字符序列,如:“string”、“this is a book”、“sum is%d n”等都是字符串常量。第3章 C语言基本知识 3.1.6 注解注解为了更好地理解程序的功能,可在适当的地方加注解。注解的内容

8、放在“/*”和“*/”之间,编译器把其中的内容当做空白符对待而不予处理。如:/*this is a user defined function*/就是对一个自定义函数的注解。一个注解可以写多行,只要注意“/*”和“*/”前后配对即可,如:/*this is a comment */注意:注意:注解不能嵌套。下面的写法 /*this is/*a comment*/in function*/就是错误的。第3章 C语言基本知识【例例 3-1】注解的应用。/*this is a single program*/define TEN 10 include main()int sum;sum=2*TEN+

9、2;/*namely:sum=2*10+2;*/printf(sum=%d n,sum);return 0;该程序中用到了注解和符号常量。第3章 C语言基本知识 3.2 C的基本数据类型的基本数据类型计算机可以处理多种多样的数据,这些数据有着内在的联系和差别。物以类聚,计算机中的数据也如此,C语言把具有某些共同特征的数据归为一类,以便处理。C语言作为现代化的语言有着丰富的数据类型,它既有基本类型,又有构造类型,还有指针类型和空类型。图3-1是C的数据类型总览。第3章 C语言基本知识 图3-1 C的数据类型总览(Void)空类类指针针类(union)(struct)构造类型(enum)枚举举(d

10、ouble)双精度(float)单精度浮点型(char)字符型(int)整型基本类本数据类C共同体类型结构体类型数组类型型第3章 C语言基本知识 3.2.1 int(整数整数)类型类型1.int类型及其扩展类型及其扩展对不同的数据类型,编译系统会分配大小不同的内存单元以存放某一类数据,因此就决定了每一类数据必然有一定的取值范围。整型数据是整数的一个子集。在ANSI C中,基本整型占两个字节,即16位二进制位,最高位为符号位,数值位占 15 位,以补码表示。这样它的取值范围在机器内部是1000 0000 00000000 0111 1111 1111 1111,大小为-215215-1,即-32

11、 76832 767。基本整型的标识符为int,由它可以定义整型变量,如 int i,j,k;则i、j、k这三个变量可以取-32 76832 767之间的任何整数值。第3章 C语言基本知识 除了基本int类型之外,C语言还提供了几种int类型的扩充形式,即在类型标识符int之前添加修饰符而形成的新的整数类型。这些修饰符为:short、long、unsigned。这样可以扩大整数类型的取值范围或更准确地指明取值情况。(1)short int:短整型,可简写为short。其含义为其位数不比int类型长,一般和int类型一样长,数值范围也为-32 76832 767,在表示较小的整数时使用。(2)l

12、ong int:长整型,可简写为long。其含义为其位数不比int类型短,其长度规定为int类型的两倍,即 4 个字节,取值范围为-231231-1,可表示更大的整数。我们可以用sizeof运算符求出这两种类型的长度。第3章 C语言基本知识【例例 3-2】求int、short int和long int类型的长度。include main()printf(sizeof(int)=%d n,sizeof(int);printf(sizeof(short)=%d n,sizeof(short);printf(sizeof(long)=%d n,sizeof(long);return 0;第3章 C语

13、言基本知识 程序中的sizeof是一个运算符,不是函数名。这里是要计算数据类型在内存中所占的字节数。运行输出:sizeof(int)=2 sizeof(short)=2 sizeof(long)=4因此有如下关系:sizeof(short)sizeof(int)sizeof(long)(3)unsigned int:无符号整型,可简写为unsigned。其长度和int类型相同,但是它取消了符号位,把最高位也作为数值位使用,所以它的值全部是正的。它的取值范围为 065 535。把int类型中的 0 点拉到最左边即为unsigned int类型,所以其最大值即为int型中正、负最大绝对值之和,如图

14、3-2所示。第3章 C语言基本知识 图3-2 int类型和unsigned int类型的取值范围第3章 C语言基本知识 2.整型数据的溢出整型数据的溢出上述各种整数类型都有各自的取值范围,一旦越出了这个范围,就不能正确地表示数据,这种情况称为“溢出”。我们先来看两个例子。【例例 3-3】整型数据的溢出一。include main()int max,min;max=32767;min=max+1;printf(max=%d,min=%d n,max,min);return 0;第3章 C语言基本知识 运行输出:max=32767,min=-32768为什么max加 1 以后会产生负值呢?这是因为

15、整数在内存中是以补码形式存储的,最高位是符号位,符号位为 0 时表示正数,为 1 时表示负数,而补码运算中的符号位是参与运算的:max:0111111111111111+1min:1000000000000000 符号位在max的最低位加 1,由二进制“逢二进一”的进位规则可得到min的形式,此时符号位变为 1,表示该数已变成了负数,而在补码表示的情况下,min即为十进制的-32 768。第3章 C语言基本知识【例例 3-4】整型数据的溢出二。include main()int min,max;min=-32768;max=min-1;/*max=min+(-1);*/printf(min=%

16、d,max=%d n,min,max);return 0;运行输出:min=-32768,max=32767第3章 C语言基本知识 我们可以作同样的分析,在补码表示的情况下:1000000000000000 -32 768的补码 +1111111111111111 -1的补码 10111111111111111 32 767因为整型只有 16 位,所以最高位的进位 1 被舍掉了,这样最高位(符号位)变成了 0,于是也就变成了正数。由以上两例可以看出,在int类型范围内,正最大数加 1 即变为负最小,负最小减 1 又变成了正最大。这印证了辩证法的一个朴素真理:自然界任何事物,其发展变化都有个限度

17、,超过这个限度就会走向反面。第3章 C语言基本知识 从上面的讨论中知道,用int类型只能表示有限的整数,如想表示更大范围的数,可选用其他类型,如long int或float等。比如要正确进行上例中的运算,可把max和min全部定义成long int类型。如果一个定义为long int类型,而另一个仍为int类,则运算结果仍然是不对的。第3章 C语言基本知识 3.整型常量的几种表示形式整型常量的几种表示形式在C语言中,整型常量有三种表示形式:十进制表示、八进制表示和十六进制表示。对于八进制和十六进制的整型常量,其特征还表现在数值的前缀上。(1)十进制表示:用十进制数码表示数,不加前缀,如123、

18、-45、0等。(2)八进制表示:用八进制数码表示数,加前缀“0”(数字零),如0123、0275 等,而 0129 则为错误表示形式,因为 9 不是八进制数码。第3章 C语言基本知识(3)十六进制表示:用十六进制数码表示数,加前缀0 x或0X(数字零和字母x(X),如0 x1A、0X8F等。除了前缀以外,整型常量还可以带后缀,以明确指明该数属于什么整数类型。后缀可以是l(或L),u(或U)及其组合。l(或L)表示长整型,u(或U)表示无符号整型,组合形式有:ul、uL、Ul、UL、lu、lU、Lu、LU。例如:0 x12u表示无符号十六进制,076UL表示无符号长整型八进制。整型常量加后缀主要

19、用在函数调用中,当函数的形参是某种类型时,若能提供相应类型的实参,则会更快地运行。第3章 C语言基本知识 整型常量的类型如何确定呢?实际上,如果一个整型常量的值在某一个整型类型的取值范围之内,那么它就可以属于这种类型。比如123,可以认为它既是int型,又是unsigned int 型,又是long int型,把它赋给这三种中任一类型的变量都是正确的;再如65 330,它就不是int类型,但属于unsigned int和long int类型;而75 887则肯定只能是long int类型。不同类型的整数之间可以进行混合运算,只要能保证结果不超越相应类型的取值范围即可。第3章 C语言基本知识【例

20、例 3-5】不同类型整数之间的混合运算。include main()int i;unsigned int u;long int l;i=123;u=123;l=123;printf(i=%d,u=%d,l=%d n,i,u,l);i=u+l;u=l+i;printf(i=%d,u=%d n,i,u);return 0;第3章 C语言基本知识 运行输出:i=123,u=123,l=123 i=246,u=369第3章 C语言基本知识 3.2.2 char(字符字符)类型类型字符类型以char作为类型标识符。用char定义的变量称为字符变量,一个字符变量只能容纳一个字符。一个字符常量是用单引号括起

21、来的字符,如a、A、*等。在内存中为一个字符变量分配一个字节的存储空间。由于一个字节的 8 位二进制位可以有28=256 种不同的组合形式,因而可以有 256 个不同的字符。在这 256 个字符中,有些是可见的,有些是不可见的,不可见的字符只起控制作用,如换行、回车等。第3章 C语言基本知识 1.字符在内存中的存放形式字符在内存中的存放形式字符在内存中是以编码的形式存放的。最常用的编码方式是ASCII码。存储一个字符,实际上是把它的ASCII码放入内存中。例如:char c1,c2;c1=a;c2=b;则在内存中:c1:c2:因为a的ASCII编码是十进制的 97,二进制的 01100001;

22、b的ASCII编码是十进制的 98,二进制的01100010。如以十进制表示则为:c1:c2:01100001011000109798第3章 C语言基本知识 因为字符在内存中都是以二进制形式表示的,所以字符型和整型之间有相通性,这些相通性表现在:(1)字符型数据可以用整型形式输出;反之,一定范围内的整数也可以用字符形式输出。(2)字符型变量和整型变量之间可以进行混合运算。(3)整型变量可以接收字符常量,字符变量也可以接收整型数值,当然这都要在一定范围之内。这一点可由以下例子说明。第3章 C语言基本知识【例例 3-6】整型变量与字符型变量的输出转换。include main()int i,j;c

23、har c1,c2;c1=a;c2=b;printf(c1=%c,c1=%d;c2=%c,c2=%d n,c1,c1,c2,c2);i=97;j=98;printf(i=%d,i=%c;j=%d,j=%c n,i,i,j,j);return 0;第3章 C语言基本知识 运行输出:c1=a,c1=97;c2=b,c2=98 i=97,i=a;j=98,j=b英文大小写字母之间有这样的关系:相应小写字母的ASCII码比大写字母大32。根据这一关系,我们可以将大小写字母任意转换。第3章 C语言基本知识【例例 3-7】英文大、小写字母的转换。include main()char c1,c2;c1=a;

24、c2=B;printf(c1=%c,c2=%c n,c1,c2);c1=c1-32;c2=c2+32;printf(c1=%c,c2=%c n,c1,c2);return 0;第3章 C语言基本知识 运行输出:c1=a,c2=B c1=A,c2=b第3章 C语言基本知识【例例 3-8】字符变量和整型变量互相接收对方类型的数值。include main()int i;char c;i=a;c=98;printf(i=%d,c=%d n,i,c);printf(i=%c,c=%c n,i,c);return 0;第3章 C语言基本知识 运行输出:i=97,c=98 i=a,c=b一个字符在内存中占

25、一个字节,对于这个字节的最高位,不同的系统有不同的处理方法。有的系统(如Turbo C)就把最高位作符号位处理,因此一个字符的值就有正有负。编码在 0127 之间的字符以十进制形式输出时为正,而编码在 128255之间的字符以十进制形式输出时为负。所以定义:char ch;第3章 C语言基本知识 就相当于:signed char ch;为了在以%d形式输出字符时不出现负值,可以把字符定义成无符号字符:unsigned char ch;对编码在 128255之间的字符,不管是以char定义,还是以unsigned char类型定义,它们在以字符输出格式%c输出时都是扩展的ASCII码表中的字符。

26、第3章 C语言基本知识【例例 3-9】字符输出一。include main()char c=199;printf(c=%d,c=%c n,c,c);return 0;输出为:c=-57,c=第3章 C语言基本知识【例例 3-10】字符输出二。include main()unsigned char c=199;printf(c=%d,c=%c n,c,c);return 0;输出为:c=199,c=第3章 C语言基本知识 2.字符常量字符常量我们已知字符常量是用单引号括起来的字符,这对于可显示字符来说很容易表示,但对于控制字符怎样表示呢?在C语言中没有相应的直接形式显示这些字符,但可以换一种形式

27、来表示它们,即用转义字符来表示。转义字符是以反斜杠开头,后面加其他字符。反斜杠的作用是把后面的字符赋以新的含义(即转义)。以开头定义的字符有三种情况:非显示字符(控制字符)、可显示字符和字符的数值表示,如表3-1所示。第3章 C语言基本知识 第3章 C语言基本知识【例例 3-11】转义字符的输出。include main()printf(This is a program n);printf(this isb a 012 program n);printf(first second);return 0;第3章 C语言基本知识 运行输出:This is a program his i a pro

28、gram first second其中,“t”是水平制表符,“b”是退格符,“012”和“n”都是换行符。要想输出“”,必须写成“”;要想输出“”,必须写成“”。第3章 C语言基本知识 3.字符和字符串字符和字符串前面已指出,字符串是用双引号括起来的字符序列。字符和字符串有着本质的区别:(1)字符用单引号括起来,而字符串用双引号括起来。(2)单引号括起来的只有一个字符,而双引号括起来的有多个字符。不管显示出来的有多少个字符,字符串都由一个看不见的字符0结束,因此a和a并不相同。前者是字符,后者是字符串,a中有两个字符:a和0。0是ASCII码值为 0 的字符,是“空字符”。C语言规定,字符串必

29、须以0结束,这个字符是系统自动加上去的,不是显式输入的。系统据此可以判断字符串是否结束。因此a在内存中的形式是a0第3章 C语言基本知识 它占有两个字节,长度为 2,而a的长度为 1。因此如果有定义:char c;则 c=a;就是错误的。第3章 C语言基本知识 3.2.3 float和和double类型类型通常称float为浮点类型,而称double为双精度类型,它们都用来表示实数,差别只在于长短不同,因而所能表示的数的范围也不同。1.浮点型数据的两种表示形式浮点型数据的两种表示形式对于一个实型常量,可以用两种形式表示它,即十进制小数形式和指数形式。(1)十进制小数形式,如123.45、-0.

30、001。(2)指数形式,其组成格式为:尾数部分e(或E)指数部分其含义为:尾数部分10指数部分第3章 C语言基本知识 这几部分的书写规则是:尾数部分不能省略,即e(或E)前必须有数据。指数部分必须是整数。尾数可以只有整数部分或只有小数部分。指数、尾数都可以带符号,如省略符号则隐含为正。例如:123e2、1.23E4、.123e5、123000E-1 等都是正确的书写形式,且代表同一个数12 300;而3E22.5、-e-3等都是错误的指数形式。虽然同一个实数的指数形式可以有多种,但只有一种形式是规格化的,即尾数部分只有一位整数的形式,如1.23e4。第3章 C语言基本知识 浮点型数据在内存中也

31、是按指数形式存储的。对于有 4 个字节 32 位的实型数据,一般情况是尾数部分 24 位,指数部分 8 位,其中各含一位符号位,即第3章 C语言基本知识 2.浮点型变量的分类浮点型变量的分类浮点型变量分单精度(float)、双精度(double)和长双精度(long double)三种,它们的长度、精度及取值范围如表 3-2 所示。第3章 C语言基本知识 在ANSI C中,浮点常量被默认为double类型,如果要显式地指明某浮点数为float类型,必须加上后缀f或F,如1.6f、3.7F等。在不需要太大的精度时,这种表示可以加快运算速度,节省内存空间。第3章 C语言基本知识 3.2.4 变量赋

32、初值变量赋初值前面已介绍了三种数据类型,用类型名可以定义相应的变量。根据先定义后使用的原则,在定义变量之后,可以对它进行处理。如:int i,j;i=3;j=3;通过赋值语句,使i、j具有数值 3。我们还可以把二者结合起来,即在定义变量的同时就让它有一个值,这就是变量赋初值,如:int i=3,j=3;程序可以对i、j的当前值进行运算,当然这些值在以后是可以改变的。第3章 C语言基本知识 注意:注意:上面的语句中变量i和j都具有初始值3,能不能把它们连写呢?如:int i=j=3;答案是:这样写是错误的,只能对它们分别赋初值,即使这些初值都是相同的也不能连写。要使i、j具有相同的值,还可以采用

33、下面的方法:int i,j;i=j=3;这种写法是合法的,但这和赋初值的含义是不同的。可以定义多个变量而对其中个别变量赋初值:int i,j=3;则j具有初值 3,而i未赋初值,即它的值是不确定的,不能直接使用。第3章 C语言基本知识 3.3 C的运算符及表达式的运算符及表达式C语言不仅数据类型丰富,运算符也十分丰富,几乎所有的操作都可作为运算符处理。由运算符加适当的运算对象可构成表达式,而表达式是C程序的重要要素之一,因此掌握好运算符的使用对编写程序是十分重要的。对于每一个运算符,要注意从两个方面去把握:运算符的优先级和结合性。优先级指多个运算符用在同一个表达式中时先进行什么运算,后进行什么

34、运算;而结合性是指运算符所需要的数据是从其左边开始取还是从右边开始取,因而有所谓“左结合”和“右结合”之说。本章中我们介绍一些最基本的运算符,后面的章节中将陆续介绍其他运算符。第3章 C语言基本知识 3.3.1 算术运算符算术运算符1.基本的算术运算符基本的算术运算符C语言中基本的算术运算符有:+、-、*、/、%,其含义如表3-3所示。第3章 C语言基本知识 在算术运算符的使用中有以下两点需要注意:在算术运算符的使用中有以下两点需要注意:(1)除法运算符“/”的结果和其运算对象有关。如果两个运算对象都是符号相同的整数,则运算符“/”的功能是整除,结果为整数。整除的含义是舍去小数部分,只保留整数

35、部分。两个运算对象中如果有一个是浮点数,则结果就是浮点数。如果两个运算对象都是整数,但其中有一个是负数,另一个是正数,则一般采用“向零取整”的原则,即按其绝对值相除后再加负号。还应注意,在做除法运算时,除数不能为 0。如除数为 0,则会导致致命错误而使程序以失败终止。(2)求模运算符“%”要求其运算对象都必须是整数,但可正可负。对有负数情况的处理有以下一般性的原则:先按其绝对值求模(|r|%|s|),然后取被除数r的符号作为模的符号。第3章 C语言基本知识【例例 3-12】算术运算的输出。include main()printf(5/3=%d,-5/+3=%d n,5/3,-5/+3);pri

36、ntf(3/5=%d,3./5=%f n,3/5,3./5);printf(10%3=%d,-10%3=%d,10%-3=%d,-10%-3=%d n,10%3,-10%3,10%-3,-10%-3);return 0;第3章 C语言基本知识 运行输出:5/3=1,-5/+3=-1 3/5=0,3./5=0.600000 10%3=1,-10%3=-1,10%-3=1,-10%-3=-1由例3-12可知,要输出一个“%”,在字符串中必须有两个“%”,即“%”。第3章 C语言基本知识 2.算术运算符的优先级和结合性算术运算符的优先级和结合性C语言中算术运算符的优先级和代数中的规定是一样的,并且都

37、是从左向右结合的,如表 3-4 所示。第3章 C语言基本知识 例如,有代数表达式:z=bp-r%-q+(a+b)c)x-y将其转变成C语言表达式为 z=b*pr%q+(a+b)*c)/x y 则运算时将按、所示的顺序进行。其中,q前的“-”号为单目运算符,优先级最高,而r前的“-”是代表减运算。如何加以区分呢?凡+、-号前没有数字或只有*、/、%等级别较高的运算符时,“+”、“-”即为单目运算符,否则即为加、减运算符。第3章 C语言基本知识 3.3.2 自加自加(+)自减自减(-)运算符运算符C语言中有两个特殊的算术运算符,即自加、自减运算符(+和-)。这两个运算符都是单目运算符,它们既可以放

38、在运算对象之前,也可以放在运算对象之后,形成前置形式和后置形式,而运算对象也只能是整型变量。不管前置还是后置,其运算结果都是一样的,都是把运算对象的值增加 1 或减少 1。设有整型变量i,则+i、i+都使i值增加1,-i、i-都使i值减少1。第3章 C语言基本知识 既然效果相同,那么区分前置和后置形式又有何意义呢?其意义不在于它所作用的变量本身,而在于对变量值的使用。前置形式是先把变量值加(减)1,然后用新的值参与表达式的运算;而后置形式是先用变量的原始值参与表达式的运算,然后再对变量的值加(减)1。例如有语句:int i,j=2;则下面运算的结果是i等于 3,j也等于 3:i=+j;而下面的

39、运算结果是 i等于 2,而j等于 3:i=j+;第3章 C语言基本知识 使用自加、自减运算符应注意以下几点:使用自加、自减运算符应注意以下几点:(1)最常见的错误是把自加、自减运算符用在非简单整型变量的表达式上,如+(x+2)、+(-i)等都是错误的。(2)自加自减运算符的结合性为:前置时是自右向左的,后置时是自左向右的。比如p=-x+等价于p=-(x+)。这个表达式的意思是先用x变量的当前值加负号赋给p,而后x再加 1。该表达式并不等价于p=(-x)+,因为这样就使+作用在表达式-x上了,这是(1)中指出的错误。第3章 C语言基本知识(3)如果两个运算对象之间连续出现多个运算符,则C语言采用

40、“最长匹配”原则,即在保证有意义的前提下,从左到右尽可能多地将字符组成一个运算符。因此i+j就被解释成(i+)+j而不是i+(+j)。同样,i+j被解释成(i+)+j;i+j被解释成(i+)+)+j。而这两种情况都是错误的。正确的写法应该是在连续的运算符中间的适当地方增加空格分隔符或加括号,使分开的部分成为有意义的运算对象。比如应把i+j写成i+j或(i+)+(+j)。(4)对所有简单类型的变量都可以进行自加、自减运算。第3章 C语言基本知识【例例 3-13】自加运算。include main()int p,x=3;char c=a;float f=3.2;p=-x+1;printf(p=%d

41、,x=%d n,p,x);printf(c=%c n,+c);printf(f=%fn,+f);return 0;第3章 C语言基本知识 运行输出:p=-2,x=4 c=b f=4.200000第3章 C语言基本知识(5)ANSI C并没有规定所有运算符操作数的计算顺序。例如对于语句:i=m*n+p*q;,根据运算符的优先级和结合性可知,它等同于i=(m*n)+(p*q);,但对于m*n和p*q谁先进行计算,C并未明确规定,不同的编译系统都有不同的规定。因此在一个语句中如果要对一个变量前后使用多次,而且前后值不同,则应避免使用自增、自减运算符。比如:i=1;m=+i*(i+1);第3章 C语言

42、基本知识 对于这个表达式,编译系统可能:先计算+i,再计算i+1;先计算i+1,后计算+i。对于,结果是m=2*(2+1)=6;而对于,结果是m=2*(1+1)=4。为避免产生这种二义性,应当把它们分成两个表达式,明晰地表达程序员的意图。如果想得到的结果,可写成:+i;m=i*(i+1)如果想得到的结果,可写成:j=i+1;m=j*(i+1);i+;第3章 C语言基本知识 另外,在一个表达式中若同一个变量前后出现多次并且还被施以自加运算,则这样的表达式的运算结果还会因变量出现地点的不同而不同。如 int i=5,j;j=i+i+i+;printf(j=%dn,j);printf(i=%dn,i

43、);则结果为 j=15 i=8第3章 C语言基本知识 这里,表达式中的三个i都以其初值5参与运算,相当于5+5+5。而将该表达式作为printf()函数的参数时,就会出现不同的情况:int i=5;printf(sum=%dn,i+i+i+);printf(i=%dn,i);则结果为 sum=18 i=8在作为函数参数的表达式中,每个参与运算的i的值都是不同的,第一个i以其初值5参与运算,同时进行+运算,使其值变为6,作为第二个i的值参与运算。同样再进行+运算后,使其值变为7,作为第三个i的值参与运算,相当于5+6+7。第3章 C语言基本知识 编写程序应当使用通用的规则,把可读性放在第一位,不

44、要使用依赖于不同编译系统的规则去编写那些晦涩难懂、令人捉摸不定的程序,因此不要去编写(i+)+(i+)+(i+)以及printf(%d,%d,i,i+);这样的表达式和语句。第3章 C语言基本知识 3.3.3 关系及逻辑运算符关系及逻辑运算符关系运算符用来比较两个运算对象的大小,比较的结果是真和假两个逻辑值,而逻辑运算符的操作对象和结果也都是逻辑值,因此这两种运算符在使用时有着密切的联系。第3章 C语言基本知识 1.关系运算符关系运算符关系运算符又分为两类:相等判断运算符和不相等判断运算符,它们分别是:(1)不相等判断运算符:(大于)、=(大于等于)、(小于)、=(小于等于);(2)相等判断运

45、算符:=(等于)、!=(不等于)。关系运算符的优先级低于算术运算符,而在其内部,不相等判断又高于相等判断,但它们都高于赋值运算符。关系运算符的结合性是从左向右的。两个对象比较的结果是真或假这两个逻辑值之一,它们在C语言中是这样表示的:数字 0 表示假,非0 表示真,比如 1、4、a等都表示真,这似乎是不可确定的,但关系运算产生的结果都是确定的,真就是 1,而不是别的值。第3章 C语言基本知识【例例 3-14】关系运算符。include main()int a,b,c;a=b=c=10;a=b=c;printf(a=%d,b=%d,c=%d n,a,b,c);printf(a=():%d n,a

46、=(b=c+*2);printf(a=%d,b=%d,c=%d n,a,b,c);a=b+=+bc+;printf(a=%d,b=%d,c=%d n,a,b,c);return 0;第3章 C语言基本知识 运行输出:a=1,b=10,c=10 a=():0 a=1,b=20,c=11 a=0,b=22,c=12第二个printf语句输出的是一个比较结果,比较运算符右边的运算对象又是个复杂的运算,结果b、c的值都有改变,这反映在第三个printf语句中。在a=b+=+bc+中,按照运算符的优先级和结合性,先进行赋值号右边的运算。首先做b+和+b的大于等于(=)比较,把比较的结果(1 或 0)再和

47、c+进行大于()比较,最后把比较的结果赋给a。在b+=+b中,先把第一个b的值(20)作为和后面比较的数据,同时它的值又自动加 1 变成了 21,第二个b值是在 21 的基础上再进行自加运算,因而其值为 22。第3章 C语言基本知识 对于由两个字符构成的比较运算符,在使用中常见的错误是:(1)把两个字符的次序写颠倒,把=、!=、=!、=、!=、=、!=、=、=。今后凡是由两个以上字符构成的运算符,在使用中都要注意防止出现上面两种错误。(3)把相等运算符误写成赋值运算符,即把=写成=,这也是初学者常犯的错误。第3章 C语言基本知识 2.逻辑运算符逻辑运算符C语言提供了三个逻辑运算符,按由高到低的

48、优先级次序排列如下:!逻辑非(把逻辑值进行翻转,相当于NOT)&逻辑与(求两个逻辑值的与,相当于乘运算AND)逻辑或(求两个逻辑值的或,相当于加运算OR)其中,!为单目运算符,&、为双目运算符,其功能和用法可由表3-5的真值表说明。第3章 C语言基本知识 第3章 C语言基本知识 表中,e1、e2为逻辑表达式或关系表达式,具有 0 或非 0 的值。前已指出,可以用非 0 来表示真,不一定是 1,但是在用逻辑运算符作用后,就一定是 0 或 1 了。比如3&a0的结果为 1,!5的结果为 0。注意:注意:如再对!5求非,!(!5)的值是 1 而不是 5,因此在一般情况下,当x不是 0 或 1时,!x

49、不等于 x。我们可以把到目前为止我们见过的运算符放在一块,这样可以查看其在优先级中所处的位置,如图 3-3 所示。逻辑运算符的结合性:除!是右结合外,&和均为左结合,如!x等于!(!x),abc等于(ab)c。程序中使用关系运算符时要注意返回结果是用 0、1 来表示真假值的,不要用常规的数学知识去思考和理解。第3章 C语言基本知识 图3-3 运算符的优先级 !(非)高 算术运算符 关系运算符&(与)(或)=(赋值)低第3章 C语言基本知识【例例 3-15】逻辑运算符一。include main()int i=7,m,n;m=!i;n=(3i6);printf(i=%d,m=%d,n=%d n,

50、i,m,n);return 0;第3章 C语言基本知识 运行输出:i=7,m=1,n=1虽然经过!i运算,但i本身的值并没有改变,它返回给m的只是个中间结果。!i=!(!7)=!0=1,所以m值是 1;3i6即376,从数学上看这个不等式的结果应是假的,但在C语言中却是这样处理的:(3i6)=(3i)6)=(16)=1事实上,在这里不论i为何值,3i的结果一定是 0 或 1,它们都小于 6,因此最后的结果为 1,这就是n的值。第3章 C语言基本知识 根据逻辑运算符&和的功能及结合性,对逻辑表达式进行求值的时候,常用所谓的“懒惰求值法”,即只要能判断出逻辑表达式的真假即停止向后进行运算。“懒惰求

侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|