c语言考点笔记.docx
《c语言考点笔记.docx》由会员分享,可在线阅读,更多相关《c语言考点笔记.docx(28页珍藏版)》请在冰豆网上搜索。
c语言考点笔记
第一章:
公共基础知识
数据结构与算法
1.1.1算法
1.算法的大体概念
(1)概念:
算法是指一系列解决问题的清楚指令。
(2)算法的4个大体特点:
可行性、确信性、有穷性、拥有足够的情报。
(3)算法的两种大体要素:
对数据对象的运算和操作、算法的操纵结构(运算和操作时刻的顺序)
(4)算法设计的大体方式:
列举法、归纳法、递推法、递归法、减半递推技术和回溯法。
2.算法的复杂度
(1)算法的时刻复杂度:
执行算法所需要的计算工作量。
(2)算法的空间复杂度:
执行算法所需的内存空间。
1.1.2数据结构的大体概念
数据结构指彼此有关联的数据元素的集合,即数据的组织形式。
其中逻辑机构反映数据元素之间逻辑关系;存储结构为数据的逻辑结构在运算机存储空间中的寄存形式,有顺序存储、链式存储和散列存储四种方式。
数据结构按各元素之间前后件关系的复杂度可划分:
(1)线性结构:
有且只有一个根节点,且每一个节点最多有一个直接前驱和一个直接后继的非空数据结构。
(2)非线性结构:
不知足线性结构的数据结构。
1.1.3线性表及其顺序存储结构
1.线性表的大体概念
线性结构又称线性表,线性表是最简单也是最经常使用的一种数据结构。
2.线性表的顺序存储结构
●元素所占的存储空间必需连接。
●元素在存储空间的位置是按逻辑顺序寄存的。
3.线性表的插入运算
在i个元素之前插入一个新元素的步骤如下:
步骤一:
把原先第n个节点至第i个节点依次往后移一个元素位置。
步骤二:
把新节点放在第i个位置上。
步骤三:
修正线性表的机构个数。
4.线性表的删除运算
删除第i个位置的元素的步骤如下:
步骤一:
把第i个元素以后不包括第i个元素的n-1个元素依次前移一个位置;
步骤二:
修正线性表的结点个数。
1.1.4栈和队列
1.栈及其大体运算
(1)大体概念:
栈是一种特殊的线性表,其插入元算与删除运算都只在线性表的一端进行,也被称为“先进后出”表或“后进先出表”。
●栈顶:
许诺插入与删除的一端。
●栈底:
栈顶的另一端。
●空栈:
栈中没有元素的栈。
(2)特点:
●栈顶元素是最后被插入和最先被删除的元素。
●栈底元素是最先被插入和最后被删除的元素。
●栈有经历作用。
●在顺序存储结构下,栈的插入和删除元算不需移动表中其他数据元素。
●栈顶指针top动态反映了栈中元素的转变情形。
(3)顺序存储和运算:
入栈运算、退栈运算和读栈顶运算
2.队列及其大体元算
(1)大体概念:
队列是指许诺在一端进行插入,在另一端进行删除的线性表,又称“先进先出”的线性表。
●队尾:
许诺插入的一端,用尾指针指向队尾元素。
●排头:
许诺删除的一端,用头指针指向头元素的前一名置。
(2)循环队列及其运算:
入队运算与退队运算。
1.1.5树和二叉树
1.树的大体概念
树是简单的非线性结构,树中有且仅有一个没有前驱的节点称为“根”,其余节点分成m个互不相交的有限集合T1,T2,…,T}rmm,每一个集合又是一颗树,称T1,T2,…,T}rmm为根节点的子树。
●父节点:
每一个节点只有一个前件,无条件的节点只有一个,称为树的根结点(简称树的根)。
●子节点:
每一个节点能够后多个后件,无后件的节点称为叶子节点。
●树的度:
所有节点最大的度。
●树的深度:
树的最大层次。
2.二叉树及其大体性质
二叉树是一种非线性结构,是有限的节点集合,该集合为空(空二叉树)或由一个根节点及两棵互不相交的左右二叉子树组成。
可分为满二叉树和完全二叉树,其中满二叉树必然是完全二叉树,但完全二叉树不必然是满二叉树。
●二叉树可为空,空的二叉树无节点,非空二叉树有且只有一个跟结点;
●每一个节点最多可有两颗子树,称为左子树和右子树。
3.二叉树的存储结构
二叉树通常采纳链式存储结构,存储节点由数据域和指针域(左指针域和右指针域)组成。
二叉树的链式存储结构也称为二叉链表对满二叉树和完全二叉树可按层次进行顺序存储。
4.二叉树的遍历
二叉树的遍历是指不重复地访问二叉树中所有节点,要紧指非空二叉树,关于空二叉树那么终止返回。
二叉树的遍历包括前序遍历,中序遍历和后序遍历。
1.1.6查找技术
(1)顺序查找:
在线性表中查找指定的元素。
(2)二分查找:
线性表必需是顺序存储结构,且必是有序表,反复查找直到成功或子表长度为0时终止。
1.1.7排序技术
(1)互换类排序法:
借助数据元素的“互换”进行排序,包括冒泡排序法和快速排序法。
(2)插入类排序法:
包括简单插入排序法和希尔排序法
(3)选择类排序法:
包括简单项选择择排序法和堆排序法。
程序设计基础
1.2.1程序设计方式与风格
(1)设计方式:
程序设计指设计、编制、调试程序的方式和进程,要紧有结构化程序设计方式,软件工程方式和面向对象方式。
(2)设计风格:
良好的设计风格要注重源程序文档化,数听说明方式,语句的结构和输入输出
1.2.2面向对象的程序设计
面向对象方式的本质是主张从客观世界固有的事物动身来构造系统,强调成立的系统能映射问题域。
●对象:
用来表示客观世界中任何实体,能够是任何有明确边界和意义的东西。
●类:
具有一起属性,一起方式的对象的集合。
●实例:
一个具体对象确实是其对应分类的一个实例。
●消息:
实例间传递的消息,它统一了数据流和操纵流。
●继承:
利用已有的类概念作为基础成立新类的概念技术。
●多态性:
指对象依照所同意的信息而作出动作,一样的信息被不同的对象同意时有不同行动的现象。
面向对象程序设计的优势:
与人类适应的思维方式一致,稳固性好,可重用性好,易于开发大型软件产品,可保护性好。
软件工程基础
1.3.1软件工程大体概念
1.软件的概念与特点
(1)概念:
软件是指与运算机系统的操作有关的运算机程序、规程、规那么,和可能有的文件、文档和数据。
(2)特点:
●是逻辑实体,有抽象性。
●生产没有明显的制作进程。
●运行利用期间不存在磨损、老化问题。
●开发、运行对运算机操作系统有依托性,受运算机系统的限制,致使了软件移植问题。
●复杂性较高,本钱昂贵。
●开发涉及诸多社会因素。
2.软件危机与软件工程
软件危机指在运算机软件的开发和保护中碰到的一系列严峻问题。
软件工程是应用于运算机软件的概念,开发和保护的一整套方式、工具、文档、实践标准和工序,包括软件开发技术和软件工程治理。
3.软件工程进程
把输入转化为输出的一组彼此相关的资源和活动。
4.软件生命周期
软件产品从提出、实现、利用保护到停止利用的进程。
5.软件工程的目标
在给定本钱、进度的前提下,开发出具有有效性、靠得住性、可明白得性、可保护性、可重用性、可适用性、可移植性、可追踪性和可互操作性且知足用户需求的产品。
六、软件工程的原那么
软件工程的原那么包括:
抽象、信息隐蔽、模块化、局部化、确信性、一致性、完备性和可验证性。
7.软件开发工具
从初期的单向工具向集成工具进展,软件开发的方式必需取得相应工具的支持。
8.软件开发环境
软件开发环境是全面支持软件开发工程的软件工具的集合。
运算机辅助软件工程(CASE)是当前最有特色的研究工作和进展方向。
1.3.2结构化分析方式
需求分析的任务是进展需求、求精、建模和概念需求的进程,可归纳为:
需求获取,需求分析、编写需求规格说明书和需求评审
经常使用的分析方式:
●结构分析方式:
其实质着眼数据流,自顶向下,逐层分解,成立系统的处置流程。
经常使用工具包括数据流图,数字数字字典(核心方式)、判定树和判定表。
●面向对象分析方式。
1.3.3结构化设计方式
1.软件设计的大体概念和方式
软件设计是一个把软件需求转换为软件表示的进程。
(1)大体原理:
抽象、模块化、信息隐藏、模块独立性(气宇标准:
耦合性和内聚性)。
(2)大体思想:
将软件设计成由相对对立、单一功能的模块组成的结构。
2.概要设计
(1)4个任务:
设计软件系统结构、数据结构及数据库设计、编写概要设计文档、概要设计文档评审。
(2)面向数据流的设计方式:
数据流图的信息分为互换流和事物流,结构形式有互换型和事务型。
3.详细设计的工具
详细设计的工具包括:
●图形工具:
程序流程图、N-S、PAD、HIPO。
●表格工具:
判定表。
●语言工具:
PDL(伪码)
1.3.4软件测试
1.目的:
为了发觉错误而执行程序的进程。
2.准那么:
●所有测试应追溯到用户需求
●严格执行测试打算,排除测试的随意性。
●充分注意测试中的集群现象。
●程序员应幸免检查自己的程序。
●穷举测试不可能。
●妥帖保留设计打算、测试用例、犯错统计和最终分析报告。
3.软件测试技术和方式
软件测试的方式按是不是需要执行被测软件的角度,可分为静态测试和动态测试,按功能分为白盒测试和黑盒测试。
(1)白盒测试:
依照程序的内部逻辑设计测试用例,要紧方式有逻辑覆盖测试、大体途径测试。
(2)黑盒测试:
依照规格说明书的功能来设计测试用例,要紧诊断方式有等价划分法,边界值分析法,错误推测法、因果图法等,要紧用于软件确信测试。
1.3.5程序的调试
(1)任务:
诊断和更正程序中的错误。
(2)调试方式:
强行排错法、回溯法和缘故排除法。
数据库设计基础
1.4.1数据库系统的大体概念
(1)数据(Data):
描述事物的符号记录。
(2)数据库(DataBase)长期存储在运算机内的、有组织的、可共享的数据结合。
(3)数据库治理系统的6个功能:
数据组织、数据操纵、数据保护、操纵及爱惜和数据效劳。
(4)数据库技术进展经历了3个时期:
人工治理时期——文件系统时期——数据库系统时期
(5)数据库系统的特点:
集成性、高效性、高共享性、低冗余性、数据独立性、数据统一治理与操纵等。
(6)数据库系统的内部机构体系:
三级模式(概念模式、内模式、外模式)和二级映射(外模式/概念模式的映射、概念模式/内模式的映射)组成了数据库系统内部的抽象结构体系。
1.4.2数据模型
数据模型是数据特点的抽象,从抽象层次上描述了系统的形态特点、动态行为和约束条件,描述的内容有数据结构、数据操作和数据约束。
有3个层次:
概念数据模型、逻辑数据模型和物理数据模型。
(1)E-R模型:
提供了表示实体、属性和联系的方式。
实体间联系有:
“一对一”、“一对多”和“多对多”;
(2)层次模型:
利用树形结构表示实体及其之间联系,其中节点是实体,树枝是联系,从上到下是一对多关系;
(3)网状模型:
用网状结构表示实体及其之间联系,是层次模型的扩展。
网络模型以记录型为节点,反映现实中较为复杂的事物联系。
(4)关系模型:
采纳二维表(由表框架和表的元组组成)来表示,可进行数据查询、增加、删除及修改操作。
关系模型许诺概念“实体完整性”、“参照完整性”和“用户概念完整性”三种约束。
●键(码):
二维表中唯一能标识元组的最小属性集。
●候选键(候选码):
二维表中可能有的多个键。
●主键:
被选取的一个利用的键。
1.4.3关系代数
(1)传统的集合运算:
关系并运算、关系走运算、关系差运算和广义迪卡尔积。
(2)专门的关系运算:
选择、投影、连接。
1.4.4数据库设计与治理
1.数据库设计概念
●大体思想:
进程迭代和慢慢求精。
●方式:
面向数据的方式和面向进程的方式。
●设计进程:
需求分析——概念设计——逻辑设计——物理设计——编码——测试——运行——进一步修改。
2.数据库设计的需求分析
需求搜集和分析是数据库设计的第一时期,经常使用结构化分析方式(自顶向下、逐层分解)和面向对象的方式,要紧工作有绘制数据流程图,数据分析、功能分析、确信功能处置模块和数据间关系。
数据字典:
包括数据项、数据结构、数据流、数据存储和处置进程,是对系统中数据的详尽描述。
3.数据库的设计
(1)数据库的概念设计:
分析数据间内在的语义关联,以成立数据的抽象模型。
(2)数据库的逻辑设计:
从E—R图向关系模型转换,逻辑模式标准化,关系视图设计能够依照用户需求随时创建。
(3)数据库的物理设计:
是数据库在物理设备上的存储结构与存取方式,目的是对数据库内部物理结构作出调整并选择合理的存取途径,以提高速度和存储空间。
4.数据库治理
数据库治理包括数据库的成立、数据库的调整、数据库的重组、数据库的平安性与完整性操纵、数据库故障恢复和数据库的监控。
第二章C语言概述
2.1C语言基础知识
2.1.1C语言概述
(1)结构紧凑、利用方便、程序执行效率高的编程语言。
(2)有9种操纵语句、32个关键字和34种运算符。
(3)数据结构丰硕,可实现链表、树、栈等复杂的运算。
(4)语法不太严格,程序设计自由度大。
(5)程序可直接访问物理地址、对硬件操作。
移植性好。
2.1.2C语言的组成
(1)源程序由函数组成,每一个函数完成相对独立的功能。
(2)每一个源程序中必需有且只能有一个主函数,能够放在任何位置,但程序老是从主函数开始执行。
(3)函数体:
在函数后面用一对花括号括起来的部份。
(4)每一个语句以分号终止,但预处置命令、函数头以后不能加分号。
(5)注释:
括在“/*”与“*/”之间,没有空格,许诺出此刻程序的任何位置。
(6)预处置命令:
以“#”开头的语句。
常量、变量和数据类型
2.2.1标识符
1.标识符的命名规那么
·只能由字母、数字或下画线组成。
·第一个字符必需是字母或下画线,不能是数字。
·区分字母的大小写。
2.标识符的分类
C语言的标识符能够分为3类。
(1)、关键字:
C语言规定的专用的标识符,它们有着固定的含义,不能更改。
(2)、预概念标识符:
和“关键字”一样也有特定的含义。
·有库函数的名字、预编译处置命令两种类别。
·用户能够更改预概念标识符的作用,但这将失去系统规定的原先意思,不建议修改。
(3)、用户标识符:
由用户依照需要概念的标识符。
·命令应注意做到“见名知义”。
·不能与关键字相同。
2.2.2常量
概念:
在程序运行中,其值不能被改变的量。
常量的类型:
整型常量、实型常量、字符常量、字符串常量和符号常量。
1.整型常量
(1)表示形式:
十进制整型常量、八进制整型常量和十六进制整型常量。
(2)书写形式。
·十进制整型常量:
大体数字范围为0~9.
·八进制整型常量:
以0开头,大体数字范围为0~7。
·十六进制整型常量:
以0x开头,大体数字范围为0~15,其中10~15写为A~F或a~f。
2.实型常量
(1)表示形式:
小数形式和指数形式。
(2)书写形式。
·十进制小数形式:
小数点两边必需有数字。
·指数形式:
e前必需有数字,e后必需为整数。
3.字符常量
一个字符常量代表ASCII码字符集里的一个字符,在程序顶用单撇号括起来,区分大小写。
特殊的字符常量:
即转义字符。
其中:
“﹨”是转义的意思,后面跟不同的字符表示不同的意思。
·﹨n:
换行。
·﹨﹨:
反斜杠字符“﹨”。
·﹨ddd:
1~3位八进制数所代表的一个ASCII字符。
·﹨xhh:
1~2位十六进制数所代表的一个ASCII字符。
4.字符串常量
字符串常量是用双撇号括起来的一个或一串字符。
5.符号常量
符号常量是由预处置命令“#define”概念的常量,在C程序中可用标识符代表一个常量。
2.2.3变量
(1)概念:
值能够改变的量。
·变量要有变量名,在利用前必需先概念。
·在内存中占据必然的存储单元,不同类型的变量其存储单元的大小不同。
·存储单元里寄存的是该变量的值。
(2)变量的类型:
整型变量、实型变量、字符变量。
1.整型变量
(1)分类:
大体型(int)、短整型(shortint或short)、长整型(longint或long)和无符号型(unsignedint,unsignedshort,unsignedlong)。
(2)数值范围
·整型[signed]int,占16位,范围-32768~32767。
·短整型[signed]short[int],占16位,范围-32768~32767。
·长整型[signed]longint,占32位,-48~47。
·无符号整型unsigned[int],占16位,范围0~65535。
·无符号短整型unsignedshort[int],占16位,范围0~65535。
·无符号长整型unsignedlong[int],占32位,范围0~95。
2.实型变量
(1)分类:
单精度类型(float)和双精度类型(double)。
(2)概念方式:
floata;doublem;
(3)所占字节:
float型在内存中占4个字节(32位),double型占8个字节(64位)。
单精度实数提供7位有效数字,双精度实数提供15~16位有效数字。
(4)实型常量:
不分float型或double型,一个实型常量能够赋给一个float型或double型变量,但变量依照其自身类型截取实型常量中相应的有效数字。
3.字符变量
(1)作用:
用来寄存字符常量。
(2)概念:
用关键字char概念,每一个字符变量中只能寄存一个字符。
(3)概念方式:
charcr1,cr2;
(4)赋值:
cr1=‵m′,cr2=′n‵;
(5)存储方式:
存储字符对应的ASCII码到内存单元中。
·字符型数据与整型数据之间能够通用,一个字符能用字符的形式输出,也能用整数的形式输出。
·字符数据进行算术运算,相当于对它们的ASCII码进行运算。
第3章运算符与表达式
C语言运算符
3.1.1运算符的结合性和优先级
(1)结合性:
所有的单目运算符、条件运算符、赋值运算符及其扩展运算符,结合方向都是从右向左,其余运算符的结合方向是从左向右。
(2)优先级比较:
初等运算符>单目运算符>算术运算符(先乘除后加减)>关系运算符>逻辑运算符(不包括“!
”)>条件运算符>赋值运算符>逗号运算符。
初等运算符包括:
圆括号(),下标运算符[]和结构体成员运算符->。
3.1.2逗号运算符和逗号表达式
(1)逗号表达式:
用逗号运算将几个表达式连接起来。
(2)一样形式:
表达式1,表达式2,…,表达式n。
(3)求解进程:
先求解表达式1,然后依次求解表达式2,明白表达式你的值。
表达式n的值确实是整个逗号表达式的值。
3.2算术运算符和算术表达式
3.2.1大体的算术运算符
(1)分类:
+(加法运算符或正值运算符)、-(减法运算符或负值运算符)、*(乘)、/(除)和%(求余)。
“%”运算的两头必需都是整型,其余的运算对象都能够是整型或实型。
(2)双目运算符两边的数值类型必需一致才能进行运算,若是不一致,系统先进行一致性转换。
转换规那么:
char->short->int->unsigned->long->double->float.
(3)所有实数的运算都是以双精度方式进行的,假设是单精数值,那么需要在尾数后面补0转换为双精度数。
3.2.2算术表达式
(1)概念:
用算术运算符和括号将运算量连接起来的、符合C语言语法规那么的表达式。
(2)运算对象:
函数、常量和变量等。
(3)运算规那么。
·可利用多层圆括号,但括号必需配对。
运算时由内向外依次计算各表达式的值。
·关于不同优先级的运算符,按运算符的优先级由高到低进行运算,假设优先级相同,那么先利用自动转换或强制类型转换,然后进行运算。
3.2.2自加、自减运算符
(1)作用:
自加运算符“++”使运算变量的值增1,自减运算符“--”使运算变量的值减1。
(2)均是单目运算符。
运算对象能够是整型或实型变量,但不能够是常量和表达式。
(3)都可作为前缀运算符,也能够作为后缀运算符组成一个表达式。
·++i,--I:
在利用i之前,先使i的值加1或减1,再利用现在的表达式的值参加运算。
·i++,i--:
在利用i以后,使i的值加1或减1,再利用现在的表达式的值参加运算。
(4)结合方向:
自右向左。
3.3赋值运算符和赋值表达式
3.3.1赋值运算符和赋值表达式
(1)“=”称做赋值运算符,作用是将一个数值赋给一个变量或将一个变量的值赋给另一个变量,由赋值运算符组成的表达式称为赋值表达式。
(2)一样形式:
变量名=表达式。
·赋值运算符的优先级别高于逗号运算符。
·赋值运算符“=”和等于运算符“=”有专门大不同。
·赋值运算符的左侧只能是变量,而不能是常量或表达式。
右边能够是表达式,包括赋值表达式。
·规定最左侧变量所取得的新值确实是整个赋值表达式的值。
3.3.2复合的赋值运算符
在赋值运算符之前加上其他运算符能够组成复合赋值运算符。
例如,+=、-=、*=、/+、%=等。
·两个符号之间不能够有空格。
·复合赋值运算的优先级与赋值运算符的相同。
3.4位运算
(1)C语言提供6种位运算符:
·按位与“&”:
假设两个相应的二进制位都为1,那么该位的结果为1,不然为0.
·按位或“︱”:
两个相应的二进制位中只要有一个为1,那么该位的结果为1,不然为0.
·按位异或“∧”:
假设两个二进制位相同,那么结果为0,不同那么为1。
·按位求反“~”:
按位取反,即0变1,1变0。
·左移“<<”:
将一个数的二进制位全数左移假设干位。
·右移“>>”:
将一个数的二进制位全数都右移假设干位。
(2)说明:
·位运算中除“~”之外,均为双目运算符,要求双侧各有一个运算量。
·运算量只能是整型或字符型数据,不能为实型数据。
第4章大体语句
4.1格式化输出函数printf()
printf()函数是C语言提供的标准输出函数,它的作用是向终端(或系统隐含指定的输出设备)按指定格式输出假设干个数据。
1.printf()函数的一样形式
printf(格式操纵,输出表列)
(1)“格式操纵”:
用双引号括起来的字符串是“格式操纵”字符串,它包括两种信息。
·格式转换说明,由“%”和格式字符组成。
·需要原样输出的字符也写在格式操纵内。
(2)“输出表列”:
需要输出的一些数据,能够是常量、变量或表达式。
输出表列中的各输出项用逗号隔开。
2.格式字符
可在“%”与格式字符之间插入“宽度说明”、左对齐符号“—”、前导零符号“0”等。
·d格式符:
用来对十进制数进行输入输出,其中“%d”是按整型数据的实际长度输出,“%md”指定m为输出字段所占的宽度。
·o格式符:
以八进制数形式输出整数,能够通过如“%8o”的格式指定输出时所占的宽度。
·x格式符,以十六进制数形式输出整数,能够通过如“%12x”的格式指定输出时所占的宽度。
·u格式符:
用来输出unsigned型数据,即输出无符号的十进制数。
·c格式符,用来输出一个字符。
·s格式符,用来输出一个字符串。
·f格式符,用来输出实数(包括单、双精度),以小数形式输出,使整数部份全数输出。
·e格式符,以指数形式输出实数。
·g格式符,用来输出实数。
关于f、e、g格式符能够用“整数型1,整数型2”的形式,在指定宽度的同时来指定小数位的位数,其中,“整型数1”用来指定输出数据所占的总宽度,“整型数2”用来确信精度。
·当输出位数多于“整型数2”指定的宽度时,截去右边多余的小数,并对截去的第一名小数做四舍五入处置。
·当输出数据的小数位数少于“整数型2”指定的宽度时,在小数的最右边添0。