您好,欢迎来到百家汽车网。
搜索
您的当前位置:首页计算机二级公共基础知识复习笔记

计算机二级公共基础知识复习笔记

来源:百家汽车网
 一.数据结构与算法

1.1 算法

算法:是解题方而完整的描述。通俗地说,算法就是计算机解题的过程。算法不等于程序,也不等于计算方法,程序的编制不可能优于算法的设计。

(1)确定性,算法中每一步骤都必须有明确定义,不允许有模棱两可的解释,不允许有多义性;

(2)有穷性,算法必须能在有限的时间内做完,即能在执行有限个步骤后终止;

(3)可行性,算法原则上能够精确地执行; (4)拥有足够的情报。

算法的基本要素:一是对数据对象的运算和操作;二是算法的控制结构。 指令系统:一个计算机系统能执行的所有指令的集合。

基本运算和操作包括:算术运算、逻辑运算、关系运算、数据传输。 算法的控制结构:顺序结构、选择结构、循环结构。

算法基本设计方法:列举法、归纳法、递推、递归、减斗递推技术、回溯法 算法效率的度量—算法复杂度:算法时间复杂度和算法空间复杂度。★★★ 算法时间复杂度:指执行算法所需要的计算工作量。即算法执行过程中所需要的基本运算次数。

算法空间复杂度:指执行这个算法所需要的内存空间。 1.2 数据结构的基本概念

数据结构:指相互有关联的数据元素的集合。 数据结构研究的三个方面:

(1)数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构; (2)在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构;

(3)对各种数据结构进行的运算。 数据的逻辑结构包含:

(1)表示数据元素的信息;

(2)表示各数据元素之间的前后件关系。 数据的存储结构有顺序、链接、索引等。 线性结构的条件,(一个非空数据结构):

(1)有且只有一个根结点; (2)每一个结点最多有一个前件,也最多有一个后件。

非线性结构:不满足线性结构条件的数据结构。 1.3 线性表及其顺序存储结构

线性表由一组数据元素构成,数据元素的位置只取决于自己的序号,元素之间的相对位置是线性的。 在复杂线性表中,由若干项数据元素组成的数据元素称为记录,而由多个记录构成的线性表又称为文件。 非空线性表的结构特征:

(1)且只有一个根结点a1,它无前件;

(2)有且只有一个终端结点an,它无后件;

(3)除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。结点个数n称为线性表的长度,当n=0时,称为空表。 线性表的顺序存储结构具有以下两个基本特点:

(1)线性表中所有元素所占的存储空间是连续的;

