国二c语言公共基础知识总结

时间:2019-05-12 05:01:21下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《国二c语言公共基础知识总结》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《国二c语言公共基础知识总结》。

第一篇:国二c语言公共基础知识总结

第一章数据结构与算法 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代表每个元素占的字节数。

顺序表的运算:插入、删除。(详见14--16页)1.4 栈和队列

栈是限定在一端进行插入与删除的线性表,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。

栈按照“先进后出”(FILO)或“后进先出”(LIFO)组织数据,栈具有记忆作用。用top表示栈顶位置,用bottom表示栈底。栈的基本运算:(1)插入元素称为入栈运算;(2)删除元素称为退栈运算;(3)读栈顶元素是将栈顶元素赋给一个指定的变量,此时指针无变化。

队列是指允许在一端(队尾)进入插入,而在另一端(队头)进行删除的线性表。Rear指针指向队尾,front指针指向队头。

队列是“先进行出”(FIFO)或“后进后出”(LILO)的线性表。

队列运算包括(1)入队运算:从队尾插入一个元素;(2)退队运算:从队头删除一个元素。

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

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

结点由两部分组成:(1)用于存储数据元素值,称为数据域;(2)用于存放指针,称为指针域,用于指向前一个或后一个结点。

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

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

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

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

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

二叉树的特点:(1)非空二叉树只有一个根结点;(2)每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。二叉树的基本性质:(1)在二叉树的第k层上,最多有2k-1(k≥1)个结点;(2)深度为m的二叉树最多有2m-1个结点;

(3)度为0的结点(即叶子结点)总是比度为2的结点多一个;(4)具有n个结点的二叉树,其深度至少为[log2n]+1,其中[log2n]表示取log2n的整数部分;

(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;否则该结点无右子结点。

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

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

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

二叉树的遍历:

(1)前序遍历(DLR),首先访问根结点,然后遍历左子树,最后遍历右子树;(2)中序遍历(LDR),首先遍历左子树,然后访问根结点,最后遍历右子树;(3)后序遍历(LRD)首先遍历左子树,然后访问遍历右子树,最后访问根结点。1.7 查找技术

顺序查找的使用情况:(1)线性表为无序表;

(2)表采用链式存储结构。

二分法查找只适用于顺序存储的有序表,对于长度为n的有序线性表,最坏情况只需比较log2n次。1.8 排序技术

排序是指将一个无序序列整理成按值非递减顺序排列的有序序列。

交换类排序法:(1)冒泡排序法,需要比较的次数为n(n-1)/2;(2)快速排序法。

插入类排序法:(1)简单插入排序法,最坏情况需要n(n-1)/2次比较;(2)希尔排序法,最坏情况需要O(n1.5)次比较。选择类排序法:(1)简单选择排序法, 最坏情况需要n(n-1)/2次比较;(2)堆排序法,最坏情况需要O(nlog2n)次比较。

-----------------------

第二章程序设计基础

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)模块独立性好。

类是指具有共同属性、共同方法的对象的集合。所以类是对象的抽象,对象是对应类的一个实例。

消息是一个实例与另一个实例之间传递的信息。

消息的组成包括(1)接收消息的对象的名称;(2)消息标识符,也称消息名;(3)零个或多个参数。

继承是指能够直接获得已有的性质和特征,而不必重复定义他们。

继承分单继承和多重继承。单继承指一个类只允许有一个父类,多重继承指一个类允许有多个父类。多态性是指同样的消息被不同的对象接受时可导致完全不同的

----------------第三章软件工程基础 3.1 软件工程基本概念

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

(1)软件是一种逻辑实体;

(2)软件的生产与硬件不同,它没有明显的制作过程;(3)软件在运行、使用期间不存在磨损、老化问题;

(4)软件的开发、运行对计算机系统具有依赖性,受计算机系统的限制,这导致了软件移植的问题;

(5)软件复杂性高,成本昂贵;

(6)软件开发涉及诸多的社会因素。

软件按功能分为应用软件、系统软件、支撑软件(或工具软件)。软件危机主要表现在成本、质量、生产率等问题。

软件工程是应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。

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

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

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

软件周期:软件产品从提出、实现、使用维护到停止使用退役的过程。

软件生命周期三个阶段:软件定义、软件开发、运行维护,主要活动阶段是:(1)可行性研究与计划制定;(2)需求分析;(3)软件设计;(4)软件实现;(5)软件测试;(6)运行和维护。

软件工程的目标和与原则:

目标:在给定成本、进度的前提下,开发出具有有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性且满足用户需求的产品。

基本目标:付出较低的开发成本;达到要求的软件功能;取得较好的软件性能;开发软件易于移植;需要较低的费用;能按时完成开发,及时交付使用。基本原则:抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性。

软件工程的理论和技术性研究的内容主要包括:软件开发技术和软件工程管理。软件开发技术包括:软件开发方法学、开发过程、开发工具和软件工程环境。软件工程管理包括:软件管理学、软件工程经济学、软件心理学等内容。软件管理学包括人员组织、进度安排、质量保证、配置管理、项目计划等。软件工程原则包括抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性。

3.2 结构化分析方法

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

需求分析方法有(1)结构化需求分析方法;(2)面向对象的分析的方法。从需求分析建立的模型的特性来分:静态分析和动态分析。

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

(1)数据流图;(2)数据字典;(3)判定树;(4)判定表。数据流图:描述数据处理过程的工具,是需求理解的逻辑模型的图形表示,它直接支持系统功能建模。

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

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

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

数据字典是结构化分析的核心。软件需求规格说明书的特点:(1)正确性;(2)无岐义性;(3)完整性;(4)可验证性;(5)一致性;(6)可理解性;(7)可追踪性。

3.3 结构化设计方法

软件设计的基本目标是用比较抽象概括的方式确定目标系统如何完成预定的任务,软件设计是确定系统的物理模型。软件设计是开发阶段最重要的步骤,是将需求准确地转化为完整的软件产品或系统的唯一途径。从技术观点来看,软件设计包括软件结构设计、数据设计、接口设计、过程设计。结构设计:定义软件系统各主要部件之间的关系。

数据设计:将分析时创建的模型转化为数据结构的定义。

接口设计:描述软件内部、软件和协作系统之间以及软件与人之间如何通信。过程设计:把系统结构部件转换成软件的过程描述。从工程管理角度来看:概要设计和详细设计。软件设计的一般过程:软件设计是一个迭代的过程;先进行高层次的结构设计;后进行低层次的过程设计;穿插进行数据设计和接口设计。

衡量软件模块独立性使用耦合性和内聚性两个定性的度量标准。在程序结构中各模块的内聚性越强,则耦合性越弱。优秀软件应高内聚,低耦合。软件概要设计的基本任务是:

(1)设计软件系统结构;(2)数据结构及数据库设计;(3)编写概要设计文档;(4)概要设计文档评审。模块用一个

矩形表示,箭头表示模块间的调用关系。

在结构图中还可以用带注释的箭头表示模块调用过程中来回传递的信息。还可用带实心圆的箭头表示传递的是控制信息,空心圆箭心表示传递的是数据。结构图的基本形式:基本形式、顺序形式、重复形式、选择形式。

结构图有四种模块类型:传入模块、传出模块、变换模块和协调模块。典型的数据流类型有两种:变换型和事务型。

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

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

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

常见的过程设计工具有:图形工具(程序流程图)、表格工具(判定表)、语言工具(PDL)。3.4 软件测试

软件测试定义:使用人工或自动手段来运行或测定某个系统的过程,其目的在于 软件测试的目的:发现错误而执行程序的过程。

软件测试方法:静态测试和动态测试。检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。

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

动态测试:是基本计算机的测试,主要包括白盒测试方法和黑盒测试方法。白盒测试:在程序内部进行,主要用于完成软件内部操作的验证。主要方法有逻辑覆盖、基本基路径测试。

黑盒测试:主要诊断功能不对或遗漏、界面错误、数据结构或外部数据库访问错误、性能错误、初始化和终止条件错,用于软件确认。主要方法有等价类划分法、边界值分析法、错误推测法、因果图等。软件测试过程一般按4个步骤进行:单元测试、集成测试、验收测试(确认测试)和系统测试。3.5 程序的调试

程序调试的任务是诊断和改正程序中的错误,主要在开发阶段进行。程序调试的基本步骤:(1)错误定位;

(2)修改设计和代码,以排除错误;

(3)进行回归测试,防止引进新的错误。软件调试可分表静态调试和动态调试。静态调试主要是指通过人的思维来分析源 程序代码和排错,是主要的设计手段,而动态调试是辅助静态调试。主要调试方法有:

(1)强行排错法;(2)回溯法;

(3)原因排除法。

4.1 数据库系统的基本概念

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

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

数据库:是数据的集合,具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被各个应用程序共享。

数据库存放数据是按数据所提供的数据模式存放的,具有集成与共享的特点。数据库管理系统:一种系统软件,负责数据库中的数据组织、数据操纵、数据维护、控制及保护和数据服务等,是数据库的核心。数据库管理系统功能:

(1)数据模式定义:即为数据库构建其数据框架;

(2)数据存取的物理构建:为数据模式的物理存取与构建提供有效的存取方法与手段;

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

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

(6)数据的服务:如拷贝、转存、重组、性能监测、分析等。为完成以上六个功能,数据库管理系统提供以下的数据语言:

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

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

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

数据库管理员:对数据库进行规划、设计、维护、监视等的专业管理人员。数据库系统:由数据库(数据)、数据库管理系统(软件)、数据库管理员(人员)、硬件平台(硬件)、软件平台(软件)五个部分构成的运行实体。数据库应用系统:由数据库系统、应用软件及应用界面三者组成。文件系统阶段:提供了简单的数据共享与数据管理能力,但是它无法提供完整的、统一的、管理和数据共享的能力。

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

数据库系统的基本特点:数据的集成性、数据的高共享性与低冗余性、数据独立性(物理独立性与逻辑独立性)、数据统一管理与控制。数据库系统的三级模式:

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

(2)外模式:也称子模式与用户模式。是用户的数据视图,也就是用户所见到的数据模式;

(3)内模式:又称物理模式,它给出了数据库物理存储结构与物理存取方法。数据库系统的两级映射:

(1)概念模式到内模式的映射;(2)外模式到概念模式的映射。4.2 数据模型

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

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

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

E-R模型三个基本概念之间的联接关系:实体是概念世界中的基本单位,属性有属性域,每个实体可取属性域内的值。一个实体的所有属性值叫元组。

E-R模型的图示法:(1)实体集表示法;(2)属性表法;(3)联系表示法。层次模型的基本结构是树形结构,具有以下特点:(1)每棵树有且仅有一个无双亲结点,称为根;(2)树中除根外所有结点有且仅有一个双亲。

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

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

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

关系中的数据约束:

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

(3)用户定义的完整性约束:它反映了具体应用中数据的语义要求。4.3关系代数

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

(1)插入(2)删除(3)修改(4)查询(包括投影、选择、笛卡尔积运算)4.4 数据库设计与管理

数据库设计是数据应用的核心。数据库设计的两种方法:

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

数据库的生命周期:需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、编码阶段、测试阶段、运行阶段、进一步修改阶段。需求分析常用结构析方法和面向对象的方法。结构化分析(简称SA)方法用自顶向下、逐层分解的方式分析系统。用数据流图表达数据和处理过程的关系。对数据库设计来讲,数据字典是进行详细的数据收集和数据分析所获得的主要结果。

数据字典是各类数据描述的集合,包括5个部分:数据项、数据结构、数据流(可以是数据项,也可以是数据结构)、数据存储、处理过程。数据库概念设计的目的是分析数据内在语义关

系。设计的方法有两种

(1)集中式模式设计法(适用于小型或并不复杂的单位或部门);(2)视图集成设计法。

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

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

(1)提供数据逻辑独立性;

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

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

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

---------------

二级公共基础知识(填空题40道)

(1)算法的复杂度主要包括______复杂度和空间复杂度。答:时间

(2)数据的逻辑结构在计算机存储空间中的存放形式称为数据的______。答:模式#逻辑模式#概念模式

(3)若按功能划分,软件测试的方法通常分为白盒测试方法和______测试方法。答:黑盒

(4)如果一个工人可管理多个设施,而一个设施只被一个工人管理,则实体“工人”与实体“设备”之间存在______联系。答:一对多#1:N#1:n(5)关系数据库管理系统能实现的专门关系运算包括选择、连接和______。答:投影

(6)在先左后右的原则下,根据访问根结点的次序,二叉树的遍历可以分为三种:前序遍历、______遍历和后序遍历。答:中序

(7)结构化程序设计方法的主要原则可以概括为自顶向下、逐步求精、______和限制使用goto语句。答:模块化

(8)软件的调试方法主要有:强行排错法、______和原因排除法。答:回溯法

(9)数据库系统的三级模式分别为______模式、内部级模式与外部级模式。答:概念#概念级

(10)数据字典是各类数据描述的集合,它通常包括5个部分,即数据项、数据结构、数据流、______和处理过程。答:数据存储

(11)设一棵完全二叉树共有500个结点,则在该二叉树中有______个叶子结点。答:250(12)在最坏情况下,冒泡排序的时间复杂度为______。答:n(n-1)/2#n*(n-1)/2#O(n(n-1)/2)#O(n*(n-1)/2)(13)面向对象的程序设计方法中涉及的对象是系统中用来描述客观事物的一个______。答:实体

(14)软件的需求分析阶段的工作,可以概括为四个方面:______、需求分析、编写需求规格说明书和需求评审。答:需求获取

(15)______是数据库应用的核心。答:数据库设计

(16)数据结构包括数据的______结构和数据的存储结构。答:逻辑

(17)软件工程研究的内容主要包括:______技术和软件工程管理。答:软件开发

(18)与结构化需求分析方法相对应的是______方法。答:结构化设计

(19)关系模型的完整性规则是对关系的某种约束条件,包括实体完整性、______和自定义完整性。答:参照完整性

(20)数据模型按不同的应用层次分为三种类型,它们是______数据模型、逻辑数据模型和物理数据模型。答:概念

(21)栈的基本运算有三种:入栈、退栈和______。答:读栈顶元素#读栈顶的元素#读出栈顶元素

(22)在面向对象方法中,信息隐蔽是通过对象的______性来实现的。答:封装

(23)数据流的类型有______和事务型。答:变换型

(24)数据库系统中实现各种数据管理功能的核心软件称为______。答:数据库管理系统#DBMS(25)关系模型的数据CAO纵即是建立在关系上的数据CAO纵,一般有______、增加、删除和修改四种CAO作。答:查询

(26)实现算法所需的存储单元多少和算法的工作量大小分别称为算法的 ______。

答:空间复杂度和时间复杂度

(27)数据结构包括数据的逻辑结构、数据的 ______以及对数据的CAO作运算。答:存储结构

(28)一个类可以从直接或间接的祖先中继承所有属性和方法。采用这个方法提高了软件的______。答:可重用性

(29)面向对象的模型中,最基本的概念是对象和 ______。答:类

(30)软件维护活动包括以下几类:改正性维护、适应性维护、______维护和预防性维护。答:完善性

(31)算法的基本特征是可行性、确定性、______和拥有足够的情报。答:有穷性

(32)顺序存储方法是把逻辑上相邻的结点存储在物理位置______的存储单元中。

答:相邻

(33)Jackson结构化程序设计方法是英国的M.Jackson提出的,它是一种面向______的设计方法。答:数据结构

(34)数据库设计分为以下6个设计阶段:需求分析阶段、______、逻辑设计阶段、物理设计阶段、实施阶段、运行和维护阶段。答:概念设计阶段#数据库概念设计阶段

(35)数据库保护分为:安全性控制、______、并发性控制和数据的恢复。答:完整性控制

(36)测试的目的是暴露错误,评价程序的可靠性;而______的目的是发现错误的位置并改正错误。答:调试

(37)在最坏情况下,堆排序需要比较的次数为______。答:O(nlog2n)(38)若串s=“Program”,则其子串的数目是______。答:29(39)一个项目具有一个项目主管,一个项目主管可管理多个项目,则实体“项目主管”与实体“项目”的联系属于______的联系。答:1对多#1:N(40)数据库管理系统常见的数据模型有层次模型、网状模型和______三种。公共基础知识总结

