《c语言程序设计》第3章_第1页
《c语言程序设计》第3章_第2页
《c语言程序设计》第3章_第3页
《c语言程序设计》第3章_第4页
《c语言程序设计》第3章_第5页
已阅读5页,还剩89页未读 继续免费阅读

下载本文档

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

文档简介

第2章C语言基础池州师专计算机中心C

语言程序设计1本章主要内容本章介绍C语言的基础,包括:数据类型运算符和表达式均是程序设计的基本知识为什么讨论这些知识?通常程序要对数据进行操作处理:处理的对象是数据通过运算符和表达式进行操作21.3.2标识符

(1)标识符的定义:用来标识变量、常量、函数等的字符序列。(2)标识符的命名规则有效字符只能由字母、数字、下划线组成,且第一个字母必须是字母或者下划线;C语言的标识符由具体的C编译器确定,ANSIC没有相应的规定。在Turbo2.0中,允许最长的标识符长度是32。C语言的标识符区分大小写字母,标识符中大小写字母含义不同;3(3)标识符的命名习惯变量名和函数名中的英文字母一般用小写,以增加可读性。见名知意,是指通过变量名就知道变量值的含义。如,name/xm(姓名)。C语言的标识符不能是C语言规定的关键字。4例如:【例2.1】计算圆的面积,半径为5cm。

程序如下:main(){float

r,area;

r=5;

area=3.14*r*r;

printf("%f\n",

area);}运算结果是输出圆的面积:78.500000程序中用到的数据:r、area、5、3.14对数据进行的运算:*、=例jc2_15分析:计算机操作处理时,要完成以下工作:在内存中给半径r和运算结果area

开辟存储空间,存放它们的值。应该留多大的地方来存放它们的值?数据

5和3.14与r

、area

不同,它们是在编写程序时就给出确定的值,在运算过程中不会改变。这样的数计算机怎么处理?对整数5

和小数3.14,计算机存放时是否有区别?涉及数据类型的基本知识6C语言的数据类型C数据类型数组类型结构体类型共用体类型枚举类型整型字符型实型(浮点型)空类型单精度型双精度型基本类型指针类型构造类型本章讨论基本类型数据72.2.1常量在运行程序的过程中值保持不变的量。主要包括整型常量、实型常量、字符常量、字符串常量。整型常量即整常数,在C语言中整型常量可用三种形式表示。十进制整数:由0~9和正负号表示。八进制整数:由数字0开头,后跟数字0~7表示。十六进制整数:由0x或0X,后跟0~9,A~F/a~f表示。例如:100-80+12301002401000730x380x100X100XFF0x0a8定义一个符号常量需要使用一条预处理命令#define(define的中文意思是“定义”),其格式为#define符号常量常量例如:#defineNUM20#definePI3.1415926有了上面的两行文本,NUM的值就是30,PI的值就是3.1415926。定义一个符号常量,实际上就是为一个值常量起个名字。

