计算机二级C语言知识点

Posted nufe_wwt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机二级C语言知识点相关的知识,希望对你有一定的参考价值。

计算机二级C语言知识点

第一章 数据与算法

1.1 算法

  1. 各种排序方法中最坏情况下需要比较的次数分别为:冒泡排序n(n-1)/2、快速排序n(n-1)/2、简单插入排序n(n-1)/2、简单选择排序n(n-1)/2、希尔排序O(n1.5)、堆排序O(nlog2n)。

  2. 算法复杂度,即算法在编写成可执行程序后,运行时所需要的资源,资源包括时间资源和内存资源。一个算法的评价主要从时间复杂度和空间复杂度来考虑。算法的时间复杂度是指执行算法所需要的计算工作量。空间复杂度是指算法在计算机内执行时所需存储空间的度量。

  3. 对于长度为n的有序线性表,在最坏情况下,二分法查找只需比较log2n次,而顺序查找需要比较n次。

  4. 所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。在循环队列中,用队尾指针rear指向队列中的队尾元素,用队头指针front指向队头元素的前一个位置。循环队列的主要操作是:入队运算和退队运算。每进行一次入队运算,队尾指针就进一。每进行一次退队运算,队头指针就进一。当rear或front等于队列的长度加1时,就把rear或front值置为1。所以在循环队列中,队头指针可以大于队尾指针,也可以小于队尾指针。

  5. 算法的空间复杂度是指执行这个算法所需要的内存空间。这个内存空间包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间。

  6. 冒泡排序、简单选择排序和直接插入排序法在最坏的情况下比较次数为:n(n-1)/2。而堆排序法在最坏的情况下需要比较的次数为O(nlog2n)。其中堆排序的比较次数最少。

  7. 栈是一种限定在一端进行插入与删除的线性表。在主函数调用子函数时,要首先保存主函数当前的状态,然后转去执行子函数,把子函数的运行结果返回到主函数调用子函数时的位置,主函数再接着往下执行,这种过程符合栈的特点。所以一般采用栈式存储方式。

  8. 算法的有穷性,是指算法必须能在有限的时间内做完,即算法必须能在执行有限个步骤之后终止。

  9. 算法的时间复杂度,是指执行算法所需要的计算工作量。算法的工作量可以用算法在执行过程中所需基本运算的执行次数来度量

1.2 数据结构的基本概念

  1. 影响程序执行效率的因素有很多,如数据的存储结构、程序处理的数据量、程序的算法等。顺序存储结构和链式存储结构在数据插入和删除操作上的效率就存在差别。其中,链式存储结构的效率要高一些。

1.3 线性表及其顺序存储结构

  1. 根据数据结构中各数据元素之间的前后件关系的复杂程度,一般将数据结构分这两大类型:线性结构与非线性结构。如果一个非空的数据结构满足两个条件:①有且只有一个根结点;②每一个结点最多有一个前件,也最多有一个后件。称该数据结构为线性结构,又称为线性表。对于这个题目来说,有且只有一个根结点的数据结构可能是线性结构,也可能是非线性结构。具有一个根结点的树就是一个非线性结构。
  2. 栈是允许在栈顶进行插入和删除的线性表,不允许在栈底进行插入与删除。通常用指针top来指示栈顶的位置,用指针bottom指向栈底。对栈的操作有入栈和退栈两种。入栈运算:首先将栈顶指针进一(即top加1),然后将新元素插入到栈顶指针指向的位置。退栈运算:首先将栈顶元素(栈顶指针指向的元素)赋给一个指定的变量,然后将栈顶指针退一(即top减1)。因为初始状态为top=0,经过入栈和退栈操作后栈中的元素个数就是top指针指向的位置。
  3. 排序方法 最坏时间复杂度 最好时间复杂度 平均时间复杂度
    直接插入 O(n2) O(n) O(n2)
    简单选择 O(n2) O(n2) O(n2)
    冒泡排序 O(n2) O(n) O(n2)
    快速排序 O(n2) O(nlog2n) O(nlog2n)
    堆排序 O(nlog2n) O(nlog2n) O(nlog2n)
    归并排序 O(nlog2n) O(nlog2n) O(nlog2n)
  4. 有序表的对分查找条件是有序表为顺序存储。
  5. 顺序查找:①如果线性表为无序表(即表中元素的排序是无序的),则无论是顺序存储结构还是链式存储结构,都只能用顺序查找;②即使是有序线性表,如果采用链式存储结构,也只能用顺序查找。分块查找(又称索引顺序查找):分块有序表结构分为两部分,①线性表本身采用顺序存储结构;②在建立一个索引表,在索引表中,对线性表的每个子表建立一个索引结点,每个结点包括两个域:一是数据域,用于存放对应子表中的最大元素值;二是指针域,用于指示对应子表的第一个元素在整个线性表中的序号。显然索引表关于数据域是有序的。
  6. 计算机中数据按照其数据逻辑结构,可以分为线性结构和非线性结构。而数据在内存或磁盘中的存储,可以分为顺序存储和链式存储。数据的逻辑结构与存储结构之间没有对应的关系。