二级公共基础知识(选择题80道)(1)下面叙述正确的是______。(C)A.算法的执行效率与数据的存储结构无关

B.算法的空间复杂度是指算法程序中指令(或语句)的条数 C.算法的有穷性是指算法必须能在执行有限个步骤之后终止 D.以上三种描述都不对

(2)以下数据结构中不属于线性数据结构的是______。(C)A.队列 B.线性表 C.二叉树 D.栈

(3)在一棵二叉树上第5层的结点数最多是______。(B)A.8 B.16 C.32 D.15(4)下面描述中,符合结构化程序设计风格的是______。(A)A.使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑 B.模块只有一个入口,可以有多个出口 C.注重提高程序的执行效率 D.不使用goto语句

(5)下面概念中,不属于面向对象方法的是______。(D)A.对象 B.继承 C.类

D.过程调用

(6)在结构化方法中,用数据流程图(DFD)作为描述工具的软件开发阶段是______。(B)A.可行性分析 B.需求分析 C.详细设计 D.程序编码

(7)在软件开发中,下面任务不属

于设计阶段的是______。(D)A.数据结构设计

B.给出系统模块结构 C.定义模块算法

D.定义需求并建立系统模型

(8)数据库系统的核心是______。(B)A.数据模型

B.数据库管理系统 C.软件工具 D.数据库

(9)下列叙述中正确的是______。(C)A.数据库是一个独立的系统,不需要CAO作系统的支持 B.数据库设计是指设计数据库管理系统

C.数据库技术的根本目标是要解决数据共享的问题

D.数据库系统中,数据的物理结构必须与逻辑结构一致

(10)下列模式中,能够给出数据库物理存储结构与物理存取方法的是______。(A)A.内模式 B.外模式 C.概念模式 D.逻辑模式

(11)算法的时间复杂度是指______。(C)A.执行算法程序所需要的时间 B.算法程序的长度

C.算法执行过程中所需要的基本运算次数 D.算法程序中的指令条数

(12)下列叙述中正确的是______。(A)A.线性表是线性结构

B.栈与队列是非线性结构 C.线性链表是非线性结构 D.二叉树是线性结构

(13)设一棵完全二叉树共有699个结点,则在该二叉树中的叶子结点数为______。(B)A.349 B.350 C.255 D.351(14)结构化程序设计主要强调的是______。(B)A.程序的规模 B.程序的易读性 C.程序的执行效率 D.程序的可移植性

(15)在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是______。(D)A.概要设计 B.详细设计 C.可行性分析 D.需求分析

(16)数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定的图符构成。下列图符名标识的图符不属于数据流图合法图符的是______。(A)A.控制流 B.加工 C.数据存储 D.源和潭

(17)软件需求分析阶段的工作,可以分为四个方面:需求获取、需求分析、编写需求规格说明书以及______。(B)A.阶段性报告 B.需求评审 C.总结

D.都不正确

(18)下述关于数据库系统的叙述中正确的是______。(A)A.数据库系统减少了数据冗余 B.数据库系统避免了一切冗余

C.数据库系统中数据的一致性是指数据类型的一致 D.数据库系统比文件系统能管理更多的数据(19)关系表中的每一横行称为一个______。(A)A.元组 B.字段 C.属性 D.码

(20)数据库设计包括两个方面的设计内容,它们是______。(A)A.概念设计和逻辑设计 B.模式设计和内模式设计 C.内模式设计和物理设计

D.结构特性设计和行为特性设计

(21)算法的空间复杂度是指______。(D)A.算法程序的长度

B.算法程序中的指令条数 C.算法程序所占的存储空间

D.算法执行过程中所需要的存储空间

(22)下列关于栈的叙述中正确的是______。(D)A.在栈中只能插入数据 B.在栈中只能删除数据 C.栈是先进先出的线性表 D.栈是先进后出的线性表

(23)在深度为5的满二叉树中,叶子结点的个数为______。(C)A.32 B.31 C.16 D.15(24)对建立良好的程序设计风格,下面描述正确的是______。(A)A.程序应简单、清晰、可读性好 B.符号名的命名要符合语法 C.充分考虑程序的执行效率 D.程序的注释可有可无

(25)下面对对象概念描述错误的是______。(A)A.任何对象都必须有继承性 B.对象是属性和方法的封装体 C.对象间的通讯靠消息传递 D.CAO作是对象的动态性属性

(26)下面不属于软件工程的3个要素的是______。(D)A.工具 B.过程 C.方法 D.环境

(27)程序流程图(PFD)中的箭头代表的是______。(B)A.数据流 B.控制流 C.调用关系 D.组成关系

(28)在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。其中数据独立性最高的阶段是______。(A)A.数据库系统 B.文件系统 C.人工管理 D.数据项管理

(29)用树形结构来表示实体之间联系的模型称为______。(B)A.关系模型 B.层次模型 C.网状模型 D.数据模型

(30)关系数据库管理系统能实现的专门关系运算包括______。(B)A.排序、索引、统计 B.选择、投影、连接 C.关联、更新、排序 D.显示、打印、制表

(31)算法一般都可以用哪几种控制结构组合而成______。(D)A.循环、分支、递归 B.顺序、循环、嵌套 C.循环、递归、选择 D.顺序、选择、循环

(32)数据的存储结构是指______。(B)A.数据所占的存储空间量

B.数据的逻辑结构在计算机中的表示 C.数据在计算机中的顺序存储方式 D.存储在外存中的数据(33)设有下列二叉树:

对此二叉树中序遍历的结果为______。(B)A.ABCDEF B.DBEAFC C.ABDECF D.DEBFCA(34)在面向对象方法中,一个对象请求另一对象为其服务的方式是通过发送______。(D)A.调用语句 B.命令 C.口令 D.消息

(35)检查软件产品是否符合需求定义的过程称为______。(A)A.确认测试 B.集成测试 C.验证测试 D.验收测试

(36)下列工具中属于需求分析常用工具的是______。(D)A.PAD B.PFD C.N-S D.DFD(37)下面不属于软件设计原则的是______。(C)A.抽象 B.模块化 C.自底向上 D.信息隐蔽

(38)索引属于______。(B)A.模式 B.内模式 C.外模式 D.概念模式

(39)在关系数据库中,用来表示实体之间联系的是______。(D)A.树结构 B.网结构 C.线性表 D.二维表

(40)将E-R图转换到关系模式时,实体与联系都可以表示成______。(B)A.属性 B.关系 C.键 D.域

(41)在下列选项中,哪个不是一个算法一般应该具有的基本特征______。(C)A.确定性 B.可行性 C.无穷性

D.拥有足够的情报

(42)希尔排序法属于哪一种类型的排序法______。(B)A.交换类排序法 B.插入类排序法 C.选择类排序法 D.建堆排序法

(43)下列关于队列的叙述中正确的是______。(C)A.在队列中只能插入数据 B.在队列中只能删除数据 C.队列是先进先出的线性表 D.队列是先进后出的线性表

(44)对长度为N的线性表进行顺序查找,在最坏情况下所需要的比较次数为______。(B)A.N+1 B.N C.(N+1)/2 D.N/2(45)信息隐蔽的概念与下述哪一种概念直接相关______。(B)A.软件结构定义 B.模块独立性 C.模块类型划分 D.模拟耦合度

(46)面向对象的设计方法与传统的的面向过程的方法有本质不同,它的基本原理是______。(C)A.模拟现实世界中不同事物之间的联系

B.强调模拟现实世界中的算法而不强调概念

C.使用现实世界的概念抽象地思考问题从而自然地解决问题

D.鼓励开发者在软件开发的绝大部分中都用实际领域的概念去思考

(47)在结构化方法中,软件功能分解属于下列软件开发中的阶段是______。(C)A.详细设计 B.需求分析 C.总体设计 D.编程调试

(48)软件调试的目的是______。(B)A.发现错误 B.改正错误

C.改善软件的性能 D.挖掘软件的潜能

(49)按条件f对关系R进行选择,其关系代数表达式为______。(C)A.R|X|R B.R|X|R f C.бf(R)D.∏f(R)(50)数据库概念设计的过程中,视图设计一般有三种设计次序,以下各项中不对的______。(D)A.自顶向下 B.由底向上 C.由内向外

D.由整体到局部

(51)在计算机中,算法是指______。(C)A.查询方法 B.加工方法

C.解题方案的准确而完整的描述 D.排序方法

(52)栈和队列的共同点是______。(C)A.都是先进后出 B.都是先进先出

C.只允许在端点处插入和删除元素 D.没有共同点

(53)已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是______。(A)A.cedba B.acbed C.decab D.deabc(54)在下列几种排序方法中,要求内存量最大的是______。(D)A.插入排序 B.选择排序 C.快速排序 D.归并排序

(55)在设计程序时,应采纳的原则之一是______。(A)A.程序结构应有助于读者理解 B.不限制goto语句的使用 C.减少或取消注解行 D.程序越短越好

(56)下列不属于软件调试技术的是______。(B)A.强行排错法 B.集成测试法 C.回溯法

D.原因排除法

(57)下列叙述中,不属于软件需求规格说明书的作用的是______。(D)A.便于用户、开发人员进行理解和交流

B.反映出用户问题的结构,可以作为软件开发工作的基础和依据 C.作为确认测试和验收的依据 D.便于开发人员进行需求分析

(58)在数据流图(DFD)中,带有名字的箭头表示______。(C)A.控制程序的执行顺序

B.模块之间的调用关系 C.数据的流向

D.程序的组成成分(59)SQL语言又称为______。(C)A.结构化定义语言 B.结构化控制语言 C.结构化查询语言 D.结构化CAO纵语言

(60)视图设计一般有3种设计次序,下列不属于视图设计的是______。(B)A.自顶向下 B.由外向内 C.由内向外 D.自底向上

(61)数据结构中,与所使用的计算机无关的是数据的______。(C)A.存储结构 B.物理结构 C.逻辑结构

D.物理和存储结构

(62)栈底至栈顶依次存放元素A、B、C、D,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是______。(D)A.ABCED B.DBCEA C.CDABE D.DCBEA(63)线性表的顺序存储结构和线性表的链式存储结构分别是______。(B)A.顺序存取的存储结构、顺序存取的存储结构 B.随机存取的存储结构、顺序存取的存储结构 C.随机存取的存储结构、随机存取的存储结构 D.任意存取的存储结构、任意存取的存储结构

(64)在单链表中,增加头结点的目的是______。(A)A.方便运算的实现

B.使单链表至少有一个结点 C.标识表结点中首结点的位置

D.说明单链表是线性表的链式存储实现

(65)软件设计包括软件的结构、数据接口和过程设计,其中软件的过程设计是指______。(B)A.模块间的关系

B.系统结构部件转换成软件的过程描述 C.软件层次结构 D.软件开发过程

(66)为了避免流程图在描述程序逻辑时的灵活性,提出了用方框图来代替传统的程序流程图,通常也把这种图称为______。(B)A.PAD图 B.N-S图 C.结构图 D.数据流图

(67)数据处理的最小单位是______。(C)A.数据

B.数据元素 C.数据项 D.数据结构

(68)下列有关数据库的描述,正确的是______。(C)A.数据库是一个DBF文件 B.数据库是一个关系

C.数据库是一个结构化的数据集合 D.数据库是一组文件

(69)单个用户使用的数据视图的描述称为______。(A)A.外模式 B.概念模式 C.内模式 D.存储模式

(70)需求分析阶段的任务是确定______。(D)A.软件开发方法 B.软件开发工具 C.软件开发费用 D.软件系统功能

(71)算法分析的目的是______。(D)A.找出数据结构的合理性

B.找出算法中输入和输出之间的关系 C.分析算法的易懂性和可靠性 D.分析算法的效率以求改进

(72)n个顶点的强连通图的边数至少有______。(C)A.n-1 B.n(n-1)C.n D.n+1(73)已知数据表A中每个元素距其最终位置不远,为节省时间,应采用的算法是______。(B)A.堆排序

B.直接插入排序 C.快速排序

D.直接选择排序

(74)用链表表示线性表的优点是______。(A)A.便于插入和删除CAO作

B.数据元素的物理顺序与逻辑顺序相同 C.花费的存储空间较顺序存储少 D.便于随机存取

(75)下列不属于结构化分析的常用工具的是______。(D)A.数据流图 B.数据字典 C.判定树 D.PAD图

(76)软件开发的结构化生命周期方法将软件生命周期划分成______。(A)A.定义、开发、运行维护

B.设计阶段、编程阶段、测试阶段 C.总体设计、详细设计、编程调试 D.需求分析、功能定义、系统设计

(77)在软件工程中,白箱测试法可用于测试程序的内部结构。此方法将程序看做是______。(C)A.循环的集合 B.地址的集合 C.路径的集合 D.目标的集合

(78)在数据管理技术发展过程中,文件系统与数据库系统的主要区别是数据库系统具有______。(D)A.数据无冗余 B.数据可共享

C.专门的数据管理软件 D.特定的数据模型

(79)分布式数据库系统不具有的特点是______。(B)A.分布式 B.数据冗余

C.数据分布性和逻辑整体性 D.位置透明性和复制透明性

(80)下列说法中,不属于数据模型所描述的内容的是______。(C)A.数据结构 B.数据CAO作 C.数据查询 D.数据约束

技算机2级公共基础120题

(1)下面叙述正确的是______。(C)A.算法的执行效率与数据的存储结构无关

B.算法的空间复杂度是指算法程序中指令(或语句)的条数 C.算法的有穷性是指算法必须能在执行有限个步骤之后终止 D.以上三种描述都不对

(2)以下数据结构中不属于线性数据结构的是______。(C)A.队列 B.线性表 C.二叉树 D.栈

(3)在一棵二叉树上第5层的结点数最多是______。(B)A.8 B.16 C.32 D.15(4)下面描述中,符合结构化程序设计风格的是______。(A)A.使用顺序、选择和重复(循环)三种基本控制结构表示程序的控制逻辑 B.模块只有一个入口,可以有多个出口 C.注重提高程序的执行效率 D.不使用goto语句

(5)下面概念中,不属于面向对象方法的是______。(D)A.对象 B.继承 C.类

D.过程调用

(6)在结构化方法中,用数据流程图(DFD)作为描述工具的软件开发阶段是______。(B)A.可行性分析 B.需求分析 C.详细设计 D.程序编码

(7)在软件开发中,下面任务不属于设计阶段的是______。(D)A.数据结构设计

B.给出系统模块结构 C.定义模块算法

D.定义需求并建立系统模型

(8)数据库系统的核心是______。(B)A.数据模型

B.数据库管理系统 C.软件工具 D.数据库

(9)下列叙述中正确的是______。(C)A.数据库是一个独立的系统,不需要操作系统的支持 B.数据库设计是指设计数据库管理系统

C.数据库技术的根本目标是要解决数据共享的问题

D.数据库系统中,数据的物理结构必须与逻辑结构一致

(10)下列模式中,能够给出数据库物理存储结构与物理存取方法的是______。(A)A.内模式 B.外模式 C.概念模式 D.逻辑模式

(11)算法的时间复杂度是指______。(C)是

A.执行算法程序所需要的时间 B.算法程序的长度

C.算法执行过程中所需要的基本运算次数 D.算法程序中的指令条数

(12)下列叙述中正确的是______。(A)A.线性表是线性结构

B.栈与队列是非线性结构 C.线性链表是非线性结构 D.二叉树是线性结构

(13)设一棵完全二叉树共有699个结点,则在该二叉树中的叶子结点数为______。(B)A.349 B.350 C.255 D.351(14)结构化程序设计主要强调的是______。(B)A.程序的规模 B.程序的易读性 C.程序的执行效率 D.程序的可移植性

(15)在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是______。(D)A.概要设计 B.详细设计 C.可行性分析 D.需求分析

(16)数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定的图符构成。下列图符名标识的图符不属于数据流图合法图符的是______。(A)A.控制流 B.加工

C.数据存储 D.源和潭

(17)软件需求分析阶段的工作,可以分为四个方面:需求获取、需求分析、编写需求规格说明书以及______。(B)A.阶段性报告 B.需求评审 C.总结

D.都不正确

(18)下述关于数据库系统的叙述中正确的是______。(A)A.数据库系统减少了数据冗余 B.数据库系统避免了一切冗余

C.数据库系统中数据的一致性是指数据类型的一致 D.数据库系统比文件系统能管理更多的数据(19)关系表中的每一横行称为一个______。(A)A.元组 B.字段 C.属性 D.码