(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。

ai的存储地址为:ADR(ai)=ADR(a1)+(i-1)k,,ADR(a1)为第一个元素的地址,k代表每个元素占的字节数。 顺序表的运算:查找、插入、删除。 1.4线性链表

数据结构中的每一个结点对应于一个存储单元,这种存储单元称为存储结点,简称结点。

结点由两部分组成:

(1) 用于存储数据元素值,称为数据域;

(2) 用于存放指针,称为指针域,用于指向前一个或后一个结点。

在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。

链式存储方式即可用于表示线性结构,也可用于表示非线性结构。

线性链表,HEAD称为头指针,HEAD=NULL(或0)称为空表,如果是两指针:左指针(Llink)指向前件结点,右指针(Rlink)指向后件结点。 线性链表的基本运算:查找、插入、删除。 1.5栈和队列★★★★

栈:限定在一端进行插入与删除的线性表。

其允许插入与删除的一端称为栈顶,用指针top表示栈顶位置。 不允许插入与删除的另一端称为栈底,用指针bottom表示栈底。

栈按照―先进后出‖(FILO)或―后进先出‖(LIFO)组织数据,栈具有记忆作用。 栈的存储方式有顺序存储和链式存储。 栈的基本运算:

(1) 入栈运算,在栈顶位置插入元素;

(2) 退栈运算,删除元素(取出栈顶元素并赋给一个指定的变量);

(3) 读栈顶元素,将栈顶元素赋给一个指定的变量,此时指针无变化。 队列:指允许在一端(队尾)进入插入,而在另一端(队头)进行删除的线性表。

用rear指针指向队尾,用front指针指向队头元素的前一个位置。 队列是―先进先出‖(FIFO)或―后进后出‖(LILO)的线性表。 队列运算:

(1) 入队运算:从队尾插入一个元素; (2) 退队运算:从队头删除一个元素; 计算循环队列的元素个数:

―尾指针减头指针‖,若为负数,再加其容量即可。 即:

当 尾指针-头指针>0 时,尾指针-头指针

当 尾指针-头指针<0 时,尾指针-头指针+容量 计算栈的个数: 栈底 –栈顶 +1

循环队列:s=0表示队列空,s=1且front=rear表示队列满

1.6 树与二叉树 ★★★★★ 1、树的基本概念

树是一种简单的非线性结构,其所有元素之间具有明显的层次特性。 在树结构中,每一个结点只有一个前件,称为父结点。 没有前件的结点只有一个,称为树的根结点,简称树的根。

每一个结点可以有多个后件,称为该结点的子结点。没有后件的结点称为叶子结点。

在树结构中,一个结点所拥有的后件的个数称为该结点的度。 所有结点中最大的度称为树的度。 树的最大层次称为树的深度。

2、二叉树及其基本性质

满足下列两个特点的树,即为二叉树 (1) 非空二叉树只有一个根结点;

(2) 每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。

二叉树基本性质:★★★★

个结点。

性质1 在二叉树的第k层上,最多有

性质2 深度为m的二叉树最多有个 个结点。

性质3 在任意一棵二叉树中,度数为0的结点(即叶子结点)总比度为2的结点多一个。

性质4 具有n个结点的二叉树,其深度至少为

,其中

示取 的整数部分

性质5具有n个结点的完全二叉树的深度为[log2n]+1;

性质6 设完全二叉树共有n个结点。如果从根结点开始,按层序(每一层从左到右)用自然数1,2,….n给结点进行编号(k=1,2….n),有以下结论: ①若k=1,则该结点为根结点,它没有父结点;若k>1,则该结点的父结点编号为INT(k/2);

②若2k≤n,则编号为k的结点的左子结点编号为2k;否则该结点无左子结点(也无右子结点);

③若2k+1≤n,则编号为k的结点的右子结点编号为2k+1;否则该结点无右子结点。 3、满二叉树与完全二叉树

满二叉树:除最后一层外,每一层上的所有结点都有两个子结点,则k层上有2k-1个结点深度为m的满二叉树有2m-1个结点

完全二叉树:除最后一层外,每一层上的结点数均达到最大值;在最后一层上只缺少右边的若干结点。

下图a表示的是满二叉树,下图b表示的是完全二叉树:

二叉树存储结构采用链式存储结构,对于满二叉树与完全二叉树可以按层序进行顺序存储。

4、二叉树的遍历 ★★★★

二叉树的遍历是指不重复地访问二叉树中的所有结点。二叉树的遍历可以分为以下三种:

(1)前序遍历(DLR):(首先访问根结点,然后遍历左子树,最后遍历右子树) 若二叉树为空,则结束返回。否则:首先访问根结点,然后遍历左子树,最后遍历右子树;并且,在遍历左右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。

(2)中序遍历(LDR):(首先遍历左子树,然后访问根结点,最后遍历右子树) 若二叉树为空,则结束返回。否则:首先遍历左子树,然后访问根结点,最后遍历右子树;并且,在遍历左、右子树时,仍然先遍历左子树,然后访问根结点,最后遍历右子树。

(3)后序遍历(LRD):(首先遍历左子树,然后访问遍历右子树,最后访问根结点) 若二叉树为空,则结束返回。否则:首先遍历左子树,然后遍历右子树,最后访问根结点,并且,在遍历左、右子树时,仍然先遍历左子树,然后遍历右子树,最后访问根结点.

该二叉树前序遍历为:F C A D B E G H P 该二叉树中序遍历为:A C B D F E H G P 该二叉树后序遍历为:A B D C H P G E F 1.7 查找技术

查找:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素。

查找结果:(查找成功:找到;查找不成功:没找到。)

平均查找长度:查找过程中关键字和给定值比较的平均次数。 顺序查找的使用情况: (1)线性表为无序表;

(2)表采用链式存储结构。 查找分为: 顺序查找 二分法查找对于长度为n的有序线性表,最坏情况只需比较次,而顺序查找需要比较n次。 1.8 排序技术

排序是指将一个无序序列整理成按值非递减顺序排列的有序序列。 1、交换类排序法(冒泡排序,快速排序) 2、插入类排序法(简单插入排序,希尔排序) 3、选择类排序法(简单选择排序,堆排序)

冒泡排序法,快速排序法,简单插入排序法,简单选择排序法,最坏需要比较的次数为n(n-1)/2

希尔排序,最坏需要比较的次数为 堆排序,最坏需要比较的次数为

二.程序设计基础

2.1 程序设计设计方法和风格

\"清晰第一、效率第二\"已成为当今主导的程序设计风格。 形成良好的程序设计风格需注意: 1、源程序文档化; 2、数据说明的方法; 3、语句的结构; 4、输入和输出。

注释分序言性注释和功能性注释。 语句结构清晰第一、效率第二。 2.2 结构化程序设计

结构化程序设计方法的四条原则是: 1、自顶向下; 2、逐步求精; 3、模块化;

4、使用goto语句。

结构化程序的基本结构及特点:

(1)顺序结构:一种简单的程序设计,最基本、最常用的结构;

(2)选择结构:又称分支结构,包括简单选择和多分支选择结构,可根据条件,判断应该选择哪一条分支来执行相应的语句序列;

(3)循环结构:又称重复结构,可根据给定条件,判断是否需要重复执行某一相同或类似的程序段。

结构化程序设计的特点:只有一个入口和出口 2.3 面向对象的程序设计

面向对象的程序设计:以60年代末挪威奥斯陆大学和挪威计算机中心研制的SIMULA语言为标志。

面向对象方法的优点:

(1)与人类习惯的思维方法一致; (2)稳定性好;

(3)可重用性好;

(4)易于开发大型软件产品; (5)可维护性好。

对象是面向对象方法中最基本的概念,可以用来表示客观世界中的任何实体,对象是实体的抽象。

面向对象的程序设计方法中,对象是由数据的容许的操作组成的封装体,是系统中用来描述客观事物的一个实体,是构成系统的一个基本单位,由一组表示其静态特征的属性和它可执行的一组操作组成。

操作描述了对象执行的功能,是对象的动态属性,操作也称为方法或服务。 对象的基本特点: (1)标识惟一性; (2)分类性; (3)多态性; (4)封装性;

(5)模块性好。

类是指具有共同属性、共同方法的对象的集合。类是关于对象性质的描述。类是对象的抽象,对象是其对应类的一个实例。

消息是一个实例与另一个实例之间传递的信息。对象间的通信靠消息传递。它请求对象执行某一处理或回答某一要求的信息,它统一了数据流和控制流。 继承是使用已有的类定义作为基础建立新类的定义技术,广义指能够直接获得已有的性质和特征,而不必重复定义他们。

继承具有传递性,一个类实际上继承了他上层的全部基类的特性。 继承分单继承和多重继承。

多态性是指同样的消息被不同的对象接受时可导致完全不同的行动的现象。

三.软件工程基础

3.1 软件工程基本概念 1、软件的相关概念

计算机软件是包括程序、数据及相关文档的完整集合。

软件按功能分为应用软件、系统软件、支撑软件(或工具软件)。

软件的特点包括:1)软件是一种逻辑实体,而不是物理实体,具有抽象性;2)软件的生产与硬件不同,它没有明显的制作过程;3)软件在运行、使用期间不存在磨损、老化问题;4)软件的开发、运行对计算机系统具有依赖性,受计算机系统的,这导致了软件移植的问题;5)软件复杂性高,成本昂贵;6)软件开发涉及诸多的社会因素。 2、软件危机与软件工程 软件工程源自软件危机。所谓软件危机是泛指在计算机软件的开发和维护过程中所遇到的一系列严重问题。软件危机主要表现在成本、质量、生产率等问题。 软件工程的主要思想是将工程化原则运用到软件开发过程,它包括3个要素:方法、工具和过程。方法是完成软件工程项目的技术手段;工具是支持软件

的开发、管理、文档生成;过程支持软件开发的各个环节的控制、管理。软件工程是应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。

软件工程过程是把输入转化为输出的一组彼此相关的资源和活动,包含4种基本活动:

(1)P——软件规格说明;(2)D——软件开发;(3)C——软件确认;(4)A——软件演进。 3、软件生命周期

软件生命周期:软件产品从提出、实现、使用维护到停止使用退役的过程。 软件生命周期分为软件定义、软件开发及软件运行维护三个阶段,主要活动阶段是:1、可行性研究与计划制定;2、需求分析;3、软件设计;4、软件实现;5、软件测试;6、运行和维护。

1)软件定义阶段:包括制定计划和需求分析。

制定计划:确定总目标;可行性研究;探讨解决方案;制定开发计划。 需求分析:对待开发软件提出的需求进行分析并给出详细的定义。 2)软件开发阶段:

软件设计:分为概要设计和详细设计两个部分。

软件实现:把软件设计转换成计算机可以接受的程序代码。 软件测试:在设计测试用例的基础上检验软件的各个组成部分。