1.4 栈和队列

  1. 在循环队列中元素的个数为“(rear-front+M)%M”,式中rear为队尾指针,front为队首指针,M为存储容量,%为取余符号。

  2. A)(91,85,53,36,47,30,24,12)
    B)(91,85,53,47,36,30,24,12)
    C)(47,91,53,85,30,12,24,36)
    D)(91,85,53,47,30,12,24,36)

    堆可以看成一棵完全二叉树:任一根节点>=左右孩子(或者<=),(大的叫大根堆,小的叫小根堆)。注意一个堆中的这种性质有一致性,不能既有大于又有小于情况存在。此题可以这么做,把结点按照完全二叉树画出来就一目了然了。这个题目很明显91是最大的根,而选项C是“左根右”的排序,那么91的左边只有47,其他都在右边,而右边无法按照此顺序排列,所以选项C不是堆。3. 带链栈的栈底指针是随栈的操作而动态变化的

1.5 线性链表

  1. 算法的时间复杂度,是指执行算法所需要的计算工作量,算法的工作量用算法所执行的基本运行次数来度量,所以与运行算法时特定的输入有关,

  2. 在一个长度为n的线性表中顺序查找值为x的元素时,在等概率情况下查找成功时平均查找长度为(n+1)/2

  3. 在顺序存储的线性表中寻找最大项,其平均情况与最坏情况下的时间复杂度都是n/2。

  4. 在具有2n个结点的完全二叉树中,叶子结点个数为:(2n+1)/2取整,其值等于n。

1.6 树与二叉树

  1. 冒泡排序只交换相邻元素,但不是每次移动都产生新的逆序。简单插入排序的元素移动不会产生新的逆序。快速排序每一次交换移动都会产生新的逆序,因为当不会有新的逆序产生时,本轮比较结束。

1.7 查找技术

  1. 堆中某个结点的值总是不大于或不小于其父结点的值、堆总是一棵完全二叉树,可以以顺序存储结构存储;队列的存储结构分为链式存储、顺序存储两种;栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表,可以以顺序存储结构存储

  2. 带链栈的栈底指针是随栈的操作而动态变化的;若带链队列的队头指针与队尾指针相同,则队列可能为0也可能为1。

  3. 双向链表是线性结构链式存储的;

  4. 循环队列、循环队列、二维数组是顺序存储结构。

  5. 循环链表中有一个表头结点、循环链表实现了空表与非空表运算的统一、循环链表的表头指针与循环链表中最后一个结点的指针均指向表头结点

1.8 排序技术

  1. 在希尔排序法中,每经过一次数据交换后能消除多个逆序

  2. 根据数据结构中各数据元素之间的前后件关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。有序线性表既可以采用顺序存储结构,又可以采用链式存储结构。所有的线性结构都可以采用顺序存储结构。

第二章 程序设计基础与软件工程(基本会)