(20)数据库设计包括两个方面的设计内容,它们是______。(A)A.概念设计和逻辑设计 B.模式设计和内模式设计 C.内模式设计和物理设计

D.结构特性设计和行为特性设计

(21)算法的空间复杂度是指______。(D)A.算法程序的长度

B.算法程序中的指令条数 C.算法程序所占的存储空间

D.算法执行过程中所需要的存储空间

(22)下列关于栈的叙述中正确的是______。(D)A.在栈中只能插入数据 B.在栈中只能删除数据 C.栈是先进先出的线性表 D.栈是先进后出的线性表

(23)在深度为5的满二叉树中,叶子结点的个数为______。(C)A.32 B.31 C.16 D.15(24)对建立良好的程序设计风格,下面描述正确的是______。(A)A.程序应简单、清晰、可读性好 B.符号名的命名要符合语法 C.充分考虑程序的执行效率 D.程序的注释可有可无

(25)下面对对象概念描述错误的是______。(A)A.任何对象都必须有继承性 B.对象是属性和方法的封装体 C.对象间的通讯靠消息传递 D.操作是对象的动态性属性

(26)下面不属于软件工程的3个要素的是______。(D)A.工具 B.过程 C.方法 D.环境

(27)程序流程图(PFD)中的箭头代表的是______。(B)A.数据流 B.控制流 C.调用关系 D.组成关系

(28)在数据管理技术的发展过程中,经历了人工管理阶段、文件系统阶段和数据库系统阶段。其中数据独立性最高的阶段是______。(A)A.数据库系统 B.文件系统 C.人工管理 D.数据项管理

(29)用树形结构来表示实体之间联系的模型称为______。(B)A.关系模型 B.层次模型 C.网状模型 D.数据模型

(30)关系数据库管理系统能实现的专门关系运算包括______。(B)A.排序、索引、统计 B.选择、投影、连接 C.关联、更新、排序 D.显示、打印、制表

(31)算法一般都可以用哪几种控制结构组合而成______。(D)A.循环、分支、递归 B.顺序、循环、嵌套 C.循环、递归、选择 D.顺序、选择、循环

(32)数据的存储结构是指______。(B)A.数据所占的存储空间量

B.数据的逻辑结构在计算机中的表示 C.数据在计算机中的顺序存储方式 D.存储在外存中的数据(33)设有下列二叉树:

对此二叉树中序遍历的结果为______。(B)A.ABCDEF B.DBEAFC C.ABDECF D.DEBFCA(34)在面向对象方法中,一个对象请求另一对象为其服务的方式是通过发送______。(D)D.消息

A.调用语句 B.命令 C.口令

(35)检查软件产品是否符合需求定义的过程称为______。(A)A.确认测试 B.集成测试 C.验证测试 D.验收测试

(36)下列工具中属于需求分析常用工具的是______。(D)A.PAD B.PFD C.N-S D.DFD(37)下面不属于软件设计原则的是______。(C)A.抽象 B.模块化 C.自底向上 D.信息隐蔽

(38)索引属于______。(B)A.模式 B.内模式 C.外模式 D.概念模式

(39)在关系数据库中,用来表示实体之间联系的是______。(D)A.树结构 B.网结构 C.线性表 D.二维表

(40)将E-R图转换到关系模式时,实体与联系都可以表示成______。(B)A.属性 B.关系 C.键 D.域

(41)在下列选项中,哪个不是一个算法一般应该具有的基本特征______。(C)A.确定性 B.可行性 C.无穷性

D.拥有足够的情报

(42)希尔排序法属于哪一种类型的排序法______。(B)A.交换类排序法 B.插入类排序法 C.选择类排序法 D.建堆排序法

(43)下列关于队列的叙述中正确的是______。(C)A.在队列中只能插入数据 B.在队列中只能删除数据 C.队列是先进先出的线性表 D.队列是先进后出的线性表

(44)对长度为N的线性表进行顺序查找,在最坏情况下所需要的比较次数为______。(B)A.N+1 B.N C.(N+1)/2 D.N/2(45)信息隐蔽的概念与下述哪一种概念直接相关______。(B)A.软件结构定义 B.模块独立性 C.模块类型划分 D.模拟耦合度

(46)面向对象的设计方法与传统的的面向过程的方法有本质不同,它的基本原理是______。(C)A.模拟现实世界中不同事物之间的联系

B.强调模拟现实世界中的算法而不强调概念

C.使用现实世界的概念抽象地思考问题从而自然地解决问题

D.鼓励开发者在软件开发的绝大部分中都用实际领域的概念去思考

(47)在结构化方法中,软件功能分解属于下列软件开发中的阶段是______。(C)A.详细设计 B.需求分析 C.总体设计 D.编程调试

(48)软件调试的目的是______。(B)A.发现错误 B.改正错误

C.改善软件的性能 D.挖掘软件的潜能

(49)按条件f对关系R进行选择,其关系代数表达式为______。(C)A.R|X|R B.R|X|R f C.бf(R)D.∏f(R)(50)数据库概念设计的过程中,视图设计一般有三种设计次序,以下各项中不对的是______。(D)A.自顶向下 B.由底向上 C.由内向外

D.由整体到局部

(51)在计算机中,算法是指______。(C)A.查询方法 B.加工方法

C.解题方案的准确而完整的描述 D.排序方法

(52)栈和队列的共同点是______。(C)A.都是先进后出 B.都是先进先出

C.只允许在端点处插入和删除元素 D.没有共同点

(53)已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是______。(A)A.cedba B.acbed C.decab D.deabc(54)在下列几种排序方法中,要求内存量最大的是______。(D)A.插入排序 B.选择排序 C.快速排序 D.归并排序

(55)在设计程序时,应采纳的原则之一是______。(A)A.程序结构应有助于读者理解 B.不限制goto语句的使用 C.减少或取消注解行 D.程序越短越好

(56)下列不属于软件调试技术的是______。(B)A.强行排错法 B.集成测试法 C.回溯法

D.原因排除法

(57)下列叙述中,不属于软件需求规格说明书的作用的是______。(D)A.便于用户、开发人员进行理解和交流

B.反映出用户问题的结构,可以作为软件开发工作的基础和依据 C.作为确认测试和验收的依据 D.便于开发人员进行需求分析

(58)在数据流图(DFD)中,带有名字的箭头表示______。(C)A.控制程序的执行顺序

B.模块之间的调用关系 C.数据的流向

D.程序的组成成分

(59)SQL语言又称为______。(C)A.结构化定义语言 B.结构化控制语言 C.结构化查询语言 D.结构化操纵语言

(60)视图设计一般有3种设计次序,下列不属于视图设计的是______。(B)A.自顶向下 B.由外向内 C.由内向外 D.自底向上

61)数据结构中,与所使用的计算机无关的是数据的______。(C)A.存储结构 B.物理结构 C.逻辑结构

D.物理和存储结构

(62)栈底至栈顶依次存放元素A、B、C、D,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是______。(D)A.ABCED B.DBCEA C.CDABE D.DCBEA(63)线性表的顺序存储结构和线性表的链式存储结构分别是______。(B)A.顺序存取的存储结构、顺序存取的存储结构 B.随机存取的存储结构、顺序存取的存储结构 C.随机存取的存储结构、随机存取的存储结构 D.任意存取的存储结构、任意存取的存储结构

(64)在单链表中,增加头结点的目的是______。(A)A.方便运算的实现

B.使单链表至少有一个结点 C.标识表结点中首结点的位置

D.说明单链表是线性表的链式存储实现

(65)软件设计包括软件的结构、数据接口和过程设计,其中软件的过程设计是指______。(B)A.模块间的关系

B.系统结构部件转换成软件的过程描述 C.软件层次结构 D.软件开发过程

(66)为了避免流程图在描述程序逻辑时的灵活性,提出了用方框图来代替传统的程序流程图,通常也把这种图称为______。(B)A.PAD图 B.N-S图 C.结构图 D.数据流图

(67)数据处理的最小单位是______。(C)A.数据

B.数据元素 C.数据项 D.数据结构

(68)下列有关数据库的描述,正确的是______。(C)A.数据库是一个DBF文件 B.数据库是一个关系

C.数据库是一个结构化的数据集合 D.数据库是一组文件

(69)单个用户使用的数据视图的描述称为______。(A)A.外模式 B.概念模式 C.内模式 D.存储模式

(70)需求分析阶段的任务是确定______。(D)A.软件开发方法 B.软件开发工具 C.软件开发费用 D.软件系统功能

(71)算法分析的目的是______。(D)A.找出数据结构的合理性

B.找出算法中输入和输出之间的关系 C.分析算法的易懂性和可靠性 D.分析算法的效率以求改进

(72)n个顶点的强连通图的边数至少有______。(C)A.n-1 B.n(n-1)C.n D.n+1(73)已知数据表A中每个元素距其最终位置不远,为节省时间,应采用的算法是______。(B)A.堆排序

B.直接插入排序 C.快速排序

D.直接选择排序

(74)用链表表示线性表的优点是______。(A)A.便于插入和删除操作

B.数据元素的物理顺序与逻辑顺序相同 C.花费的存储空间较顺序存储少 D.便于随机存取

(75)下列不属于结构化分析的常用工具的是______。(D)A.数据流图 B.数据字典 C.判定树 D.PAD图

(76)软件开发的结构化生命周期方法将软件生命周期划分成______。(A)A.定义、开发、运行维护

B.设计阶段、编程阶段、测试阶段 C.总体设计、详细设计、编程调试 D.需求分析、功能定义、系统设计

(77)在软件工程中,白箱测试法可用于测试程序的内部结构。此方法将程序看做是______。(C)A.循环的集合 B.地址的集合 C.路径的集合 D.目标的集合

(78)在数据管理技术发展过程中,文件系统与数据库系统的主要区别是数据库系统具有______。(D)A.数据无冗余 B.数据可共享

C.专门的数据管理软件 D.特定的数据模型

31(79)分布式数据库系统不具有的特点是______。(B)A.分布式 B.数据冗余

C.数据分布性和逻辑整体性 D.位置透明性和复制透明性

(80)下列说法中,不属于数据模型所描述的内容的是______。(C)A.数据结构 B.数据操作 C.数据查询 D.数据约束

(1)算法的复杂度主要包括______复杂度和空间复杂度。答:时间

(2)数据的逻辑结构在计算机存储空间中的存放形式称为数据的______。答:模式#逻辑模式#概念模式

(3)若按功能划分,软件测试的方法通常分为白盒测试方法和______测试方法。答:黑盒

(4)如果一个工人可管理多个设施,而一个设施只被一个工人管理,则实体“工人”与实体“设备”之间存在______联系。答:一对多#1:N#1:n(5)关系数据库管理系统能实现的专门关系运算包括选择、连接和______。答:投影

(6)在先左后右的原则下,根据访问根结点的次序,二叉树的遍历可以分为三种:前序遍历、______遍历和后序遍历。答:中序

(7)结构化程序设计方法的主要原则可以概括为自顶向下、逐步求精、______和限制使用goto语句。答:模块化

(8)软件的调试方法主要有:强行排错法、______和原因排除法。答:回溯法

(9)数据库系统的三级模式分别为______模式、内部级模式与外部级模式。答:概念#概念级

(10)数据字典是各类数据描述的集合,它通常包括5个部分,即数据项、数据结构、数据流、______和处理过程。答:数据存储

(11)设一棵完全二叉树共有500个结点,则在该二叉树中有______个叶子结点。答:250(12)在最坏情况下,冒泡排序的时间复杂度为______。答:n(n-1)/2#n*(n-1)/2#O(n(n-1)/2)#O(n*(n-1)/2)(13)面向对象的程序设计方法中涉及的对象是系统中用来描述客观事物的一个______。答:实体

(14)软件的需求分析阶段的工作,可以概括为四个方面:______、需求分析、编写需求规格说明书和需求评审。

答:需求获取

(15)______是数据库应用的核心。答:数据库设计

(16)数据结构包括数据的______结构和数据的存储结构。答:逻辑

(17)软件工程研究的内容主要包括:______技术和软件工程管理。答:软件开发

(18)与结构化需求分析方法相对应的是______方法。答:结构化设计

(19)关系模型的完整性规则是对关系的某种约束条件,包括实体完整性、______和自定义完整性。答:参照完整性

(20)数据模型按不同的应用层次分为三种类型,它们是______数据模型、逻辑数据模型和物理数据模型。答:概念

(21)栈的基本运算有三种:入栈、退栈和______。答:读栈顶元素#读栈顶的元素#读出栈顶元素(22)在面向对象方法中,信息

隐蔽是通过对象的______性来实现的。答:封装

(23)数据流的类型有______和事务型。答:变换型

(24)数据库系统中实现各种数据管理功能的核心软件称为______。答:数据库管理系统#DBMS(25)关系模型的数据操纵即是建立在关系上的数据操纵,一般有______、增加、删除和修改四种操作。答:查询

(26)实现算法所需的存储单元多少和算法的工作量大小分别称为算法的 ______。

答:空间复杂度和时间复杂度

(27)数据结构包括数据的逻辑结构、数据的 ______以及对数据的操作运算。答:存储结构

(28)一个类可以从直接或间接的祖先中继承所有属性和方法。采用这个方法提高了软件的______。答:可重用性

(29)面向对象的模型中,最基本的概念是对象和 ______。答:类

(30)软件维护活动包括以下几类:改正性维护、适应性维护、______维护和预防性维护。答:完善性

(31)算法的基本特征是可行性、确定性、______和拥有足够的情报。答:有穷性

(32)顺序存储方法是把逻辑上相邻的结点存储在物理位置______的存储单元中。

答:相邻

(33)Jackson结构化程序设计方法是英国的M.Jackson提出的,它是一种面向______的设计方法。答:数据结构

(34)数据库设计分为以下6个设计阶段:需求分析阶段、______、逻辑设计阶段、物理设计阶段、实施阶段、运行和维护阶段。答:概念设计阶段#数据库概念设计阶段

(35)数据库保护分为:安全性控制、______、并发性控制和数据的恢复。答:完整性控制

(36)测试的目的是暴露错误,评价程序的可靠性;而______的目的是发现错误的位置并改正错误。答:调试

(37)在最坏情况下,堆排序需要比较的次数为______。答:O(nlog2n)(38)若串s=“Program”,则其子串的数目是______。答:29(39)一个项目具有一个项目主管,一个项目主管可管理多个项目,则实体“项目主管”与实体“项目”的联系属于______的联系。答:1对多#1:N(40)数据库管理系统常见的数据模型有层次模型、网状模型和______三种。答:关系模型

第二篇:C语言公共基础知识总结(不容错过)

C语言公共基础知识总结

公共基础知识总结

第一章数据结构与算法

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代表每个元素占的字节数。顺序表的运算:插入、删除。(详见14--16页)

1.4 栈和队列

栈是限定在一端进行插入与删除的线性表,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。

栈按照“先进后出”(FILO)或“后进先出”(LIFO)组织数据,栈具有记忆作用。用top表示栈顶位置,用bottom表示栈底。

栈的基本运算:(1)插入元素称为入栈运算;(2)删除元素称为退栈运算;(3)读栈顶元素是将栈顶元素赋给一个指定的变量,此时指针无变化。

队列是指允许在一端(队尾)进入插入,而在另一端(队头)进行删除的线性表。Rear指针指向队尾,front指针指向队头。

队列是“先进行出”(FIFO)或“后进后出”(LILO)的线性表。

队列运算包括(1)入队运算:从队尾插入一个元素;(2)退队运算:从队头删除一个元素。

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

1.5 线性链表

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

结点由两部分组成:(1)用于存储数据元素值,称为数据域;(2)用于存放指针,称为指针域,用于指向前一个或后一个结点。

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

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

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

1.6 树与二叉树

树是一种简单的非线性结构,所有元素之间具有明显的层次特性。

在树结构中,每一个结点只有一个前件,称为父结点,没有前件的结点只有一个,称为树的根结点,简称树的根。每一个结点可以有多个后件,称为该结点的子结点。没有后件的结点称为叶子结点。

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

二叉树的特点:(1)非空二叉树只有一个根结点;(2)每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。

二叉树的基本性质:

(1)在二叉树的第k层上,最多有2k-1(k≥1)个结点;