3)软件运行维护阶段:软件投入运行,并在使用中不断地维护,进行必要的扩充和删改。

4、软件工程的目标和与原则

(1)软件工程目标:在给定成本、进度的前提下,开发出具有有效性、可靠性、可理解性、

可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性且满足用户需求的产品。

(2)软件工程需要达到的基本目标应是:付出较低的开发成本;达到要求的软件功能;取得较好的软件性能;开发的软件易于移植;需要较低的维护费用;能按时完成开发,及时交付使用。

(3)软件工程原则:抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性。

软件工程的理论和技术性研究的内容主要包括:软件开发技术和软件工程管理。

软件开发技术包括:软件开发方法学、开发过程、开发工具和软件工程环境。 软件工程管理包括:软件管理学、软件工程经济学、软件心理学等内容。 软件管理学包括人员组织、进度安排、质量保证、配置管理、项目计划等。 3.2 结构化分析方法

结构化方法的核心和基础是结构化程序设计理论。

1、需求分析

需求分析方法有:1)结构化需求分析方法;2)面向对象的分析方法。

从需求分析建立的模型的特性来分:静态分析和动态分析。 2、结构化分析方法

结构化分析方法是结构化程序设计理论在软件需求分析阶段的应用。

结构化分析方法的实质:着眼于数据流,自顶向下,逐层分解,建立系统的处理流程,以数据流图和数据字典为主要工具,建立系统的逻辑模型。

结构化分析的常用工具:1)数据流图(DFD);2)数据字典(DD);3)判定树;4)判定表。

数据流图:描述数据处理过程的工具,是需求理解的逻辑模型的图形表示,它直接支持系统功能建模。 数据流图的基本图形元素:

加工(转换):输入数据经加工变换产生输出。

数据流:沿箭头方向传送数据的通道,一般在旁边标注数据流名。 存储文件(数据源):表示处理过程中存放各种数据的文件。 源,潭:表示系统和环境的接口,属系统之外的实体。

数据字典:对所有与系统相关的数据元素的一个有组织的列表,以及精确的、严格的定义,使得用户和系统分析员对于输入、输出、存储成分和中间计算结果有共同的理解。

判定树:从问题定义的文字描述中分清哪些是判定的条件,哪些是判定的结论,根据描述材料中的连接词找出判定条件之间的从属关系、并列关系、选择关系,根据它们构造判定树。

判定表:与判定树相似,当数据流图中的加工要依赖于多个逻辑条件的取值,即完成该加工的一组动作是由于某一组条件取值的组合而引发的,使用判定表描述比较适宜。

数据字典是结构化分析的核心。

软件需求规格说明书的特点:1、正确性;2、无岐义性;3、完整性;4、可验证性;5、一致性;6、可理解性;7、可追踪性。

3.3 结构化设计方法 1、软件设计的基础

软件设计的基本目标是用比较抽象概括的方式确定目标系统如何完成预定的任务,软件设计是确定系统的物理模型。

软件设计是开发阶段最重要的步骤,是将需求准确地转化为完整的软件产品或系统的唯一途径。

从技术观点来看,软件设计包括软件结构设计、数据设计、接口设计、过程设计。 从工程角度来看,软件设计分两步完成,即概要设计和详细设计。

概要设计:又称结构设计,将软件需求转化为软件体系结构,确定系统级接口、全局数据结构或数据库模式。 详细设计:确定每个模块的实现算法和局部数据结构,用适当方法表示算法和数据结构的细节。

软件设计的一般过程:软件设计是一个迭代的过程;先进行高层次的结构设计;后进行低层次的过程设计;穿插进行数据设计和接口设计。

软件设计的基本原理包括:抽象、模块化、信息隐蔽和模块性。

1)抽象。抽象是一种思维工具,就是把事物本质的共同特性提取出来而不考虑其他细节。 2)模块化。解决一个复杂问题时自顶向下逐步把软件系统划分成一个个较小的、相对但又不相互关联的模块的过程。

3)信息隐蔽。每个模块的实施细节对于其他模块来说是隐蔽的。

4)模块性。软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他的模块的接口是简单的。

*:模块分解的主要指导思想是信息隐蔽和模块性。

模块的耦合性和内聚性是衡量软件的模块性的两个定性指标。 内聚性:是一个模块内部各个元素间彼此结合的紧密程度的度量。

*:按内聚性由弱到强排列,内聚可以分为以下几种:偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚及功能内聚。 耦合性:是模块间互相连接的紧密程度的度量。

*:按耦合性由高到低排列,耦合可以分为以下几种:内容耦合、公共耦合、外部耦合、控制耦合、标记耦合、数据耦合以及非直接耦合。 一个设计良好的软件系统应具有高内聚、低耦合的特征。

在结构化程序设计中,模块划分的原则是:模块内具有高内聚度,模块间具有低耦合度。

2、总体设计(概要设计)和详细设计 (1)总体设计(概要设计)

软件概要设计的基本任务是:1)设计软件系统结构;2)数据结构及数据库设计;3)编写概要设计文档;4)概要设计文档评审。

常用的软件结构设计工具是结构图,也称程序结构图。程序结构图的基本图符:

模块用一个矩形表示,箭头表示模块间的调用关系。在结构图中还可以用带注释的箭头表示模块调用过程中来回传递的信息。还可用带实心圆的箭头表示传递的是控制信息,空心圆箭心表示传递的是数据信息。

结构图的基本形式:基本形式、顺序形式、重复形式、选择形式。 结构图有四种模块类型:传入模块、传出模块、变换模块和协调模块。

典型的数据流类型有两种:变换型和事务型。

变换型系统结构图由输入、中心变换、输出三部分组成。

事务型数据流的特点是:接受一项事务,根据事务处理的特点和性质,选择分派一个适当的处理单元,然后给出结果。

详细设计:是为软件结构图中的每一个模块确定实现算法和局部数据结构,用某种选定的表达工具表示算法和数据结构的细节。

常见的过程设计工具有:图形工具(程序流程图)、表格工具(判定表)、语言工具(PDL)。 (2)详细设计

详细设计是为软件结构图中的每一个模块确定实现算法和局部数据结构,用某种选定的表达工具表示算法和数据结构的细节。 常用的过程设计(即详细设计)工具有以下几种:

图形工具:程序流程图、N-S(方盒图)、PAD(问题分析图)和HIPO(层次图+输入/处理/输出图)。

表格工具:判定表。 语言工具:PDL(伪码) 3.4 软件测试

1、软件测试定义:使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。 软件测试的目的:尽可能地多发现程序中的错误,不能也不可能证明程序没有错误。软件测试的关键是设计测试用例,一个好的测试用例能找到迄今为止尚未发现的错误。

