全国计算机二级知识点汇总(C语言等)!

发布时间:2018-11-15 17:14:18 编辑: 手机版

 全国计算机二级知识点汇总

01.jpg

 

算法的有穷性是指:算法程序的运行时间是有限的

算法的空间复杂度是指:算法在执行过程中所需要的临时工作单元数

算法的时间复杂度是指:算法在执行过程中所需要的基本运算次数(计算工作量)

算法的时间复杂度和空间复杂度没有直接关系

数据的存储结构是指:数据的逻辑结构在计算机中的表示

有一个以上根结点的数据结构一定是非线性结构

只有一个根结点的数据结构不一定是线性结构,比如树只有一个根结点,但是树不是线性结

循环链表和双向链表都是线性结构 线性结构的定义是,有且只有一个根结点,且中间每个

结点有且仅有一个前驱和后继

线性表即顺序表,数据之间是一对一的关系,除首尾,其他所有的元素都首尾相接

栈 只能在栈顶插入数据

支持子程序调用的数据结构是 栈 因为递归调用子程序的时候就是先入后出的线性结构 符

合栈

栈有记忆作用;栈既能顺序存储,又能链式存储

在循环队列中,队头指针可以大于队尾指针,也可以小于队尾指针

循环队列是队列的一种,而队列和栈是一种顺序存储结构。

线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构

02.jpg

 

二叉树的性质:

在非空二叉树中,第 i 层结点总数不超过 2^(i-1)

深度为 h 的二叉树最多有 2^h-1 个结点 最少有 h 个结点

对于任意一颗二叉树,其叶子结点数 N0 = 度数为 2 的结点总数 N2 + 1

具有 n 个结点的完全二叉树的深度为 log2(n+1)

对于完全二叉树 度为 1 的结点数只有两种可能:0 或 1

二分查找的最坏情况为 log2n 次(这是查找这是查找这是查找!)(以下是排序以下是排序以下是排序!)

冒泡排序、快速排序、直接插入排序在最坏情况下的比较次数是 n(n-1)/2

堆排序在最坏情况下比较次数最少,为 nlogn

程序既要注重效率又要注重清晰的可读性结构化程序设计的基本原则(方法):自顶向下、逐步求精、模块化继承是指类之间共享属性和操作的机制

对象的基本特点:分类性、多态性、标识唯一性不是任何对象都必须有继承性,对象的多态性是指同一个操作可以是不同对象的行为面向对象程序设计的特征有 继承性、多态性、封装性 不包括类比性

构成计算机软件的是 程序、数据以及相关文档

软件危机的表现:软件开发的生产率低、软件质量难以控制、软件成本不断提高软件工程的主要思想是强调在软件开发过程中需要应用工程化原则

软件工程的 3 个要素:工具、过程、方法

软件工程过程的 4 个基本活动:软件规格说明、软件开发、软件确认、软件演进软件生命周期的定义阶段:可行性研究、计划制定、需求分析软件生命周期的开发阶段:测试、概要设计、详细设计、实现软件设计的基本原则是 抽象、信息隐藏、模块化、局部化、确定性、一致性、可验证性

需求分析阶段:需求分析、需求评审、需求获取

需求分析阶段可以使用的工具是:DFD、DD、判断树、判断表

在软件设计中不使用的工具是:程序流程图,使用的工具有:系统结构图、PAD 图、数据

流图(DFD 图)

概要设计->系统结构图

详细设计->程序流程图、N-S、PAD等

数据字典(DD)所定义的对象都包含于数据流图(DFD 图),数据字典在需求分析阶段建立。软件设计中的模块划分应遵循 高内聚、低耦合。

数据流程图中没有控制流、程序流程图中没有数据流。

软件测试的目的是尽可能多的发现错误,而并非改正错误。

检查软件产品是否符合需求定义的过程称为确认测试黑盒测试方法是边界值分析、白盒测试方法是逻辑覆盖软件测试实施步骤有:集成测试、确认测试、单元测试软件调试的任务是 诊断并改正程序中的错误数据库管理系统是在操作系统支持下的系统软件数据库应用系统的核心问题是数据库设计