用标识符代表一个常量9#definePRICE30main(){Intnum,total;Num=10;Total=num*PRICE;Printf(“total=%d”,total);}程序中用#define命令行定义PRICE代表常量30,此后凡文件中出现的PRICE都代表30,可以和常量一样进行运算,程序运行结果为Total=30用标识符代表一个常量10注意符号常量不同于变量,它的值在其作用域内不能改变,也不能再被赋值。如再用以下赋值语句给PRICE赋值,则是错误的。PRICE=40;11变量1.变量的定义在程序运行过程中,其值改变的数据,称为变量,变量用标识符表示,称为变量名。变量均分配一定量的存储空间,处在数据区、堆栈区、堆区中,运行中可以改变。相当于给内存地址取个名字-变量。2变量的两个要素变量名,每个变量构必须有一个名字-变量名,变量名遵循标识符命名规则。变量值,再程序运行过程中,变量值存储在内存中。在程序中,通过便两名来引用变量的值。3变量的初始化与定义121变量定义的一般格式[存储类型]数据类型变量名1[,变量名2,。。。,变量名n];例如:floatradius,length,area2变量初始化的一般格式:[存储类型]数据类型变量名1[=初值1][,变量2[=初值2]…];例如:floatradius=2.5,length,area;132.2.2变量注意:变量必须“先定义后使用”系统为变量分配存储单元,存储变量的值。编写程序时通过变量名来存、取变量值。在程序中从变量中取值,实际上就是通过变量名找到相应的内存地址,从其存储单元中读取数据。a510变量值为变量分配的存储单元变量名例如:有变量a它的值是51014整型数据整型常量的表示方法整型变量1、整型数据在内存中的存放形式2、整型变量的分类3、整型变量的定义4、整型变量的溢出15整型数据在内存中的存放形式数据在内存中是以二进制形式存放的如:十进制数10的二进制形式为1010,在微机上使用的C编译系统,每一个整型变量在内存中占2个字节的空间。其中,整型变量对应该2字节内存单元的第一个字节内存单元,即对应“低地址”。下图表示了数据在内存中实际存放的情况。000000000000101016实际上,数值是以补码表示的。一个正数的补码和其原码的形式相同。如果数值是负的,,求负数的补码的方法是:将该数的绝对值的二进制形式,按位取反再加1。最高位表示符号位,该位为0,表示数值为正;为1则数值为负。171方括号表示可选项int分配2Byte,long分配4Byte类型名称类型符bit取值范围整型(短整型)[signed]int[signed]short[int]16215~215-1(-32768~32767)无符号整型unsigned[int]160~216-1(0~65535)长整型[signed]long[int]32-231~231-1无符号长整型unsignedlong[int]320~232-1183.4浮点型数据3.4.1浮点型常量的表示方法3.4.2浮点型变量1。浮点型数据在内存中的存放形式2。浮点型变量的分类3。浮点型数据的舍入误差3.4.3浮点型常量的类型19浮点型常量的表示方法C语言中的浮点数就是实数。浮点数有两种表示形式:(1)十进制小数形式:它由数字和小数点组成(必须有小数点)。如,0.123,123.,等都是十进制数。注意:0.0和0的区别(2)指数形式:1e31.8e-3-123E-6-.1E-31×1031.8×10-3

-123×10-6

-0.0.1×10-3字母e(或E)之前必须有数字,且e后面的指数必须为整数。20注意:一个浮点数在用指数形式输出时,是按规范化的指数形式输出的。“规范化的指数形式”,即在字母e之前的小数部分中,小数点左边应有一位,且只能有一位非零的数字。如:2.3478e23.0999E56.46e12都属于规范化的指数形式。12.908e100.4578e3属于不规范的指数形式。21浮点型变量一、浮点型数据在内存中的存放形式一个浮点型数据在内存中一般占4个字节。浮点型数据是按照指数形式存储的。系统把一个浮点型数据分成小数部分和指数部分,分别存放。指数部分采用规范化的指数形式。如,3.14159在内存中的存放方式可以用如下的图示表示:+.314159122注意:1、标准C语言并无具体规定在32位中,用多少位表示小数,多少位来表示指数部分,这由各C语言编译系统自定。2、小数部分占的位(bit)数愈多,数的有效数字愈多,精度也就愈高。指数部分占的位数愈多,则能表示的数值范围愈大。3、不少编译系统以24位表示小数部分(包括符号),以8位表示指数部分(包括指数的符号)。23二、浮点型变量的分类类型比特(位)数有效数字数值范围float326~7-3.4x10-38~3.4x1038double6415~16-1.7x10-308~1.7x10308longdouble12818~19-1.2x10-4932~1.2x10493224ANSIC并未具体规定每种类型数据的长度、精度和数值范围。有的系统将double型所增加的32位全用于存放小数部分,这样可以增加数值的有效位数,减少舍入误差。有的系统则将所增加位的一部分用于存放指数部分,这样可以扩大数值的范围。对于每一个浮点型变量都应在使用前加以定义。例如:

floatx,y;(指定x,y为单精度浮点数)

doublez;(指定Z为双精度浮点数)

longdoublet;(指定t为长双精度浮点数)25三、浮点型数据的舍入误差浮点型数据是由有限的存储单元组成,因此能提供的有效数字总是有限的。在有效位以外的数字将被舍去。这样以来,就会产生一些误差。例题3。4(教材47页)。26浮点型常量的类型C语言编译系统将浮点型常量作为双精度来处理。例如已定义一个浮点型变量f,有如下语句:

f=2.45678*2.45678;

系统首先把2.45678作为双精度数,然后进行相乘的运算,得到的乘积也是双精度数。最后,取其前7位赋给浮点型变量f。若在数的后面加字母f或F(如1.65f、1.65F),这样编译系统就会把他们按照单精度(32位)来处理。

273.5字符型数据字符型数据char是那些用来表征英文字母、符号、汉字的数据。字符型数据实际上就是整型数据,但是,它只占用1个字节(8位)的内存单元,用于存放该字符号所对应的ASCII码的值。当然也可把这一个字节的内存单元用于存放一般的数据。本节主要介绍以下内容:字符常量、字符变量、字符数据在内存中的存储形式及其使用方法、字符串常量283.5.1字符常量字符常量主要有以下两种表示方法:(1)用单引号括起来一个直接输入的字符如,‘A’、’a’、’3’等都是合法的字符。字符常量只能用单引号括起来,不能用双引号或其它括号。(2)使用转义字符转义字符是一种特殊的字符常量。转义字符以反斜线“\”开头,后跟一个或者几个字符。转义字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。29常用的转义字符及其含义:\0字符串结束标志\n回车换行\t跳到下一个输出位置\"双引号字符\dddddd为1到3位八进制数所代表的字符\xhhhh为1到2位十六进制数所代表的字符例题3.5:转义字符的使用。书48页303.5.2字符变量字符变量用来存放字符常量,它只能放一个字符。在所有的编译系统中都规定以一个字节来存放一个字符,或者说一个字符变量在内存中占一个字节。如,charc1,c2;c1=‘a’,c2=‘b’;表示C1和C2为字符变量,各存放一个字符,对C1,C1赋初值分别为‘a’和‘b’.313.5.3字符数据在内存中的存储形式及其使用方法将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中,而是将该字符的ASCII代码放到存储单元中。如字符‘a’的ASCII代码为十进制数97,那么它在内存中的存放形式为一个字符数据既可以以字符形式输出,也可以以整数形式输出。以字符形式输出时,需要先将存储单元中的ASCII代码换成相应字符,然后输出。以整数形式输出时,直接将ASCII代码作为整数输出。例题3.6、3.7。书50-53页01100001323.5.4字符串常量字符串常量是由一对双引号括起来的字符序列。如“china”、”$12.5”。字符串常量有2个字节的存储单元。不要将字符常量和字符串常量混淆,它们是有区别的:(1)字符常量由单引号括起来,字符串常量由双引号括起来。(2)字符常量只能是单个字符,字符串常量则可以包含一个或多个字符。(3)可以把一个字符常量赋给一个字符变量,但不能把一个字符串常量赋给一个字符变量。C语言中没有相应的字符串变量。(4)字符常量占一个字节的内存单元。字符串常量有两个字节的存储单元。333.6变量赋初值C语言允许在定义变量的同时给变量赋初值。例如:inta=5,b=10+2;

doublex=23.568,y;charch1='a',ch2=66,ch3='\142';表示定义变量并对变量存储单元赋值。错误的初始化:

inta=3+b,b=5;

floatm=n=23.16;