2、软件测试方法:静态测试和动态测试。 静态测试:包括代码检查、静态结构分析、代码质量度量。不实际运行软件,主要通过人工进行。

动态测试:是基于计算机的测试,主要包括白盒测试方法和黑盒测试方法。 (1)白盒测试

白盒测试方法也称为结构测试或逻辑驱动测试。它是根据软件产品的内部工作过程,检查内部成分,以确认每种内部操作符合设计规格要求。 白盒测试的基本原则:保证所测模块中每一路径至少执行一次;保证所测模块所有判断的每一分支至少执行一次;保证所测模块每一循环都在边界条件和一般条件下至少各执行一次;验证所有内部数据结构的有效性。

*:白盒测试法的测试用例是根据程序的内部逻辑来设计的,主要用软件的单元测试,主要方法有逻辑覆盖、基本路径测试等。

A、逻辑覆盖。逻辑覆盖泛指一系列以程序内部的逻辑结构为基础的测试用例设计技术。通常程序中的逻辑表示有判断、分支、条件等几种表示方法。 语句覆盖:选择足够的测试用例,使得程序中每一个语句至少都能被执行一次。

路径覆盖:执行足够的测试用例,使程序中所有的可能的路径都至少经历一次。

判定覆盖:使设计的测试用例保证程序中每个判断的每个取值分支(T或F)

至少经历一次。 条件覆盖:设计的测试用例保证程序中每个判断的每个条件的可能取值至少执行一次。

判断-条件覆盖:设计足够的测试用例,使判断中每个条件的所有可能取值至少执行一次,同时每个判断的所有可能取值分支至少执行一次。

*:逻辑覆盖的强度依次是:语句覆盖<路径覆盖<判定覆盖<条件覆盖<判断-条件覆盖。

B、基本路径测试。其思想和步骤是,根据软件过程性描述中的控制流程确定程序的环路复杂性度量,用此度量定义基本路径集合,并由此导出一组测试用例,对每一条执行路径进行测试。 (2)黑盒测试

黑盒测试方法也称为功能测试或数据驱动测试。黑盒测试是对软件已经实现的功能是否满足需求进行测试和验证。

黑盒测试主要诊断功能不对或遗漏、接口错误、数据结构或外部数据库访问错误、性能错误、初始化和终止条件错误。

黑盒测试不关心程序内部的逻辑,只是根据程序的功能说明来设计测试用例,主要方法有等价类划分法、边界值分析法、错误推测法等,主要用软件的确认测试。

3、软件测试过程一般按4个步骤进行:单元测试、集成测试、确认测试和系统测试。

3.5 程序的调试

程序调试的任务是诊断和改正程序中的错误,主要在开发阶段进行,调试程序应该由编制源程序的程序员来完成。

程序调试的基本步骤:(1)错误定位;(2)纠正错误;(3)回归测试。 软件的调试后要进行回归测试,防止引进新的错误。 软件调试可分为静态调试和动态调试。静态调试主要是指通过人的思维来分析源程序代码和排错,是主要的调试手段,而动态调试是辅助静态调试。 对软件主要的调试方法可以采用: (1)强行排错法。 (2)回溯法。 (3)原因排除法。

四.数据库设计基础

4.1 数据库系统的基本概念

1、数据、数据库、数据管理系统

(1)数据:实际上就是描述事物的符号记录。

数据的特点:有一定的结构,有型与值之分,如整型、实型、字符型等。而数据的值给出了符合定型的值,如整型值15。

(2)数据库(DB) :是数据的集合,具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被各个应用程序共享。数据库存放数据是按数据所提供的数据模式存放的,具有集成与共享的特点。

(3)数据库管理系统(DBMS):一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等,是数据库的核心。 数据库管理系统功能:

1)数据模式定义:即为数据库构建其数据框架; 2)数据存取的物理构建:为数据模式的物理存取与构建提供有效的存取方法与手段;

3)数据操纵:为用户使用数据库的数据提供方便,如查询、插入、修改、删除等以及简单的算术运算及统计;

4)数据的完整性、安生性定义与检查 5)数据库的并发控制与故障恢复 6)数据的服务

数据库技术的根本目标是解决数据的共享问题。:如拷贝、转存、重组、性能监测、分析等。

为完成以上六个功能,数据库管理系统提供以下的数据语言:

(1)数据定义语言:负责数据的模式定义与数据的物理存取构建; (2)数据操纵语言:负责数据的操纵,如查询与增、删、改等;

(3)数据控制语言:负责数据完整性、安全性的定义与检查以及并发控制、故障恢复等。

数据语言按其使用方式具有两种结构形式:交互式命令(又称自含型或自主型语言)宿主型语言(一般可嵌入某些宿主语言中)。

数据库管理员:对数据库进行规划、设计、维护、监视等的专业管理人员。 数据库系统:由数据库(数据)、数据库管理系统(软件)、数据库管理员(人员)、硬件平台(硬件)、软件平台(软件)五个部分构成的运行实体。 数据库应用系统:由数据库系统、应用软件及应用界面三者组成。 2、数据库系统的发展

数据库管理发展至今已经历了三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。

文件系统阶段:提供了简单的数据共享与数据管理能力,但是它无法提供完整的、统一的、管理和数据共享的能力。

层次数据库与网状数据库系统阶段 :为统一与共享数据提供了有力支撑。

3、数据库系统的基本特点 (1)数据的高集成性。

(2)数据的高共享性与低冗余性。 (3)数据性:

数据性一般分为物理性与逻辑性两级。

物理性:物理性即是数据的物理结构(包括存储结构,存取方式等)

的改变,如存储设备的更换、物理存储的更换、存取方式改变等都不影响数据库的逻辑结构,从而不致引起应用程序的变化。

逻辑性:数据库总体逻辑结构的改变,如修改数据模式、增加新的数据类型、改变数据间联系等,不需要相应修改应用程序,这就是数据的逻辑性。 (4)数据统一管理与控制。

4、数据库系统的内部结构体系

(1)数据库系统的三级模式:

1)概念模式:数据库系统中全局数据逻辑结构的描述,是全体用户(应用)公共数据视图。

2)外模式:也称子模式或用户模式,它是用户的数据视图,也就是用户所见到的数据模式,它由概念模式推导而出。

3)内模式:又称物理模式,它给出了数据库物理存储结构与物理存取方法。内模式的物理性主要体现在操作系统及文件级上,它还未深入到设备级上(如磁盘及磁盘操作)。内模式对一般用户是透明的,但它的设计直接影响数据库的性能。

(2)数据库系统的两级映射:

1)概念模式/内模式的映射:实现了概念模式到内模式之间的相互转换。当数据库的存储结构发生变化时,通过修改相应的概念模式/内模式的映射,使得数据库的逻辑模式不变,其外模式不变,应用程序不用修改,从而保证数据具有很高的物理性。