03.jpg

 

数据库系统的核心是数据库管理系统

数据库管理系统 DBMS 包含数据库 DB 和数据库系统 DBS数据库管理系统中负责数据模式定义的语言是数据定义语言数据库技术的根本目标是解决数据的共享问题

数据库设计是指在已有数据库管理系统的基础上建立数据库

E-R 模型(实体-联系模型)

在 E-R 模型中,用来表示实体联系的图形是菱形,用来表示实体的图形是矩形,用来表现属性的是椭圆。

E-R 图设计数据数据库设计的概念设计阶段用树形结构表示实体之间联系的模型是层次模型在关系模型中,每一个二维表称为一个关系

在满足实体完整性约束的条件下一个关系中应该有一个或多个候选关键字

在学生管理的关系数据库中,存取一个学生信息的数据单位是记录负责数据库中查询操作的数据库语言是数据操纵语言(查询、添加、删除)运算关系中不改变关系表的属性个数但能减少元组个数的是:交投影:元组数量不变、属性减少选择:元组数量减少、属性不变

自然连接:提取两个表中相同的内容然后连接起来

两个表之间的运算关系 只能是投影和选择

当对关系 R 和 S 进行自然连接时、要求 R 和 S 含有一个或多个共有的属

性在数据库设计中,将 E-R 图转换成关系数据模型的过程属于逻辑设计阶

将 E-R 图转换为关系模式时、实体和联系都可以表示为关系数据库设计的四个阶段是:需求分析、概念设计、逻辑设计和物理设计

一个 C 语言程序可以实现多种算法

C 语言源程序可以放在不同的文件中,同一个源程序也可以放在不同的文件中算法正确的程序可以有零个输入,但不能有零个输出

每一个 C 语言的文件或者函数都可以单独编译,但只有 main 函数才可以执行

sizeof(int) = 4 || sizeof(double) = 8

C 语言函数可以嵌套调用,但是不是所有的函数之间都可以相互调用,比如说不可以调用

main 函数

规定 C 程序中 不能在函数的内部定义函数块状注释不能嵌套使用

C 语句与机器指令不是一一对应关系

我们所写的每条 C 语句,经过编译最终都将转换成二进制的机器指令

115L 可以用作数据常量,L 表示长整型

在 C 语言中没有定义逻辑类型,而是用 0 表示假,非零表示真

case 是系统关键字,不能用作用户自定义标识符

常量中 在前面加 0 表示八进制 不能出现 8 和以上的数字 在前面加 0x 表示十六进制

前面不会出现 o 这个字母的

在转义字符中,后面只能 0~127 表示 ASCII 码(即八进制中的0~177) 符号常量是指在程序中通过宏定义用一个符号名来代表一个常量

标识符的长度不能任意长,最多只能包含 32 个字符

E/e 前后都必须要有数字,且后面必须为整数

整型数据 10,000 这样的表示形式是错误的

单引号里面的字符串有 ASCII 码和转义字符两种,ASCII 必须为八进制或者十六进制 即

ddd 或者\xhh

x/y 若左右两边都为 int 型 那么运算结果也是 int 型

double 类型不能进行取余操作

&&表示逻辑与

C 语言本身没有提供输入输出语句,但是可以通过调用标准库函数中提供的输入和输出函数来实现输入和输出

C 语言中的注释可以出现在程序中的任何位置,但是不能夹在变量或者关键字之间

C 语言的变量在函数开始位置进行定义,也可以在变量使用前位置定义一个浮点数可以和一个整数相加,运算符两侧的运算类型也可以不一致数值常量中不允许夹带空格

sizeof 为测试内存的运算符,()为算数运算符,&&为逻辑运算符,<>不是运算符

强制转换类型表达式格式为(类型名)(表达式),两个括号都不能省略

关系运算符两边的运算对象可以是 C 语言中任意合法的表达式

在 C 语言中,逻辑真值为任何非零数(!!),逻辑假值为 0赋值表达式左边必须为变量,不能是常量!!