2.1 程序设计方法与风格

  1. 在软件开发中,需求分析阶段产生的主要文档是软件需求规格说明书。

  2. 程序流程图、通常也称为程序框图。其中,用带箭头的线段表示控制流,用矩形表示加工步骤,用菱形表示逻辑条件。

  3. 结构化程序设计方法的主要原则可以概括为:自顶向下,逐步求精,模块化和限制使用GOTO语句,其中不包括多态性。

  4. 在软件开发中,需求分析阶段常使用的工具有数据流图(DFD),数据字典(DD)、判断树和判断表。

  5. 对象具有如下特征:标识惟一性、分类性、多态性、封装性、模块独立性。

  6. 数据流图是从数据传递和加工的角度,来刻画数据流从输入到输出的移动变换过程。其中带箭头的线段表示数据流,沿箭头方向传递数据的通道,一般在旁边标注数据流名。

  7. 一般一个较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。

  8. 软件测试是为了发现错误而执行程序的过程

  9. 结构化程序的基本结构有:顺序结构、选择结构和循环结构,没有GOTO跳转结构。

  10. 需求分析阶段的工作可分为4个阶段:需求获取、需求分析、编写需求规格说明书、需求评审。

  11. 软件危机主要表现在6个方面:① 软件需求的增长得不到满足;② 软件开发成本和进度无法控制;③ 软件质量难以保证;④ 软件不可维护或维护程度非常低;⑤ 软件的成本不断提高;⑥ 软件开发生产率的提高赶不上硬件的发展和应用需求的增长。

  12. 软件规格说明书主要有三个作用:①用户和软件开发人员之间的合同;②开发人员进行设计和编程的依据;③软件工程项目验收的依据。

  13. 采用黑盒技术设计测试用例的方法有:等价类划分、边界值分析、错误推测、因果图和综合策略。

  14. 数据流图(Data Flow Diagram):简称DFD,它从数据传递和加工角度,以图形方式来表达系统的逻辑功能、数据在系统内部的逻辑流向和逻辑变换过程,是结构化系统分析方法的主要表达工具及用于表示软件模型的一种图示方法。数据流程图的主要元素包括:数据项、数据结构、数据流、数据源、数据存储、对数据的处理;而数据字典的组成包括:数据项、数据结构、数据流、数据存储和处理过程。说明数据字典所定义的对象均包含于数据流图。

  15. 白盒测试的主要方法有逻辑覆盖、基本路径测试等。

  16. 对象是面向对象方法中最基本的概念。操作描述了对象执行的功能,通过消息传递,还可以为其它对象使用。操作过程是被封装在对象中,用户看不到,称之为对象的封装性。对象的多态性是指同一个操作可以是不同对象的行为。不是所有的对象都必须有继承性。

  17. 软件测试实施的步骤有单元测试、集成测试和确认测试。

  18. 在软件开发的过程中,应该尽早的制定测试计划,其中在需求分析阶段制定系统测试计划,在概要设计阶段制定集成测试计划,在详细设计阶段制定单元测试计划。

1.9 扇出指的是由一个模块直接调用的其它模块数。扇入数指该模块在结构图中的直接上层模块数

2.2结构化程序设计

  1. 软件工程包括三个要素:方法、工具和过程。

  2. 通常软件测试实施的步骤是:单元测试、集成测试、确认测试

  3. 结构化分析方法的常用工具:数据流图(DFD)、数据字典(DD)、判定表、判定树。常用的过程设计工具如下所述:图形工具(程序流程图、N-S图、PAD图、HIPO)、表格工具(判定表)、语言工具(PDL)。结构化设计方法使用的描述方法是系统结构图。

  4. 软件定义阶段包括:①问题定义;②可行性研究;③需求分析–系统必需完成哪些任务。

  5. 面向对象的编程方法具有四个基本特征:抽象、继承、封装和多态性。

2.3面向对象的程序设计

  1. 在软件设计阶段不使用DFD图(数据流程图)

第三章 数据库设计基础

3.1 软件工程基本概念

  1. 关键字是指属性或属性的组合,其值能够唯一地标识一个元组

  2. 将E-R图转换为关系模式时,实体和联系都可以表示为关系。

  3. 构成E-R图的基本要素是实体型、属性和联系,其表示方法为:实体型(Entity)-用矩形表示;属性(Attribute)-用椭圆形表示,联系(Relationship)-用菱形表示,菱形框内写明联系名。

  4. 数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑、外部实体等进行定义和描述,其目的是对数据流程图中的各个元素做出详细的说明。

  5. 在关系数据库中,实体间的联系由一个二维表来表示。

3.2 结构化分析方法

  1. 数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和物理设计。

  2. 关系模型中可以有3类完整性约束:实体完整性约束、参照完整性约束和用户定义的完整性约束。实体完整性约束是指,若属性M是关系的主键,则属性M中的属性值不能为空值。参照完整性约束是指,具有参照完整性约束的表中的外键字段,是其参照表的主键字段。外键取值必须取参照表中主键字段已经有的值,可以为空也可不为空。

  3. 数据模型按照不同的应用层次分为以下3种类型;概念数据模型着重于对客观世界中复杂事物的描述及对它们内在联系的刻画;逻辑数据模型,是面向数据库系统的模型,着重于在数据库系统一级的实现;物理数据模型,是面向计算机物理实现的模型,此模型给出了数据模型在计算机上物理结构的表示。

