C 语言二级学习笔记
- 计算机完成一条指令所花费的时间称为一个指令周期;(指令周期是取出一条指令并执行这条指令的时间。一般由若干个机器周期组成,是从取指令、分析指令到执行完所需的全部时间)
- 顺序程序具有以下三个特点:顺序性、封闭性和可再现性,可以使得程序设计者能够控制程序执行的过程(包括执行顺序、执行时间),对程序执行的中间结果和状态可以预先估计,从而就可以方便地进行程序的测试和调试。
- 算法:
1. 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。
2. 算法的计算工作量是用算法所执行的基本运算次数来度量的,而算法所执行的基本运算次数是问题规模(通常用整数)表示的函数,
3. 算法的复杂度与程序的编制无关,与 算法本身的设计和优化 2.输入数据的规模(数据量 数据分布);3.硬件性能(处理器速度<影响执行时间> 内存大小<影响空间复杂度>)4.编程语言和编译器;5.并行和分列式计算 6.缓存和储存层次结构 7.算法实现的质量 8.算法参数的选择 等有关
为了降低算法的空间复杂度,主要应减少输入数据所占的存储空间以及额外空间,通常采用压缩存储技术
算法需要考虑可行性、确定性、有穷性等
4
结构化程序设计:
其概念最早由E.W.Dijikstra(埃德斯加·狄克斯特拉)在1965年提出的,是软件发展的一个重要的里程碑。
它的主要观点是采用自顶向下、逐步求精及模块化的程序设计方法;使用三种基本控制结构构造程序,任何程序都可由顺序、选择、循环三种基本控制结构构造。
主要强调的是程序的易读性。结构化程序设计的目的(强调):通过设计结构良好的程序,以程序静态的良好的结构保证程序动态执行的正确性,使程序易理解、易调试、易维护,以提高软件开发的效率,减少出错率。
5.
在数据库管理技术发展的三个阶段中,没有专门的软件对数据进行管理的
解析:数据库管理技术的3个阶段为 人工管理阶段(或单文件系统阶段) 2文件系统阶段(计算机数据管理技术的中级阶段) 3.数据库管理阶段
其中 数据库系统阶段与文件管理阶段最大差别在于数据的结构化数据库系统中,数据不再针对某一应用,而是面向整个组织。具有整体结构化。
人工管理阶段没有专门的软件对数据进行管理。
{代数式子
正确的表达方式为sqrt(fabs(pow(n,x)+exp(x)))
函数的返回值可以是地址,即指针。函数调用中形参值的变化不会传递给实参。不能将一个整数直接赋给指针变量作为地址}
6
结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构。在C语言中,可以定义结构体类型,将多个相关的变量包装成为一个整体使用。A选项struct ord {int x;int y;int z} struct ord a;错误,因为不能在定义结构体的同时,又用结构体类型名定义变量。所以应该写成B选项或者D选项的格式,这样才是正确的(struct {int x;int y;int z;} a; struct ord {int x;int y;int z;};struct ord a;)
7
fread(void *buffer,size_t size,size_t count,FILE *stream);功能是从文件流中读数据,最多读取count个项,每个项size个字节,如果调用成功返回实际读取到的项个数(小于或等于count),如果不成功或读到文件末尾返回 0。
buffer:用于接收数据的内存地址,大小至少是 size*count 字节;
size:单个元素的大小,单位是字节;
count:元素的个数,每个元素是size字节;
stream:输入流。
取模运算符"%",二元运算符,具有左结合性,参与运算的量均为整型。选项 B中的a变量是double实型,所以B不符合C语言规定。
- 实体联系模型中,实体本质、具体事物、个别主体、现象的支持者等意义,其含义一般是指能够独立存在的、作为一切属性的基础和万物本原的东西。。在学生选修课程活动中,课程号是课程的属性,学号是学生的属性,学生和课程是客观存在并且可以相互区别的事物,成绩是学生和课程联系的属性。本题答案为C选项。
9.进程是程序的执行过程
10.循环队列:为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。这种循环队列可以以单链表的方式来在实际编程应用中来实现。循环队列是队列的一种顺序存储结构,用队尾指针rear指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置。因此,从排头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素。在循环队列中队头指针可以大于队尾指针,也可以小于队尾指针。
11.结构化程序的基本结构有:顺序结构、选择结构和循环结构来实现。
12 .软件是程序,数据和文档的集合
13 .数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,只不过数据库存放数据是按数据所提供的数据模式(数据之间的联系)存放的
14 .在关系数据库设计中,关系模式是用来记录用户数据的,关系模式采用二维表来表示关系,简称表
14 .超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。候选键(candidate key):不含有多余属性的超键称为候选键。
外 键:在一个表中存在的另一个表的主键称此表的外键。外键主要是用来描述两个表的关系。属性D是关系B的主键,但在关系A中不是主键,因此属性D在关系A中是外键。本题答案为B选项。
15.对线性表进行顺序查找时,从表中的第一个元素开始,将给定的值与表中逐个元素的关键字进行比较,直到两者相符,查找到所要找的元素为止。在最坏情况下,要查找的元素是表的最后一个元素或查找失败,这两种情况都需要将这个元素与表中的所有元素进行比较,因此比较次数为n。
16 .软件工程包含3个要素分别是方法、工具和过程
17 .数据库管理阶段的数据库系统的基本特点:数据独立性高、数据集成性、数据的共享性高,冗余性低、数据统一管理与控制
18 .第一范式就是无重复,去掉重复的过程较规范化处理,对于一个元素无法再进行拆分就属于第一范式。
19 .在C语言中,程序的模块化是利用函数实现的
20 .C语言中的常量可以分为:整型常量(整型常量就是通常的整数,包括正整数、负整数和0,其数据类型显然是整型。除此之外,整型常量包括短整型、长整型和无符号型等不同类型。)、实型常量和字符型常量和字符串常量。
A选项中整型常量应表示为1200,不能包含逗号。B选项中E后面的指数必须为整数。C选项中转义字符以\开始,若要表示字符\,应写为'\\'。
21 .getchar是用于从终端读入字符
22 .fwrite(fwrite() 是 C 语言标准库中的一个文件处理函数,功能是向指定的文件中写入若干数据块,如成功执行则返回实际写入的数据块数目。是 C 语言标准库中的一个文件处理函数,功能是向指定的文件中写入若干数据块,如成功执行则返回实际写入的数据块数目。)和rewind(C 程序中的库函数,功能是将文件内部的指针重新指向一个流的开头)函数,题目中先是将s2字符串写入adc.dat中,然后将写指针回到文件开头,然后写入s1字符串,那么s1字符串就将前五个字符覆盖,所以最终结果为Chinang,选项B选项正确。
23 .整数在计算机中存储和运算通常采用的格式是补码,负数用补码形式
24 .储存器中访问速度最快的是 缓存
25 .C语言被称为“高级语言”是因为它用接近人们习惯的自然语言和数学语言作为表达形式,使人们学习和操作起来感到十分方便
26 . 所谓有序表,就是其中所有元素以递增或递减方式有序排列线性表。有序表是指表中的元素按照某种规则已经排序好了,所以A选项错误。有序表既可以采用顺序存储结构存储在连续的存储空间内,又可以采用链式存储结构存储在不连续的存储空间内,所以B选项错误,C选项正确。能使用二分法查找的线性表必须满足以下2个条件:①用顺序存储结构;②线性表是有序表,所以D选项叙述错误。本题答案为C选项
- 文件指针是一种特殊的指针类型变量,scanf()函数其功能为根据数据格式(format)从输入流(stream)中读入数据(存储到argument),只能从文本文件中输入数据到内存。
- 非线性结构:二叉链,采用链式存储;
- 线性结构 : 二维数组、循环 队列采用顺序存储。
-
移动次数为n(n-1)/2。本题中即16×(16-1)÷2=8×15=120。所以简单插入排序在最坏情况下需要的比较次数是120 - 标识符是以字母或下划线开头的一串由字母、数字或下划线构成的序列,请注意第一个字符必须为字母或下划线,否则为不合法的变量名
5.模块独立性是指模块内部各部分及模块间的关系的一种衡量标准,由内聚和耦合来度量。模块独立性的概念是抽象、模块化、信息隐蔽和局部化的直接结果。模块的独立性是指软件模块的编写和修改应使其具有独立功能,且与其他模块的关联尽可能少。
(内聚性和耦合性是模块独立程度的定性度量标准
一个模块的内聚性越高则该模块的独立性越强
一个模块的耦合性越高则该模块的独立性越弱)
- 可行性报告产生于软件定义阶段,用于确定软件项目是否进行开发。
- 软件需求规格说明书:是从业务规则讲起的,细一点偏向于软件的概要设计 他的作用不包括软件可行性研究的依据
- 测试报告:是从开发、测试的角度去讲产品功能,里面要包含原型界面、业务接口、活动图等。
- 结构化程序的三种基本控制结构是:顺序,选择,重复。
- 概念模型:用于现实世界的建模,与具体的DBMS无关,前,最著名的概念模型有实体联系模型和面向对象模型。
- 逻辑数据模型,也称数据模型,是面向数据库系统的模型。
- 面向对象模型是一种新兴的数据模型,它采用面向对象的方法来设计数据库。面向对象的数据库存储对象是以对象为单位,每个对象包含对象的属性和方法,具有类和继承等特点。
-
- n元关系R与n元关系S的关系可以分为交 差 并三种
- 交 即为数学中的交集;差 即为补集;并 即为并集。
设某棵树的度为3,其中度为3,2,1的结点个数分别为3,0,4。则该树中的叶子结点数为( )。
A
6
B
7
C
8
D
不可能有这样的树
假设叶子结点个数为n。这棵树的总结点数为度为3的结点数+度为2的结点数+度为1的结点数+度为0的结点数,即为3+0+4+n。由树的性质可知:树的总的结点数为树中所有结点的度数之和再加1,则总结点数为3×3+2×0+1×4+0×n+1。3×3+1×4+1=3+4+n,则n=7,叶子结点数为7。B选项当选。
在进行逻辑设计时,将E-R图中实体之间联系转换为关系数据库的( )。
A
元组
B
关系
C
属性
D
属性的值域
- 在逻辑设计阶段将E-R图转换为关系模式时对应关系:实体对应元组;属性对应属性;实体集对应关系;联系对应关系。B选项当选。
- 快速排序法中,每经过一次数据交换(或移动)后有可能会产生多个逆序,也会消除多个逆序
- 一个进程在获取完除CPU以外的所有资源后(就绪状态),经调度cpu资源以后就进入运行状态
- 软件系统总体结构图是描述软件系统结构的图形工具,深度指控制的层数。没有从属节点的模块是原子模块。
- 扇入指调用一个给定模块的模块个数。
- I/O方式中的程序查询方式是指:当CPU需要执行I/O操作时,程序将主动查询I/O设备是否准备好,程序查询方式是一种程序直接控制方式。
- 字符串常量定义:
用双引号("")括起来的0个或者多个字符组成的序列
存储:每个字符串尾自动加一个 '\0' 作为字符串结束标志
strcpy 函数将“China”复制给字符数组s,其在数组位置内存存储情况为“China\0g\0”。strlen函数统计字符串长度时,遇到“\0”结束,s数组长度为5 - 冒泡排序算法最坏情况下需要n(n-1)/2次
- 循环链表是线性表的一种链式存储结构,循环队列是队列的一种顺序存储结构
- 。函数中,形参必须是变量,实参可以是常量,变量或表达式;
实参的个数和类型要与形参一致. - 赋值运算符=,其左侧应该为一个可以被修改的值,其左值可为变量,但是算术表达式与常量不可做其左值,右值没有特殊要求,
- 黑盒测试方法主要有等价类划分法、边界值分析法、错误推测法和因果图等。
白盒测试方法主要有逻辑覆盖测试(语句覆盖、路径覆盖、判断覆盖、条件覆盖)、基本路径测试等. - 对于指针 *s 对于s+=2 表示 指针向右移动两个元素。
- 类是具有共同属性、共同方法的对象的集合 整数类包含(正整数和负数 0 )
- 数据库的数据项之间以及表之间都存在联系
- 文件操作:
- “a+”表示在文件后面添加数据,如果指定的文件不存在,系统将用在fopen调用中指定的文件名建立新文件
- ,“w”表示以写的方式打开文本文件,如果指定的文件不存在,系统将用fopen调用中指定的文件名建立一个新文件,不满足数据追加
- “wb”是以写的方式打开二进制文件
二叉树:
空的二叉树就是结构体指针
有序树和无序树,就看两个节点是否可以交换,就是个节点子树从左向右有无次序。
边:就是一个节点有几个分支 度:是指一个树中所有节点数最大的就是这个树的度{就是描述一个节点有几个边(A有三个边所以A的度就是3)} 特别的:描述分支节点的度是看它有几个别的分支(节点B的度只有2个并不计入与A相连的线)
完全二叉树就是其相应的节点的位置和满二叉树是一一对应的。
n就是该二叉树的最后的一个节点的编号。
图2;
插入一个新元素就是根据左<中<右的方式来进行的比如图2(新插入元素不断进行比较大于插左边小于进右边直到有空余储存空间可以储存该元素)
先序遍历,中序遍历,后序遍历
解释:根左右,即先遍历跟节点再遍历左子树最后遍历右子树(左子树遍历顺序10->7->5->3->6->9->8)
栈:元素进入和退出的顺序是相反的
队列:元素是先进先出
根据初始状态的top指向的位置确定数组那一端为栈底。数据存放时优先存入到栈底
栈的元素个数=|栈顶指针 - 栈底指针| + 1
循环队列
特殊的当rear=front 这表示该队列为空或满
数据的元素个数m再减一就是最坏情况下需要比较的次数 特别的 若要做顺序查找最坏情况下需要比较 m 次
1.
fseek 功能用法: int fseek(FILE *stream, long offset, int fromwhere);
注释的边界符号“/*”和“*/”必须成对出现且不可以嵌套
1 加入 .%* 可以跳过输出。
- 宏替换是在编译阶段前的预处理阶段,对程序中的宏完成文本替换,因此宏替换不占运行时间,预处理命令行无需在源文件的开头,也可以出现在程序的任何一行的开始部位,其作用一直持续到源文件的末尾;在源文件的一行上最多只能有一条预处理命令
-
- printf函数的形式是:fprintf(文件指针,格式字符串,输出表列);
- fopen函数用来打开一个文件,其一般形式为:文件指针名=6
- fopen(文件名,使用文件方式);
关系运算为逻辑运算,它的值为“逻辑值” 只有0和1;
指针变量,专门用来存放变量地址的变量,所有地址值所占字节都是一样的
7
全局变量可以在函数以外的任何部位进行定义
Static 变量是为了在下一次使用时可以调用上一次的值
字符常量是使用单引号括起来的单个字符
8.二叉树的后序序列与中序序列相同,那么在该二叉树中,任意一个结点为均不存在右子树,该二叉树共有31个结点,则深度为31。
9.八进制整常量 输出格式控制符为%o,例如 072 就是八进制数
10.十六进制整常量以0X或0x作为前缀格式控制符为%x
11.字符串常量应使用“”括起来
12.可以使用强制类型转换将Charx型指针转化成double类型
13.深度为7的满二叉树的结点个数为27-1=127,而第7层的节点数为27-1=64个
14.
软件测试的实施过程主要有四个步骤分别是单元测试、集成测试、确认测试(验收测试)和系统测试。
15.软件系统总体结构图的作用是描述软件系统结构的图形工具,它包括软件系统的控制流、软件系统的数据流、软件系统的数据结构等的概括
16.
数据库:是指长期存储在计算机内的、有组织的、可共享的数据集合
17.
fread(void *buffer,size_t size,size_t count,FILE *stream);功能是从文件流中读数据,最多读取count个项,每个项size个字节,如果调用成功返回实际读取到的项个数(小于或等于count),如果不成功或读到文件末尾返回 0。
buffer:用于接收数据的内存地址,大小至少是 size*count 字节;
size:单个元素的大小,单位是字节;
count:元素的个数,每个元素是size字节;
stream:输入流。
18.在c语言中auto和register类型的变量只有在使用时才会占用内存变量
19
在c语言中语言Void *不能直接使用,必须利用强制类型转换将其转成所需的类型才能使用,
21.strlen()函数用来计算字符串的长度,‘\0’为字符串结束的标志
文件指针变量的值是文件所在的地址,但是文件指针不是结构体类型
22.数据流图(DFD)是系统逻辑模型的图形表示支持软件系统功能建模
23.Int*p[3]含义是定义一个指针数组p,数组中包含3个元素,每个元素都是int *类型的指针。
24.
动态测试就是通常所说的上机测试,通过运行软件来检验软件中的动态行为和运行结果的正确性。25.
静态测试不实际运行软件,主要通过人工进行分析。白盒测试的主要技术有逻辑覆盖测试、基本路径测试等。基本路径测试需要运行程序,属于动态测试。
25.% 是取模运算数据均为整型
26.进程具有并发,动态,共享,独立,制约五种特性
27.操作系统的功能和任务主要有处理机管理(进程管理),储存管理,设备管理,文件管理和用户接口
数组传入函数后若定义了新的指针则指针即为新的数组,所传入的数组的地址就是新指针的首地址。
堆排序适用于线性结构,快速排序适用于顺序存储的线性表。
‘A’对应的ASCII码为65,‘z’对应的是 122
标识符就是一个名称,用来表示变量、常量、函数以及文件等名称。C语言的标识符可分为三类为关键字、预定义标识符和用户标识符,所以A选项正确,B、C、D三项均错误。合法的标识符由字母、数字和下划线组成,并且必须以字母或下划线开头。用户标识符为用户根据编程需求自定义的标识符。关键字是指被C语言保留的,不能用作其他用途的一些标识符,它们在程序中都代表着固定的含义,用户不可重新定义。预定义标识符是系统已经有过定义的标识符,用户可以重新定义。
C语言的标识符可分为关键字、预定义标识符和用户标识符三类
- 文件结束或者错误,则返回符EOF是在头文件stdio.h中定义的宏,一般值为-1,在while循环中以EOF作为文件结束标志,这种以EOF作为文件结束标志的文件,必须是文本文件。在文本文件中,数据都是以字符的ASCII代码值的形式存放,由于不可能出现-1,因此可以用EOF作为文件结束标志。
- 赋值运算结合性为由右向左结合,赋值运算符左值为变量,右值为变量或常量,且左右两边数据类型相同才能实现赋值。
- 软件集成测试不采用迭代式组装。
- 数据字典的作用是对数据流图(DFD图)中出现的被命名的图形元素的确切解释。
- 操作系统的功能和任务主要有处理机管理(进程管理),储存管理,设备管理,文件管理和用户接口
- Do while循环先执行在判断
- 转义字符 '\t'表示代表Tab键;'\n'表示回车换行;'\r'表示回车符“\”表示转义字符不显示
- 指针变量必须区分基类型,可以向指针所指内存单元写入与基类型相同的数据,而不能写入任意数据
- ‘a’是一个字符使用printf函数中对应格式为%c,不能用%s
- 将数组作为参数传递时,传递的是该数组中首元素的内存地址,所以该函数声明中的int a[1],这里的a退化为指针变量,b也为指针变量
-
11主属性部分依赖,可以先找到关系的主键然后再看哪一个属性可以再决定另一个属性
- 函数strcmp函数比较的是字典序(字母在字典中排列顺序或者理解为ASCLL值的大小)
- 构建数据流图(DFD)时不能“数据存储”之间有数据流
- 函数的返回值可以是整数、实数、字符、指针、结构体或一个函数的地址等,但不能是整个数组,C语言中对数组的操作都是通过下标引用或指针,不能整体操作