343.7各类数值型数据间的混合运算整型、浮点型、字符型数据间可以混合运算。在进行混合运算时,其运算的规则为:(1)不同类型的数据要先转换成同一类型,然后进行运算。(2)转换是根据运算按步骤完成的,由编译器自动设置这个过程。(3)转换的规则如54页图3-10。353.8算术运算符和算术表达式主要内容:算术运算符和算术表达式赋值运算符和赋值表达式关系运算符和关系表达式逻辑运算符和逻辑表达式位运算符和位运算表达式条件运算符和条件表达式逗号运算符和逗号表达式其他运算符及其运算363.8.1语言运算符简介变量用来存放数据,运算符则用来处理数据。运算符将变量和常量连接起来的符合C语言语法规则的式子被称为表达式。每个表达式都有值。根据运算符所带操作数的数量进行划分,C语言中的运算符有三种类别:(1)单目运算符:只带一个操作数的运算符。如,++、--运算符。(2)双目运算符:带两个操作数的运算符。如,+、-运算符。(3)三目运算符:带三个操作数的运算符。如,?运算符。37C语言中运算符和表达式的数量之多,在高级语言中是少见的。正是丰富的运算符和表达式使C语言功能十分完善。这也是C语言的主要特点之一。所以要学好和用好C语言务必熟练掌握其运算符的功能、特点及应用。具体学习过程中应把握如下几个方面:(1)运算符的功能:该运算符主要用于做什么运算。(2)与运算量关系:要求运算量的个数及运算量的类型。(3)运算符的优先级:表达式中包含多个不同运算符时运算符运算的先后次序。(4)运算符的结合性:同级别运算符的运算顺序(5)运算结果的类型:表达式运算后最终得到的值的类型。383.8.2算术运算符和算术表达式基本的算术运算符算术表达式和运算符的优先级与结合性强制类型转换运算符自增、自减运算符有关表达式使用中的问题说明391、基本的算术运算符(1)+(加法运算符,或正值运算符,如3+5、+3);(2)-(减法运算符,或负值运算符,如5-2、-3);(3)*(乘法运算符,如3*5);(4)/(除法运算符,如3/5);(5)%(模运算符,或称求余运算符,%两侧均应为整型数据,如7%4的值为3);+、-、*、/运算符既可用于整型数据的算术运算,又可用于实型数据的算术运算。而%只能用于整数。40注意C语言规定两个整数相除,其商为整数,小数部分被舍弃。例如:5/2的值是2,不是2.5。要得到2.5,则应写成5.0/2或者5/2.0%不能用于浮点型数据,否则会出错。例如:5.4%2是非法的表达式,因为%只能用于整型数据的运算。412、算术表达式和运算符的优先级与结合性(1)用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子,称为C算术表达式。运算对象包括变量、常量、函数等。如,(x+y)/2-1,是合法的算术表达式。(2)C语言规定了运算符的优先级和结合性。在表达式求值时,先按运算符的优先级别高的次序执行。(3)C语言规定了各种运算符的结合方向(结合性),算术运算符的结合方向是“自左至右”42算术运算符的优先级别如下:()+-++--

*/%

+-

同级同级同级

单目双目

低433、强制类型转换运算符可以利用强制类型转换运算符将一个表达式转换成所需类型。转换的一般形式:(类型名)(表达式)如:(double)a(将a转换成double类型)(int)(x+y)(将x+y的值转换成整型)(float)(5%3)(将5%3的值转换成float型)

注意:表达式应该用括号括起来。(int)x+y先将x转换成整型,然后与y相加。例题3.8书57页444、自增自减运算符(1)自增(++)自减(--)运算符作用是使变量的值增1或减1,其用法是自增(++)使单个变量的值增1,自减(--)使单个变量的值减1。(2)用法与规则前置运算-运算符放在变量之前:++变量、--变量。先使变量的值增(或减)1,然后再以变化后的值参与其它运算,即先增减后运算。后置运算-运算符放在变量之后:变量++、变量--。变量先参与其它运算然后再使变量的值增(或减)1,即先运算、后增减。45例如:i=3;j=++i;(i的值先变成4,再赋给j,j的值为4)j=i++;(先将i的值3赋给j,j的值为3,然后i变为4)i=3;

printf(“%d”,++i);输出结果为“4”