3.3 结构化设计方法

  1. 在数据库系统中的数据模型有三个要素:数据结构、数据操作和数据的约束条件。其中数据的约束条件包括三种:实体完整性约束条件、参照完整性约束条件和用户定义的完整性约束条件。

  2. 如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。简单的说,就是每一个列(属性)只有一个,没有重复。第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。

3.4 软件测试

  1. 数据库三级模式体系结构的划分有利于保持数据库的逻辑独立性和物理独立性,即数据独立性。

  2. 关系数据模型的三个组成部分中包括关系的数据操纵、关系的数据结构和关系的完整性约束。

  3. 第二范式是在第一范式的基础上消除了非主属性对键的部分函数依赖

  4. 第三范式是在第二范式的基础上消除了非主属性对键的传递函数依赖

3.5 程序的调试

  1. 范式(数据库设计范式,数据库的设计范式)是符合某一种级别的关系模式的集合。构造数据库必须遵循一定的规则。在关系数据库中,这种规则就是范式。关系数据库中的关系必须满足一定的要求,即满足不同的范式。目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、Boyce-Codd范式(BCNF)、第四范式(4NF)和第五范式(5NF)。
    所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。
    第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。
    满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息,第三范式就是属性不依赖于其它非主属性。
    相对于第三范式,BC范式的要求更加严格,BC范式是对R的每个属性都做要求。

3.6

  1. 在关系代数运算中,有五种基本运算:并∪、差、投影、选择、笛卡儿积。
  2. 在数据库系统的组织结构中,外模式/模式映射把用户数据库与概念数据库联系了起来。
  3. 线性链表的描述:只含有一个指针域来存放下一个元素地址;指针域中的指针用于指向该节点的前一个或后一个节点(即前件或后件);节点由两部分组成:数据域和指针域。
  4. 关于数据库三级模式结构的正确叙述:外模式可以有多个,内模式和模式只能有一个。
  5. 快速排序
  6. 数据库设计的任务:设计数据库概论结构、设计数据库逻辑结构、设计数据库物理结构。
  7. 数据库技术的根本目标是:数据共享。
  8. 需求分析是软件定义时期的最后一个任务,它的基本任务就是详细调查现实世界要处理的对象,充分了解原系统的工作概况,明确用户的各种需求,然后在这些基础上确定新系统的功能。
    9. 只有人工管理阶段没有专门的软件对数据进行管理。

第一章 C语言和程序设计

  1. C语言编写的源程序就是一ASCII的形式存放在文本文件中的。C源程序经过C编译程序编译之后生成一个后缀为.obj的二进制文件(称为目标文件),然后由称为“连接程序”(Link)的软件,把此.obj文件与C语言提供的各种库函数连接起来生成一个后缀为.EXE的可执行文件。

  2. C语言中的非执行语句例如宏定义命令,在预编译之后替换到代码中,该命令本身也就不存在了,不会转换成二进制的机器指令。由高级语言编写的程序称为“源程序”,把由二进制代码表示的程序称为“目标程序”。

  3. 转义字符以一个反斜线开头后跟一个特定的字符,可以利用’\\ddd’3位八进制数代表的一个ASCII字符,也可以’\\xhh’2位十六进制数代表的一个ASCII字符。

  4. 转义字符以一个反斜线开头后跟一个特定的字符,可以利用’\\ddd’3位八进制数代表的一个ASCII字符,也可以’\\xhh’2位十六进制数代表的一个ASCII字符。

  5. 在赋值表达式中,赋值符号“=”的左边只能为赋值的变量,不能为表达式,右边可以为常量或者是表达式;在取余运算中,运算符“%”两边都必须是整型数据

  6. 逗号表达式的求解过程是:先求解表达式1,再求解表达式2,整个逗号表达式的值是表达式2的值

  7. 用逗号将表达式连接起来的式子称为逗号表达式。其表达式的一般形式为:表达式1,表达式2,……,表达式n。最后一个表达式的值就是此逗号表达式的值

  8. 条件表达式的形式如下:表达式1?表达式2 : 表达式3。其含义为当“表达式1”的值为非零时,求出“表达式2”的值,此时“表达式2”的值就是整个条件表达式的值;当“表达式1”的值为零时,则求“表达式3”的值,这时“表达式3”的值就是整个表达式的值。

  9. 逻辑运算符两侧的运算对象可以是任意合法的表达式。逻辑表达式的运算结果或者为1(“真”),或者为0(“假”)。

  10. 关系运算结果仅有0和1。