2)外模式/概念模式的映射:实现了外模式到概念模式之间的相互转换。当逻辑模式发生变化时,通过修改相应的外模式/逻辑模式映射,使得用户所使用

的那部分外模式不变,从而应用程序不必修改,保证数据具有较高的逻辑性。 4.2 数据模型

1、数据模型:是数据特征的抽象,从抽象层次上描述了系统的静态特征、动态行为和约束条件,为数据库系统的信息表与操作提供一个抽象的框架。描述了数据结构、数据操作及数据约束。 2、实体联系模型及E-R图

(1)实体:现实世界中的事物; (2)属性:事物的特性;

(3)联系:现实世界中事物间的关系。实体集的关系有一对一、一对多、多对多的联系。

E-R模型三个基本概念之间的联接关系:实体是概念世界中的基本单位,属性有属性域,每个实体可取属性域内的值。一个实体的所有属性值叫元组。 E-R模型的图示法:1、实体集表示法;2、属性表法;3、联系表示法。 层次模型的基本结构是树形结构,具有以下特点: (1)每棵树有且仅有一个无双亲结点,称为根; (2)树中除根外所有结点有且仅有一个双亲。

从图论上看,网状模型是一个不加任何条件的无向图。

关系模型采用二维表来表示,简称表,由表框架及表的元组组成。一个二维表就是一个关系。

在二维表中凡能唯一标识元组的最小属性称为键或码。从所有侯选健中选取一个作为用户使用的键称主键。表A中的某属性是某表B的键,则称该属性集为A的外键或外码。

关系中的数据约束:

(1)实体完整性约束:约束关系的主键中属性值不能为空值; (2)参照完全性约束:是关系之间的基本约束;

(3)用户定义的完整性约束:它反映了具体应用中数据的语义要求。 E-R模型的图示法:

1)实体集:用矩形表示。 2)属性:用椭圆形表示。 3)联系:用菱形表示。

4)实体集与属性间的联接关系:用无向线段表示。 5)实体集与联系间的联接关系:用无向线段表示。 3、数据库管理系统常见的数据模型有层次模型、网状模型和关系模型三种。 4.3 关系代数

关系数据库系统的特点之一是它建立在数据理论的基础之上,有很多数据理论可以表示关系模型的数据操作,其中最为著名的是关系代数与关系演算。

1、关系的数据结构

关系是由若干个不同的元组所组成,因此关系可视为元组的集合。n元关系是一个n元有序组的集合。

关系模型的基本运算:1)插入;2)删除;3)修改;4)查询(包括投影、选择、笛卡尔积运算)。 2、关系操纵

关系模型的数据操纵即是建立在关系上的数据操纵,一般有查询、增加、删除和修改四种操作。

3、集合运算及选择、投影、连接运算

(1)并(∪):关系R和S具有相同的关系模式,R和S的并是由属于R或属于S的元组构成的集合。

(2)差(-):关系R和S具有相同的关系模式,R和S的差是由属于R但不属于S的元组构成的集合。

(3)交(∩):关系R和S具有相同的关系模式,R和S的交是由属于R且属于S的元组构成的集合。 (4)广义笛卡尔积(×):设关系R和S的属性个数分别为n、m,则R和S的广义笛卡尔

积是一个有(n+m)列的元组的集合。每个元组的前n列来自R的一个元组,后m列来自S的一个元组,记为R×S。

*:根据笛卡尔积的定义:有n元关系R及m元关系S,它们分别有p、q个元组,则关系R与S经笛卡尔积记为R×S,该关系是一个n+m元关系,元组个数是p×q,由R与S的有序组组合而成。

例:有两个关系R和S,分别进行并、差、交和广义笛卡尔积运算。 (5)在关系型数据库管理系统中,基本的关系运算有选择、投影与联接三种操作:

1)选择:选择指的是从二维关系表的全部记录中,把那些符合指定条件的记录挑出来。

2)投影:投影是从所有字段中选取一部分字段及其值进行操作,它是一种纵向操作。

3)联接:联接将两个关系模式拼接成一个更宽的关系模式,生成的新关系中包含满足联接条件的元组。 4.4 数据库设计方法和步骤

(1)数据库设计阶段包括:需求分析、概念分析、逻辑设计、物理设计。 (2)数据库设计的每个阶段都有各自的任务:

1)需求分析阶段:这是数据库设计的第一个阶段,任务主要是收集和分析数据,这一阶段收集到的基础数据和数据流图是下一步设计概念结构的基础。 2)概念设计阶段:分析数据间内在语义关联,在此基础上建立一个数据的抽象模型,即形成E-R图。

3)逻辑设计阶段:将E-R图转换成指定RDBMS中的关系模式。

4)物理设计阶段:对数据库内部物理结构作调整并选择合理的存取路径,以提高数据库访问速度及有效利用存储空间。 数据库设计是数据应用的核心。 数据库设计的两种方法:

(1)面向数据:以信息需求为主,兼顾处理需求; (2)面向过程:以处理需求为主,兼顾信息需求。

数据库的生命周期:需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、编码阶段、测试阶段、运行阶段、进一步修改阶段。

需求分析常用结构析方法和面向对象的方法。结构化分析(简称SA)方法用自顶向下、逐层分解的方式分析系统。用数据流图表达数据和处理过程的关系。对数据库设计来讲,数据字典是进行详细的数据收集和数据分析所获得的主要结果。

数据字典是各类数据描述的集合,包括5个部分:数据项、数据结构、数据流(可以是数据项,也可以是数据结构)、数据存储、处理过程。

数据库概念设计的目的是分析数据内在语义关系。设计的方法有两种 (1)集中式模式设计法(适用于小型或并不复杂的单位或部门); (2)视图集成设计法。

设计方法:E-R模型与视图集成。

视图设计一般有三种设计次序:自顶向下、由底向上、由内向外。 视图集成的几种冲突:命名冲突、概念冲突、域冲突、约束冲突。 关系视图设计:关系视图的设计又称外模式设计。

关系视图的主要作用:

(1)提供数据逻辑性;

(2)能适应用户对数据的不同需求; (3)有一定数据保密功能。

数据库的物理设计主要目标是对数据内部物理结构作调整并选择合理的存取路径,以提高数据库访问速度有效利用存储空间。一般RDBMS中留给用户参与物理设计的内容大致有索引设计、集成簇设计和分区设计。 数据库管理的内容: (1)数据库的建立; (2)数据库的调整; (3)数据库的重组;

(4)数据库安全性与完整性控制; (5)数据库的故障恢复; (6)数据库监控。

附: C语言最重要的知识点总结