printf(“%d”,i++);输出结果为“3”46注意:++和--运算符只能用于变量,不能用于常量和表达式。因为++和--蕴含着赋值操作。负号运算符、++、--和强制类型转换运算符的优先级相同,当这些运算符连用时,按照从左到右的顺序计算,即具有结合性。两个+和-之间不能有空格。在表达式中,连续使用同一变量进行自增或自减运算时,很容易出错,所以最好避免这种用法。如++i++是非法的表达式。自增自减运算,常用于循环语句中,使循环控制变量加(或减)1,以及指针变量,使指针指向下(或上)一个地址。475、有关表达式使用中的问题说明见书58-59页。483.9赋值运算符和赋值表达式1、赋值运算符赋值符号“=”就是赋值运算符,它的作用是将一个表达式的值赋给一个变量,实际上是将特定的值写到变量所对应的内存单元中。赋值运算符是双目运算符,因为“=”两边都要有操作数。“=”左边是待赋值的变量,“=”右边是要赋的值。赋值运算符的一般形式为:变量=常量或变量或表达式如:intx,y,z;x=20;y=x;z=x+y;492、赋值表达式由赋值运算符或复合赋值运算符,将一个变量和一个表达式连接起来的表达式,称为赋值表达式。(1)一般格式是:变量(复合)赋值运算符表达式(2)赋值表达式的值任何一个表达式都有一个值,赋值表达式也不例外。被赋值变量的值,就是赋值表达式的值。例如,a=5这个赋值表达式,变量a的值“5”就是它的值。503、赋值语句按照C语言规定,任何表达式在其末尾加上分号就构成语句。同样对于赋值表达式来说,在其后面加分号就构成了赋值语句。因此,x=8;a=b=c=5;都是赋值语句。4、赋值运算符及赋值表达式的使用(1)多个变量连续赋值如,a=b=c=10.连续赋值的表达式的运算顺序是从右向左(又称为右结合性)其相当于表达式a=(b=(c=10))),即先对C赋值,然后再对b,对a赋值。51(2)赋值表达式的嵌套例如,a=(b=2)+(c=3)。其相当于表达式a=((b=2)+(c=3)),因为“+”的优先级高于“=”的优先级,故不能等同于(a=(b=2))+(c=3)。它将首先对b赋值2,得赋值表达式b=2的值为2,再对c赋值为3,得赋值表达式c=3的值为3,再将两个赋值表达式的值相加得5,然后将5赋值给a,最终表达式的值为5。52注意:(1)赋值语句“=”左边必须是变量名或对应某特定内存单元的表达式,不能是常量或其它表达式。(2)赋值语句中的“=”表示赋值,不是代数中相等的意思。要表示相同的意思则应用关系运算符“==”表示,二者切勿混淆!532、类型转换在C语言中,整型、实型和字符型数据间可以混合运算。如果一个运算符两侧的操作数类型不同,则系统按“先转换,后运算”的原则,首先将数据自动转换成同一类型,然后在同一类型数据间进行运算。(1)将浮点型数据赋给整型变量时,舍弃浮点数的小数部分。如,i为整型变量,执行“i=3.56”的结果是使i的值为3,以整数形式存储在整型变量中。54(2)将整型数据赋给单、双精度变量时,数值不变,但以浮点型形式存储到变量中。如,将23赋给float变量,即执行f=23,先将23转换成23.000000,再存储到f中。(3)将一个double型数据赋给float变量时,截取其前面7位有效数字,存放到float变量的存储单元(4个字节)中。(4)字符型数据赋给整型变量时,由于字符只占1个字节,而整型变量占2个字节,因此,将字符数据(8个二进制)放到整型变量存储单元的低8位中。55(5)将一个int、short、long型数据赋给一个char变量时,只将其低8位原封不动地送到char型变量。(6)将带符号地整型数据赋给long型变量时,要进行符号扩展,将整型数的16位送到long型低16位中,如果int型数据位正书(符号位位0),则long型变量的高16位补0;如果int型变量为负值(符号位为1),则long型变量的高16位补1,以保持数值不改变。56(7)将unsignedint型数据赋给longint型变量时,不存在符号扩展问题,只需将高位补0即可。(8)将非unsigned型数据赋给长度相同的unsigned型变量,也是原样(连原有的符号位也作为数值一起传送)书61页例题3.9573、复合的赋值运算符再赋值符“=”之前加上其它运算符,可以构成复合的运算符。例如,a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3584、赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子称为“赋值表达式”。它的一般形式为:<变量><赋值运算符><表达式>对赋值表达式求解的过程是:先求赋值运算符右侧的“表达式”的值,然后赋给赋值运算符左侧的变量。赋值运算符左侧的标识符称为“左值”。并不是任何对象都可以作为左值的,变量可以作为左值,而表达式a+b就不能作为左值,常变量也不能作为左值,因为常变量不能被赋值。出现在赋值运算符右侧的表达式称为“右值”。书64页。593.10逗号运算符和逗号表达式1、C语言提供一种特殊的运算符-逗号运算符。用它将两个表达式连接起来。例如:3+5,6+8称为逗号表达式,又称为“顺序求值运算符”。逗号表达式的一般形式为:表达式1,表达式22、逗号表达式的求解过程为:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。赋值运算符的优先级别高于逗号运算符。例如:对逗号表达式求解a=3*5,a*4最后结果为60603、逗号表达式的一般形式可以扩展为:表达式1,表达式2,……,表达式n它的值为表达式n的值。4、逗号运算符是所有运算符中级别最低的。注意:并不是任何地方出现的逗号都是作为逗号运算符。例如,函数参数之间的逗号。61运算符的有关概念作用:对运算对象完成规定的操作运算类型:按运算对象分:单目、双目、三目按功能分:算术、赋值、关系、逻辑条件、逗号、位、其他62运算符的优先级和结合性优先级指各种运算符号的运算优先顺序例如:算术运算优先于关系运算算术运算中先*/后+-结合性指运算符号和运算对象的结合方向分为:从左向右(左结合)和从右向左(右结合)例如:算术运算符为左结合