第二章 C语言程序设计

  1. C语言本身没有提供输入输出语句,但是可以通过调用标准库函数中提供的输入和输出函数来实现输入和输出
  2. 采用printf输出数据,输出数据都默认为右对齐,若要左对齐,可以在格式控制中的“%”和宽度之间加一个“-”号来实现
  3. printf的输出精度由变量的类型决定,与域宽无关,
  4. 输出“%”,可以在格式控制中用“%%”表示,将输出一个“%”,
  5. scanf和getchar函数分别从键盘上读入一个字符,因此输入12空格34,则变量a中存放的为1,b中存放2,c中存放空格,d中存放3。
  6. 在scanf函数的格式字符前可以加入一个正整数指定输入数据所占的宽度,但不可以用实数指定小数位的宽度。
  7. break语句可以使程序流程跳出switch语句体,也可用break语句在循环结构中终止循环体,从而提前结束循环,而当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体,并不能中止循环体的执行。若想强行终止循环体的执行,可以在循环体中,但并不在switch语句中设置break语句,满足某种条件则跳出循环体。continue语句的作用是结束本次循环,在while和do-while循环中,continue语句使得流程直接跳到循环控制条件的测试部分,然后决定循环是否继续进行。
  8. “auto”类定义的自动变量实质上是一个函数内部的局部变量,作用域是在所说明的函数中;“register”说明只能用于说明函数中的变量和参数中的形参,因此不允许将外部变量或静态变量说明为register;“extern”是定义在所有函数之外的全局变量,它可以被所有的函数访问,在所有函数体的内部是有效的,所以函数之间可以通过外部变量直接传递数据;“static”为允许本源文件中所有函数使用的全局变量。

第三章 函数和数组

  1. 一个C语言源程序可以由一个或多个源文件组成,每个源文件可由一个或多个函数组成,这些函数可以是自定义函数,也可以是库函数,各个函数之间没有主从关系,不能嵌套定义函数。

  2. 字符串比较函数strcmp的功能是对s1和s2所指字符串进行比较。如果s1<s2,返回负数,如果s1==s2,返回0,如果s1>s2,返回正数

  3. 在C程序的同一函数中,各复合语句内可以定义变量,其作用域仅限本复合语句内

  4. C程序函数中定义的自动变量,系统不自动赋确定的初值

  5. C程序函数的形参不可以说明为static型变量

  6. 全局变量是在函数外部任意位置上定义的变量,它的作用域是从变量定义的位置开始,到整个源文件结束止。在同一编译单位内用extern说明符扩展全局变量的作用域(当全局变量定义在后,引用它的函数在前时,应该在引用它的函数中用extern对此全局变量进行说明,以便通知编译程序:该变量是一个已在外部定义了的全局变量,已经分配了存储单元,不需要再为它分配存储单元。这时全局变量的作用域从extern说明处起,延伸到该函数末尾)。当一个程序由多个编译单位构成,并且在每个文件中均需要引用同一个全局变量,这时只在其中一个文件中定义所有的全局变量,而在其他用到这些全局变量的文件中用extern对这些变量进行说明。

  7. 在C语言中,动态变量(auto)存储在内存中的动态存储区,在程序运行中,只有当调用变量所在的函数时,系统才临时给变量分配内存单元;全局变量(extern)一经定义,系统为其分配固定的内存单元;静态变量(static),编译系统为其分配固定的存储空间;寄存器变量(register)不保存在内存上,而是直接存储在CPU的寄存器中。

  8. 二维数组ss,可以用于存储字符串,但是字符串的存储不能通过赋值,仅可以初始化或者输入得到。

  9. 。’\\0’作为标志占用存储空间,但不计入字符串的实际长度。在C语言中,系统在每个字符串的最后自动加入一个字符(’\\0’)作为字符串的结束标志。

  10. 字符数组不能直接赋值。可以赋初值