(2)深度为m的二叉树最多有2m-1个结点;

(3)度为0的结点(即叶子结点)总是比度为2的结点多一个;

(4)具有n个结点的二叉树,其深度至少为[log2n]+1,其中[log2n]表示取log2n的整数部分;

(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;否则该结点无右子结点。

满二叉树是指除最后一层外,每一层上的所有结点有两个子结点,则k层上有2k-1个结点深度为m的满二叉树有2m-1个结点。完全二叉树是指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干结点。

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

二叉树的遍历:

(1)前序遍历(DLR),首先访问根结点,然后遍历左子树,最后遍历右子树;

(2)中序遍历(LDR),首先遍历左子树,然后访问根结点,最后遍历右子树;

(3)后序遍历(LRD)首先遍历左子树,然后访问遍历右子树,最后访问根结点。

1.7 查找技术

顺序查找的使用情况:

(1)线性表为无序表;

(2)表采用链式存储结构。

二分法查找只适用于顺序存储的有序表,对于长度为n的有序线性表,最坏情况只需比较log2n次。

1.8 排序技术

排序是指将一个无序序列整理成按值非递减顺序排列的有序序列。

交换类排序法:(1)冒泡排序法,需要比较的次数为n(n-1)/2;(2)快速排序法。

插入类排序法:(1)简单插入排序法,最坏情况需要n(n-1)/2次比较;(2)希尔排序法,最坏情况需要O(n1.5)次比较。

选择类排序法:(1)简单选择排序法,最坏情况需要n(n-1)/2次比较;(2)堆排序法,最坏情况需要O(nlog2n)次比较。

第三篇:C语言基础知识总结

C语言基础知识总结

主要内容:1.C数据类型

2.简单的算术运算和表达式

3.键盘输入和屏幕输出

4.选择控制结构

总结风格:分条罗列,主要是知识点,有例题不多

5.循环控制结构

一、C数据类型

1.C语言处理两种数据:常量和变量

2.常量:整形常量、实型常量、字符常量、字符串常量、枚举常量 3.整形常量:正整数、负整数、零

eg: 10,-30,0 4.实型常量:实数、小数、浮点数

eg: 3.14,-0.56,18.0 5.字符常量:字符型常量、用单引号括起来的任意字符

eg: 'x' 'X' '?' ',' '9' 6.字符串常量:用双引号括起来的一个或多个字符

eg: “x” “Hello”

“Y78” 7.在C程序中,整型常量可以用十进制、八进制、十六进制形式表示,但编译器都会自动将其转换成二进制存储

8.整型常量的类型:长整型、短整型、有符号、无符号。9.不同进制的整型常量的表示形式:

1)十进制:0~9数字组合,可带正负号

eg: 256,-128,0,+7

2)八进制:0开头,后面跟0~7数字组合eg: 021,-017

3)十六进制:0x(0X)开头,后跟0~9,a~f(A~F)数字组合eg:0x12,-0x1F 10.不同类型的整形常量的表示形式:

1)有符号整型常量:默认int型定义为有符号整数,无需signed

eg:10,-30,0

2)无符号整形常量:常量值后跟u或U,只能表示>=0的数

eg:30u,256U

3)长整型常量:常量值后跟l或L

eg:-256l,1024L

4)无符号长整型常量:常量值后跟LU、Lu、lU、lu

eg:30lu 11.C程序中,实型常量两种表示形式:小数、指数 12.不同形式的实型常量的表示形式:

1)十进制表示形式:数字和小数点组成,必须要有小数点,整数部分可省略

eg:0.123,-12.35,.98

2)指数形式:e或E代表以10为底的指数,e左边是数值部分(有效数字,可以是整数、小数,不能省略),e右边是指数部分(必须是整数形式)

eg:3.45e-6 13.实型常量有单精度和双精度之分,无有符号和无符号之分 14.不同类型的实型常量表示形式:

1)单精度实型常量:常量值后跟F或f

eg:1.25F,1.25e-2f

2)双精度实型常量(double):实型常量默认按双精度处理

eg:0.123,-12.35,.98

3)长双精度实型常量(long double):常量值后跟L或l

eg:1.25L 15.变量:在程序执行过程中可以改变的量

16.变量在必须先定义后使用,定义时需要声明变量的类型和变量名,一般形式:类型关键字

变量名;

17.关键字是C语言预先规定具有特殊意义的单词,类型关键字用于声明变量的类型

18.标准C语言编写的程序都是以main()作为开头,指定了C程序执行的起点,在C程序中只能出现一次,称为主函数

19.C程序总是从main函数开始执行,与他在程序中的位置无关,main函数主体部分称为语句,用{}括起来,一般C语句以;结束

20.变量的类型决定了编译器为其分配内存单元的字节数、数据在内存单元中的存放形式、该类型变量合法的取值范围以及该类型变量可参与的运算种类

21.变量名是用户定义的标识符,用于标识内存中具体的存储单元,存放的数据称为变量的值

22.新数据存放于存储单元时,旧数据将会被修改,反应变量的值是可以改变的

23.变量名的命名规则:

1)标识符只能由英文字母、数字、下划线组成 2)标识符必须以字母或下划线开头

3)不允许使用C关键字为标识符命名

4)标识符可以包含任意多个字符,但一般会有最大长度限制,预编译器有关,一般不会超过,最好不超过8个字符

注意:标识符区分大小写

eg:x

y3

_imax

ELSE X A_to_B(合法)

eg:7x int #No

bad one re-input(不合法)24.标准C规定所有变量必须在第一条可执行语句之前定义

25.在同一条语句中可以同时定义多个相同类型变量,多个变量之间用逗号分隔,没有顺序要求

26.在使用标准输入/输出函数时,必须在程序开头加上编译预处理命令

27.中stdio为头文件,std是standard,i为input,o为output,h为head 28.编译预处理命令#include的作用:将在输入/输出函数的头文件stdio.h包含到用户源文件中

29.%d按十进制整数个格式输出,%f按十进制小数格式输出,一般输出6位小数,%c输出一个字符,n换行,双引号内字符原样输出

30.不同类型的数据在内存中占用不同大小的存储单元,他们所能表示的数据的取值范围各不相同,不同类型的数据表示形式及其可以参与的运算种类也不同

31.定义整型变量时,只要不指定为无符号型,其隐含类型为有符号型,signed通常省略不写

32.C程序中每个变量的值都是按字节编址,都被存储在内存中特定的存储单元中,这个存储空间实际是一个线性地址表,即每个字节的存储空间对应一个唯一的地址

33.1个字节等于8个二进制位,即8个位为一个字节,一个字节可以表示的整数最小为0,最大255,即8个位可以表示0-255之间的数,一个二进制位的值只能是0或1 34.同种类型在不同的平台所占字节数不同,要计算数据类型所占内存空间的字节数需要用sizeof()运算符

35.sizeof是C语言关键字,不是函数名,sizeof(变量名)计算一个变量所占内存的字节数 36.计算不同类型运算符的表达式时,要考虑运算符的优先级和结合性 37.正数的反码、补码与原码都相同,负数的补码等于反码加1 38.在计算机内存中负数都是用补码来表示

39.对于实数,无论小数海曙指数形式,在计算机内存中都采用浮点形式来存储

40.浮点数分为阶码、尾数两部分,实数N=S*pow(r,j),S为尾数(无论正负,规定用存小数),j为阶码(无论正负,必须是整数),r是基数

eg:10.0111=0.100111*pow(2,10)41.阶码所占位数决定实数的取值范围,尾数所占位数决定实数的精度,尾数的符号决定实数的正负,阶码和尾数的字节大小与编译器有关

42.float型变量能接收实型常量的7位有效数字,double型变量能接收16位

43.运算符的优先级:单目运算<算术运算<关系运算<逻辑运算<条件运算<赋值运算<逗号运算

44.素数:又称质数,指在大于1的自然数中,除1和本身不能被其他自然数整除的数 45.合数:指在自然数中除1和本身外还能被其他自然数整除的数 46.因子:所有能整除这个数的数,不包括自身,但包括1 47.闰年:能被4整除但不能被100整除,或能被400整除

二、简单的算术运算和表达式

1.条件运算符是C语言提供的唯一一个三元运算符,C语言中没有幂运算符 2.只有计算相反数是一元运算符,其余运算符都是二元运算符

3.一元运算符也叫单目运算符,二元运算符也叫双目运算符,三元运算符也叫三目运算符 4.整数除法的结果是整数,浮点数除法的结果是浮点数

5.求余运算限定参与运算的两个操作数必须为整型,余数的符号与被除数的符号相同,不能对两个实型数进行求余运算

6.所有的算术运算符中只有一元的去相反数运算符为右结合,其余的结合性都为左结合 7.同一优先级的运算符进行混合运算时,从左向右依次进行

8.运算符的优先级:单目运算>算术运算>关系运算>逻辑运算>条件运算>赋值运算>逗号运算

9.计算并输出一个三位整数的个位、十位、百位数字之和 #include void main(){ int x=321;int a,b,c,sum;a=x%10;//a=1 b=(x/10)%10;//b=2 c=x/100;//c=3 sum=a+b+c;printf(“a=%d,b=%d,c=%dnsum=%dn”,a,b,c,sum);} 10.涉及算术运算的复合赋值运算符有5个:+=,-=,*=,/=,%= 11.增1运算符也称自增运算符,减1运算符也称自减运算符,都是一元运算符,只有一个操作数必须是变量不能是常量或表达式

12.自增自减运算符作为前缀时,先执行加1或减1然后使用;自增自减运算符作为后缀时,先使用再执行加1或减1; 13.考虑优先级与结合性的实例

m=-n++《=》m=-(n++)《=》m=-n,n=n+1;//正面:-和++都是一元运算符,优先级相同,此时要考虑结合性,结合性都是右结合的,所以先算++后算-//反面:如果等价m=(-n)++就不合法了,因为表达式不能进行自增操作 14.scanf函数和printf函数都是C的标准输入/输出函数,&为取地址运算符 15.宏常量与宏替换:

1)在程序中直接使用的常数称为幻数,将幻数定义为宏常量或const常量是为了提高程序的可读性和可维护性

2)宏常量也称符号常量,没有数据类型,编译器不对其进行类型检查,只进行字符串替换

3)宏定义一般形式:#define 标识符 字符串。标识符被称为宏名,宏名与字符串之间可有多个空白符,不加等号,结尾不加分号

4)宏常量是由宏定义编译预处理命令来定义,宏名替换成字符串的过程称为宏替换,宏替换不做任何语法检查

5)当宏定义是一个表达式时,调用时,是一个数就可以直接带入,而是表达式也要看成是一个数代进宏定义表达式中,而看成一个数这就要求把调用的数加上圆括号,为了减少不必要的错误,最好都加上圆括号

6)宏替换的过程是将宏名原样替换成字符串,而不是直接计算出值,所以要用调用后的结果参与其他运算就需要把调用的结果加上圆括号

7)例题: #include #define N 2

//N=2 #define M N+1

//M=2+1 #define NUM 2*M+1

//NUM=2*2+1+1=6 void main(){ int i;for(i=1;i<=NUM;i++);printf(“%dn”,i);//执行完空循环,i=7 i--;

// i=6 printf(“%dn”,i);}

8)例题: #include #define f(x)x*x void main(){ int b;b=f(4+4);

//b=4+4*4+4=24,解释见5)printf(“b=%dn”,b);}

9)例题: #include #define f(x)x*x void main(){ int b;b=f(4+4)/(2+2);

//b=4+4*4+4/(2+2)=21解释见6)printf(“b=%dn”,b);}

10)例题: #include #define f(x)x*x void main(){ int b;b=f((4+4));

//b=(4+4)*(4+4)=64

printf(“b=%dn”,b);}

11)例题: #include #define f(x)(x*x)void main(){ int b;b=f((4+4))/(2+2);

//b=((4+4)*(4+4))/(2+2)=16 printf(“b=%dn”,b);} 16.const常量

1)const常量只能在定义时赋初值,因为编译器将其放在只读存储区,不允许在程序中修改

2)const常量的定义一般形式:const 类型名 标识符=字符串;//将标识符声明为具有该数据类型的const常量

3)const是一种类型修饰符,const常量具有数据类型,编译器要对其进行类型检查 17.表达式中的自动类型转换:

1)表达式中,操作数类型相同,运算的结果类型与操作数类型相同

2)表达式中,操作数类型不相同,C编译器自动将所有操作数进行类型提升,转换成同一类型,所占字节最大,再计算 18.赋值中的自动类型转换:

1)赋值运算符左侧变量与右侧表达式类型不同时,发生自动类型转换:右侧表达式的值转换成左侧变量的类型 19.强制类型转换:

1)强制类型转换运算符是一元运算符

2)强制类型转换也称强转,是将表达式的值转换为任意类型,并不改变变量本身的数据类型

3)强转一般形式:(类型)表达式

4)演示强制类型转换运算符的使用 #include void main(){ int m=5;printf(“m/2=%dn”,m/2);//m=2 printf(“(float)(m/2)=%fn”,(float)(m/2));//m=2.000000 printf(“(float)m/2=%fn”,(float)m/2);//m=2.500000 printf(“m=%dn”,m);//m=5,只是将m强转为实型数据,并不改变m的数据类型 } 20.常用的标准数学函数:

1)使用C标准数学函数,要在程序开头加上编译预处理命令:#include 2)例:已知三角形三边长为a,b,c,计算三角形的面积 #include #include

void main(){ float a,b,c,s,area;printf(“Input a,b,c:”);scanf(“%f,%f,%f”,&a,&b,&c);s=(a+b+c)/2;area=(float)sqrt(s*(s-a)*(s-b)*(s-c));printf(“area=%fn”,area);} 21.赋值运算符的左侧不能出现表达式,变量与变量之间可以赋值

例1:若有定义:int a,b,c;下列表达式中哪一个是合法的C语言赋值表达式(C、D)

A)a=7+b=c=7

B)a=b++=c=7

C)a=(b=7,c=12)

D)a=3,b=a+5,c=b+2

//A.7+b表达式不能做左值

B.b++表达式不能做左值

C.逗号表达式a=12 D.依次赋值

例2:下面不正确的赋值语句是(B)

A)a=++a

B)a=b++=10

C)a+=b

D)a=1>'a' //D.算术运算符优先级高于赋值运算符,先算1>'a'再将其结果赋给a

例3:若有下列定义:int a=3,b=2,c=1;以下选项错误的赋值表达式是(A)

A)a=(b=4)=3

B)a=b=c+1

C)a=(b=4)+c

D)a=1+(b=c=4)//A.先计算圆括号里的值等于4,然后按照赋值表达式的顺序从右向左计算,将3赋值给4这是不对的,即赋值号左侧只能是变量,不能出现表达式b=4

三、键盘输入和屏幕输出

1.字符常量:

把字符放在一对单引号内,适用于多数可打印字符 2.转义字符:

以反斜线()开头,也是放在一对单引号内,适用于控制字符(如回车符,换行符)3.常用的转义字符:

1)'n' — 换行

8)'a' — 响铃报警提示音

2)'r' — 回车(不换行)

9)'“' — 一个双引号

3)'' — 空字符