逻辑表达式的运算比较复杂,有短路现象

"逻辑与"和"逻辑或"运算低于关系运算和算术运算,但是"逻辑非"却高于算术运算

采用 printf 输出数据,输出数据都默认为右对齐,若要左对齐,可以在格式控制的"%"和

宽度之间加一个"-"来实现

printf 的输出精度由变量的类型决定,与域宽无关赋值语句是一种执行语句,必须放在函数的可执行部分

由 printf输出的数据都隐含右对齐!!

%8.6f 的意思是 一共连着小数点占 8 位,小数点后面留 6 位数

字在 printf 语句中用%%输出一个%符号

负数取余后结果为负数:先按照正数时候情况算,然后加上负号

04.jpg

 

scanf 语句中中间无间隔符,可以空格或者 tab 或者回车隔开 不能用逗号隔开 中间有逗号那必须用逗号隔开输入

double 型数据 scanf 中要%lf 格式

当 scanf 从键盘输入数据时,按下回车键后,scanf 即接受了这一行数据,不能修改

分支结构是根据表达式的结果来判断流程走向的,不一定是算数表达式

关系运算符的结果只有两种,0 和 1

在 scanf 函数中的格式控制字符串是为了输入数据用的,不会输出到屏幕上复合语句也可以是空语句,并没有规定语句条数

在 scanf 函数的格式字符前可以加入一个正整数指定输入数据所占的宽度,但不可以用实数制定小数位的宽度

scanf("格式字符串",输入项首地址列表) 对于 double 型,输入时要输入 l 修饰,否则会产生错误的输入信息,同时输入项必须为地址,也可以是保存变量地址的指针变量。

if(表达式) 表达式可以是任意合法的数值

看清 if 语句里面为赋值还是为== 赋值语句 只要非零就为真 赋值为 0 就是假

case 后面只能跟常量表达式,不能跟变量表达式

在 switch 语句中并不是必须有 break 和 default 语句,可以根据需要安排是否有这两个语句

default 后面看有没有 break;如果没有 break;那么后面的 case 还是要执行的

if(表达式);傻逼空语句= =

switch 后面如果是表达式,那么要加括号。case 后面必须要有一个空格。case 后面也可以是表达式 不一定非要数字

while 语句 条件表达式的执行次数总是比循环体的执行次数多一次

do……while语句 条件表达式的执行次数和循环体的执行次数一样

while(y—);每次变量 y 的值减 1,直到等于 0 退出循环

continue 是终止本次循环(但还继续下一轮循环),break 是跳出当前循环体,后面的不执行了,只执行到这一步

if(i == 3)

continue:0,1,2,4,5

break:0,1,2

3005351866QQ更多资料,欢迎加 QQ 群 627337810

!0 为 1 非任何非零数的结果为 0 如!2 为 0

for(i = 0;i < 8;i++){ } 执行完 for 循环体后 最后一步 i++还是要执行的只

要适当地修改代码,就可以将 do-while 和 while 相互转换

break 语句!!只能用在循环体内和 switch 语句内

当 break 出现在循环体中的 switch 语句体内时,只是跳出 switch,而不终止循环体执行函数可以在主函数体内进行声明然后进行调用若调用子函数的主函数在子函数之前,那么前面必须有子函数的定义,子函数必须先定义后使用

各函数间没有主从关系,不能嵌套定义函数

strlen(s)计算字符串长度不包括末尾的结束标志符''

strcmp(str1,str2) 若 str1 == str2 那么函数值为 0 若 str1 > str2 函数值是一个

正数 若 str1 < str2 函数值是一个负数

\这些都是转义字符,只要一个字节长度函数名代表该函数的入口地址

一个自定义函数中可以根据不同情况设置多条 return 语句

int fun(int *p) {return *p;} fun函数返回值是一个整数,因为返回的是整型指针变量

p 所指向的数据

无论有多少个 return 语句,return 只能执行一次,返回一个函数值

若函数有返回值,必须通过 return 语句返回

C 程序必须由一个或一个以上的函数组成

( )的优先级高于*