a-b+4

赋值运算符为右结合

a=b=5(C语言规定见教材P297附录B)63本章涉及的运算符+-*/%++--+-=+=-=*=/=%=&=|=^=>>=<<=><>=<===!=&&||!&|^~<<>>?:,&sizeof

(数据类型标识符)类型种类算术运算符赋值运算符关系运算符逻辑运算符位运算符条件运算符逗号运算符其他运算符64表达式的有关概念什么是表达式由运算符将运算对象连接成的式子,它描述了一个具体的求值运算过程。计算表达式的值按照运算符的运算规则求值求值时注意运算符的优先级和结合性表达式值的类型自动转换强制转换65例如:表达式:150+'b'*2-12.456b=(++a)-2a/=a*=(a=2)f=a>b>c--a||++b&&c++max=a>b?a:ba=3,a+=3,a*a 1/(float)a+666算术运算算术运算符的优先级

()+-++--

*/%

+-

同级同级同级

单目双目

低没有乘方运算符,要计算a3要写作a*a*a的连乘,或用标准库函数pow(a,3)“/”的运算对象可为各种类型数据,但是当进行两个整型数据相除时,运算结果也是整型数据“%”要求运算对象必须是整型数据,功能是求两数相除的余数,余数的符号与被除数的符号相同。67自增自减运算++--是单目运算符有前缀和后缀两种形式

前缀形式:先自增(自减)再引用;后缀形式:先引用再自增(自减);功能:前缀形式++a

等价于

a=a+1

--

a

等价于

a=a–1

后缀形式a++

等价于a=a+1

a--

等价于a=a–1表达式的值会不同68例如:当a=5时⑴++a表达式的值为6,且

a=6⑵

a++表达式的值为5,且

a=6⑶

b=++a

等价于

a=a+1;b=a

表达式的值为6,且a=6,

b=6⑷b=a++等价于

b=a;a=a+1

表达式的值为5,且a=6,

b=5

69说明:++和--的运算对象只能是变量(或运算结果是变量的表达式),不能是常量(或运算结果是数值的表达式)。

例如:

5++、(a+2)++

不合法。具有右结合性,结合方向为从右到左。例如:

–a++

等价于-(a++)

如果有多个运算符连续出现时,C系统尽可能多的从左到右将字符组合成一个运算符例如:

i+++j

等价于(i++)+j

-i+++-j

等价于-(i++)+(-j)

70main(){inta=5;

printf("%d%d\n",a,a++);}说明(续):对函数参数的求值顺序:

TurboC系统先计算最右边的参数值,再依次计算左面的参数值。【例2.5】有多个函数参数且为同一变量自增的运算处理。

输出结果:65运行例2.571说明(续):【例2.6】有多个函数参数且为同一变量多次自增的运算处理。

main(){inta=5;

printf("%d%d\n",a,(a++)+(a++));}输出结果:711运行例2.672赋值运算赋值运算符(右结合)

=+=-=*=/=%=&=|=^=>>=<<=赋值表达式将表达式的值存入变量对应的内存单元中m=12b=(++a)-2m%=3+n等价于

