第5章表达式与操作符

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

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

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

资源描述

联系方式:章表达式与操作符在本章中,首先将讨论表达式和语句的组成,其次将分类介绍C语言中提供的丰富的操作符及其组成的表达式,在此过程中同时将涉及到表达式中的类型转换,然后将讨论不同表达式间的优先级和表达式的结合性。本章要重点学习以下内容:联系方式:章表达式与操作符表达式和语句的概念及其关系;各种操作符语句的使用;操作符之间的优先级和结合性;了解词法分析中的分析法;使用小括号改变操作符的执行顺序。联系方式:语言中,语句是程序功能的基本执行单位,多个语句结合在一起可以完成一些特定的功能;而一个语句又由若干个表达式组成;此外,语句和表达式可以通过一定的手段来相互转换。本节将讨论表达式和语句的概念和使用。联系方式:语句的主体。在C语言中,表达式由操作符和操作数组成。操作符可以是+、-、*、/或%一类的运算操作符,也可以是、或==之类的关系操作符,还可以是其他一些操作符。操作数是操作符的操作对象,可以是常量或变量。最简单的表达式可以只含有一个操作数,例如:73.1415926“hello,world”variable联系方式:表达式根据表达式含有的操作符的个数,可以把表达式分为简单表达式和复杂表达式:简单表达式是只含有一个操作符的表达式;复杂表达式含有两个或两个以上操作符。下面分析两种表达式的含义和它们的执行过程。1.简单表达式简单表达式由于只含有一个操作符,运行方式比较简单。下面列举了几个简单表达式,其中接触到的操作符在后面几节将详细讲解。c=2/*表达式1*/4+25/*表达式2*/ptr==NULL/*表达式3*/keymax/*表达式4*/fun(b)/*表达式5*/联系方式:.复杂表达式在复杂表达式中,每一个操作符和它的操作数组成的表达式为复杂表达式的子表达式。例如:b=d+e;下列5个表达式都是复杂表达式,它们依次是上面的5个简单表达式的复杂化版本。c=b+2/*表达式1*/4+25*3/*表达式2*/*ptr==length/*表达式3*/key+incremax/*表达式4*/fun(7+5-3)/*表达式5*/联系方式:程序的基本执行单元,一个程序是由一系列的语句组成。在C语言中,一条完整的语句由表达式和分号的。例如:/*表达式;*/var=2;其中的表达式部分可以是最简单的表达式,也可以是很冗长的复杂表达式,还可以为空。最简单的语句就是一条空语句,即只有一个分号,如下所示;联系方式:语句这个语句虽然什么都没有做,但是有时候在逻辑上却需要这样的空语句。例如,要求在一个数组里得到某个值的下标,程序如下所示:for(inti=0;imax&&array[i]!=target;++i);/*功能已完整,无需执行体*/上面是一个完整的for语句结构。在功能上,只需要执行循环判断部分(imax&&array[i]!=target;)就可以完成查找功能;但是,在程序结构上,for结构还需要一个循环体,因此这里需要一条空语句。关于for语句,在第5章将详细讨论。联系方式:复合语句复合语句,也可以称为程序块,是包含在花括号({})内的多个语句的集合。标准形式如下所示:{语句1;语句2;语句3;……}联系方式:语言的执行都是逐条语句依次执行的。但是为了实现一些复杂的功能,很多程序常常需要把几条语句作为一个功能单元来执行,这时就需要使用复合语句把多条语句绑定为一个整体。1.组成特殊语句结构复合语句主要用在C语言的特殊语句中,比如if语句、for语句和while语句等,构成这些语句的执行体,以实现一些复杂的功能。例如,要执行一个功能:当a大于b时,互换变量a和变量b的值;当a不大于b时,什么都不做。程序如下所示:01/*当a大于b时,互换变量a和变量b的值*/02if(ab){/*if语句*/03c=a;04a=b;05b=c;06}联系方式:复合语句如果不使用花括号把三条操作语句联合为复合语句,将无法实现正常的功能,例如:01if(ab)02c=a;03a=b;04b=c;对齐代码后,等效于:01if(ab)02c=a;03a=b;04b=c;联系方式:.提高程序可读性除了用在特殊语句内,复合还可以将一些完成单一功能的语句放在一个花括号中,以提高程序可读性。3.嵌套使用复合语句还可以嵌套使用。联系方式:语言的重要组成,也是本章要讨论的重点。C语言提供了丰富的操作符,以完成各种各样的功能。C语言共有45个操作符,简单地分类展示如下:后缀操作符(4个):()[].-算术操作符(7个):+-*/%++--符号操作符(2个):+-逻辑操作符(3个):!&&||联系方式:操作符关系操作符(6个):====!=位操作符(6个):~&^|条件操作符(1个):?:赋值操作符(11个):=*=/=%=+=-===&=^=|=逗号操作符(1个):,转型操作符(1个):(数据类型名)即(int)、(char)等地址操作符(2个):*&求字节操作符(1个):sizeof()联系方式:操作符下面来讨论如何区分既可作为运算操作符,也可以作为地址操作符的*。01pro=a*b;02b=*ptr;03pro=a**ptr;/*两个*中间以及两边的空格可以为随意多个,也可以没有*/联系方式:语言中最常用的操作符之一,其功能是为变量赋值。由赋值操作符所组成的表达式称为赋值表达式。本节将先讨论赋值操作符和赋值表达式的使用,在介绍左值和右值的概念,最后讨论赋值表达式中常见的类型转换的问题。联系方式:赋值操作符赋值操作符是一个二元操作符,其组成的赋值表达式的标准形式由变量、赋值操作符和一个表达式组成,如下所示:变量=表达式;赋值表达式的作用,就是把等号右边的表达式的值赋值给等号左边的变量。其中,赋值操作符左边的变量也称为左值,右边的表达式称为右值。赋值表达式的值即为语句执行后左值的值。联系方式:赋值操作符的结合性当多个赋值操作符存在于同一条语句中时,按照C标准的规定,将会按照从右到左的结合方式先执行最右边的赋值操作符,再依次向左执行其余赋值操作符。例如:a=b=c=表达式;该语句会先执行最右边的赋值操作符,再执行中间的,最后执行左边的,即等效于:a=(b=(c=表达式));/*括号操作符的优先级是最高的*/联系方式:语言中,左值和右值是十分重要的概念。并不是所有的值都是可以改变的,可以改变的值被称为左值。之所以要称为左值,还因为只有可以改变的值才能放在赋值操作符的左边,即只有左值可以放在赋值操作符的左边,也可以说放在赋值操作符左边的都是左值。左值可以是变量,如下所示:intyear=2008;int型变量year被赋值为2008。左值也可以是部分表达式,如下:int*month;*month=2;联系方式:赋值表达式中的类型转换在赋值表达式中,当把一种类型的数据赋值给不同类型的变量时,编译器会隐式地把该数据进行类型转换,转换为该变量的类型后才赋值。例如:intsmall=2008;longlongintlarge;large=small;联系方式:类型转换操作符类型转换操作符是操作符中十分独特的一个,由一个小括号及包含在小括号里的一个类型名称组成,如下所示:(int)(longlongint)(float)类型转换操作符也是一个一元操作符,只带一个操作数,使用时放在操作数的前面。它的作用是把操作数的值的数据类型改变为操作符中的数据类型。如下所示为类型转换操作符的标准形式:(数据类型名)(表达式)联系方式:类型转换操作符下面是几个使用类型转换符的实例:inti=(int)3.11;floatf=(float)7;shortintv=(shortint)28;其中,double型常量3.11会转换为整型(会丢失数据)后赋值给int型变量i,int型变量7会转换为float型(不会丢失数据)后赋值给float型变量f,int型数据28将转换为shortint型(不会丢失数据)后赋值给shortint型变量v。当表达式不仅仅是一个变量或一个常量时,需要把表达式放在小括号内。例如:m=(int)(3.7+2.5)这时,程序会对3.7和2.5的和类型转换为int型。如果没有括号,只是:m=(int)3.7+2.5联系方式:运算操作符与运算表达式数值计算离不开运算操作符,都要依靠运算操作符将各种数值连接在一起来完成特定的数值计算。由运算操作符组成的表达式为运算表达式。本节将讨论各种基本运算操作符和运算表达式的使用,同时还讨论与它们密切相关的符号操作符,以及运算表达式中的优先级、结合性和类型转换的问题。联系方式:运算操作符运算操作符共有五个,分别是加法操作符(+)、减法操作符(-)、乘法操作符(*)、除法操作符(/)和求余操作符(%)。它们均为二元操作符,即操作符前后都需要有一个操作数。联系方式:.加法操作符加法操作符的功能即进行加法运算。例如:var=3+4+5+6+7;赋值操作符右侧为一个复杂的加法表达式,程序将先计算3和4的和,再计算该和与5的和,再计算该和与6的和,再计算该和与7的和,最后将最终的和赋值给var。当然,操作数也可以是变量。例如:printf(“sum=%d”,a+b);/*变量a和b为加法操作符的两个操作数*/联系方式:.减法操作符减法操作符的功能即,进行减法运算。例如:diff=512–128;赋值操作符右侧即为减法表达式,将计算512和128的差作为该表达式的值,最后

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

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

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

×
保存成功