1、1. 数制及其转换 2. 原码、补码、反码与原码的关系,乘除时符号位的确定 3. 校验方法和校验码 4. 数组地址的影射(压缩存储) 5. 链表/线性表的操作 6. 树的有关性质 7. 递归算法 8. 各种流程图的填空和循环次数认定 9. CPU运算器、控制器等的组成和作用 10. 内存/介质的容量计算,芯片数目的计算 11. 内存/磁盘的存取时间计算 12. 内存页面管理 13. 操作系统进程、设备、文件的管理 14. 函数调用中的引用调用/值调用 15. 网络的一些新名词的含义 16. TCP/IP有
2、关的协议体系结构 17. 数据库的一些基本概念 18. 关系代数/SQL语言 19.多媒体的基本概念(图像颜色,声音的A/D和D/A) 20. 多媒体(图像、声音)的存储和压缩存储 21. 计算机应用基础和办公软件的操作 22. 软件工程的一些基本概念 23. 软件需求分析概念(DFD、ER图) 24. 面向对象的基本概念 24. 软件测试与维护 25. 加密和/网络安全性 公钥密码 26. 标准化基本概念,标准分类 27. 信息化基本概念,有关法律法规,软件著作权 28. 计算机专业英语,基本名词解释,尤其是新名词
3、和缩写 1.1 程序设计和程序设计语言 1.程序 从最一般的意义来说,程序是对解决某个计算问题的方法(算法)步骤的一种描述;而从计算机来说,计算机程序是用某种计算机能理解并执行的计算机语言作为描述语言,对解决问题的方法步骤的描述。计算机执行按程序所描述的方法步骤,能完成指定的功能。所以,程序就是供计算机执行后能完成特定功能的指令序列。 一个计算机程序主要描述两部分内容:描述问题的每个对象和对象之间的关系,以及描述对这些对象作处理的处理规则。其中关于对象及对象之间的关系是数据结构的内容,而处理规则是求解的算法。针对问题所涉及的对象和要完成的处理,设计合理的数据结构常可有效地简
4、化算法,数据结构和算法是程序最主要的两个方面。 2.程序设计的任条和主要步骤 程序设计的任务就是分析解决问题的方法步骤(算法),并将解决问题算法的方法步骤用计算机语言记录下来。程序设计的主要步骤包括:认识问题、设计解决问题的算法、按算法编写程序、调试和测试程序。在程序开发过程中,上述步骤可能有反复,如发现程序有错,严重情况可能会要求重新认识问题和重新设计算法等。 3.机器语言和汇编语言 计算机能直接识别和执行的二进制代码称为计算机的机器语言。用有助于记忆的符号来代表二进制代码,称为汇编语言。汇编语言与机器语言几乎有一对一的关系。用汇编语言编写的程序称为“汇编源程序”,汇
5、编源程序不能在计算机上直接执行,需要用汇编程序将汇编源 程序翻译成机器语言程序,然后执行由汇编程序翻译出来的机器语言程序。机器语言和汇编语言是与具体计算机紧密相关的,称它们是面向机器的语言。 4.高级语言 与机器语言和汇编语言相比较,高级语言与具体计算机无关,是一种能方便描述算法过程的计算机程序设计语言。高级语言种类千差万别,但一般包含有以下四种成分:数据成分用来描述程序所涉及的数据;运算成分用来描述运算;控制成分用来表达程序的控制构造;传输成分用来表达数据的传输。由于高级语言程序主要是描述计算机的解题过程,即描述复杂的加工处理过程,所以也称这种高级语言为面向过程语言。
6、 用高级语言编写的程序称为“源程序”。计算机不能直接技源程序的语句运行,通常有解释方式和编译方式两种方法在计算机上执行源程序。 解释方式,即让计算机运行解释程序,解释程序逐句取出源程序中的语句,对它作解释执行,输入数据,产生结果。 编译方式,即先运行编译程序,从源程序一次翻译产生计算机可直接执行的二进制程序(称为目标程序);然后让计算机执行目标程序,输入数据,产生结果。 解释方式的主要优点是计算机与人的交互性好,调试程序时,能一边执行一边直接改错,能较快得到一个正确的程序。缺点是逐句解释执行,运行速度慢。 编译方式的主要优点是计算机运行目标程序快,缺点是修改源程序后必须
7、重新编译以产生新的目标程序。 现在也有将上述两种方式结合起来的,即先编译源程序,产生计算机还是不能直接执行的中间代码,然后让解释程序解释执行中间代码。这样做的好处首先是比直接解释执行快;更大的好处是中间代码独立于计算机,只要有相应的解释程序,就可在任何计算机上运行。 5.面向问题语言 面向问题语言是为了易于描述和求解某类特定领域的问题而专门设计的一种非过程语言。用面向问题语言解题时,不仅摆脱计算机的内部逻辑,也不必关心问题的求解算法和求解的过程,只需指出问题是做什么,数据的输入和输出形式,就能由相应的计算机系统得到所需结果。如报表语言、SOL(Structured Query
8、 Language)语言等。SQL语言是数据库查询和操纵语言,能直接使用数据库管理系统。由于使用面向问题语言来解题只要告诉计算机做什么,不必告诉计算机如何做,能方便用户的使用和提高程序的开发速度。但实现面向问题语言的系统从最一般的意义下实现问题如何求解,通常实现的效率较低。另外,面向问题语言要求问题已有通用的求解方法,目前其应用范围还比较狭窄。 1.2 C语言基础 1.C语言的发展史 目的是为编写系统程序研制一种高级程序语言。1963年,参照ALGOL60语言,增添了能描述计算机硬件特性的能力,称为CPL语言。1967年,作进一步的简化,改称BCPL语言。1970年,再进一步简
9、化,并突出了硬件处理能力,称为B语言,并用于编写UNIX操作系统。1972年,进一步扩充数据类型和恢复通用性,称为C语言,并用C语言重写了UNIX操作系统。以后 C语言开始流行,为统一版本,ANSI于 1987年制定了 C语言的标准,称为 ANSIC。 2.C语言的特点 C语言主要有以下特点: (1)与其它高级语言比较,更接近硬件,与机器语言比较,又更接近算法。C程序易编写、易读、易查错和易修改。 (2)数据类型与运算符丰富,描述算法更简单方便。 (3)C程序的结构简单,语言包含的语句类别少。 (4)是一种结构化语言,提供完善的结构化程序控制结构,适宜采用结
10、构化程序设计方法开发程序。 (5)也是一种模块化程序设计语言,适宜大型程序的研制和开发。 (6)通常C系统都提供大量的库函数供程序开发人员选用,能简化程序开发。 3.C程序的基本结构 通常一个C程序包括一个或多个函数,其中必有一个main函数,称为主函数。C函数的定义主要分两部分:函数说明部分和函数体。其中函数体由C语言的语句序列组成,实现函数的功能。C程序总是从主函数开始执行。 4.C语言的基本语句 C语言的语句主要分以下几种: (l)数据定义语句--用来定义程序中使用的各种数据,及能存放数据的对象的名称和特性。 (2)表达式语句--任何在有意
11、义的表达式之后接上分号(;)构成的语句。最常见的有 赋值表达式和函数调用表达式后加分号构成的表达式语句,分别称为赋值语句和函数调用语句。 (3)流程控制语句--用来控制程序执行过程的语句。它们有选择控制语句、循环控制语句、break语句。continue语句、return语句和goto语句等。 (4)复合语句--用花括号括住一个语句序列,即构成复合语句。复合语句用来表示其中的语句序列是一个整体,在逻辑上是单个语句,并且强调其中的语句按顺序逐一执行。 (5)空语句--只有单个分号(;)构成的语句。空语句表示没有任何操作,用于选择控制或循环控制没有特别被控制的成分语句,或在
12、复合语句的末尾放置语句标号等。 (6)其它语句--如类型定义语句等。 5.注释 为了便于阅读和理解程序,可以在程序的任何地方插入注释,以说明程序、函数、程序段。语句的功能或采用的算法。C语言的注释是用/*”和“*/”括住的任意字符列。程序编译时,注释不参与编译,也不会出现在目标程序中。 6.C语言的字符集 C语言的基本字符集有: (l)数字10个(0~9)。 (2)英文字母大、小写各26个(A~Z,a~z)。 (3)键盘符号33个,用于构成特殊符号,其中下线字符”起一个英文字母的作用,以构成标识符等语法成分。 (4)转义字符,转义字符是由字
13、符(\)开始后跟单个字符或若干字符组成,通常用于表示控制代码或特殊符号。 7.C程序的基本词汇 C语言的基本词汇有: (1)字面形式常量。如 100、15.0、“A”、“ABC”。 (2)特殊符号。主要是运算符。 (3)保留字。在程序或语句中是用来表示特定语法含义的英文单词。 (4)标识符。用于命名程序对象,如变量、常量、函数、标号等。在C语言中,一个合理的标识符由英文字母或下线符开头,后跟或不跟由字母、下线符、数字符组成的字符列。~般以下线符开头的标识符作为系统内部使用。 利用基本词汇,按照给定的C语言的句法规则就可命名程序对象,描述表达式计算、构造
14、语句、函数,直至整个程序。 2.1 C语言的数据类型 数据类型包含两方面的内容:数据的表示和对数据加工的操作。数据的全部可能表示构成数据类型的值的集合。数据全部合理的操作构成数据类型的操作集合。 在C语言中,把整型、实型和字符型称为基本数据类型,又称整型和实型为数值型。为了描述更复杂的数据结构,C语言还有构造类型、指针类型、放举类型和空类型。构造类型是指由若干个相关的数据组合在一起形成的一种复杂数据类型。 1.整型 整型数据按其存储在内存中的二进位信息的最高位是当作数值信息位还是当作数据的符号位,将整型数据分成带符号整型和无符号整型两种。每种整型又按所需的字节个数的
15、多少分成三种。所以整型共有6种: 带符号整型(int)、带符号短整型(short int)、带符号长整型(long int,或 long)、无符号整型(unsigned int)、无符号短整型(unsigned short int)以无符号长整型(unsigned long)。 2.实型 实型数据有表示范围和精度两个不同的特征,为了适应数的范围和精度的不同要求,实型数据分三种类型:单精度型(也称浮点型 float)、双精度型(double)、长双精度型(long double)。 3.构造类型 构造类型是指由若干个相关的数据组合在一起形成的一种复杂数据类型,构造数
16、据类型的成分数据可以是基本数据类型的,也可以是别的构造类型的。按构造方式和构造要求区分,构造类型主要有数组类型、结构类型和共用类型。数组类型是由相同类型的数据组成;结构类型可以由不同类型的数据组成;当不同数据类型不会同时使用时,以节约内存,让不同数据占用同一区域,这就是共用类型。 4.指针类型 指针类型是取程序对象(如变量)在内存中占居的地址为值的一种特殊的数据类型。 5.枚举类型 当变量只取很少几种可能的值,并分别用标识符对值命名时,这种变量的数据类型可用枚举类型来表示。如变量表示一个星期中的某一天,就可用校举类型描述该变量的类型,并以星期见的英文名对日期命名,对应的
17、变量取某日的星期名称为其值。 6.void类型 用保留字VOid表示的数据类型有两种完全相反的意思,或表示没有数据(没有结果、没有形式参数),或表示某种任意类型的数据(如又与指针结合,用 void。标记)。 void表示空类型,void。表示任意数据的指针类型,程序如要使用 void。类型的数据,应该将它强制地转换成某种具体的指针类型。 2.2 常量 常量是指程序运行过程中其值不可改变的数据。常量按其值的表现形式可分为如下类型:整型常量、实型常量、字符型常量、字符串常量和指针常量。 1.整型常量 C语言整型常量的书写形式有三种: (1)十进制整数。通常整
18、数的写法,如0,123,-45,+25。 (2)八进制整数。以数字符0开头并由数字符0-7组成的数字符序列,为八进制整数。如 0123表示八进制整数,其值等于十进制整数 l*8*8+2*8+3=83。 (3)十六进制整数。十六进制整数以OX(或OX)开头的整数。表示十六进制数的数字将有16个,它们分别是0-9和A、B、C、D、E、F,其中六个英文字母也可以小写。例如,0x123表示十六进制整数,其值等于十进制整数1*16*16+2*16+3=291; oxabc,其值等于10*16*16+11+16+12=2748。 整型常量也可在整数之后接上字母L(或l),特别指明它是 l
19、ong型的。 整型常量也可在整数之后接上字母U(或u),特别指明是不带符号的,即是unsigned型的。为指明不带符号的long型整型常量,则需在整数之后同时加上字母U和L,表明该整型常量是unsigned long型的。 整型数据以二进制形式存放,要求短整型数据的字节数不能大于整型数据的字节数;整型数据的字节数不能大于长整型数据的字节数。对于带符号的整数,用二进制代码的最左二进位作为数的符号,1表示负数,0表示正数。 2.实型常量 C语言实型常量的一般书写格式是: 正负号 整数部分.小数部分 指数部分 其中,正负号可有可无,无正负号即为正实数;整数部分和小
20、数部分都是十进数字符序列;指数部分是e(或E)后接上正负号(正号可有可无)和十进数字符序列。 按上述格式书写实型常量,另有两条限制: (l)整数部分和小数部分可以任选,但不可同时都没有。 (2)小数点和指数部分不可以同时都没有。 ANSIC引入两个后缀字符,用 f标识 float型实型常量,用 1(或 L)标识 fong double型实型常量,而无后缀符的实型常量被认为是double型的实型常量。 要注意实型常量的有效位数,不要以为写上的数字都能被计算机所接受。在大多数C系统中,一个float型实型数据在内存中占用4个字节(32个二进位),约7个十进位有效数字,
21、能表示绝对值最接近0的实数约为10的-38次方,最大的实数约为10的38次方。例如,对于代码 float x=123456.123f,在大多数系统中,实型常量123456.123f的最后两位数字是无效的。 double型实型数据占用8个字节(64个二进位),约15个十进位有效数字,能表示绝对值最接近0的实数约为10的一308次方,最大的实数约为10的308次方。 3.字符常量 字符型数据用于表示一个字符值,但字符型数据的内部表示是字符的ASCll代码(8位二进位的二进制形式)。字符型数据的类型符用char来标记。字符型常量的书写方法: (l)普通字符--用单引号括起一个
22、字符。如’a’、’b’、’B’、’$’。 (2)特殊字符--用’\字符或字符列采标记。这种标记方法有三种: ’\特定字符’,标记特定控制符,如换行符用’\ n’来标记。 ’\ 1至3个人进制数字’,以人进数表示字符的ASCll代码。 ’\ X1至2个十六进制数字符’,以十六进制数表示字符的 ASCll代码。 由于字符以代码存放,所以也可把字符值当作一个小整数。反之,一个小整数也可把它理解为是某个字符的代码,把它当作一个字符。 4.字符串常量 字符串常量用来表示一个字符序列,它的书写方法用双引号括住字符序列。例如:”ABC”、””等。字符串常量“”是一个
23、空字符串,即不含任何有效字符的字符串。字符串数据顺序存储字符串字符的ASCll代码,并在最后字符后面存储一个H进制代码全为0的特殊字符,用来标记字符串的结束。所以字符串常量“1234”在内存占5个字节,而空字符串只占一个字节。字符串中的字符也可以是转义字符。 5.符号常量 为了提高程序的可读性,常量可以用以下形式命名: # define 标识符 常量 其中的标识符也称作符号常量,这里的常量是前面所述的某种常量、或是程序中前面定义的符号常量。例如: # define MAXN 100 2.3 变量 变量是程序执行时,其值允许改变的数据对象,用来存储输入数据
24、计算的中间结果和程序的最终结果等。 1.变量定义 变量用标识符命名,通过变量定义引入的变量名习惯用英文字母开头,C系统可能也会预定义一些标记系统特性的变量,系统定义的变量习惯用下线字符开头。变量的数据特性由变量定义时指定的类型确定。若定义指定数据类型的变量(即不在指定数据类型基础上定义新数据类型的变量,如指定类型的指针、数组等),这种变量定义的句法为: 数据类型符变量名1,变量名2,……; 编绎系统根据变量的数据类型确定存放它的值所需要的内存字节数,变量值的内部表示形多也由其类型确定。 2.内部变量和外部变量 变量按其定义出现在程序中的位置不同分成两类:在
25、函数内定义的变量称为内部变量,而在函数之外(函数之间)定义的变量称为外部变量。 3.变量的存储类型 系统按程序对计算机存储空间使用的不同要求,将内存分成不同用途的块,与计算机的寄存器一起将存储空间分成不同类别。而C程序通过指定变量的存储类表明变量的不同的使用要求,让系统将变量分配于不同的内存块或寄存器。如在上述变量定义形式中,还要指定变量的存储类型,变量定义的形式为: 存储类型符数据类型符变量名1,变量名2,…; 其中存储类型有四种: auto(自动的)、static(静态的)、register寄存器的)和 extem外部的)。 外部变量只允许被指定为静态的,或不
26、指定其存储类型。内部变量可以被指定为自动的或静态的、或寄存器的、或不指定存储类型,若不指定存储类型,它就是自动的。 自动变量是内部变量,在函数内或复合语句内定义,它们被分配在堆栈区。 静态变量可以是内部变量,也可以是外部变量。静态变量表示永久性和专用性,即在程序执行过程中一直存在,局限于定义它的函数(内部静态变量)或局限于定义它的程序文件中那些函数(外部静态变量)。静态变量被分配在与程序相联的内存数据区。 寄存器变量是函数的内部变量或参数,也是一种临时性的变量。如因函数使用非常频繁程序希望将它分配在寄存器,程序就可将变量指定为寄存器的,但编译系统也可能把它当作动变量处理。
27、 指定存储类型是外部的,实际b是告诉编译器,这个变量是一个外部变量,在这里要使它,而它的定义或在别的程序文件或在后面的程序段等别的地方。 4.变量的作用域和生存期 变量的使用要注意变量的作用域(可使用范围)和生存期(存在的时间)。C语言规定,内部变量的作用域只局限于定义它的函数或复合语句。自动的内部变量是一种临时性变量,函数被调用时分配,函数执行结束时释放。而静态变量在程序执行前分配,直至程序结束才释放。由于静态的内部变量在函数结束时,依旧保持存储,函数上一次调用时留在内部静态变量中的结果能被下一次调用时继续使用。外部变量也在程序启动前分配,直至程序执行结束释放。普通的外部变量能
28、提供别的源程序文件中的函数使用(要对它作外部说明);静态的外部变量只能供定义它的源程序中的全部函数专用。由于外部变量能供整个程序使用,所以外部量不能重名。 5.变量定义初始化 变量定义是对变量的存储空间提出一种要求,存储空间分配后,变量的初值通常是不拔的。但程序可以要求系统在为变量分配存储空间同时为变量设定初值,这就是变量定义初始化。在变量的定义形式中,在变量名之后接上“=初值表达式”,该初值表达式的值就作为该变量的初值。C语言另有约定,对于静态变量和外部变量,若定义它们时未指定初值,系统给它们设置成全部二进位都是0的值。以下是各种变量定义的例子: (l)定义整型,并对其初始
29、化。 Short minInt =100; int i= l,j= 2, k=3; long p=-1L,q=1234567890L; unsigned usi= 254u; unsigned long up= 4294967295UL; (2)定义字符型变量,并对其初始化。 char ch=’A’; (3)定义实型(浮点型、双精度型)变量,并对其初始化。 float f=1.23456f; double d=1.2345678op87654; 2.4 运算符 每个运算符都代表对运算对象的某种运算,都有自已特定的运算规则,规
30、定运算对象的个数、运算对象数据类型,以及运算结果的数据类型。C语言还规定运算符有不同的优先级和结合性。运算符的优先级指表达式求值时,按运算符的优先级由高到低的次序计算。如“先乘除后加减”。运算符的结合性是指运算符要求它的运算对象对它的结合方向。结合性确定了在相同优先级运算符连续出现的情况下运算对象与运算符结合的顺序,通常也是计算顺序。如算术运算符的结合性是从左至右的,则连续的加减或连续的乘除是从左向右计算。而赋值运算符的结合性是从右至左的,则连续的赋值运算是从右向左逐个计算赋值。在C语言中,要特别注意某些运算符因运算对象数据类型不同,可能有不同的意义。 1.算术运算符 算术运算符的
31、运算对象是基本数据类型的数据,实现通常的取整、取负、四则运算、求两整数相除后的余数的运算和增1减1运算。特别要留心的是整除运算、求余运算、增1运算和减1运算。 对两个整型数据执行除运算(/),称为整除运算,要特别注意的是两个整型数据的整除运算的结果是整型的,如表达式3/2的结果为1,表达式2/3的结果为0。 求余运算符(%)要求参与运算的两个运算对象均为整型数据,如 5% 3的值为 2。一般来说,求余运算所得结果的符号与被除数的符号相同。如-5%3的值为-2,5%-3的值为2。 增1(++)和减1(--)运算符都是单目运算符,以整型、字符型和指针型变量为运算对象,并改变运算对
32、象的值。按它们出现在变量之前和之后两种不同情况,其作用有微妙的差别。 前缀++ 前缀++的一般形式是 ++变量 例如,若X是整型或某种指针类型的变量,则++X使变量X的值增大1个单位,并以X的新值作为表达式“++X”的运算结果。如以下语句执行前,变量X的值为1,语句 j= ++ x; 使变量X的值变成3,变量j的值也为3。这里所说的一个“单位”是指:如果X是整型的,则++x就是普通的解释:“x的值比原值增加1";x是指针,它指向数组的某个元素,则++x使它指向数组的后一个元素。 后缀++ 后缀++的一般形式是 变量++ 表达式“变量+
33、运算结果是该变量的原来值,在确定了表达式结果之后,用与前缀++相同的方式增大该变量的值1个单位。 前缀++和后缀++都能使变量的值增加1个单位,但是它们所代表的表达式的值却不相同,前者是变量增加后的值,后者是变量还未增加的原先值。例如i,j为整型变量,且i的值为4,以下分别用①和②表记的代码将使j获得不同的值: ①j=++i ; ②j= i++ 都使变量i的值变为5,但①使j的值为5;②使j的值为4。 前缀-- 前缀-- 的一般形式是 --变量 前缀--使变量的情减少(或后退)l个单位,并以变量的新值为表达式“--变量”的运算结果。 后
34、缀-- 后缀-- 的一般形式是 变量-- 后缀-- 作用于变量时,以该变量的值作为表达式“变量--”的运算结果,即先取其值为结果,然后用与前缀--相同的方式减少该变量1个单位。 后缀-- 与前缀-- 的区别类似于后缀++与前缀++的区别。类似前面的例子,依旧假定i的值为4,两代码 ③j= --i ④j=i-- 都使变量i的值变为3,但③使j的值为3;④使j的值为4。 使用++和--运算符时,其运算对象仅适用于变量,不能是常量等数据值表达式。如 4++或(i+j)++都是不合法的。 ++和--是带有副作用的运算符。建议读者不要在一个表达式中对
35、同一变量多次使用这样的运算符,可能会发生意想不到的结果。如i的值为4,对表达式 (i++)+(i++) 可能认为它的值为 9(+5)。然而在 TURBO C和MS C系统中,它的值为8。而表达式 (++i)+(++i) 的值为12。这是因为这些系统在处理 i++时,先使用 i的原值计算整个表达式,然后再让i连续两次自增;处理++i时,在计算表达式值之前,先对 i执行两次自增,然后才计算表达式。放前一个表达式的值为8,后一个表达式的值为12。 因+与++(-与--类似)是两个不同运算符,对于类似表达式i+++j会有不同的理解:(i++)+ j或i+(++j)。 C编
36、译的处理方法是自左至右让尽可能多的字符组成一个合法的句法单位(如标识符、数字、运算符等)。因此,i+++j被解释成(i++)+j,而不是i+(++j)。 增1(++)和减1(--)运算符的结合方向是自右至左的。 2.关系运算符 用于关系运算的关系运算符有六个:<(小于)、>(大于)、<=(小于等于)、>=(大于等于)、==(等于)和!=(不等)。关系运算是双目运算,它的运算对象可以是基本数据类型的数据,用于比较大小;或是指向同一个数组两元素的指针,用于比较前后关系。在高级语言中,习惯称条件满足为“真”,不满足为“假”。特别在C语言中约定:比较后,条件满足(真)的值为1;比较后
37、条件不满足(假)的值为儿用关系运算符将两个子表达式连接起来,构成关系比较表达式,求得结果为1(真)或0(假)。
六个关系运算符中,运算符(<、<=、>、>=)的优先级高于运算符(==,!=)。如表达式X>y==Cy)==(C
38、仍设i=1,j=2,k=3,则表达式k>j>i的值为0(先计算k>j,其值为1,再计算1>1,结果为0)。 3.逻辑运算符 用于逻辑运算的逻辑运算符有三个: &&(逻辑与)、||(逻辑或)、!(逻辑非) 其中运算符“&&”和“||”是双目运算符,要求有两个整型或字符型的运算对象,用于连接多个判定条件,构成更复杂的条件判定;运算符“!”是单目运算符,用于描述对给定条件的否定判定。 逻辑运算产生的结果也只能是1或0。 1表示逻辑运算结果为“真”;用0表示运算结果为“假”。 在判定一个运算对象的值为“真”或“假”时,以运算对象的值不等于零为“真”,运算对象的值等于
39、0为“假”。 逻辑运算符中,按优先级排列为:逻辑非运算符!的优先级高于逻辑与运算符&&,逻辑与运算符&&的优先级高于逻辑或运算符||。另外,&&和||的优先级低于关系运算符的优先级;!的优先级高于算术运算符的优先级。逻辑运算符||和&&的结合方向是自左至右,而逻辑运算符!的结合方向是自有至左。 需要特别指出的是,“逻辑与”和“逻辑或”运算符分别有以下性质: a&&b,仅当a为0时,不管b为何值(实际上不再计算b),结果为0。 a||b,仅当 a为 1时,不管 b为何值(实际上不再计算 b),结果为1。 上述性质就是说,对于表达式a&&b,仅当子表达式a为非零时,才
40、计算子表达式b;对于表达式a||b,仅当子表达式a为0时,才计算子表达式b。在具体编写程序时,也应利用以上性质。对于两个条件的逻辑与,如当条件1不成立情况下,条件2的值没有意义或不可计算时,逻辑表达式应写成: 条件l&&条件2 避免在条件1不成立情况下,计算条件2。如有条件:y/x>2且 x!=0,应写成: x!=0 && y/x>2 当X为0时,不会计算y/X。而写成: y/X>2 && X!=0 是不正确的,因为当 X为0时,不能计算y/X。对于逻辑或也有类似情况。 由于上述性质,在计算连续的逻辑与和逻辑或运算时,实际上不分优先级,而是顺序从左至右计算。
41、在计算逻辑与运算时,若有左运算对象的值为0,则不再继续计算逻辑与运算,并立即以0为逻辑与运算的结果;在计算逻辑或运算时,若有左运算对象的值为1,则不再继续计算逻辑或运算,并立即以1为逻辑或运算的结果。在顺序计算逻辑表达式的过程中,一旦确定了表达式的最终结果,就不再继续计算。 4.赋值运算符 赋值运算的最简单形式是 变量=表达式 其中“=”是赋值运算符。赋值运算的执行过程是: (l)先计算赋值运算符右端的表达式; (2)如表达式的类型与赋值运算符左边的变量类型不同(仅限于基本类型),将表达式值的类型自动转换成变量的类型; (3)将求得的值赋给变量,即存储
42、到由变量所占的内存中。 简单地说,计算表达式的值,将该值赋给变量。 赋值运算也有结果,经赋值运算后,赋值表达式具有赋值后赋位运算符左边变量同样的类型和值。因赋位运算有值,所以可以进一步参与运算,特别是可以再赋植给其它变量。赋值运算符的结合性是‘边有至左”的,当连续有多个赋值运算时,则从右至左逐个赋值。如有变量定义: int k; double x; 则赋值表达式: x= k= 3.5 是先将实数3.5自动转换成整数3赋给整型变量k,然后又将整数3自动转换成实数3.0赋给实型变量X。所以,k的值是3,X的值是3.0。 在程序中,经常遇到在变量当前值的基础
43、上作某种修正的运算。如 x=x+5.0 这类运算的特点是:变量既是运算对象,又是赋值对象。为避免对同一存储对象的地址重复计算,C语言弓队复合赋值运算符。它们是 +=、-=、*=、%=、〈〈=、〉〉= 、&= 、^=、|= 通常,记日为某个双目运算符,复合赋值运算 xθ=e 其等效的表达式为 x= xθ(e) 注意,当e是一个复杂表达式时,等效表达式的括号是必需的。如 y*= a+b 的等效表达式是y= y*(a+b) 赋值运算符和所有复合赋值运算符的优先级全相同,并且都是“自右至左”结合,它们的优先级高于远号运算符的优先级,低于
44、其它所有运算符的优先级。 5.逗号运算符 逗号运算符“,”用于将若干表达式连接起来顺序地逐个计算。连续返号运算的一般形式为: 表达式1,表达式2,…,表达式n 它的计算顺序是从左到右逐一计算各表达式,并以表达式n的值为连续逗号运算的结果。例如,表达式 x=( i=3, i*2) 使i等于3,X等于6。其实,逗号运算只是把多个表达式串联起来,在许多情况下,使用逗号运算的目的只是想分别计算各个表达式的值,而并非想使用逗号运算中最后那个表达式的值。逗号运算最常用于for结构中,用于给多个变量登初值,或用于对多个变量的值逐一修改等。逗号运算符的优先级最低,其结合性是
45、自左向右”的。 6.条件运算符 条件运算是一个三目运算,有三个运算对象。条件运算的一般形式为 表达式1?表达式2:表达式3 条件运算的计算规则是: (1)计算表达式1的值; (2)如果表达式1的值非0(真),则计算表达式2,并以表达式2的值为条件运算的结果(不再计算表达式3); (3)如果表达式1的值为0(假),则计算表达式3,并以表达式3的值为条件运算的结果(不再计算表达式2)。 例如,表达式 X>y?X:y 如果x>y条件为真,则条件运算取x值,否则取y值。 条件运算符(?:)的优先级高于赋值运算符,低于逻辑运算符,也低于关
46、系运算符和算术运算符。例如,表达式 max= X> y?X: y+ l 等效于表达式 max=((x>y) ?x:( y+l)) 条件运算符的结合性为“自右至左”。例如,表达式X>y?X:u>V?u:V 等效于表达式 X>y?X:(u>V?u:V) 7.长度运算符 长度运算以字节为单位给出其运算对象所需(或所占)的字节数,运算对象可以是任何类型的数据对象或数据类型。它是根据对象的类型来确定对象(所需)的字节数的。 长度运算有两种书写形式: sizeof变量名或sizeof(类型名) 如果有某种类型为江的变量V,其中t可以是系统提
47、供的类型或用户自己定义的类型,可以是简单的,也可以是数组、结构等。则 sizeof V就是变量 V所占的字节数。如有 int j; double x; 表达式sizeof j和sizeOf x分别是变量j和x所占的字节数。 sizeof(t)是系统为分配一个类型为t的数据对象所需的字节数。如sizeOf(int)和sizeof(dou-ble)分别是系统为分配一个类型为int和double变量所需的字节数。 8.位运算符 位运算的运算对象只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位率信息,按位完成指定的运算,得到位串信息的结果。位运算符又可
48、分成两类:一类是位逻辑运算符,另一类是位移位运算符。 位逻辑运算符有:&(按位与)、|(按位或)、^(按位异或)、~(按位取反) 位移位运算有:<<(位左移)和>>(位右移) 其中按位取反运算符是单目运算符。其余均为双位运算符。位逻辑运算符的优先级从高到低,依次为~、&、^、|、,其中的结合方向自右至左,且优先级高于算术运算符,其余运算符的结合方向都是自左至右 ,且优先级低于关系运算符。位移位运算符的优先级低于算术运算符,高于关系运算符,它们的结合方向是自左至右。 按位与运算符(&) 按位与运算将将两个运算对象的对应位按位遵照以下规则进行计算: 0&0=0,
49、 0&l=0,1&0=0,1&l=1 即同为一的位,结果为1,否则结果为0。 例如,设 3的内部表示为00000011,5的内部表示为00000101,则3&5的结果为00000001 按位与运算有两种典型用法。一是取一个位率信息的某几位,如以下代码截取。的最低7位、&0177t二是让某变量保留某几位,其余位设置成0,如以下代码让X只保留最低6位:x=X&077、以上用法都先要设计好一个常数,该常数只有需要的位是互,不需要的位是 0。用它与指定的位串信息按位与。 按位或运算符(|) 按位或运算将两个运算对象的对应位按位遵照以下规则进行计算: 0|0=0, 0|l=
50、1, 1|0=l, 1|1=1 即只要有五个是1的位,结果为1,否则为0。 例如,023|035结果为037。 按位或运算的典型用法是将一个位串信息的某几位设置成1。如将要获得最右4位为1,其它位与变量j的其它位相同,可用逻辑或运算 017|j。若要把这结果赋给变量 j,可写成: j=017|j 按位异或运算符(^) 按位异或运算将两个运算对象的对应位按位遵照以下规则进行计算: 0^0= 0, 0^1=l, l^0=l, 1^l=0 即相应位的值相同的,结果为0,不相同的结果为l。 例如,013^035的结果为026。 异或运算的意思