m=m%(3+n)x*=(x=5)73说明:赋值号左边必须是变量,右边可以是C语言任意合法的表达式例如:n=t+2<s合法

a+b=15

不合法赋值运算符仅优先于“,”,且具有右结合性例如:

a=b=b*c>10等价于:a=(b=(

(b*c)>10)

)赋值号与数学中的等号含义不同例如:数学中a=b

等价于b=aC语言中a=b不等价于b=a74关系运算关系运算符(左结合)

>>=<<=

==!=较高较低关系表达式用关系运算符将运算对象连接成的式子例如:12<'C'+1(字符型数据比较ASCII值)a==b>=c等价于a==(b>=c)

与(a==b)>=c不等价关系运算符优先于赋值,低于算术75说明:关系运算的结果应该是逻辑值。C语言用数值用1表示逻辑真,0表示逻辑假例如:7>5的值是1,5>7的值是0

'a'>'b'的值是0,'a'<'b'

的值是1即关系表达式的值:0或1实型数可进行大于或小于比较,但通常不进行==或!=的关系运算76逻辑运算符逻辑运算符&&||!逻辑运算符的运算规则运算对象逻辑运算结果aba&&ba||b!a非0非0110非000100非00110000177逻辑表达式逻辑表达式用逻辑运算符将运算对象连接成的式子例如:0&&'b'a&&b||c&&da||b-5||c/4!x+y>=z逻辑运算符的优先级和结合性:!是单目运算符,右结合,高于算术&&和||是双目运算符,左结合,高于赋值运算符,低于关系运算符78逻辑运算规则从左到右依次进行逻辑计算运算对象为非0表示逻辑真运算对象为0表示逻辑假逻辑运算的结果为0或1例如设:a=15,b=0,c=-2a&&b&&c结果为0a||b||c结果为1(a+c)||b&&c结果为179逻辑运算规则(续)运算按照从左至右的顺序进行,一旦能够确定逻辑表达式的值,就立即结束运算——逻辑运算的短路性质例如设:a=1,b=0,c=-2a&&b&&c(a++)||++b&&--c为0,运算终止,表达式值为0为非0,运算终止,表达式值为1且a为2,b为0,c为-2(b,c保持原值)80关系与逻辑运算符的应用表示数学公式a>b>c判断a,b,c三条线段能否组成一个三角形

a,b不同时为负

a+b>c&&a+c>b&&b+c>aa>=0||b>=0!(a<0&&b<0)(a<0&&b>=0)||(a>=0&&b<0)||(a>=0&&b>=0)a>b&&b>c81位运算符~&^|<<>>位逻辑运算符移位运算符单目位运算符的运算对象只能是整型数据或字符型数据,不能是实型数据运算对象一律按二进制补码参加运算,并按位进行运算位运算的结果是一个整型数据低于单目、算术运算符,高于其他运算符低于单目、算术和关系运算符,高于其他运算符82位逻辑运算符的运算规则假设ai和bi均是一个二进制位(bit)

运算对象逻辑运算结果aibiai&biai|biai

^bi˜ai000001010111100110111100例如:假设a=10,b=010求a&b、a|b、a^b、˜a83程序如下:

main(){inta=10,b=010;

printf("%d%d\n",a&b,a|b);

printf("%d%d\n",a^b,~a);}输出结果:8102-110000000000001010&00000000000010000000000000001000即:a&b的值是80000000000001010˜

1111111111110101即:˜a的值是-11运行jc2_b84移位运算例如:a<<ba+8>>b-1等价于(a+8)>>(b-1)例如:假设a=10,b=2,求a<<b、a+8>>b-1

main(){inta=10,b=2;

printf("%d%d\n",a<<b,a+8>>b-1);}输出结果:409运行jc2_c请自行分析运行结果85条件表达式运算条件运算符:?:条件表达式的一般形式表达式1?表达式2:表达式3例如:m<n?x:a+3a++>=10&&b-->20?a:bx=3+a>5?100:200C语言中唯一的三目运算符,要正确区分用?和:分隔的表达式涉及条件运算符的优先级与结合性86条件运算符优先级条件运算符优先级高于赋值、逗号运算符,低于其他运算符例如:⑴m<n?

温馨提示

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

评论

0/150

提交评论