static 在函数定义的静态变量,只需赋值 1 次,即可保存初始值,不需要每次调用时都赋初始值函数的形参和实参分别占用不同的存储单元

函数的形式参数属于局部变量

子函数中可以给全局变量赋值,如在头文件下所有函数之外定义 int a = 1; 然后 void f

un(){a = 3;}这样 a 的值在调用 fun()的时候变成了 3

在一个 C 源程序文件中所定义的全局变量,其作用域由具体定义位置和 extern 说明来决定范围

子函数中的静态局部变量 a 和主函数中定义的一个 a 是没有任何关系的

C 语言中形式参数组是指针变量,其数组中元素的个数由传递的实参数组决定,因此可以在定义的时候,不给出元素个数的具体说明

在函数内定义的变量是局部变量,而在函数之外定义的变量称为外部变量,也就是全局变量。 全局变量可以为源文件中其他函数所公用,其作用域为从定义变量的位置开始到源文件结

束。因此只要用户定义的标识符,全部都有作用域。局部变量可以说明为 auto、register

以及 static。

动态变量 auto 存储在内存中的动态存储区,在程序运行中,只有当调用变量所在的函数时,

系统才临时给变量分配存储单元,全局变量 extern 一经定义,系统为其分配固定的内存单

元;静态变量 static 编译系统为其分配固定的存储空间;寄存器变量 register 不保存在内

存上,而是直接存储在 CPU 的寄存器中。

所以说在 C 语言中,只有在使用时才占用内存单元的变量,其存储类型是 auto 和 registe

r。

在 C 语言中,有两种对文件的存储方式:顺序存取和直接存取。

如果以"a"的方式对一个已打开的文件进行写操作后,则原有文件中内容将保存,新的数据写在原有内容之后。

如果以"a+"的方式为读和写而打开一个文件,则既可以对文件进行读,也可以对文件进行写,而且在读和写操作之间不必关闭文件,可以从头开始读。

当对文件的读(写)操作完成之后,必须将它关闭。

文件指针实际上是指向一个结构体类型的指针,这个结构体中包含如缓冲区的地址、在缓冲

区中当前存取的字符的位置、对文件是"读"或"写"、是否出错、是否已经遇到文件结束标志等信息。

一般称文件指针结构体类型名为 FILE,可以用此类型名来定义文件指针。所以说 文件指针

是程序中用 FILE 定义的指针变量

文件由数据序列构成,可以工程二进制文件或文本文件

调用函数 rewind 把文件内部的位置指针重新指向一个文件的开头

fread(buffer,size,count,fp); buffer 是数据块指针,对 fread 来说,它是内存块的首地址,输入的数据存入此内存块中

gets 和 getchar 函数用于从标准输入设备终端读入字符串和字符,并非从磁盘文件读入,f

puts 用于把字符串输出到文件,fwrite 用于以二进制形式输出数据到文件。

fp = (filename,"rb+");

fwrite 的调用形式为:int fwrite(char *pt,unsigned size,unsigned n,FILE *fp); 其

功能是把 pt 所指向的 n*size 个字节输出到 fp 所指文件中。

ANSIC 提供的 feof 函数的功能是判断 fp 所指的文件的位置是否已达到文件尾,如果达到

文件尾,则 feof 函数的值为 1,否则为 0,表示文件尚未结束。

fputc()是以字符(字节)为单位的读写函数。每次可从文件读出或向文件写入一个字符。

使用格式为 fputc(ch,fp);

EOF 是 stdio.h 库函数文件中定义的符号常量,其值等于-1.EOF 用作文件结束标志(!!!)。

在二进制或者文本文件内部有一个位置指针,用以指示文件内部的当前读写位置。使用 fge

tc 函数,每读写一次,该指针均向后移动。

每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单元

语句 float a[10],x; a =&x;是非法的,a 表示首地址,在程序中为常量不可更改二维数组的初始化时,允许省略行下标,不允许省略列下标

群 627337810

在逻辑上,可以把二维数组看成是一个具有行和列的表格或矩阵

int x[2][3]; 数组 x 可以看作是由 x[0]和 x[1]两个元素组成的一维数组;元素 x[0]可