第一部分 C语言程序设计复习资料 总体上必须清楚的:

程序有3中基本结构: 顺序结构 、选择结构 和 循环结构。

用C语言编写的程序称为C语言源程序,源程序文件的后缀名为―.c‖;源程序经编译后生成后缀名为―.obj‖的目标文件;再把目标文件与各种库函数连接起来,生成―.exe‖的可执行文件。

main函数,又称主函数,每个C程序有且只有一个main函数;无论main函数在整个程序中的位置如何,程序总是从main函数开始执行、也从main函数

结束。读程序时应从main函数开始, 然后从上往下读(碰到循环做循环,碰到选择做选择)。

无论是数值数据还是非数值数据(如字符等)在计算机中均以 二进制 形式存储;由0或1构成的二进制称为位(bit),八个位构成一个字节(Byte),1个Byte=8个bit。二进制、八进制、十六进制转化为十进制采用按权展开法进行,十进制转化为二进制、八进制、十六进制采用除R取余法(R可取2、8或16);数据的存放位置就是它的地址。 概念常考到的:

编译预处理不是C 语言的一部分,不占运行时间,不要加分号。 每个C 语言程序中main 函数是有且只有一个。

在函数定义中不可以再定义函数、即不允许函数嵌套定义。 算法可以没有输入,必须要有输出。

break只能用于循环结构和switch语句中。 逗号运算符的级别最低。

任意合法的表达式一定有一个数值与它对应。 第一章 C语言基础知识 【考点1】C程序书写规范

每条C语句的后面必须有一个分号,分号是语句的一部分;一行内可写多条语句,一个语句可以分成多行书写。

C程序中对字母的大小写是敏感的,如A与a是不同的标识符。

注释:是对程序的说明,目的是提高程序的可读性,可出现在程序中任意合适的地方,注释从―/*‖开始到最近一个―*/‖结束,其间任何内容都不会被计算机执行,不允许嵌套注释。 【考点2】标识符

合法的标识符只能由字母、数字和下划线组成,并且不能以数字开头;预定义标识符可以当作合法的用户标识符,用户标识符不能与关键之相同;

例如main、define、scanf、printf 都不是关键字;If是合法的用户标识符,而if是关键字、不能用作用户标识符;

注意:连接(-)符不能出现在标识符中;区分字母o与数字0;熟悉常见的关键字 【考点3】判断常量是否合法

常量是指在程序运行过程中,其值不能改变的量;分为整型常量、实型常量、字符常量、字符串常量、符号常量5种。

整型常量:有十进制、八进制和十六进制三种表示形式,没有二进制形式;八进制整型常量加前导数字0,十六进制常量加前导0X,八进制常量中每个数位的数值不会大于7。

例如:- 080不是合法的整型常量

实型常量:有两种表示形式:小数形式和指数形式;掌握判定指数形式合法性。 口诀:E前E后必有数,E后必须为整数。 字符常量:稍后介绍

字符串常量:注意空串和空格串的区别

符号常量:如使用define定义的常量M,#define M 3 【考点4】变量

在程序运行过程中其值可以改变的量称为变量。 整型变量可分为基本整型(int)、短整型(short)、长整型(long)、和无符号

整型(unsigned);一个基本整型占4个字节,其它类型的整型占用字节数和取值范围详见教材第16页,注意:变量在计算机中所占用存储空间的大小由C语言编译系统决定。

实型变量分为单精度型(float)和双精度型(double),单精度型占四个字节。 【考点5】字符型数据

字符型数据包括字符常量和字符变量,在计算机中占用1个字节的存储空间;计算机处理时把字符型数据当作等值的整型ASCII值进行存储或运算。 转义字符:

在程序中 int a = 0x6d,是把一个十六进制的数给变量a 注意这里的0x 必须存在。

在程序中 int a = 06d, 是一个八进制的形式。

在转义字符中,‘\\x6d‘ 才是合法的,0 不能写,并且x 是小写。 ‗\\141‘ 是合法的, 0 是不能写的。 ‗\\108‘是非法的,因为不可以出现8 大小写字母的转换:

大写字母转换成对应小写字母:ch + 32 如 ‗A‘ + 32 = ‗a‘ 小写字母转换成对应大写字母:ch – 32 如 ‗y‘ – 32 = ‗Y‘ 数字字符与对应数字的转换:ch – 48 如 ‗1‘ – 48 = 1 【考点6】算术运算

算术运算符一共有+、—、*、/、%这五个;求余运算要求运算对象只能为整型,除法运算符两边运算对象都为整型时,运算结果也为整型,即舍掉小数部分。 例如:18 / 10结果为1,而不是1.8 ; 3.5 % 3是非法的表达式 【考点7】强制类型转换

将一个运算对象转换成指定类型,格式为(类型名)表达式,注意小括号位置。 例如:(int)3.8结果为3 ;而int(3.8)是非法的表达式 【考点8】赋值运算及表达式

赋值运算符为―=‖,不同于关系等于―= =‖。赋值表达式格式为:变量名=表达式,赋值运算符左边必须为变量,赋值运算是把赋值运算符右边表达式的值赋给左边变量。

复合赋值运算符是将算术运算符或位运算符与赋值运算符组合在一起组成的运算符,掌握复合赋值表达式转化为赋值表达式的方法。如n+=100可转化为n=n+100。

注意赋值运算符和复合赋值运算符的优先级仅仅高于逗号运算符,结合性为从右到左

例如:有语句 int a=5 ;

表达式 a = 6 值为6,而表达式 a = = 6结果为0 【考点9】表达式的考查 是表达式就一定有数值。

赋值表达式:表达式数值是最左边的数值,a=b=5;该表达式为5,常量不可以赋值。

自加、自减表达式:

考试口诀:++在前先加后用,++在后先用后加。

逗号表达式:优先级别最低 ; 表达式的数值逗号最右边的那个表达式的数值。 (2,3,4)的表达式的数值就是4。

【考点10】位运算

处理方法:几乎所有的位运算的题目都要按这个流程来处理(先把十进制变成二进制再变成十进制)。 例1: char a = 6, b;

b = a<<2; 这种题目的计算是先要把a 的十进制6 化成二进制,再做位运算。 例2: 一定要记住,异或的位运算符号。0 异或 1 得到1。 0 异或 0 得到0。两个女的生不出来。 1 异或 1 得到0。两个男的生不出来。

考试记忆方法:一男(1)一女(0)才可以生个小孩(1)。

例3: 在没有舍去数据的时候,<<左移一位表示乘以2;>>右移一位表示除以2。 【考点11】三种取整丢小数的情况 1、int a =1.6; 2、(int)a; 3、 3/2;

【考点12】字符型和整数是近亲 char a = 65 ;