第四章 编译预处理和指针

  1. 在C语言中,凡是以“#”号开头的行,都称为“编译预处理”命令行。预处理命令可以放在程序中的任何位置,其有效范围是从定义开始到文件结束。预处理命令有宏定义、文件包含和条件编译三类。#include <stdio.h>命令行表示程序中要引用C标准函数库中的标准输入输出函数。

  2. 预处理语句后面不能加分号

  3. 宏替换分为简单的字符替换和带参数的宏替换两类。使用宏时应注意以下几点:
    ①宏定义仅仅是符号替换,不是赋值语句,因此不做语法检查;②为了区别程序中其他的标识符,宏名的定义通常用大写字母,但不是必须用大写;③双引号中出现的宏名不替换;④使用宏定义可以嵌套,即后定义的宏中可以使用先定义的宏。

  4. 预处理命令行是在系统对源程序进行编译之前进行处理的,不是在程序执行的过程中。

  5. #include文件包含命令,使用时应注意以下5个规则:
    ①包含文件的#include命令行通常应书写在所用源程序文件的开头,故有时也把包含文件称作“头文件”。头文件名可以由用户指定,其后缀不一定用“.h”。
    ②包含文件中,一般包含有一些公用的#define命令行、外部说明或对(库)函数的原型说明。
    ③当包含文件修改后,对包含该文件的源程序必须重新进行编译连接。
    ④在一个程序中,允许有任意多个#include命令行。
    ⑤在包含文件中还可以包含其他文件。

  6. 函数指针的定义形式是:数据类型标识符(*指针变量名)();void(*pf)()定义了一个没有返回值的函数指针pf,在给函数指针变量赋值时,只需给出函数名而不必给出参数。所以给pf给赋值时,把函数名fun赋给pf即可。

  7. 指针变量定义形式为:
    类型 指针变量名;
    其中
    号的个数决定了几级指针,指针变量赋地址值的方式有3种方式:
    ①通过求地址运算符(&)获得地址值
    ②通过指针变量获得地址值
    ③通过标准函数获得地址值

  8. NULL是在stdio.h头文件中定义的预定义符。NULL的代码值为0。可以给指针变量赋NULL值。例如p=NULL;赋值语句,称p为空指针。这条语句等价于p=’\\0’;或p=0; 这时,指针p并不是指向地址为0的存储单元,而是具有一个确定的值–“空”。

  9. 定义指针变量时,必须将指针变量初始化为NULL(为空),否则,如果不赋给它地址,系统会随机给它分配一个地址。

  10. 在指针定义语句double a,p=&a中,指针变量p前面的号,只是一个说明符,说明变量p是指针类型的变量。

第五章 结构体、共用体、位运算及文件操作

  1. a>>3 --> 变量a的值执行右移3位运算,相当于a/8,

  2. |为按位或运算,&为按位与运算,按位与(&)运算符的作用是:把参加运算的两个运算数按对应的二进制位分别进行“与”运算,当两个相应的位都为1时,该位的结果为1;否则为0。按位或(|)的运算规则是:参加运算的两个运算数中,只要两个相应的二进制位中一个为1,则该位的运算结果即为1;只有当两个相应位的数都为0时,该位的运算结果才为0。

  3. 在C语言中,对输入、输出的数据都按“数据流”的形式进行处理。数据可以按文本形式或二进制形式存放在介质上,因此文件可以按数据的存放形式分为文本文件和二进制文件。

  4. 文件指针是程序中用FILE定义的指针变量

  5. gets和 getchar函数用于从标准输入设备终端读入字符串和字符,并非从磁盘文件读入,fputs用于把字符串输出到文件,fwrite用于以二进制形式输出数据到文件。

  6. ANSI C提供的feof函数的功能是判断fp所指的文件的位置是否已达到文件尾,如果达到文件尾,则feof函数的值为1,否则为0,表示文件尚未结束。

  7. fputc()是以字符(字节)为单位的读写函数。 每次可从文件读出或向文件写入一个字符。使用格式为fputc(ch,fp);
    其中ch是待输出的某个字符,它可以是一个字符常量,也可以是一个字符变量;fp是文件指针。fputc(ch,fp)的功能是将字符ch写到文件指针fp所指的文件中。如果输出成功,fputc函数返回所输出的字符;如果输出失败,则返回一个EOF值。EOF是在stdio.h库函数文件中定义的符号常量,其值等于-1。

  8. EOF是在stdio.h库函数文件中定义的符号常量,其值等于-1。EOF用作文件结束标志,在二进制或者文本文件内部有一个位置指针,用以指示文件内部的当前读写位置。使用fgetc函数,每读写一次,该指针均向后移动,

以上是关于计算机二级C语言知识点的主要内容,如果未能解决你的问题,请参考以下文章

计算机二级Java语言卷007

计算机二级C语言题库(44套真题+刷题软件)第一套

计算机二级Java语言卷002

计算机二级C语言知识点

计算机二级C语言知识点

二级C语言知识!高手请教!