10)''' — 一个单引号

4)'t' — 水平制表

11)'' — 一个反斜线

5)'v' — 垂直制表

12)'?' — 问号

6)'b' — 退格

13)'ddd' —1到3位八进制ASCII码值所代表的字符

7)'f' — 走纸换页

14)'xhh' —1到2位十六进制ASCII码值所代表的字符 4.n,是将光标移到下一行起始位置,r是将光标移到当前行的起始位置

5.t,是水平制表符,相当于按下Tab键,每次按下Tab键并不是从当前光标位置向后移动一个Tab宽度,而是移到下一个制表位

实际移动的宽度视当前光标位置距相邻的下一个制表位的距离而定

6.制表位,屏幕上的一行被分为若干个域,相邻域之间的交接点称为制表位,每个域的宽度就是一个Tab宽度,多数习惯上为4 7.当转义序列出现在字符串中时,是按单个字符计数的

8.一个整形数在内存中是以二进制形式存储的,而一个字符在内存中也是以其对应的ASCII码的二进制形式存储的,但char型数据在内存中只占一个字节,而int型数据在16位系统中占2个字节,32位系统占4个字节

9.在ASCII码取值范围内,char型数据可以和int型数据进行混合运算,char型数据也能以int型输出,直接输出其对应的ASCII码的十进制值 10.字符的输入/输出:

1)getchar()和putchar()是C标准函数库中专门用于字符输入/输出的函数,功能是只能输入/输出一个字符

2)例:从键盘输入一个大写英文字母,将其转换为小写字母显示在屏幕上 #include void main(){ char ch;ch=getchar();//键盘输入一个字符,再按回车表示输入结束,字符存入变量ch,注意:getchar()没有参数,直接返回读入的字符

ch=ch+32;putchar(ch);//第二次按回车,将显示转换后的结果

putchar('n');//注意:putchar()内一定要有参数,参数就是待输出的字符,可以是可打印字符,也可是转义字符 } 11.数据的格式化屏幕输出:

1)函数printf()的一般格式:printf(格式控制字符串);或者printf(格式控制字符串,输出值

参数表);

2)格式控制字符串包括:格式转换说明符,需要原样输出的普通字符

3)函数printf()的格式转换说明符:

%d — 输出带符号十进制整数,整数符号省略

%u — 输出无符号十进制整数

%o — 输出无符号八进制整数,不输出前导符0

%x — 输出无符号十六进制整数(小写),不输出前导符0x

%X — 输出无符号十六进制整数(大写),不输出前导符0x

%c — 输出一个字符

%s — 输出字符串

%f — 以十进制小数形式输出实数,包含单,双精度,隐含6位小数,但并非全是有效数字,单精度有效7位,双精度16位

%e — 以指数形式输出实数(小写e表示指数部分),小数点前有且仅有一位非0数字

%E — 以指数形式输出实数(大写E表示指数部分)

%g — 自动选取f或e格式中宽度较小的一种使用,不输出无意义的0

%% — 输出%

4)输出值参数表:需要输出的数据项的列表,可以是变量或表达式,逗号隔开,类型与格式转换说明符相匹配

5)每个格式转换说明符与输出值参数表中的输出值参数一一对应,没有输出值参数,格式控制字符串就不需要格式转换说明符

6)例:从键盘输入一个大写英文字母,将其转换为小写字母和其十进制ASCII码值显示在屏幕上

#include void main(){ char ch;printf(”Please enter a key:“);ch=getchar();ch=ch+32;printf(”%c,%dn“,ch,ch);//printf(”%c“,ch)<<=>>putchar(ch),printf(”n“)<<=>>putchar('n')}

7)函数printf()中的格式修饰符:在%和格式符中间插入格式修饰符,用于输出格式的微调,如:指定输出域宽、精度、左对齐等

英文字母l — 修饰格式符d,o,x,u时,用于输出long型数据

英文字母L — 修饰格式符f,e,g时,用于输出long double型数据

英文字母h — 修饰格式符d,o,x时,用于输出short型数据

输出域宽m — m为整数,输出时占m列,若m>0,当数据宽度小于m时,域内右靠齐,左补空格,当数据宽度大于m时,修饰符失效,按实际宽度输出,若m有前导符0,左边多余位补0;若m<0,输出数据在域内左靠齐

显示精度.n — n为大于等于0的整数,精度修饰符位于最小域宽修饰符之后,由圆点和整数构成,对于浮点数,用于指定输出的浮点数小数位数;对于字符串,用于指定从字符串左侧开始截取的子串字符个数

8)使用const常量定义pi,编程从键盘输入圆的周长和面积,使其输出数据保留两位小数

#include void main(){ const double pi=3.14159;double r,circum,area;printf(”Please enter r:“);scanf(”%lf“,&r);circum=2*pi*r;area=pi*r*r;printf(”输出没有宽度和精度的值:“);printf(”circum=%f,area=%fn“,circum,area);printf(”输出没有宽度和精度的值:“);printf(”circum=%7.2f,area=%7.2fn“,circum,area);//域宽为7,占7个字符宽度,小数点也算一个字符,精度为2,小数点后保留2位 } 12.数据的格式化键盘输入:

1)函数scanf()的一般格式:scanf(格式控制字符串,参数地址表);

2)格式控制字符串:包括格式转换说明符,分隔符

3)格式转换说明符以%开始,以格式字符结束,用于指定各参数的输入格式

4)函数scanf()的格式转换说明符:

%d — 输入十进制整数

%o — 输入八进制整数

%x — 输入十六进制整数

%c — 输入一个字符,空白字符(包括空格、回车、制表符)也作为有效字符输入

%s — 输入字符串,遇到第一个空白字符(包括空格、回车、制表符)时结束

%f或%e — 输入实数,以小数或指数形式输入均可

%% — 输入一个%

5)参数地址表:由若干变量的地址组成的列表,用逗号分隔

6)函数scanf()中的格式修饰符:在%和格式符中间插入格式修饰符

英文字母l — 加在格式符d,o,x,u之前,用于输入long型数据;加在f,e之前,用于输入double型数据

英文字母L — 加在格式符f,e之前,用于输入long double型数据

英文字母h — 加在格式符d,o,x时,用于输入short型数据

输出域宽m — m为正整数,指定输入数据的宽度,系统自动按此宽度截取所需数据

显示精度.n — n为0或正整数,scanf()没有精度格式修饰符,输入时不能规定精度

忽略输入修饰符* — 表示对应的输入项在读入后不赋给相应的变量

7)函数scanf()输入数值型数据时,被认为输入结束的几种情况:遇空格符、回车符、制表符;达到输出域宽;遇非法字符输入

8)如果函数scanf()的格式控制字符串中存在除格式转换说明符以外的其他字符,必须将这些字符原样输入 #include void main(){

int a,b;scanf(”%d %d“,&a,&b);

//以空格作为分隔符,等价于scanf(”%d%d“,&a,&b),等价于scanf(”%d %d“,&a,&b),printf(”a=%d,b=%dn“,a,b);//实际输入时,空格、回车符、制表符都可作为分隔符,即输入:12空格34 12回车34 12制表符34均可,}

#include void main(){ int a,b;scanf(”%d,%d“,&a,&b);//输入时必须以逗号作为分隔符,即只能输入:12,34 printf(”a=%d,b=%dn“,a,b);}

#include void main(){ int a,b;scanf(”a=%d,b=%d“,&a,&b);//输入时必须将”a=“和”b=“原样输入,即只能输入:a=12,b=34 printf(”a=%d,b=%dn“,a,b);}

#include void main(){ int a,b;scanf(”%2d%2d“,&a,&b);//输入时将前两位数读入存到a中,接着两位存到b中,然后结束读取,即输入:1234,或123456结果一样

printf(”a=%d,b=%dn“,a,b);}

#include void main(){ int a,b;scanf(”%d %d“,&a,&b);printf(”a=“%d”,b=“%d”n“,a,b);//输出a=”12“,b=”34“ }

#include void main(){ int a,b;

scanf(”%d%*c%d“,&a,&b);//任意字符都可作为分隔符,即输入:12,34或12?34或12+34结果都一样

printf(”a=%d,b=%dn“,a,b);}

#include void main(){ int a,b;scanf(”%2d%*2d%d“,&a,&b);//忽略两位,输入123456

printf(”a=%d,b=%dn“,a,b);//输出a=12,b=56 }

对于程序

#include void main(){ int a,b;scanf(”%d %d“,&a,&b);printf(”a=%d,b=%dn“,a,b);} 如果输入12 34a回车,则结果a=12,b=3,程序在遇到非法字符a时,会导致程序输入终止,此时a会读入12,b会读入3 如果输入123a回车,则结果a=123,b=-858993460,程序在遇到非法字符a时,会导致程序输入终止,此时a会读入123,而b未能读入指定数据项数

如果在scanf()函数中忘记在变量前加取地址运算符&,会导致非法内存访问 13.%c格式符使用几种情况:

1)用%c格式读入字符时,空格字符和转义字符(包括回车)都会被当做有效字符读入

例:键盘输入一个整数加法算式:操作数1+操作数2,输出:操作数1+操作数2=计算结果

#include

void main()

{

int data1,data2;

char op;

//输入:12空格+空格3

回车//输出:12-858993460=-858993448 printf(”Enter data1+data2n“);//输入:12空格3

回车//输出:12 3=15 scanf(”%d%c%d“,&data1,&op,&data2);//输入:12+3

回车//输出:12+3=15 printf(”%d%c%d=%dn“,data1,op,data2,data1+data2);}

2)先输入一个数据后再输入字符型变量时,输入一个数据后,输入的回车符将被当做有效字符读给字符型变量

例:编程从键盘先后输入int型、char型和float型数据,要求每输入一个数据就显示这个数据的类型和数据值

#include void main(){ int a;char b;float c;printf(”Please input an integer:“);scanf(”%d“,&a);printf(”integer:%dn“,a);//在输入一个整型数据后,输入的回车符被当做有效字符读给了字符型变量b了

printf(”Please input a character:“);scanf(”%c“,&b);printf(”chracter:%cn“,b);

printf(”Please input a float number:“);scanf(”%f“,&c);printf(”float:%fn“,c);} 14.%c格式符存在问题的解决方法

1)用函数getchar()将数据输入时存入缓冲区中的回车符读入,以避免被后面的字符型变量作为有效字符读入 #include void main(){ int a;char b;float c;printf(”Please input an integer:“);scanf(”%d“,&a);printf(”integer:%dn“,a);getchar();//将存于缓冲区中的回车符读入,避免在后面作为有效字符读入

//函数getchar()的返回值是一个回车符,已经避免了错误,不需要再将其赋给字符型变量使用

printf(”Please input a character:“);scanf(”%c“,&b);printf(”chracter:%cn“,b);

printf(”Please input a float number:“);scanf(”%f“,&c);printf(”float:%fn“,c);}

2)在%c前面加一个空格,将前面数据输入时存于缓冲区的回车符读入,避免被后面的字符型变量作为有效字符读入

#include void main(){ int a;char b;float c;printf(”Please input an integer:“);scanf(”%d“,&a);printf(”integer:%dn“,a);

printf(”Please input a character:“);scanf(” %c“,&b);//在%c前面加空格,将存于缓冲区中的回车符读入

printf(”chracter:%cn“,b);

printf(”Please input a float number:“);scanf(”%f“,&c);printf(”float:%fn“,c);} //解释:在%c前加空格为什么能将存于缓冲区中的回车符读入

因为如果函数scanf()的格式控制字符串中存在除格式转换说明符以外的其他字符,必须将这些

字符原样输入,所以在%c前加空格,就必须在输入字符型数据前先原样输入空格,而空格,回车符,制表符在

函数scanf()输入数值型数据时都代表输入结束,由实践可知,空格符、回车符、制表符在输入时等效

所以,缓冲区中的回车将代替需要原样输入的空格,因此,实际上,在%c前增加空格或者Tab键都可以完成,并且与增加的数量无关,且可以混合增加

3)*经典例题:编程实现键盘任意输入字符,统计字母、数字、空格、其他字符数量 首选字符串的方法: #include #define N 100 int main(){ char a[N];int i,m=0,n=0,b=0,c=0;printf(”请输入字符:n“);gets(a);

for(i=0;a[i]!='';i++){

if((a[i]>='a'&&a[i]<='z')||(a[i]>='A'&&a[i]<='Z'))m++;

else if(a[i]>=0&&a[i]<=9)n++;

else if(a[i]==' ')b++;

else c++;

} printf(”字母个数:%dn“,m);printf(”数字个数:%dn“,n);printf(”空格个数:%dn“,b);printf(”其他字符个数:%dn“,c);return 0;} 单个字符输入的方法,但是要解决缓冲区的问题 #include int main(){ char ch;int a,b,c,d;a=b=c=d=0;printf(”请输入字符:n“);do{

ch=getchar();

getchar();//清除缓冲区的回车键,不然会当做第二个字符读入

if(ch!=' ')//用Tab键控制输入结束,他在程序中只会出现一次并且统计一次,{

//然后结束,所以要去掉它,可以使用if语句,也可在前面初始化为d=-1

if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))a++;

else if(ch>='0'&&ch<='9')b++;

else if(ch==' ')c++;

else d++;

} }while(ch!=' ');printf(”字母个数:%dn“,a);printf(”数字个数:%dn“,b);printf(”空格个数:%dn“,c);printf(”其他字符个数:%dn“,d);return 0;} //解释:你可以把Tab控制结束改成其他任意字符,包括字母、数字、/;都可以,就是不能直接使用回车控制结束,因为你在实际键盘输入时,需要打回车才能把前面的 字符读入,当你输完回车后,就已经换行了,再回车就达不到你要的效果了,不可能把 他读入,但是他会留在缓冲区下一次使用,所以说,理论上任意字符都可以控制结束,但是不能直接使用回车再回车的方法,而getchar()函数一次只能读一个字符,当你回车 读入字符后,回车符就会留在缓冲区下一次使用,你可以试试,你把getchar()这行语句 注释,然后一次输入两个字符再回车的话,那么这时他也只能读入第一个字符,第二个 字符和回车就会计入第二次、第三次的结果。

总结:这种方式与用字符串的区别在于,字符串可以统计任何字符,但是这种方式不能统计 你用来控制结束的字符,比如说,你用/控制结束,那么就不能统计/的数量了,而且你要把 他去掉,因为在整个程序中/只会出现一次,然后就结束了

**当程序中出现两次或以上的键盘输入时,就有可能出现缓冲区的问题,只有一次输入,回车直接结束没有这种问题

15.考点题型:字符串常量的长度问题:

1)字符串常量”abctd376“的长度是(A)A)7

B)12

C)8

D)14 // a b c t d 376

2)语句printf(”%d“,strlen(”absno121“));的输出结果是(C)A)11

B)10

C)9

D)8 // a b s

n o 1 2

16.考点题型:赋值运算、关系运算的混合运算问题:

1)设m,n,a,b,c,d的值均为0,执行(m=a==b)||(n=c==d),m,n的值是(C)A)0,0

B)0,1

C)1,0

D)1,1 // ”==“是算术运算符,”=“是赋值运算符,优先级:算术运算符>赋值运算符,先判断a==b?是否正确

正确则为真,把1赋给m,”||“是或运算,前面已经为真,所以||后面的就不会再运算了,结果就为真

所以m=1,n=0不变

2)int a,b,m,n;初值依次为4,3,2,1,经计算m=(a<=b)&&(n=m

B)1,0

C)0,1

D)0,0 // a<=b为假,&&是并,前面已经为假,后面就不会再运算了,结果就为假,把0赋给m,即m=0,n=1不变

四、选择控制结构

1.沃思提出“数据结构+算法=程序”只在面向过程的语言(如C语言)成立 2.算法的正确性衡量方法:

1)有穷性 2)确定性 3)有效性 4)允许没有输入或者有多个输入 5)必须有一个或者多个输出

3.算法的描述方法:

1)自然语言描述 2)流程图描述 3)NS结构化流程图描述 4)伪码描述

4.关系表达式:用作判断条件,结果只有真和假,(n%2!=0)等价于(n%2),0表示假,非0表示真

5.分支结构:当条件P成立时,执行A操作,否则执行B操作;如果B操作为空,即为单分支结构;

如果B操作不为空,即为双分支结构;如果B操作中又包含另一选择结构,则构成多分支选择结构;

6.单分支例题:计算输出两整数最大值 单分支(一般形式):if(表达式P)语句A #include void main(){ int a,b,max;printf(”Enter a,b:“);scanf(”%d%d“,&a,&b);if(a>b)

//单分支:if(表达式P)语句A

max=a;

if(a<=b)

//单分支:if(表达式P)语句A

max=b;printf(”max=%dn“,max);} 7.双分支例题:计算输出两整数最大值 双分支(一般形式):if(表达式P)语句1

else 语句2 #include void main(){ int a,b,max;printf(”Enter a,b:“);scanf(”%d%d“,&a,&b);if(a>b)

max=a;

else

max=b;printf(”max=%dn“,max);} 8.条件运算符是C语言中唯一的三元运算符,需要三个操作数

9.条件运算符例题:计算输出两整数最大值

条件运算符(一般形式):表达式1?表达式2:表达式3 含义:若表达式1为非0,则结果为表达式2的值,否则是表达式3的值 #include void main(){ int a,b,max;printf(”Enter a,b:“);scanf(”%d%d“,&a,&b);max=a>b?a:b;

printf(”max=%dn“,max);} 10.多分支控制条件语句(一般形式):

if(表达式1)语句1

else if(表达式2)语句2...else if(表达式m)语句m else 语句m+1 11.条件语句在语法上只允许每个条件分支中带一条语句,而要在分支里处理多条语句 就要使用花括号,构成复合语句 12.随机数的使用方法:

1)符号常量RAND_MAX在头文件#include中定义,标准C规定RAND_MAX不大于双字节整数的最大值32767

2)随机函数rand()产生的是一个在0~RAND_MAX之间的整数,即[0,32767]之间的整数

3)利用求余运算rand()%b可将函数rand()生成的随机数变化到[0,b-1]

4)利用rand()%b+a可将随机数的取值范围平移到[a,a+b-1]

例:产生1~100的随机数: rand()%100+1 13.例题:猜数游戏:计算机想一个数,人猜对了提示Right!,否则提示Wrong!,并告诉大小 #include #include void main(){ int magic,guess;magic=rand();

//随机数

printf(”Please guess a number:“);scanf(”%d“,&guess);if(guess>magic)

//多分支

{

printf(”Wrong!Too big!n“);//复合语句

} else if(guess

printf(”Wrong!Too small!n“);}

else{

printf(”Right!n“);

printf(”The number is:%dn“,magic);} } 14.switch语句:用于多路选择,一般情况大于三种,用开关语句代替条件语句

1)switch语句(一般形式):

switch(表达式)

{

case 常量1:

可执行语句序列1

//注意:语句序列不使用花括号

case 常量2:

可执行语句序列2

........case 常量n:

可执行语句序列n

default:

可执行语句序列n+1

} 2)switch语句相当于一系列的if-else语句

3)switch后圆括号内的表达式只能是char型或int型

4)关键字case后接常量,类型与表达式类型一致,常量的值必须互不相同

5)常量与case中间至少有一个空格,常量后面是冒号

6)case本身并没有条件判断的功能,若case后面的语句省略不写,则表示它与后续case执行相同的语句

7)switch语句的执行过程:

第一步,计算switch后表达式的值

第二步,将表达式的值依次与case后的常量比较

第三步,如果相等,执行case后的代码段,执行完毕,可使用break语句跳出switch语句

如果没有break语句,不会再比较,程序将依次执行下面的case后的语句,直到遇到break或者switch的}为止

15.例题:编程实现简单计算器功能 #include void main(){ int data1,data2;char op;printf(”Enter your expression:“);scanf(”%d%c%d“,&data1,&op,&data2);switch(op){ case '+':

printf(”%d+%d=%dn“,data1,data2,data1+data2);

break;case '-':

printf(”%d-%d=%dn“,data1,data2,data1-data2);

break;case '*': case 'x': case 'X':

printf(”%d*%d=%dn“,data1,data2,data1*data2);

break;case '/':

if(0==data2)//也可写成data2==0,写0==data2的好处:

{ //因为赋值表达式左值必须是变量,如果把==误写成=,会提示错误

printf(”Division by zero!n“);

}

else{

printf(”%d/%d=%dn“,data1,data2,data1/data2);

}

break;default:

printf(”Invalid operator!n“);

//break;这句一般不需要,因为没有break就会依次执行下面的步骤直到break或者switch的} } //这里已经是switch的}了 } 16.例题:编程实现简单计算器功能,能进行浮点数运算,操作数与运算符之间可加入任意多个空格

#include #include void main(){ float data1,data2;char op;printf(”Enter your expression:“);scanf(”%f %c%f“,&data1,&op,&data2);switch(op){ case '+':

printf(”%f+%f=%fn“,data1,data2,data1+data2);

break;case '-':

printf(”%f-%f=%fn“,data1,data2,data1-data2);

break;case '*': case 'x':

case 'X':

printf(”%f*%f=%fn“,data1,data2,data1*data2);

break;case '/':

if(fabs(data2)<=1e-7)

{

printf(”Division by zero!n“);

}

else{

printf(”%f/%f=%fn“,data1,data2,data1/data2);

}

break;default:

printf(”Invalid operator!n“);} } //内存中的浮点数所表示的精度是有限的,所以比较实型变量data2与0是否相等时,不能像整型变量与0比较那样直接用相等关系运算符与0比较,而应使用如下方式判断 实型变量data2的值是否位于0附近的一个很小的区间内,即:if(fabs(data2)<=1e-7)17.逻辑运算符和逻辑表达式

逻辑非:!,单目运算符,右结合, 优先级最高 逻辑与:&&,双目运算符,左结合,优先级较高 逻辑或:||,双目运算符,左结合,优先级较低 例:判断某一年year是否是闰年的条件:

1)能被4整除,但不能被100整除;

1)能被400整除

逻辑表达式:((year%4==0)&&(year%100!=0))||(year%400==0)或:(year%4==0)&&(year%100!=0)||(year%400==0)18.特别注意:在计算含有逻辑运算符(&&和||)的表达式时,通常尽量使用最少的操作数来 确定表达式的值,这就意味着表达式中的某些操作数可能不会被计算。

例:if(a>1&&b++>2&&c--!=0)中,仅在条件表达式a>1为真时,才会计算后面的值 19.程序测试:

1)程序测试只能证明程序有错,不能证明程序无错

2)例:编程输入三角形三边长a,b,c,判断他们能否构成三角形,能构成什么三角形 #include #include #define EPS 1e-1 void main(){ float a,b,c;int flag=1;printf(”Enter a,b,c:“);scanf(”%f,%f,%f“,&a,&b,&c);if(a+b>c&&b+c>a&&a+c>b)

{

if(fabs(a-b)<=EPS&&fabs(b-c)<=EPS&&fabs(c-a)<=EPS)

{

printf(”等边“);

flag=0;

}

else if(fabs(a-b)<=EPS||fabs(b-c)<=EPS||fabs(c-a)<=EPS)

{

printf(”等腰“);

flag=0;

}

if(fabs(a*a+b*b-c*c)<=EPS||fabs(b*b+c*c-a*a)<=EPS||fabs(a*a+c*c-b*b)<=EPS)

{

printf(”直角“);

flag=0;

}

if(flag)

{

printf(”一般“);

}

printf(”三角形n“);} else{

printf(”不是三角形n“);} }

3)例:编程将输入的百分制成绩转换为五分制成绩输出 #include void main(){ int score,mark;printf(”Enter score:“);scanf(”%d“,&score);if(score<0||score>100){

mark=-1;//这个if语句很重要,如果去掉,边界测试101~109,-1~-9会出错

} else{

mark=score/10;} switch(mark){ case 10: case 9:

printf(”%d-优!n“,score);

break;case 8:

printf(”%d-良!n“,score);

break;case 7:

printf(”%d-中!n“,score);

break;case 6:

printf(”%d-及格!n“,score);case 5: case 4: case 3: case 2: case 1: case 0:

printf(”%d-不及格!n“,score);

break;default:

printf(”Input error!n“);} }

20.对输入非法字符的检查与处理

1)例:输入两个整型数,计算并输出两个整数的最大值 #include void main(){ int a,b,max;printf(”Enter a,b:“);scanf(”%d,%d“,&a,&b);max=a>b?a:b;printf(”max=%dn“,max);} //隐含问题:在Visual C++下 1.如果输入3.2,1则输出3 2.如果输入1,3.2则输出3 3.如果输入q则输出-858993460 //解决办法: #include void main(){ int a,b,max,ret;do{

printf(”Enter a,b:“);

ret=scanf(”%d,%d“,&a,&b);

if(ret!=2)//返回在遇到非法字符前已成功读入的数据项数

{

//但是scanf()函数不做类型检查,所以输入1,3.2会输出3

printf(”Input error!n“);

while(getchar()!='n');

}

else{

max=a>b?a:b;

printf(”max=%dn“,max);

} }while(ret!=2);} 21.位运算符的使用

1)位运算是对字节或字内的二进制数位进行测试、抽取、设置或移位等操作

2)位运算的操作对象只能是char和int类型

3)C语言中共有6种位运算符,只有按位取反是单目运算符,其他都是双目运算符

4)关系运算和逻辑运算的结果要么是0,要么是1,而位运算结果可为任意值,但每一位都只能是0或1

5)6种位运算符:

按位取反

~

用于加密处理,一次求反加密,二次求反解密

左移位

<<

右移位

>>

按位与

&

用于对字节中某位清零

按位异或

^

按位或

|

用于对字节中某位置1

6)按位取反

~1=0,~0=1

例:~5=-6

~ 00000101

———————

11111010 是-6的补码

7)按位与

0&0=0,0&1=0,1&1=1

例:将15的最低位不变,其余位清零

15&1=1

00001111

& 00000001

——————

00000001

8)按位或

0|0=0,0|1=1,1|1=1

例:将15的最高位不变,其余位均置1 15|127=127

00001111

| 01111111

——————

01111111 是127的补码

9)按位异或

0^0=0,0^1=1,1^1=0

例:3^5=6

00000011

^ 00000101

——————

00000110 是6的补码

10)左移位

x<

例:将15左移1、2、3位的二进制补码如下

初始字节内容

00001111

对应十进制15

左移1位字节内容 00011110

对应十进制30

左移2位字节内容 00111100

对应十进制60

左移3位字节内容 01111000

对应十进制120

11)右移位

x>>n 表示把x的每一位向右移n位,当x为有符号数时,左边空位补符号位值—算术移位

当x为无符号位时,左边空位补0—逻辑移位

例1:将15右移1、2、3位的二进制补码如下

初始字节内容

00001111

对应十进制15

右移1位字节内容

00000111

对应十进制7

右左移2位字节内容 00000011

对应十进制3

右移3位字节内容

00000001

对应十进制1

例2:将-15右移1、2、3位的二进制补码如下

初始字节内容

11110001

对应十进制-15

右移1位字节内容

11111000

对应十进制-8

右左移2位字节内容 11111100

对应十进制-4

右移3位字节内容

11111110

对应十进制-2

12)无论左移位还是右移位,从一端移走的位不移入另一端,移走的位的信息就丢失了

13)左移位和右移位可以分表代替整数的乘法和除法,左移n位相当于乘以2^n,右移n为相当于除以2^n

14)例:写出运行结果

#include

x 0000 0000 0000 1100 void main()

~x 1111 1111 1111 0011 {

~x反码1000 0000 0000 1100 int x=12,y=8;

~x反码加一1000 0000 0000 1101

-13 printf(”%5d%5d%5dn“,!x,x||y,x&&y);printf(”%5u%5d%5dn“,~x,x|y,x&y);printf(”%5d%5d%5dn“,~x,x|y,x&y);} 输出:

0

4294967283 12 8

-13 12

五、循环控制结构

1.循环:包括计数控制的循环和条件控制的循环

2.结构化程序设计的三种基本结构:顺序结构、选择结构、循环结构 3.循环结构的类型:

1)当型循环结构:for语句(适合循环次数已知,计数控制的循环)

2)直到型循环结构:while语句、do-while语句(适合循环次数未知,条件控制的循环)4.while语句

1)一般形式为:

while(循环控制表达式){

|

语句系列

|循环体

}

|

2)循环控制表达式在执行循环体之前测试

3)执行过程:

计算循环控制表达式的值

如果循环控制表达式的值为真,那么执行循环体中的语句,并返回步骤1

如果循环控制表达式的值为假,就退出循环,执行循环体后面的语句 5.do-while语句

1)一般形式为:

do {

|

语句系列

|循环体

}while(循环控制表达式);

2)循环控制表达式在执行循环体之后测试

3)执行过程:

执行循环体中的语句

计算循环控制表达式的值

如果循环控制表达式的值为真,那么返回步骤1

如果循环控制表达式的值为假,就退出循环,执行循环体后面的语句 6.for语句

1)一般形式为:

for(初始化表达式;循环控制表达式;增值表达式){

|

语句系列

|循环体

}

|

2)在每次循环体被执行之前,都要对循环控制条件测试一次,每次循环体执行完以后都要执行一次增值表达式

3)初始化表达式作用:循环变量初始化,即赋初值

4)循环控制表达式:是控制继续执行的条件,当表达式的值为非0时重复执行循环

5)增值表达式作用:每执行一次循环,循环控制变量增值

6)for语句三个表达式之间用分号分隔,有且只能有两个分号

7)循环控制表达式若省略,表示循环条件为永真

8)初始化表达式和增值表达式都可省略,但是必须有其他语句反应其作用

7.例:从键盘输入n,然后计算输出1+2+3+„„n的值

1)while语句编程实现 #include void main(){ int i=1,n,sum=0;//sum一定要初始化,不然会是随机值

printf(”Enter n:“);scanf(”%d“,&n);while(i<=n){

sum+=i;

i++;} printf(”1+2+3+„„+%d=%dn“,n,sum);}

2)do-while语句编程实现 #include void main(){ int i=0,n,sum=0;printf(”Enter n:“);scanf(”%d“,&n);do {

sum+=i;

i++;}while(i<=n);printf(”1+2+3+„„+%d=%dn“,n,sum);}

3)for语句编程实现 #include void main(){ int i=1,n,sum=0;printf(”Enter n:“);scanf(”%d“,&n);for(i=1;i<=n;i++){

sum+=i;} printf(”1+2+3+„„+%d=%dn“,n,sum);} 8.逗号运算符

1)所有运算符中优先级最低,左结合

2)作用:可实现对各个表达式的顺序求值

3)结果:将最后一个表达式的值作为整个逗号表达式的值

4)例:从键盘输入n,然后计算输出1+2+3+„„n的值 #include void main(){ int i,j,n,sum=0;printf(”Enter n:“);scanf(”%d“,&n);for(i=1,j=n;i<=j;i++,j--){

sum+=i+j;} printf(”1+2+3+„„+%d=%dn“,n,sum);} 9.空语句

1)仅由一个分号构成的语句

2)作用:什么也不做,只起延时作用

3)例:for(i=1;i<50000000;i++)

{

;

}

或for(i=1;i<50000000;i++)

{

}

或for(i=1;i<50000000;i++);

for(i=1;i<=n;i++);

{

sum+=i;

}

等价于

for(i=1;i<=n;i++)

{

;

}

sum+=i;

4)例:从键盘输入n,然后计算输出1+2+3+„„n的值 #include void main(){ int i,j,n,sum=0;printf(”Enter n:“);

scanf(”%d“,&n);for(i=1,j=n;i<=j;i++,j--);{

sum+=i+j;} printf(”1+2+3+„„+%d=%dn“,n,sum);}//输出结果:101 10.死循环

1)while语句行末加分号将导致死循环

2)例:i=1;

while(i<=n);//行末加分号导致死循环

{

sum+=i;

i++;

}

相当于

i=1;

while(i<=n)//当输入大于1的n值,循环体中没有语句可以改变控制变量i

{

//使得循环条件为永真,导致死循环

;

}

sum+=i;

i++;11.while语句和do-while语句的区别

1)while先判断后执行,有可能一次都不执行,do-while先执行后判断,至少执行一次

2)例:n=101;

n=101;

while(n<100)

do

{

{

printf(”n=%dn“,n);

printf(”n=%dn“,n);

n++;

n++;

}

}while(n<100);

//循环一次也不执行

//结果:输出n=101,循环执行一次

3)例:分别用while和do-while语句编程,输入一组数据,然后显示每次输入数据进行累加运算的结果,输入0结束 do-while语句实现: #include void main(){ int num,sum=0;do{

printf(”Enter num:“);

scanf(”%d“,&num);

sum+=num;

printf(”sum=%dn“,sum);}while(num!=0);} while语句实现 #include void main(){ int num=1,sum=0;//给num赋任意非0值都可以

while(num!=0){

printf(”Enter num:“);

scanf(”%d“,&num);

sum+=num;

printf(”sum=%dn“,sum);} } 12.计数控制的循环:循环次数事先已知的循环

1)例1:编写一个程序,从键盘输入n,计算输出n!#include void main(){ int i,n,sum=1;printf(”Enter n:“);scanf(”%d“,&n);for(i=1;i<=n;i++){

sum*=i;} printf(”%d!=%ldn“,n,sum);}

2)例2:编写一个程序,从键盘输入n,计算输出1!,2!„„n!#include void main(){ int i,n,sum=1;printf(”Enter n:“);scanf(”%d“,&n);

for(i=1;i<=n;i++){

sum*=i;

printf(”%2d!=%ldn“,i,sum);} }

3)例:键盘输入n,编程计算1!+2!+3!+„„+n!

#include void main(){ int term=1,sum=0,i,n;printf(”Enter n:“);scanf(”%d“,&n);for(i=1;i<=n;i++){

term*=i;

sum+=term;} printf(”1!+2!+3!+„„+%d!=%ldn“,n,sum);}

13.条件控制的循环:循环次数事先未知,由条件控制

1)例1:输入两个整型数,计算并输出两个整型数的最大值,如若输入非法字符,提示错误并重新输入

//解释:非法字符,需要输入数字时,字符相对它来说就是非法字符,而需要输入字符型,数字对它不是非法字符,所有都是合法 #include void main(){ int a,b,max,ret;printf(”Enter a,b:“);ret=scanf(”%d %d“,&a,&b);while(ret!=2)//判断数据个数或格式是否错误

{

while(getchar()!='n');//清除缓冲区中的错误数据

printf(”Enter a,b:“);

ret=scanf(”%d %d“,&a,&b);} max=a>b?a:b;printf(”max=%dn“,max);} //注意:scanf()函数不做参数类型匹配检查,当输入1 3.2时,scanf返回2,不会导致重新输入

但是,此后的小数点仍留在缓冲区,如果此后还需输入内容,就要先清除缓冲区内容

2)例2:先由计算机想一个1-100之间的数请人猜,若猜对,则计算机提示Right!结束 游戏,否则提示Wrong!,并告诉人是大是小,直到猜对为止,记录人猜的次数,反应猜数的水平

#include #include void main(){ int magic;

int guess;int counter=0;magic=rand()%100+1;do{

printf(”Please guess a magic number:“);

scanf(”%d“,&guess);

counter++;

if(guess>magic)

{

printf(”Wrong!Too big!n“);

}

else if(guess

{

printf(”Wrong!Too small!n“);

}

else{

printf(”Right!n“);

} }while(guess!=magic);printf(”counter=%dn“,counter);} 14.随机数的使用

a.随机数的产生:

rand()

1)符号常量RAND_MAX在头文件#include中定义,标准C规定RAND_MAX不大于双字节整数的最大值32767

2)随机函数rand()产生的是一个在0~RAND_MAX之间的整数,即[0,32767]之间的整数

3)利用求余运算rand()%b可将函数rand()生成的随机数变化到[0,b-1]

4)利用rand()%b+a可将随机数的取值范围平移到[a,a+b-1]

b.随机数的产生:

srand(time(NULL))

1)用rand()直接产生的随机数只是一个伪随机数,反复调用产生的随机数序列是一样的,而且每次都只用第一个

2)随机化:使程序每次运行时产生不同的随机数序列的过程

3)随机化的实现:通过调用标准库函数srand()为函数rand()设置随机数种子来实现

4)随机数种子的设置:

法1:每次通过用户输入来完成随机化,srand(1),srand(2),srand(seed),输入seed

法2:的通过函数time()读取计算机的时钟值,并把该值设置为随机数种子srand(time(NULL))

5)函数time()返回以秒计算的当前时间值,即一个代表时间的字符串,使用NULL作为time()的参数时,time(NULL)的返回值被转换成一个无符号整数,可作为随机数发生器的种子

6)使用time()函数时,必须在程序开头将头文件包含到程序中

15.例:先由计算机想一个1-100之间的数请人猜,若猜对,则计算机提示Right!结束

游戏,否则提示Wrong!,并告诉人是大是小,直到猜对为止,记录人猜的次数,反应猜数的水平

#include #include #include void main(){ int magic;int guess;int counter=0;srand(time(NULL));magic=rand()%100+1;do{

printf(”Please guess a magic number:“);

scanf(”%d“,&guess);

counter++;

if(guess>magic)

{

printf(”Wrong!Too big!n“);

}

else if(guess

{

printf(”Wrong!Too small!n“);

}

else{

printf(”Right!n“);

} }while(guess!=magic);printf(”counter=%dn“,counter);} 16.例:先由计算机想一个1-100之间的数请人猜,若猜对,则计算机提示Right!屏幕输出多少次成功,结束游戏,否则提示Wrong!,并告诉人是大是小,最多猜10次,超过就结束,要避免非法字符的输入

#include #include #include void main(){ int magic;int guess;int counter=0;

int ret;//保存scanf()函数的返回值

srand(time(NULL));magic=rand()%100+1;do{

printf(”Please guess a magic number:“);

ret=scanf(”%d“,&guess);

while(ret!=1)//若存在输入错误,则重新输入

{

while(getchar()!='n');//清楚缓冲区中的内容

printf(”Please guess a magic number:“);

ret=scanf(”%d“,&guess);

}

//若存在非法字符,则重新输入

counter++;

if(guess>magic)

{

printf(”Wrong!Too big!n“);

}

else if(guess

{

printf(”Wrong!Too small!n“);

}

else{

printf(”Right!n“);

} }while(guess!=magic&&counter<10);printf(”counter=%dn“,counter);}

延伸拓展:先由计算机想一个1-100之间的数请人猜,若猜对,则计算机提示Right!屏幕输出多少次成功,结束游戏,否则提示Wrong!,并告诉人是大是小,最多猜10次,超过就继续猜下一个数,每次运行程序,可

反复猜多个数,直到操作者想停时结束,要注意避免非法字符输入的问题 #include #include #include void main(){ int magic;int guess;int counter;char reply;//保存用户输入的答案

int ret;//保存scanf()函数的返回值

srand(time(NULL));

do{

magic=rand()%100+1;

counter=0;

do{

printf(”Please guess a magic number:“);

ret=scanf(”%d“,&guess);

while(ret!=1)//若存在输入错误,则重新输入

{

while(getchar()!='n');//清楚缓冲区中的内容

printf(”Please guess a magic number:“);

ret=scanf(”%d“,&guess);

}

//若存在非法字符,则重新输入

counter++;

if(guess>magic)

{

printf(”Wrong!Too big!n“);

}

else if(guess

{

printf(”Wrong!Too small!n“);

}

else{

printf(”Right!n“);

}

}while(guess!=magic&&counter<10);

printf(”counter=%dn“,counter);

printf(”Do you want to continue(Y/N or y/n)?“);

scanf(” %c“,&reply);//%c前有一个空格,读取缓冲区中的回车符

}while(reply=='Y'||reply=='y');}

17.设计一个简单计算器,允许连续做多次算术运算 #include #include void main(){ float data1,data2;char op;char reply;do{

printf(”Please enter your expression:n“);

scanf(”%f %c%f“,&data1,&op,&data2);//加空格可在操作数和运算符之间加任意多个空白符

switch(op)

{

case '+':

printf(”%f+%f=%fn“,data1,data2,data1+data2);

break;

case '-':

printf(”%f-%f=%fn“,data1,data2,data1-data2);

break;

case '*':

case 'X':

case 'x':

printf(”%f*%f=%fn“,data1,data2,data1*data2);

break;

case '/':

if(fabs(data2)<=1e-7)

{

printf(”Division by zero!n“);

}

else{

printf(”%f/%f=%fn“,data1,data2,data1/data2);

}

break;

default:

printf(”Invalid operator!n“);

}

printf(”Do you want to continue(Y/y or N/n)?“);

scanf(” %c“,&reply);//加空格清除缓冲区中的回车符

} while(reply=='Y'||reply=='y');} 18.嵌套循环

一个循环语句放在另一个循环语句中构成的循环称为嵌套循环

1)嵌套循环的总循环次数等于外层循环次数和内层循环次数的乘积

2)为避免造成混乱,嵌套循环的内层和外层的循环控制变量不要同名

3)例:键盘输入n,编程计算1!+2!+3!+„„+n!#include void main(){ int term,sum=0,i,j,n;printf(”Enter n:“);scanf(”%d“,&n);for(i=1;i<=n;i++){

term=1;

for(j=1;j<=i;j++)

{

term*=j;

}

sum+=term;} printf(”1!+2!+3!+„„+%d!=%ldn“,n,sum);} 19累加求和构成规律:

1)当累加项较为复杂或者前后项之间无关时,需要单独计算每个累加项

2)当累加项前项与后项之间有关时,根据前项计算后项 #include void main(){ int i,n;long term=1,sum=0;printf(”Enter n:“);scanf(”%d“,&n);for(i=1;i<=n;i++){

term=term*i;

sum=sum+term;} printf(”1!+2!+3!+„„%d=%ldn“,n,sum);} 20.goto语句

1)功能:使程序无条件跳转到语句标号所标识的语句去执行,所跳过的语句不再执行

2)一般形式:

①向前跳转

②向后跳转

goto 语句标号;

语句标号:„„(后)

„„

„„

语句标号:„„(前)

goto 语句标号;

3)应用:通常情况,goto语句与if语句联合使用

if(表达式)goto语句标号;

语句标号:„„

„„

„„

语句标号:„„

if(表达式)goto语句标号;21.break语句

1)功能:①用于退出switch结构

②用于退出由while,do-while和for语句构成的循环体

2)原理:当执行循环体遇到break语句时,循环体将立即终止,从循环语句后的第一条语句开始继续执行

3)应用:break语句通常与if联合使用,表明在任何条件下跳转到紧接循环语句后的第一条语句

22.continue语句

1)功能:跳过continue后面尚未执行的语句,开始下一次循环,只结束本次循环,不终止整

个循环

2)例题: #include void main(){ int i,n;for(i=1;i<=5;i++){

printf(”Please enter n:“);

scanf(”%d“,&n);

if(n<0)continue;

printf(”n=%dn“,n);} printf(”Program is over!n“);} 23.函数exit()

1)标准库函数exit()用于控制程序的流程,调用时,需要加头文件

2)一般形式:exit(code);

3)功能:终止整个程序的执行,强制返回操作系统,并将int型参数code的值传给调用进程

(一般为操作系统),当code的值为0或宏常量EXIT_FAILURE,表示程序出现某种错误后退出

24.goto,break,continue,exit()的比较

1)goto,break,continue,exit()都用于控制程序的流程,前三个是流程控制语言,exit()是C标准函数

1)功能:goto语句可以向任意方向跳转,break语句只限定流程跳转到循环语句之后的第一条语句,continue语句结束本次循环,exit()直接终止所有程序

2)break,goto语句和exit()函数都可用于终止整个循环的执行,continue不能终止整个循环

3)在嵌套循环下,break语句和continue语句只对包含他们的最内层循环语句起作用,不能用break语句跳出多重循环,只能一层一层的跳出

4)使用goto语句的两种特定情形:

①快速跳出多重循环

②跳向共同的出口位置,进行退出前的错误处理工作

25.例题:韩信点兵:x%5==1&&x%6==5&&x%7==4&&x%11==10 ①穷举法(循环条件自定义,不具实际意义)②break退出循环(循环条件省略,满足条件结束循环)③exit(0)结束程序(循环条件省略,满足条件结束整个程序)④使用标志变量(循环条件为标识变量为0,最佳方法)#include void main(){ int x;int find=0;for(x=1;!find;x++){

if(x%5==1&&x%6==5&&x%7==4&&x%11==10)

{

printf(”x=%dn",x);

find=1;

} } } 26.类型溢出

1)原因:当运算的结果超出了类型所能表示的数的上界,导致进位到达了最前面的符号

位或者更多进位的丢失,就会发生类型溢出

2)解决办法:采用取值范围更大的数据类型来定义变量 27.结构化程序设计的基本思想

1)采用顺序、选择和循环三种基本结构作为程序设计的基本单元,语法结构具有4个特性

①只有一个入口

②只有一个出口

③无不可达语句,即不存在永远执行不到的语句

④无死循环,即不存在永远都执行不完的循环

2)尽量避免使用goto语句,因为它破坏了结构化设计风格,并且容易带来错误的隐患

3)采用自顶向下、逐步求精的模块化程序设计方法进行结构化程序设计

第四篇:C语言基础知识归纳

C语言基础知识

1.每个C程序有且只有一个主函数main(),且程序必须从main()函数开始执行,并在main()函数中结束。

2.在C语言中,用e来表示科学计数法时,规定在e的前面必须有数字,后面必须为整数。

3.用单引号括起来的一个字符常量只能存放一个字符;C语言中没有字符串变量,只能用字符数组来存储字符串。

4.外部变量在编译时由系统分配永久的内存空间,所以外部变量的类型不是自动存储类别。

5.在一个函数内的复合语句中定义的变量,只能在这个复合语句范围内有效。

6.用sizeof(int)计算int类型数据的字节数。

7.C语言运行时,首先系统检查语法的正误,再运行程序的语法;C语言中,可以在一个函数中嵌套一个函数,但是不能在一个函数中定义一个函数;只有在函数外部定义的函数才是外部函数;C语言的子程序有过程和函数两种。

8.预处理命令行的位置没有规定,只是习惯放在前面;在源文件中的可以有多条预处理命令,但一行只能写一条;宏名的大写只是习惯性的表示;宏替换不仅不占用运行时间还不分配内存空间。

9.feof函数的作用是检查文件是否结束,当结束时返回的值为非零,否则为零。

10.当定义了数组后,在给其赋值时,不能直接把字符串赋给数组名。

11.在赋值表达式中,赋值运算符“=”右侧不能为表达式;在求余运算符中的两侧都必须为整型;在强制类型转换时,类型名应用括号括起来。

12.静态局部变量,只有当程序结束后,其值才释放。

13.当调用函数时,实参是一个数组名,则向函数传送的是数组每一个元素的地址。

14.算法的特点为有零个或多个输入,有一个或多个输出,当相同的输入时,其结果相同;算法正确的程序最终一定会结束。15.在C语言中,预处理命令行都以“#”开头;当需要时才用#include;预处理的作用就是实现宏定义和条件编译。16.当数组元素的下标超出了定义的下标范围时,系统不给出“下标越界”的字样,而是得出错误的答案,因此在编程时务必检查下标是否越界。

17.共用体变量不能作为函数的参数,也不能使函数带回共用体变量。

18.指向函数的指针变量的定义形式为:数据类型(*指针变量)();,因此其为指向函数的指针变量。

19.用C语言编写的代码程序是源程序,只有通过编译、连接才能进行。

20.在说明为static时,其生存期得到延长,而其作用域并没有改

变,在定义后系统会自动帮它赋值为0,static为关键字不能被用作它用。

21.频繁地使用空语句会降低程序的可读性和运算速度。22.运算符%两边都应是整数,赋值语句左边应该是变量,而非表达式,强制转换语句强制类型应加括号。

23.在逻辑运算符中,其两侧的运算符对象为任意合法的表达式即可。

24.函数fread(&Iarray,2,16,fp)的功能是,从fp所指的数据文件中读取16次2字节的数据存储到数组Iarray中。25.整个流式文件也可以随机存取数据,C语言文件中有好多函数可以达到写入数据时,未经输入数据,达到不覆盖的目的,在进行写操作时,系统会自动关闭文件。

26.使用putchar、getchat、puts、gets、printf、scanf函数时,必须在程序的开头出现包含头文件#include”stdio.h”的命令行,而使用字符串处理函数时,必须在程序的开头出现包含头文件#include”string.h”命令行,而使用数学函数时,必须在程序的开头出现包含头文件#include”math.h”的命令行。

27.一个斜杠与小于等于127任意数字按一个字符计算,一个斜杠与任意一个字符按一个字符计算。

28.一个C程序可以有一个或多个程序文件,也可以有一个或多个函数,所以一个C语言程序可以实现多种算法。

29.根据C语言规定,注释语句可以换行写,并且一个“/*”和

其后紧跟的第一个“*/”中间的部分是注释内容,且注释内容不参与程序的运行。例如:b=0;/*b=20;给b赋值*/ 则b=0。30.sizeof是求字节数的运算符,包括‘’,而strlen是求字符串的实际长度的函数,不包括‘’,以‘’作为结束。31.在函数声明时,其中的形参变量、个数、函数的类型必须一致。

32.C语言源程序经编译后生成后缀为.obj的目标程序;C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件;用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中。并不是源程序中的所有行都参加编译。在条件编译形式下,相关内容只在满足一定条件时才进行编译。

33.switch括号后的表达式可以使任何表达式;case后的表达式必须是常量表达式,常量表达式中不能出现变量,且类型必须是整数、字符型或枚举型。

34.C程序必须由一个或一个以上的函数组成;函数调用可以作为一个独立的语句存在;若函数有返回值,必须通过return语句返回。

35.在C语言中,数据只能从实参单向传递给形参,称为“按值”传递。【在实参传递到形参时,是数值传递,而不是地址传递,形参中值的改变不会影响实参中的值。】

36.可以用typedef声明新的类型名来代替已有的类型名,而不能

增加新的类型。

37.在没有限制输出宽度时,一般浮点数的小数位数是6位,不管输出格式是%f或lf%均如此。

38.C语言中,函数的隐含存储类别是无存储类别。

39.当实参传递到形参时,地址传递时形参的改变影响实参。40.串的长度指的是串中的字符的个数,且其字符个数可以为零。41.C语言中数据类型有整型、实型、字符型等,实行数据分为单精度型和双精度型两种。

42.整型数组只能一个一个地输入或输出,而在字符型数组中可以对字符串整体地输入与输出。

43.C语言中,文件型指针变量的定义形式为:FILE *文件型指针名。C语言中对二进制文件的访问速度比文本文件快;C语言中,随机文件以二进制代码形式存储数据;C语言中的文本文件以ASCII码形式存储数据。

44.因为#define是宏定义的标志,而不是C语句,而printf是输出函数,因此其是C语句。

45.在实参传递给形参时,地址传递时能够改变,而数值传递时则不变。

46.在scanf函数中,必须含有输入项,并且需含有与之一一对应的转换说明符,在scanf函数的格式字符前可以加入一个正整数指定输入数据的宽度,但不可以实数指定小数位的宽度,输入项是地址表达式。

47.switch语句使用注意事项:(1)switch语句与if语句不同,仅能判断一种关系:是否恒等;(2)switch语句中case子句的常量可以使整型常量、字符型常量、枚举型数据,或是整型常量表达式,不允许变量;(3)在同一个switch中,case子句的常量不能相同,在嵌套的switch语句中,不同层次的switch之间,可有相同的常量;(4)default子句可以省略。例如:default:printf(“En”);(5)case和default子句只能在switch语句中使用,且case和default只起标号作用,可出现在switch中的任何位置;(6)case和default子句后面的语句序列允许由多个可执行语句组成,且不必用“{}”括起来,也可以为空语句;(7)switch语句中可省略break语句,但省略后会改变流程。

48.break语句是限定转向语句,它使流程跳出所在的结构,把流程转向所在结构之后。continue语句被称为继续语句。该语句的功能是使本次循环提前结束,即跳过循环体中continue语句后面尚未执行的循环体语句,继续进行下一次循环的条件判别。

49.在C语言中,一个程序必须有一个main()函数,但是其文件就不一定,因为其可以通过链接来实现多个子函数放到这个主函数中,主函数的位置是不固定的,可以根据自己的爱好和习惯来使用,在C语言中任何函数都不能调用主函数,且与函数的位置有关。在C程序的函数中不能定义另一个函

数。

50.在用fprintf输入时,要将其转换为二进制数形式放到文件中。51.由C语言构成的指令序列称为C源程序,源程序文件的后缀为“.c”。而目标程序为“.obj”,可执行程序为“.exe”。52.在C语言中,合法的标识符可以由字母、数字和下划线组成,且第一个字符必须为字母或下划线。

53.C语言规定必须以main作为主函数名。程序要从main()函数开始执行,最后在main()函数中结束。54.赋值运算符左侧的操作数必须是一个变量。

55.在C语言中,函数的实参单元与形参单元在内存中分配不同的存储单元。

56.在一个C语言源程序文件中所定义的全局变量,其作用域为:由具体定义位置和extern说明来决定范围。【全局变量是在函数外部任意位置上定义的变量,它的作用域是从变量定义的位置开始,到整个源文件结束止。当全局变量定义在后,引用它的函数在前时,应该在引用它的函数中用extern对此全局变量进行说明,以便通知编译程序该变量是一个已在外部定义了的全局变量,这时全局变量的作用域从extern说明处起,延伸到该函数末尾。】

57.C语言中,凡是以“#”号开头的行,都成为“编译预处理”。对C原程序进行编译前,由编译预处理程序对这些变异预处理命令进行处理。

58.typedef语句的作用仅仅是用“标识符”来表示已存在的“类型名”,并未产生新的数据类型。

59.共用体变量中的所有成员共享一段公共存储区,所有成员的首地址相同。在每一个时刻所有的成员中只有一个有效,即只有最后一个被赋值的成员有效,其余的成员无效。60.C语言中注释可以出现在任意位置;C语言一行内可以写多个语句,一个语句可以写在多行上;C语言编写的程序可以放在多个程序文件中。

61.标识符只能由数字、字母和下划线组成,并且只能以字母和下划线开头。

62.在用基本输出语句printf时,格式说明与输出项的个数应该相同。如果格式说明的个数少于输出项的个数,多余的输出项不予输出,如果格式说明个数多余输出项个数,则对于多余的格式项输出不定制或0。

63.二维数组定义和初始化允许省略行下标,不允许省略列下标。64.预处理命令行是在系统对原程序进行编译之前进行处理的,不是在程序执行的过程中。

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

66.动态变量和静态变量都是内存变量,而寄存器变量不保存在内存上,而是直接存储在CPU的寄存器中。变量的存储类别有自动、静态、寄存器、外部。

67.C语言的源程序是由函数构成的,其基本单位是函数,每一个函数完成相对独立的功能,其中至少包括一个主函数;C语言的书写格式自由,一行可写多条语句,一条语句也可写在不同行上;C语言规定每个语句以分号结束。可随时添加注释,对程序没影响。

68.由高级语言编写的程序称为“源程序”,由二进制代码表示的程序称为“目标程序”。由汇编语言编写的程序称为“汇编程序”。对于计算机本身来说,它只能接收和处理由0到1的代码构成的二进制指令和数据。所以计算机能识别的程序是“目标程序”。而计算机可以直接执行的是可执行程序,即后缀为.exe的程序。

69.C语言源程序不能表示二进制,她

在C语言中,所有的数值型常量都带有符号,所以整型数量只区别整型和长整型两种形式,整型常量和长整型常量均可用十进制、八进制、十六进制3种形式表示。

70.宏名没有大小写限制。宏定义可以放在程序中的任何位置,其有效范围是从定义开始到文件结束。宏代换可以代替任何数据类型,不受数据类型的限制。函数影响运行时间,宏调用影响编译时间。

71.字符数组可以只存放普通字符,不存放字符串。此时该字符数组没有存放结束标志‘’。

72.文件由数据序列组成,可以构成二进制文件或文本文件。

第五篇:公共管理基础知识7号c

公共管理基础知识

一、名词解释:

1.什么是公共管理:公共管理是指政府及其他公共机

构,为了适应社会经济的发展和满足公众的要求,对

涉及公共利益的各种公共事务所实施的有效管理。

2.政府职能的转变:政府职能的“越位”,指政府干

了不该干的事情,管了不该管的事情。政府职能的“错

位”,指在政府职能的分工定位上存在交叉和混淆的情况。政府职能的“缺位”,指本来应当由政府生产

和提供的公共产品和服务,政府却没有充分尽职尽责,甚至在某些公共领域出现了“真空”。

3.什么是公共组织:从广义而言,是指不以盈利为目的的,而以服务社会大众、提高公共利益为宗旨的组

织。从狭义而言,指行使政权,达成公共目的组织。

4.什么是公共政策:公共政策是由政府或其他政策主

体制定的、调整全社会利益关系并具有鲜明的目标或

方向的政治行动或所规定的行为准则,它是一系列条

例,法令,措施,办法等等的总称。

5.什么是公共服务:为整个社会共同消费的产品和服

务。

6.经济性公共服务:指政府促进经济发展的公共服务,通常是生产性的。

7.什么是公共危机:是指那些突然发生的,攸关公共

利益的、对于组织的存在与发展具有重大影响的、急

需管理者快速应对的事件。策产生、存在和发展的一切因素的总和。(1)自然环境。指国家的地理位置、面积大小、气候条件、山川河流、矿产资源等。(2)社会环境。有政治状况、经济社会状况、文化状况、教育状况、法律状况、人口状况、科技状况、国防状况等。5.中国特色的政策执行经验?答:(1)注重政策宣传。(2)重视政策实验。(3)强制执行与说服教育相统一。(4)抓中心工作,以点带面。6.市场失灵的以下几点原因?答:(1)市场解决不理人总量问题。(2)外部效应。(3)市场不能有效提供产品和服务。(4)市场无法自发地消除垄断。(5)市场不能完全实现公正的收入分配。(6)市场调节带有一定的盲目性和滞后性,会造成社会资源的损失浪费。7.政府公共服务的内涵?答:为整个社会共同消费的产品和服务。政府公共服务是指政府满足社会公共需要,提供公共产品的服务行为的总称,它是由以政府机关为主的公共部门生产的、供全社会所有公民共同消费、所有消费者平等享受的社会产品。8.中国政府公共服务的主要成就?答:(1)我国社会保障体系基本建立。(2)我国政府科技公共服务水平不断提高。(3)教育公共服务进展明显。(4)我国政府的卫生公共服务水平不断提高。(5)我国环境保护公共服务成就显著。(6)我国公共事业建设成就明显。

8.地方政府职能:是指地方政府根据经济社会发展的需要,在宪法和法律的范围内所承担的职责和义务。

二、选择:

1.对国民经济进行宏观调整,创造稳定的经济发展环

境。

2.政府职能的“错位”,主要是指在政府职能的分工

定位上存在交叉和混淆的情况。

3.政府理念的转变是政府职能转变的先导。

4.矩阵结构是以完成某项工作为核心,从有关部门抽

调人组成临时机构来履行工作任务的结构。

5.政党尤其是执政党是政策主体中的核心力量。

6.公共政策执行的手段:1.行政手段。2.法律手段。

3.经济手段。4.思想诱导手段。

5.从宏观经济运行的角度看,我们可以将市场经济的经济主体分为企业、居民、政府、金融机构和国外机构等五大类。

6.公共支出的资金来源是财政收入。

7.相对标准是指公共支出点占GDP(或GNP)的比重。

8.结构问题是一切经济问题的核心。

9.社会性公共服务是指政府提供的社会性服务,如文化教育、社会保障和福利性收入转移支付等。

10.现代政府是提供公共服务与公共产品的政府。

11.自上而下的途径带有较强烈的命令色彩,它所带

来的变化会更广泛。

12.居安思危,未雨绸缪原则是政府危机管理的最优化

原则。

13.非营利组织的活动领域一般是营利部门不愿意涉

足的领域,包括福利、慈善和环保活动。

14.所谓“双重负责”,是指每一个社会团体都要接受

登记管理机关和业务主管单位的双重管理。

15.中国地方政府应履行的三方面职能:基本职能、特殊职能和过渡性职能。

16.中国地方政府的基本职能中的主要职能:

一、执行中央政府的宏观调控政策。

二、制定和执行产业政策。

三、制定和监督执行市场规则。

四、调节地方的收入和财富分配。

三、判断:

1.公共管理的主体应该是以政府的开放式体系。

2.公共管理的方式与方法概括为两个层次,即实质方法与技术方法。

3.公共组织是以追求公共利益为其价值取向。

4.管理层次越多,管理幅度越小,管理层次越少,管

理幅度越大。

5.在我国,行政组织中的横向结构服从于纵向结构。

6.我国行政组织实行“首长负责制”。

7.并非只有错误的政策才具有负导向功能,一些正确的政策也可能产生负导向功能。

8.对社会公共利益进行分配是公共政策的本质特征。

9.行政管制是需要政府出面,一方面防止过度竞争和

垄断,一方面为社会提供全面的服务。

10.公共产品的两大特征:一是消费者的非排他性,它

与私人产品的排他性相对,另一个是消费的非竞争性,它与私人产品的竞争性相对。

11.我国政府公共服务总体上处于中下等收入国家水

平。

12.政府权利是有限权利。

13.危害性是公共危机的本质特征。

14.公共危机管理是为社会提供公共产品,它以保持社会秩序、保障社会安全、维护社会稳定、提供公共产品为目标。

15.理念更新是发展电子政务的基础。

四、简答题:

1.政府经济调节职能?答:(1)对国民经济进行宏观

调整,创造稳定的经济发展环境。通过宏观调控,达

到促进经济增长,增加就业,稳定物价,保持国家收

支平衡。(2)深化经济体制改革,深化国有企业改革

和国有资产管理体制改革。(3)继续扩大对外开放,根据世界贸易组织的规则,切实行使权利,认真履行

义务。(4)繁荣农村经济,加快城镇化进程。

2.政府职能转变的基本原则?答:(1)遵循政府职能

和市场功能协调互补的原则。(2)遵循“三个有利于”的原则。(3)遵循效率优先、兼顾公平的原则。

3.依法行政的原则?答:(1)职权法定原则。(2)

法律保留原则。(3)法律优先原则。(4)比例原则。

(5)信赖保护原则。

4.公共政策的环境?答:所谓的政策环境是指影响政9.政府绩效是什么,有哪些内容?答:指政府在社会经济管理活动中的业绩、效果、效率、效能。是政府在行使其功能、实现其意志过程中体现出的管理能力。分为四个内容:(1)政治绩效(2)经济绩效(3)社会绩效(4)文化绩效。

五、论述题: 1.如何改进公共部门绩效评估的途径? 答:

一、引入公民参与机制。第一,公民参与意味着公民可以以社会的主人和服务对象的角色对政府绩效提出要求,协助和监督政府机构对其开支、行动、承诺进行衡量并让公众知道政府到底完成了什么。第二,公民参与意味着我们要重新定位公民的作用。第三,公民参与意味着由公民选择。界定应评估的对象,在公民服务设计中引入“使用者介入”机制,通过公民的参与可将事实与价值取向结合起来。

二、高层的支持和承诺。公共部门管理理念的变化和绩效评估的最初推行明确的高层认同和支持可以使绩效评估更加具有合法性和有效性。

三、建立绩效信息系统,保证评估准确和有效。

四、利用电子政府的新载体改善公共部门绩效评估。2.中国地方行政体制改革的主要内容? 答:(1)扩大地方自主权。这是地方行政体制改革的核心内容。(2)转变地方政府职能,实现政企分开。(3)精简地方政府机构,建立办事高效、运转协调、行为规范的行政管理体系。(4)调整地区建制,减少行政层次,避免重复设置。(5)精简机构和人员编制。

下载国二c语言公共基础知识总结word格式文档
下载国二c语言公共基础知识总结.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    C语言程序设计基础知识要点

    01.C程序基本结构 一、C语言的特点: 1、C语言源程序的基本组成单位是函数;一个C程序可由若干个函数组成,其中必须有且仅有一个以main命名的主函数,其余的函数名称可由编程者自行......

    C语言基础知识实例讲解

    C语言基础知识:实例讲解 这篇文章旨在让各位对 C 有个总体的认识,有看不懂的地方请不必太在意,只要记住就可以了,继续往下学下去就会明白的。 首先请看下面这个简单的 C 程序,......

    C语言心得与基础知识(范文大全)

    1.把 i 的值定义为浮点型,逻辑上正确,但是严格来说不对 浮点数的存储带来的问题:float,double都不能保证可以存储一个小数、近似值 1.213e+2 例题:如何判断浮点型变量 X 的值是否......

    2013公共基础知识总结

    1、“知识分子是工人阶级的一部分”的论断是周恩来在1956年召开的关于知识分子问题的会议上所作的《关于知识分子问题的报告》中提出来的。 2、两条根本对立的认识路线是唯......

    C语言总结

    C语言总结 --------13软件工程一班郭笑笑 ------------ 老师:徐静 经过一学期的对c语言这门课程学习,我对其有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还......

    c语言总结

    注意函数的参数传递。 1.求一位数组a中(或若干整数)所有元素的平均值。 (注意数组作函数参数的情况) 2.求一位数组a中的最大/最小元素及下标。(例如p59,p85) 求二维数组a中的最小值......

    C语言精华总结

    语言精华总结 一.指针。 它的本质是地址的类型。在许多语言中根本就没有这个概念。但是它却正是C灵活,高效,在面向过程的时代所向披靡的原因所在。因为C的内存模型基本上对应了......

    C语言总结

    引子: #include /*预处理*/ #include Void sort(char *names[],int n); /*函数声明*/ Void prt(char *names[],int n); Void main(void) { Char *names[]={“CHINA”,”AM......