看作是由 3 个整型元素组成的一维数组;x[0]和 x[1]是数组名,分别代表一个地址常量在定义一维数组时,数组的下标应该是一个确定的整数值。要注意的是在定义二维数组时,

其第一维下标可以省略,但第二维下标不能省略。

不可以 int n = 5; a[n];在 C 语言中,定义以为数组中 n 不可以是变量,必须是整型常量表达式。

char ss[][20] = {"right?"} 这样的赋值是错误的,定义二维数组后,字符串的存储不能通过赋值,只能通过初始化或输入得到

不可以对字符串进行关系运算

两个连续的双引号("")是合法的字符串常量

char s[5] = {'a','b','c','d','e'}; 是错误的 字符串结束标志无法存储

char *s;gets(s); 是错误的 要先对指针变量初始化

C 语言中没有字符串数据存储类型

字符串数组,是指数组中的每个元素都是一个存放字符串的一维数组

C 语言本身没有提供对字符串进行整体操作的运算符

sizeof是实际占用内存,strlen是实际字符个数


 

字符数组不能直接赋值

字符数组仅仅可以采用定义时初始化以及输入得到数据,在程序其他部分不允许对其进行赋值。字符串常量中除了实际字符之外还有结束标志,没有字符串结束标志的运行是不安全的

gets(s)函数的作用是将输入的字符读入字符串 s,直到遇到回车。而 scanf()函数接收字符串时的结束标志为回车或者空格。

char *s; s = "hello";是正确的 而 char *s;s = {"hello"};是错误的 定义指针变量

s,通过赋值语句保存字符串常量的地址是可以的,而字符数组决不能赋值,而只能初始化或者输入。

s[] = "abcde"; s += 2; 因为 s 表示的是一个地址常量,常量是不可以被赋值的,所以这句话是错的,程序会出错预处理命令可以放在程序的任何位置,其有效范围是从定义开始到文件结束。预处理命令有宏定义、文件包含和条件编译三类。预处理语句后面不能加分号!!宏定义仅仅只是符号替换,不是赋值语句,因此不做语法检查;双引号中出现的宏名不替换; 使用宏定义可以嵌套,即后定义的宏中可以使用先定义的宏。

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

在 C语言中,凡是以"#"开头的行,都称为"编译预处理"。

包含头文件的#include 命令行是通常书写在所用源程序文件的开头,故有时也把包含文件

称为头文件。头文件名可以由用户指定,其后缀不一定用".h"

当包含文件修改后,对包含该文件的源程序必须重新进行编译连接

a = b = ( int *)malloc(sizeof(int));含义为 申请了一个整型的存储空间,让指针 a,b,c

分别指向它,*a = 1; *b = 2; *c = 3;语句的含义为所申请的整型存储空间的内容,*c

= 3; 最后执行导致存储空间的内容为 3.

ANSIC 标准规定 calloc 函数返回值的类型为 void*。具体使用格式为:calloc(n,size)。

该函数用来给 n 个同一类型的数据项分配连续的存储空间,每个数据项的长度为 size 个字

节。若分配成功,函数返回存储空间的首地址;否则返回空。通过调用 calloc 函数所分配

的存储单元,系统自动置初值 0。

指针变量赋地址值的方式有 3 种方式:通过求地址运算符(&);通过指针变量获得地址值;通过标准函数获得地址值。

NULL是 stdio.h头文件中定义的预定义符。NULL的代码值为 0.可以给指针变量赋

NUL L值。例如 p =NULL;赋值语句,称 p为空指针。这条语句等价于 p = '';或者

p = 0; 这时,指针 p并不是指向地址为 0的存储单元,而是具有一个确定的值——

"空"。

在 C 语言中,二维数组名也是一个存放地址常量的指针,其值为二维数组中第一行的地址。

int x = 0,*p; p = NULL;

float x; float *p = &x;

*(s + 3)表示的是引用数组 a[3].

  • char ss[][20] = {"right?"} 这样的赋值是错误的
本文已影响
+1
0