C语言全套基础知识

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

C语言中的符号运算符的种类C语言的运算符可分为以下几类:1.算术运算符★用于各类数值运算(共七种)加+减-乘*除/求余(或称模运算)%自增++自减--+=:加赋值运算符。如a+=3+1,等价于a=a+(3+1)。-=:减赋值运算符。如a-=3+1,等价于a=a-(3+1)。*=:乘赋值运算符。如a*=3+1,等价于a=a*(3+1)。/=:除赋值运算符。如a/=3+1,等价于a=a/(3+1)。%=:取余赋值运算符。如a%=3+1,等价于a=a%(3+1)。复合赋值运算符的作用是先将复合运算符右边表达式的结果与左边的变量进行算术运算,然后再将最终结果赋予左边的变量。所以复合运算要注意:一、是复合运算符左边必须是变量;二、是复合运算符右边的表达式计算完成后才参与复合赋值运算。复合运算符常用于某个变量自身的变化,尤其当左边的变量名很长时,使用复合运算符书写更方便。Eg1:赋值运算符的演示:#includestdio.hvoidmain(){intnA=10;intnB=10;printf(%d\t,nA+=nA-=nA*nA);printf(%d,nB+=nB-=nB*=nB);}运行结果:-1800(在C语言中,运算符“+”、“-”、“*”和“/”的用法与大多数计算机语言的相同,几乎可用于所有C语言内定义的数据类型。当“/”被用于整数或字符时,结果取整。例如,在整数除法中,10/3=3。一元减法的实际效果等于用-1乘单个操作数,即任何数值前放置减号将改变其符号。模运算符“%”在C语言中也同它在其它语言中的用法相同。切记,模运算取整数除法的余数,所以“%”不能用于float和double类型。)自增运算符和自减运算符自增和自减运算符是C++语言所特有的,主要用于给一个变量加1或减1。自增和自减运算符及其功能如下:++:自增运算符。如a++;++a;都等价于a=a+1。--:自减运算符。如a--;--a;都等价于a=a-1。自增运算符和自减运算符可以放到变量前面(前置方式)或者后面(后置方式),这两种方式同样实现了变量的自增或自减运算。但是当变量的自增运算或者自减运算同其它运算符配合构成一个表达式时,前置运算时变量先做自增或自减运算,再将变化后的变量值参加表达式中的其它运算。后置运算时变量在参加表达式中的其它运算之后,再做自增或自减运算。Eg2:前置与后置运算符的区别:#includestdio.hvoidmain(){intnNum1,nNum2;nNum1=nNum2=5;printf(\nPostPre);printf(\n%d%d,nNum1--,--nNum2);printf(\n%d%d,nNum1--,--nNum2);printf(\n%d%d,nNum1--,--nNum2);printf(\n%d%d,nNum1--,--nNum2);printf(\n%d%d\n,nNum1--,--nNum2);}运行结果:PostPre5443322110C语言中有两个很有用的运算符,通常在其它计算机语言中是找不到它们的—自增和自减运算符,++和--。运算符“++”是操作数加1,而“--”是操作数减1,换句话说:x=x+1;同++x;x=x-1;同--x;自增和自减运算符可用在操作数之前,也可放在其后,例如:x=x+1;可写成++x;或x++;但在表达式中这两种用法是有区别的。自增或自减运算符在操作数之前,C语言在引用操作数之前就先执行加1或减1操作;运算符在操作数之后,C语言就先引用操作数的值,而后再进行加1或减1操作。请看下例:x=10;;y=++x;此时,y=11。如果程序改为:x=10;y=x++;则y=10。在这两种情况下,x都被置为11,但区别在于设置的时刻,这种对自增和自减发生时刻的控制是非常有用的。在大多数C编译程序中,为自增和自减操作生成的程序代码比等价的赋值语句生成的代码要快得多,所以尽可能采用加1或减1运算符是一种好的选择。。下面是算术运算符的优先级::最高++、----(一元减)*、/、%最低+、-编译程序对同级运算符按从左到右的顺序进行计算。当然,括号可改变计算顺序。C语言处理括号的方法与几乎所有的计算机语言相同:强迫某个运算或某组运算的优先级升高。顺序程序设计举例使用计算机解决问题,首先要求把问题描述清楚,需要作什么工作,先作什么,再作什么,达到什么条件后,就表示完成;然后,再把这些步骤编程成计算程序,让计算机来实现。问题的解决步骤叫作算法,算法这一词最早主要是指解决纯数学计算问题,现在可以指解决有关信息处理一切问题的方法与步骤。当然,对于计算机用户而言最关心的是程序的输入和输出,算法是程序员要操心的。每一个固定的算法有满足两个要求:第一,有序性,算法是一组有序的操作步骤的组合,不同的执行顺序会有不同的结果。第二,有穷性,一个算法只能有一个输入,一个输出,输入的条件经过有穷的步骤的后,可以得到一个输出结果,不可能无穷无尽的作个没完。依据算法,可用计算机语言编写相对应的程序,如果算法中的每一步都是“直线”的执行,没有分支,那么这样编写的程序就是顺序结构的程序,顺序程序是最简单程序结构,也是一些程序的基础。应用举例已知三角形三边,求三角形面积。#includestdio.h#includemath.hvoidmain(){doubledbA=3.0;doubledbB=4.0;doubledbC=5.0;doubledbS=(dbA+dbB+dbC)/2;doubledbArea=sqrt(dbS*(dbS–dbA)*(dbS–dbB)*(dbS–dbC));printf(―三角形的面积是:%lf\n‖,dbArea);}2.关系运算符(六种)用于比较运算大于小于等于==大于等于=小于等于=不等于!=3.逻辑运算符用于逻辑运算(三种)逻辑与&&逻辑或||逻辑非!关系运算符中的“关系”二字指的是一个值与另一个值之间的关系,逻辑运算符中的“逻辑”二字指的是连接关系的方式。因为关系和逻辑运算符常在一起使用,所以将它们放在一起讨论。关系和逻辑运算符概念中的关键是True(真)和Flase(假)。C语言中,非0为True,0为Flase。使用关系或逻辑运算符的表达式对Flase和Ture分别返回值0或1关系和逻辑运算符的优先级比算术运算符低,即像表达式101+12的计算可以假定是对表达式10(1+12)的计算,当然,该表达式的结果为Flase。在一个表达式中允许运算的组合。例如:105&&!(109)||3=4这一表达式的结果为True。。下表给出了关系和逻辑运算符的相对优先级::最高!!=====!==&&最低||同算术表达式一样,在关系或逻辑表达式中也使用括号来修改原计算顺序。切记,所有关系和逻辑表达式产生的结果不是0就是1,所以下面的程序段不仅正确而且将在屏幕上打印数值1。intx;;x=100;;printf(%d,x10);4.位操作运算符★参与运算的量,按二进制位进行运算(六种)位与&位或|位非~位异或^左移右移。与其它语言不同,C语言支持全部的位操作符(BitwiseOperators)。因为C语言的设计目的是取代汇编语言,所以它必须支持汇编语言所具有的运算能力。位操作是对字节或字中的位(bit)进行测试、置位或移位处理,这里字节或字是针对C标准中的char和int数据类型而言的。位操作不能用于float、double、longdouble、void或其它复杂类型。位操作中的AND、OR和NOT(1的补码)的真值表与逻辑运算等价,唯一不同的是位操作是逐位进行运算的。位操作通常用于设备驱动程序,例如调制解调器程序、磁盘文件管理程序和打印机驱动程序。这是因为位操作可屏蔽掉某些位,如奇偶校验位(奇偶校验位用于确保字节中的其它位不会发生错误通常奇偶校验位是字节的最高位)。通常我们可把位操作AND作为关闭位的手段,这就是说两个操作数中任一为0的位,其结果中对应位置为0。例如,下面的函数通过调用函数read_modem(),从调制解调器端口读入一个字符,并将奇偶校验位置成0。字节的位8是奇偶位,将该字节与一个位1到位7为1、位8为0的字节进行与操作,可将该字节的奇偶校验位置成0。表达式ch&127正是将ch中每一位同127数字的对应位进行与操作,结果ch的位8被置成了0。在下面的例子中,假定ch接收到字符A并且奇偶位已经被置位。一般来说,位的AND、OR和XOR操作通过对操作数运算,直接对结果变量的每一位分别处理。正是因为这一原因(还有其它一些原因),位操作通常不像关系和逻辑运算符那样用在条件语句中,我们可以用例子说明这一点:假定X=7,那么x&&8为Ture(1),而x&8却为Flase(0)。记住,关系和逻辑操作符结果不是0就是1。而相似的位操作通过相应处理,结果可为任意值。换言之,位操作可以有0或1以外的其它值,而逻辑运算符的计算结果总是0或1。移位操作符和将变量的各位按要求向或向左移动。右移语句通常形式是:variable右移位数左移语句是:variable左移位数当某位从一端移出时,另一端移入0(某些计算机是送1,详细内容请查阅相应C编译程序用户手册)。切记:移位不同于循环,从一端移出的位并不送回到另一端去,移去的位永远丢失了,同时在另一端补0。移位操作可对外部设备(如D/A转换器)的输入和状态信息进行译码,移位操作还可用于整数的快速乘除运算。(假定移位时补0),左移一位等效于乘2,而右移一位等效于除以2。每左移一位乘2,注意x2后,原x的信息已经丢失了,因为一位已经从一端出,每右移一位相当于被2除,注意,乘后再除时,除操作并不带回乘法时已经丢掉的高位。反码操作符为~。~的作用是将特定变量的各位状态取反,即将所有的1位置成0,所有的0位置成1。位操作符经常用在加密程序中,例如,若想生成一个不可读磁盘文件时,可以在文件上做一些位操作。最简单的方法是用下述方法,通过1的反码运算,将每个字节的每一位取反。原字节00101100第一次取反码11010011第二次取反码00101100注意,对同一行进行连续的两次求反,总是得到原来的数字,所以第一次求反表示了字节的编码,第二次求反进行译码又得到了原来的值。可以用下面的函数encode()对字符进行编码。C语言提供了一个可以代替某些if-then-else语句的简便易用的操作符?。该操作符是三元的,其一般形式为:EXP1?EXE2:EXP33EXP1,EXP2和EXP3是表达式,注意冒号的用法和位置。操作符“?”作用是这样的,在计算EXP1之后,如果数值为True,则计算EXP2,并将结果作为整个表达式的数值;如果EXP1的值为Flase,则计算EXP3,并以它的结果作为整个表达式的值,请看下例:x=10;;y=x9?100:200;例中,赋给y的数值是100,如果x被赋给比9小的值,y的值将为200,若用if-else语句改写,有下面的等价程序:x=10;if(x9)y=100;;elsey=200;;5.赋值运算符★用于赋值运算(三类共十一种)简单赋值=复合算术赋值复合算术赋值举例+=-=*=/=%=在赋值表达式中,如果表达式左边的变量重复出现在表达式的右边,如:i=i+2则可以将这种表达式缩写为下列形式:i+=2其中的运算符+=称为赋值运算符。大多数二元运算符(即有左、右两个操作数的运算符,比如+)都有一个相应的赋值运算符op=,其中,op可以是下面这些运算符之一:+-*/%&^|如果expr1和expr2是表达式,那么expr1op=expr2等价于:expr1=(expr1)op(expr2)它们的区别在于,前一种形式expr1只计算一次。注意,在第二种形式中,expr2两边的圆括号是必不可少的,例如,x*=y+1的含义是:x=x*(y+1)而不是x=x*y+1我们这里举例说明。下面的函数bitcount统计其整型参数的值为1的二进制位的个数。/*bit

1 / 31
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功