printf(―%c‖, a); 得到的输出结果:a printf(―%d‖, a); 得到的输出结果:65 第二章 数据的输入输出 【考点1】printf函数 %d 对应整型;%c 对应字符;%f 对应单精度等;宽度及左对齐等修饰;%ld 对应 long int;%lf 对应double。 【考点2】scanf函数

注意该函数的第二个部分是&a这样的地址,不是a;scanf(―%d%d%*d%d‖,&a,&b,&c); 跳过输入的第三个数据。 【考点3】putchar函数和getchar函数

char a = getchar() 是没有参数的,从键盘得到你输入的一个字符(包括回车、空格等字符)给变量a。

【考点4】如何交换两个变量a和b

使用中间变量t,交换语句为:t=a ; a=b ; b=t

【考点5】如何实现保留三位小数,第四位四舍五入的程序 (int)( n*1000 + 0.5) / 1000.0 第三章 选择结构 【考点1】关系运算

C语言用非0表示逻辑真,用0表示逻辑假。关系运算符有6个,分别是>,>=,<,<=,==,!=,前四种优先级高于后两种。关系表达式真时为1,假时为0。注意a逻辑运算符共有3个:逻辑与(&&),逻辑或(||),逻辑非(!)。注意短路现象,例a++||b++,如果表达式a++的值非零,则表达式b++不再执行。 【考点3】运算符的优先级和结合顺序

运算符按参加运算的对象数目可分为单目运算符、双目运算符和三目运算符。初等运算符的优先级别最高,然后依次是单目运算符、算术运算符、关系运算符、逻辑运算符(除逻辑非!)、条件运算符、赋值运算符、逗号运算符。位运

算符优先级介于算术运算符与逻辑运算符之间。结合顺序大多为自左向右,而自右向左的有三个:单目运算符、条件运算符和赋值运算符。 【考点4】if语句

可以单独出现,也可以与else匹配出现。if语句可以嵌套,这时else总是与离它最近的且没有与else匹配的if匹配。 【考点5】条件运算

是唯一的三目运算符,格式为:表达式1?表达式2:表达式3。表达式1值为非0时,整个表达式值为表达式2的值,表达式1值为0时,整个表达式值为表达式3的值。 口诀:真前假后

【考点6】switch语句

注意每条case后有没有break语句的区别。

switch 只可以和break一起用,不可以和continue用。

switch(x) /*x是整型、字符型,枚举型常量或变量,不能是实型*/ { case 1: /*case后不可以是变量,必须是常量*/ case 2: }

注意default是可省的、其在程序中出现的位置影响程序的结果 口诀:switch表不为实,case表不为变 第四章 循环结构

【考点1】三种循环结构

a) for() 、 while( ) 和do- while( )三种。

b)for 循环当中必须是两个分号,千万不要忘记。 c)写程序的时候一定要注意,循环一定要有结束的条件,否则容易造成死循环。 d) do-while()循环的最后一个while();的分号一定不能够丢。(当心上机改错),do-while

循环是至少执行一次循环。

【考点2】break 和 continue区别

break是终止所在整个循环,而continue是提前结束本轮循环。break语句可出现在循环结构与switch语句中,continue只出现在循环结构中。 【考点3】嵌套循环

就是有循环里面还有循环,这种比较复杂,要一层一层一步一步耐心的计算,一般记住两层是处理二维数组的。 【考点4】循环结构的复习

循环结构是重点,笔试所占分值一般在13分左右,在上机考试中也是必考点,应用性很强。要求学员重点理解并多加练习,领会掌握。 【考点5】while((c=getchar())!=‘\\n‘) 和 while(c=getchar() !=‘\\n‘)的差别

先看a = 3 != 2 和 (a=3)!=2 的区别:

(!=号的级别高于=号 所以第一个先计算 3!=2) 第一个a 的数值是得到的1;第二个a 的数值是3。 第五章 函数

函数:是具有一定功能的一个程序块;是C 语言的基本组成单位。 【考点1】函数的定义、参数、调用和返回值(示意图)

【考点2】函数的调用

程序从上往下执行,当碰到函数名后,把值传给调用函数,当程序得到了返回值或调用函数结束,再顺序往下执行。 【考点3】函数的声明

函数要―先定义后调用‖,或―先声明再调用后定义‖。函数的声明一定要有函数名、函数返回值类型、函数参数类型,但不一定要有形参的名称。 【考点4】函数的参数及值传递

形式参数简称形参,是定义函数时函数名后面括号中的参数。实在参数简称实参,是调用函数时函数名后面括号中的参数。实参和形参分别占据不同的存储单元。实参向形参单向传递数值。

―传值‖与―传址‖的区别:传数值的话,形参的变化不会改变实参的变化。传地址的话,形参的变化就有可能改变实参所对应的量。 【考点5】函数的递归调用

函数直接或间接地调用自己称为函数的递归调用。递归调用必须有一个明确的结束递归的条件。在做递归题时可把递归的步骤一步步写下来,不要弄颠倒了,会做简单递归题目即可。 【考点6】要求掌握的库函数

sqrt()算术平方根函数,fabs()绝对值函数,pow()幂函数,sin()正弦函数 第六章 指针

【考点1】指针变量

指针变量是用来存储地址的,而一般变量是存储数值的。指针变量可指向任意一种数据类型,但不管它指向的数据占用多少字节,一个指针变量占用四个字节。

【考点2】指针变量的定义及初始化 格式:类型名 *指针变量名。

指针变量在使用前必须要初始化,把一个具体的地址赋给它,否则引用时会有副作用,如果不指向任何数据就赋―空值‖NULL。 两种初始化方式:

方法一:int a=2,*p=&a;(定义的同时初始化) 方法二:int a=2,*p; (定义之后初始化) p=&a;

【考点3】指针变量的引用

&是取地址符,*是间接访问运算符,它们是互逆的两个运算符。在指针变量名前加间接访问运算符就等价它所指向的量。

指针变量是存放地址的。并且指向哪个就等价哪个,所有出现*p 的地方都可以用它等价的代替。

例如:int a=2,*p=&a; *p=*p+2;

(由于*p 指向变量a,所以指向哪个就等价哪个,这里*p 等价于a,可以相当于是a=a+2)

【考点4】指针的运算

*p++和(*p)++之间的差别:*p++是地址变化,(*p)++是指针变量所指的数据变化。一个指针变量加一个整数不是简单的数学相加,而是连续移动若干地址。

当两个指针指向同一数组时,它们可以比较大小进行减法运算。 第七章 数组

【考点1】数组相关概念 对a[10]这个数组的讨论。

1、a 表示数组名,是第一个元素的地址,也就是元素a[0]的地址。

2、a 是地址常量,所以只要出现a++,或者是a=a+2 赋值的都是错误的。 3、a 是一维数组名,所以它是列指针,也就是说a+1 是跳一列。 对a[3][3]的讨论。

1、a 表示数组名,是第一个元素的地址,也就是元素a[0]的地址。

2、a 是地址常量,所以只要出现a++,或者是a=a+2 赋值的都是错误的。 3、a 是二维数组名,所以它是行指针,也就是说a+1 是跳一行。

4、a[0]、a[1]、a[2]也都是地址常量,不可以对它进行赋值操作,同时它们都是列指针,a[0]+1,a[1]+1,a[2]+1 都是跳一列。

5、注意a 和a[0] 、a[1]、a[2]是不同的,它们的基类型是不同的。前者是一行元素,后三者是一列元素。

【考点2】数组的初始化,一维数组下标可省略,二维数组第二个下标不可省略 int a[]={1,2} 合法。 int a[][4]={2,3,4}合法。 但int a[4][]={2,3,4}非法。

【考点3】数组元素的引用

数组元素的下标从0开始,到数组长度减1结束。所以int a[5];中数组最后一个元素是a[4]。要把数组元素看作一个整体,可以把a[4]当作一个整型变量。 【考点4】二维数组做题目的技巧

如果有a[3][3]={1,2,3,4,5,6,7,8,9}这样的题目。 步骤一:把他们写成: 第一列 第二列 第三列 a[0]à 1 2 3 ->第一行 a[1]à 4 5 6 —>第二行 a[2]à 7 8 9 ->第三行 步骤二:按照以下方式理解

*(a[0]+1)我们就知道是第一行的第一个元素往后面跳一列,那么这里就是a[0][1]元素,所以是1。

*(a[1]+2)我们就知道是第二行的第一个元素往后面跳二列。那么这里就是a[1][2]元素,所以是6。

记住:只要是二维数组的题目,一定是写成如上的格式,再去做题目,这样会比较简单。

【考点5】行指针 int a[1][2];

其中a 现在就是一个行指针,a+1 跳一行数组元素。 搭配(*)p[2]指针

a[0],a[1]现在就是一个列指针。a[0]+1 跳一个数组元素。搭配*p[2]指针数组使用

【考点6】脱衣法则

a[2] 变成 *(a+2) a[2][3]变成 *(a+2)[3]再可以变成 *(*(a+2)+3)

其它考试重点

文件的复习方法:

1)字符串的 strlen() 和 strcat() 和strcmp() 和strcpy()的使用方法一定要记住。他们的参数都是地址。其中strcat() 和strcmp()有两个参数。

2)strlen 和 sizeof的区别也是考试的重点;

3)define f(x)(x*x) 和 define f(x) x*x 之间的差别。一定要好好的注意这写容易错的地方,替换的时候有括号和没有括号是很大的区别。

4)int *p;

p = (int *)malloc(2);

p = (int *)malloc(sizeof(int));以上两个等价 当心填空题目,malloc的返回类型是 void *

5)还有main(int argc,char **argv) {} 这种含有参数的题目,是很呆板的题目。第一个参数是表示输入的字符串的数目,第二个参数是指向存放的字符串。

6)函数的递归调用一定要记得有结束的条件,并且要会算简单的递归题目。要会作递归的题目

7)结构体和共用体以及链表要掌握最简单的。typedef考的很多,而且一定要知道如何引用结构体中的各个变量,链表中如何填加和删除节点,以及何如构成一个简单的链表,一定记住链表中的节点是有两个域,一个放数值,一个放指针。

8)函数指针的用法(*f)()记住一个例子:

int add(int x, int y) {....} main()

{ int (*f)(); f=add; }

赋值之后:合法的调用形式为: 1、add(2,3); 2、f(2,3);

3、(*f)(2,3)

9)两种重要的数组长度: char a[]={‘a’,’b’,’c’}; 数组长度为3,字符串长度不定。sizeof(a)为3。

char a[5]={ ‘a’,’b’,’c’} 数组长度为5,字符串长度3。sizeof(a)为5。

10)scanf 和 putchar的数据:

如果输入的是 good good study!

那么scanf(“%s”,a); 只会接收 good. 考点:不可以接收空格。 getchar(a); 会接收 good good study! 考点:可以接收空格。

11)共用体的考查:

union TT

{ int a;

char ch[2];}

考点一: sizeof (struct TT) = 2; 考点二: TT t1 ; t1=0x1234;

那么 ch[0]=0x 34; ch[1]=0x12

以下对改错题的改错方式做一些总结(当然这些总结只能对大部分改错行有效)。

1、若错误行是函数首部,可分为以下几种情况:

A、该行最后若有分号则删除,中间若有分号则改成逗号

B、形参类型不一致的问题,特别是指针类型,若后面用到某形参时有指针运算则该形参必为指针类型;若形参是二维数组或指向m个元素的指针变量,则第二维的长度必须与main中对应数组的第二维长度相同 C、函数类型不一致的问题,若函数中没有return语句则函数类型为void,若有return语句则函数的类型必须与return后变量的类型一致。

2、若错误行是if或while语句,则首先看有没有用小括号将整个表达式括起,若没有则加上小括号。

3、若错误行中有if、while、for则要特别注意条件表达式的错误问题: A、指针变量的应用,若表达式中有指针变量且没有指针运算符,则加上指针运算符

B、若条件表达式中只有一个等于号,则改成两个等于号,若为其它比较运算符则一般是进行逆转或加一个等于号

C、for中要用分号分隔表达式,而不是用逗号

4、语法错误

A、语句缺少分号,若错误行中有语句没有用分号结束,则加上分号。 B、大小写不对,若错误行中有大写字母则一般都改成小写字母。

5、指针变量的运用,若错误行中有指针变量,并且该变量名前没有指针运算符则一般都是加上指针运算符

6、若错误行为return语句,则首先看是否是缺少分号若是则加上分号即可;否则就是return后的变量或表达式错误(此时可通过看题意,来分析该返回哪一变量或表达式)

7、若错误行中见到整型1除以某个表达式时,一概改成1.0。但若是整型变量或表达式则只能用强制转换

8、复合运算符写错

9、字符串结束符写错,若有字符串结束符则要特别注意有没有写错,但第11题例外,因为该题是要将数字字符转换成对应的数字。

10、若错误行是定义语句,则首先看类型是否符合;再看所赋初值是否正确;若以上均不是,则看是否少定义了某个变量或少了花括号。

11、表达式错误(占的份量最多,并且没有统一的改法,我们只能通过题目要求来分析并修改)

12、若错误行中有一条横线,则必须将横线删除再填空。填空题中亦是如此。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baijiahaobaidu.com 版权所有 湘ICP备2023023988号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务