计算机程序设计基础知识_第1页
计算机程序设计基础知识_第2页
计算机程序设计基础知识_第3页
计算机程序设计基础知识_第4页
计算机程序设计基础知识_第5页
已阅读5页,还剩92页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机程序设计基础知识

要求:这是计算机程序设计的一些基础知识,要求大家了解,

不作为考试的主要类容,但是会涉及一些。因为在进行论文

答辩时,如果问到一些软件设计的基础知识你都不知道可能

会让得分减少很多,所以大家一定要看下。

第一章数据结构与算法

1.1算法

算法:是指解题方案的准确而完整的描述。

算法不等于程序,也不等计算机方法,程序的编制不可能优

于算法的设计。

算法的基本特征:是一组严谨地定义运算顺序的规则,每一

个规则都是有效的,是明确的,此顺序将在有限的次数下终

止。特征包括:

(1)可行性;

(2)确定性,算法中每一步骤都必须有明确定义,不充许

有模棱两可的解释,不允许有多义性;

(3)有穷性,算法必须能在有限的时间内做完,即能在执

行有限个步骤后终止,包括合理的执行时间的含义;

(4)拥有足够的情报。

算法的基本要素:一是对数据对象的运算和操作;二是算法

的控制结构。

指令系统:一个计算机系统能执行的所有指令的集合。

基本运算包括:算术运算、逻辑运算、关系运算、数据传输。

算法的控制结构:顺序结构、选择结构、循环结构。

算法基本设计方法:列举法、归纳法、递推、递归、减斗递

推技术、回溯法。

算法复杂度:算法时间复杂度和算法空间复杂度。

算法时间复杂度是指执行算法所需要的计算工作量。

算法空间复杂度是指执行这个算法所需要的内存空间。

1.2数据结构的基本基本概念

数据结构研究的三个方面:

(1)数据集合中各数据元素之间所固有的逻辑关系,即数

据的逻辑结构;

(2)在对数据进行处理时,各数据元素在计算机中的存储

关系,即数据的存储结构;

(3)对各种数据结构进行的运算。

数据结构是指相互有关联的数据元素的集合。

数据的逻辑结构包含:

(1)表示数据元素的信息;

(2)表示各数据元素之间的前后件关系。

数据的存储结构有顺序、链接、索引等。

线性结构条件:

(1)有且只有一个根结点;

一个前件,也最多有一个后件。

非线性结构:不满足线性结构条件的数据结构。

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

线性表是由一组数据元素构成,数据元素的位置只取决于自

己的序号,元素之间的相对位置是线性的。

在复杂线性表中,由若干项数据元素组成的数据元素称为记

录,而由多个记录构成的线性表又称为文件。

非空线性表的结构特征:

(1)且只有一个根结点al,它无前件;

(2)有且只有一个终端结点an,它无后件;

(3)除根结点与终端结点外,其他所有结点有且只有一个

前件,也有且只有一个后件。结点个数n称为线性表的长度,

当n=0时,称为空表。

线性表的顺序存储结构具有以下两个基本特点:

(1)线性表中所有元素的所占的存储空间是连续的;

(2)线性表中各数据元素在存储空间中是按逻辑顺序依次

存放的。

ai的存储地址为:ADR(ai)=ADR(al)+(i-l)k,,ADR(al)为第

一个元素的地址,k代表每个元素占的字节数。

顺序表的运算:插入、删除。

1.4栈和队列

栈是限定在一端进行插入与删除的线性表,允许插入与删除

的一端称为栈顶,不允许插入与删除的另一端称为栈底。

栈按照“先进后出"(FILO)或“后进先出"(LIFO)组织数

据,栈具有记忆作用。用top表示栈顶位置,用bottom表

示栈底。

栈的基本运算:(1)插入元素称为入栈运算;(2)删除元素

称为退栈运算;(3)读栈顶元素是将栈顶元素赋给一个指定

的变量,此时指针无变化。

队列是指允许在一端(队尾)进入插入,而在另一端(队头)

进行删除的线性表。Rear指针指向队尾,front指针指向队

头。

队列是“先进行出"(FIFO)或“后进后出”(LIL0)的线性

表。

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

退队运算:从队头删除一个元素。

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

1.5线性链表

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

元称为存储结点,简称结点。

结点由两部分组成:(1)用于存储数据元素值,称为数据域;

(2)用于存放指针,称为指针域,用于指向前一个或后一

个结点。

在链式存储结构中,存储数据结构的存储空间可以不连续,

各数据结点的存储顺序与数据元素之间的逻辑关系可以不

一致,而数据元素之间的逻辑关系是由指针域来确定的。

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

结构。

线性链表,HEAD称为头指针,HEAD=NULL(或0)称为空表,

如果是两指针:左指针(Llink)指向前件结点,右指针

(Rlink)指向后件结点。

线性链表的基本运算:查找、插入、删除。

1.6树与二叉树

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

特性。

在树结构中,每一个结点只有一个前件,称为父结点,没有

前件的结点只有一个,称为树的根结点,简称树的根。每一

个结点可以有多个后件,称为该结点的子结点。没有后件的

结点称为叶子结点。

在树结构中,一个结点所拥有的后件的个数称为该结点的

度,所有结点中最大的度称为树的度。树的最大层次称为树

的深度。

二叉树的特点:

(1)非空二叉树只有一个根结点;

(2)每一个结点最多有两棵子树,且分别称为该结点的左

子树与右子树。

二叉树的基本性质:89

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

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

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

一个;

(4)具有n个结点的二叉树,其深度至少为[log2n]+l,其

中[log2n]表示取log2n的整数部分;

(5)具有n个结点的完全二叉树的深度为[log2n]+l;

(6)设完全二叉树共有n个结点。如果从根结点开始,按

层序(每一层从左到右)用自然数1,2,....n给结点进行

编号(k=l,2….n),有以下结论:

①若k=l,则该结点为根结点,它没有父结点;若k>l,则

该结点的父结点编号为INT(k/2);

②若2k4n,则编号为k的结点的左子结点编号为2k;否则

该结点无左子结点(也无右子结点);

③若2k+l<n,则编号为k的结点的右子结点编号为2k+l;

否则该结点无右子结点。

满二叉树是指除最后一层外,每一层上的所有结点有两个子

结点,则k层上有2k-l个结点深度为m的满二叉树有2m-l

个结点。

完全二叉树是指除最后一层外,每一层上的结点数均达到最

大值,在最后一层上只缺少右边的若干结点。

二叉树存储结构采用链式存储结构,对于满二叉树与完全二

叉树可以按层序进行顺序存储。

二叉树的遍历:

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

最后遍历右子树;

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

最后遍历右子树;

(3)后序遍历(LRD)首先遍历左子树,然后访问遍历右子

树,最后访问根结点。

1.7查找技术

顺序查找的使用情况:

(1)线性表为无序表;

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

二分法查找只适用于顺序存储的有序表,对于长度为n的有

序线性表,最坏情况只需比较log2n次。

1.8排序技术

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

序序列。

交换类排序法:(1)冒泡排序法,需要比较的次数为

n(n-l)/2;(2)快速排序法。

插入类排序法:(1)简单插入排序法,最坏情况需要n(n-1)/2

次比较;(2)希尔排序法,最坏情况需要031.5)次比较。

选择类排序法:(1)简单选择排序法,最坏情况需要

n(n-1)/2次比较;(2)堆排序法,最坏情况需要0(nlog2n)

次比较。

第二章程序设计基础

2.1程序设计设计方法和风格

如何形成良好的程序设计风格

1、源程序文档化;2、数据说明的方法;

3、语句的结构;4、输入和输出。

注释分序言性注释和功能性注释,语句结构清晰第一、效率

第二。

2.2结构化程序设计

结构化程序设计方法的四条原则是:1.自顶向下;2.逐步

求精;3.模块化;4.限制使用got。语句。

结构化程序的基本结构和特点:

(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)o

3.4软件测试

软件测试定义:使用人工或自动手段来运行或测定某个系统

的过程,其目的在于检验它是否满足规定的需求或是弄清预

期结果与实际结果之间的差别。

软件测试的目的:发现错误而执行程序的过程。

软件测试方法:静态测试和动态测试。

静态测试包括代码检查、静态结构分析、代码质量度量。不

实际运行软件,主要通过人工进行。

动态测试:是基本计算机的测试,主要包括白盒测试方法和

黑盒测试方法。

白盒测试:在程序内部进行,主要用于完成软件内部CAO作

的验证。主要方法有逻辑覆盖、基本基路径测试。

黑盒测试:主要诊断功能不对或遗漏、界面错误、数据结构

或外部数据库访问错误、性能错误、初始化和终止条件错,

用于软件确认。主要方法有等价类划分法、边界值分析法、

错误推测法、因果图等。

软件测试过程一般按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)删除⑶修改(4)查询(包括投影、选

择、笛卡尔积运算)

4.4数据库设计与管理

数据库设计是数据应用的核心。

数据库设计的两种方法:

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

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

数据库的生命周期:需求分析阶段、概念设计阶段、逻辑设

计阶段、物理设计阶段、编码阶段、测试阶段、运行阶段、

进一步修改阶段。

需求分析常用结构析方法和面向对象的方法。结构化分析

(简称SA)方法用自顶向下、逐层分解的方式分析系统。用

数据流图表达数据和处理过程的关系。对数据库设计来讲,

数据字典是进行详细的数据收集和数据分析所获得的主要

结果。

数据字典是各类数据描述的集合,包括5个部分:数据项、

数据结构、数据流(可以是数据项,也可以是数据结构)、

数据存储、处理过程。

数据库概念设计的目的是分析数据内在语义关系。设计的方

法有两种

(1)集中式模式设计法(适用于小型或并不复杂的单位或

部门);

(2)视图集成设计法。

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

视图设计一般有三种设计次序:自顶向下、由底向上、由内

向外。

视图集成的几种冲突:命名冲突、概念冲突、域冲突、约束

冲突。

关系视图设计:关系视图的设计又称外模式设计。

关系视图的主要作用:

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

(2)能适应用户对数据的不同需求;

(3)有一定数据保密功能。

数据库的物理设计主要目标是对数据内部物理结构作调整

并选择合理的存取路径,以提高数据库访问速度有效利用存

储空间。一般RDBMS中留给用户参与物理设计的内容大致有

索引设计、集成簇设计和分区设计。

数据库管理的内容:

(1)数据库的建立;

(2)数据库的调整;

(3)数据库的重组;

(4)数据库安全性与完整性控制;

(5)数据库的故障恢复;

(6)数据库监控。

C语言

C语言的优缺点,要求大家了解C语言的相关特点,以及和

其他语言相比有什么优势。

优点

简洁紧凑、灵活方便

C语言一共只有32个关键字,9种控制语句,程序书写形式

自由,主要用小写字母表示。它把高级语言的基本结构和语

句与低级语言的实用性结合起来。C语言可以像汇编语言

一样对位、字节和地址进行操作,而这三者是计算机最基本

的工作单元。

运算符丰富

C语言的运算符包含的范围很广泛,共有34种运算符。C语

言把括号、赋值、强制类型转换等都作为运算符处理。从而

使C语言的运算类型极其丰富,表达式类型多样化。灵活使

用各种运算符可以实现在其它高级语言中难以实现的运算。

数据结构丰富

C语言的数据类型有:整型、实型、字符型、数组类型、指

针类型、结构体类型、共用体类型等。能用来实现各种复杂

的数据结构的运算。并引入了指针概念,使程序效率更高。

另外C语言具有强大的图形功能,支持多种显示器和驱动器。

且计算功能、逻辑判断功能强大。

C是结构式语言

结构式语言的显著特点是代码及数据的分隔化,即程序的各

个部分除了必要的信息交流外彼此独立。这种结构化方式可

使程序层次清晰,便于使用、维护以及调试。C语言是以函

数形式提供给用户的,这些函数可方便的调用,并具有多种

循环、条件语句控制程序流向,从而使程序完全结构化。

C语法限制不太严格,程序设计自由度大

虽然C语言也是强类型语言,但它的语法比较灵活,允许程

序编写者有较大的自由度。

C语言允许直接访问物理地址,对硬件进行操作

由于C语言允许直接访问物理地址,可以直接对硬件进行操

作,因此它既具有高级语言的功能,又具有低级语言的许多

功能,能够像汇编语言一样对位、字节和地址进行操作,而

这三者是计算机最基本的工作单元,可用来写系统软件。

生成目标代码质量高,程序执行效率高

一般只比汇编程序生成的目标代码效率低10、20%。

C语言适用范围大,可移植性好

C语言有一个突出的优点就是适合于多种操作系统,如DOS、

UNIX;也适用于多种机型。C语言具有强大的绘图能力,可

移植性好,并具备很强的数据处理能力,因此适于编写系统

软件,三维,二维图形和动画,它也是数值计算的高级语言。

缺点

1.C语言的缺点主要表现在数据的封装性上,这一点使得C

在数据的安全性上有很大缺陷,这也是C和C++的一大区别。

2.C语言的语法限制不太严格,对变量的类型约束不严格,

影响程序的安全性,对数组下标越界不作检查等。从应用的

角度,C语言比其他高级语言较难掌握。

C语言指针

指针是C语言的一大特色,可以说是C语言优于其它高

级语言的一个重要原因。就是因为它有指针,可以直接进行

靠近硬件的操作,但是C的指针操作也给它带来了很多不安

全的因素。C++在这方面做了很好的改进,在保留了指针操

作的同时又增强了安全性。Java取消了指针操作,提高了安

全性,适合初学者使用。

结构特点

1.一个C语言源程序可以由一个或多个源文件组成。

2.每个源文件可由一个或多个函数组成。

3.一个源程序不论由多少个文件组成,都有一个且只能有一

个main函数,即主函数。

4.源程序中可以有预处理命令(include命令仅为其中的一

种),预处理命令通常应放在源文件或源程序的最前面。

5.每一个说明,每一个语句都必须以分号结尾。但预处理命

令,函数头和花括号之后不能加分号。

6.标识符,关键字之间必须至少加一个空格以示间隔。若已

有明显的间隔符,也可不再加空格来间隔。

C语言的四种程序结构

要求:这是种结构是单片机程序设计时用得最多的结构,要

求大家必须灵和的掌握这些结构语句的使用。(为考试时的

重点)

(1)顺序结构

顺序结构的程序设计是最简单的,只要按照解决问题的顺序

写出相应的语句就行,它的执行顺序是自上而下,依次执行。

例如:a=3,b=5,现交换a,b的值,这个问题就好像

交换两个杯子水,这当然要用到第三个杯子,假如第三个杯

子是c,那么正确的程序为:c=a;a=b;b=c;执

行结果是a=5,b=c=3如果改变其顺序,写成:a=b;

c=a;b=c;则执行结果就变成a=b=c=5,不能达

到预期的目的,初学者最容易犯这种错误。顺序结构可以独

立使用构成一个简单的完整程序,常见的输入、计算,输出

三步曲的程序就是顺序结构,例如计算圆的面积,其程序的

语句顺序就是输入圆的半径r,计算s=3.14159*r*r,输出

圆的面积s。不过大多数情况下顺序结构都是作为程序的一

部分,与其它结构一起构成一个复杂的程序,例如分支结构

中的复合语句、循环结构中的循环体等。

(2)分支结构

顺序结构的程序虽然能解决计算、输出等问题,但不能做判

断再选择。对于要先做判断再选择的问题就要使用分支结

构。分支结构的执行是依据一定的条件选择执行路径,而不

是严格按照语句出现的物理顺序。分支结构的程序设计方法

的关键在于构造合适的分支条件和分析程序流程,根据不同

的程序流程选择适当的分支语句。分支结构适合于带有逻辑

或关系比较等条件判断的计算,设计这类程序时往往都要先

绘制其程序流程图,然后根据程序流程写出源程序,这样做

把程序设计分析与语言分开,使得问题简单化,易于理解。

程序流程图是根据解题分析所绘制的程序执行流程图O

学习分支结构不要被分支嵌套所迷惑,只要正确绘制出流程

图,弄清各分支所要执行的功能,嵌套结构也就不难了。嵌

套只不过是分支中又包括分支语句而已,不是新知识,只要

对双分支的理解清楚,分支嵌套是不难的。下面我介绍几种

基本的分支结构。

①if(条件)

{分支体}

这种分支结构中的分支体可以是一条语句,此时“0”可以

省略,也可以是多条语句即复合语句。它有两条分支路径可

选,一是当条件为真,执行分支体,否则跳过分支体,这时

分支体就不会执行。如:要计算X的绝对值,根据绝对值定

义,我们知道,当x>=0时,其绝对值不变,而x<0时其绝

对值是为x的反号,因此程序段为:if(x<0)x=-x;

②if(条件)

{分支1}

else

{分支2}

这是典型的分支结构,如果条件成立,执行分支1,否则执

行分支2,分支1和分支2都可以是1条或若干条语句构成。

如:求axA2+bx+c=0的根

分析:因为当bA2-4ac>=0时,方程有两个实根,否则

(bA2-4ac<0)有两个共朝复根。其程序段如下:

main()

(

inta,b,c,d,x,y;

printf("Pleaseputthenumberofa,b&cfromthe

quadraticequationofonevariableonebyone\n");

scanf("%d%d%d",&a,&b,&c);

d=b*b-4*a*c;

if(d<0)

(

printf("NORootIWrong!\n");

}

else

(

y=-b-sqrt(d)/2*a;

x=-b+sqrt(d)/2*a;

printf("The1stequationroot=%d\nThe2ndequation

root=%d",y,x);

)

}

③IF嵌套分支语句:其语句格式为:

if(条件1){分支D

elseif(条件2){分支2}

elseif(条件3){分支3}

elseif(条件n){分支n}

else{分支n+1}

FOR嵌套,其语句格式为:

for(初值A;范围A;步长A)

for(初值B;范围B;步长B)

循环体

}

)

FOR嵌套例子:九九乘法表

main()

(

inta,b,c;

for(a=l;a<=9;a++)

(

for(b=l;b<=a;b++)

(

c=b*a;

printf("%dx%d=%d",b,a,c);

)

printf("\n");

嵌套分支语句虽可解决多个入口和出口的问题,但超过

3重嵌套后,语句结构变得非常复杂,对于程序的阅读和理

解都极为不便,建议嵌套在3重以内,超过3重可以用下面

的语句。

④switch开关语句:该语句也是多分支选择语句,到底执行

哪一块,取决于开关设置,也就是表达式的值与常量表达式

相匹配的那一路,它不同if...else语句,它的所有分支都

是并列的,程序执行时,由第一分支开始查找,如果相匹配,

执行其后的块,接着执行第2分支,第3分支……的块,直

到遇到break语句;如果不匹配,查找下一个分支是否匹配。

这个语句在应用时要特别注意开关条件的合理设置以及

break语句的合理应用。

“?”语句问号语句也是分支的一种,格式类似(a〈b)?语

句1:(此处是冒号)语句2;加入括号内为真则执行语句1

否则执行语句2

(3)循环结构:

循环结构可以减少源程序重复书写的工作量,用来描述重复

执行某段算法的问题,这是程序设计中最能发挥计算机特长

的程序结构,C语言中提供四种循环,即goto循环、while

循环、dowhile循环和for循环。四种循环可以用来处理同

一问题,一般情况下它们可以互相代替换,但一般不提倡用

goto循环,因为强制改变程序的顺序经常会给程序的运行带

来不可预料的错误,在学习中我们主要学习while、do...

while,for三种循环。常用的三种循环结构学习的重点在于

弄清它们相同与不同之处,以便在不同场合下使用,这就要

清楚三种循环的格式和执行顺序,将每种循环的流程图理解

透彻后就会明白如何替换使用,如把while循环的例题,用

for语句重新编写一个程序,这样能更好地理解它们的作用。

特别要注意在循环体内应包含趋于结束的语句(即循环变量

值的改变),否则就可能成了一个死循环,这是初学者的一

个常见错误。

在学完这三个循环后,应明确它们的异同点:用while和

do...while循环时,循环变量的初始化的操作应在循环体之

前,而for循环一般在语句1中进行的;while循环和for

循环都是先判断表达式,后执行循环体,而do...while循环

是先执行循环体后判断表达式,也就是说do...while的循环

体最少被执行一次,而while循环和for就可能一次都不执

行。另外还要注意的是这三种循环都可以用break语句跳出

循环,用continue语句结束本次循环,而goto语句与if

构成的循环,是不能用break和continue语句进行控制的。

顺序结构、分支结构和循环结构并不彼此孤立的,在循环中

可以有分支、顺序结构,分支中也可以有循环、顺序结构,

其实不管哪种结构,我们均可广义的把它们看成一个语句。

在实际编程过程中常将这三种结构相互结合以实现各种算

法,设计出相应程序,但是要编程的问题较大,编写出的程

序就往往很长、结构重复多,造成可读性差,难以理解,解

决这个问题的方法是将C程序设计成模块化结构。

⑷模块化程序结构

C语言的模块化程序结构用函数来实现,即将复杂的C程序

分为若干模块,每个模块都编写成一个C函数,然后通过主

函数调用函数及函数调用函数来实现一大型问题的C程序编

写,因此常说:C程序=主函数+子函数。因此,对函数的定

义、调用、值的返回等中要尤其注重理解和应用,并通过上

机调试加以巩固。

掌握一些简单的算法

编程其实一大部分工作就是分析问题,找到解决问题的方

法,再以相应的编程语言写出代码。这就要求掌握算法,根

据我们的《C程序设计》教学大纲中,只要求我们掌握一些

简单的算法,在掌握这些基本算法后,要完成对问题的分析

就容易了。如两个数的交换、三个数的比较、选择法排序和

冒泡法排序,这就要求我们要清楚这些算法的内在含义

C源程序的关键字

要求:只需掌握一些常用的关键字即可,其他不常见的关键

字自己在编写程序时通过查阅资料了解。

所谓关键字就是已被C语言本身使用,不能作其它用途使用

的字。例如关键字不能用作变量名、函数名等

由ANSI标准定义的C语言关键字共32个:

autodoubleintstructbreakelselongswitch

caseenumregistertypedefcharexternreturnunion

constfloatshortunsignedcontinueforsignedvoid

defaultgotosizeofvolatiledoifwhilestatic

根据关键字的作用,可以将关键字分为数据类型关键字

和流程控制关键字两大类。

1数据类型关键字

A.基本数据类型(5个)

void:声明函数无返回值或无参数,声明无类型指针,

显式丢弃运算结果

char:字符型类型数据,属于整型数据的一种

int:整型数据,通常为编译器指定的机器字长

float:单精度浮点型数据,属于浮点数据的一种

double:双精度浮点型数据,属于浮点数据的一种

B.类型修饰关键字(4个)

short:修饰int,短整型数据,可省略被修饰的int。

long:修饰int,长整形数据,可省略被修饰的into

signed:修饰整型数据,有符号数据类型

unsigned:修饰整型数据,无符号数据类型

C.复杂类型关键字(5个)

struct:结构体声明

union:共用体声明

enum:枚举声明

typedef:声明类型别名

sizeof:得到特定类型或特定类型变量的大小

D.存储级别关键字(6个)

auto:指定为自动变量,由编译器自动分配及释放。

通常在栈上分配

static:指定为静态变量,分配在静态变量区,修饰

函数时,指定函数作用域为文件内部

register:指定为寄存器变量,建议编译器将变量存

储到寄存器中使用,也可以修饰函数形参,建议编译器通过

寄存器而不是堆栈传递参数

extern:指定对应变量为外部变量,即标示变量或者

函数的定义在别的文件中,提示编译器遇到此变量和函数时

在其他模块中寻找其定义。

const:与volatile合称“cv特性”,指定变量不可被

当前线程/进程改变(但有可能被系统或其他线程/进程改

变)

volatile:与const合称"cv特性",指定变量的值有

可能会被系统或其他进程/线程改变,强制编译器每次从内

存中取得该变量的值

2流程控制关键字

A.跳转结构(4个)

return:用在函数体中,返回特定值(或者是void值,

即不返回值)

continue:结束当前循环,开始下一轮循环

break:跳出当前循环或switch结构

goto:无条件跳转语句

B.分支结构(5个)

if:条件语句,后面不需要放分号

else:条件语句否定分支(与if连用)

switch:开关语句(多重分支语句)

case:开关语句中的分支标记

default:开关语句中的“其他”分支,可选。

C.循环结构(3个)

for:for循环结构,for(1;2;3)4;的执行顺序为

1->2->4->3->2...循环,其中2为循环条件。在整个for循

环过程中,表达式1只计算一次,表达式2和表达式3则可

能计算多次,也可能一次也不计算。循环体可能多次执行,

也可能一次都不执行。

do:do循环结构,do1while(2);的执行顺序是

1->2->1...循环,2为循环条件

while:while循环结构,while(1)2;的执行顺序是

1->2->1...循环,1为循环条件

应用实例

要求:这是一些简单的C语言程序,要求大家会读并且会自

己编写。

L功能:求三个整数的平均值。程序如下:

#include<stdio.h>/*载入头文件stdio.h*/

voidmain()/*主函数main*/

(

inta,b,c,d;/*定义a,b,c,d为整型变量*/

a=105;

b=75;

c=85;

d=(a+b+c)/3;

printf("d=%d\n",d);/*显示"d=某数"并换行,某

数是d的值*/

getchar();/*等待用户,按任意键退出*/

return0;

)

2.功能:由键盘输入多边形的边数,求其内角和。程

序如下:

#include<stdio.h>

intmain()

(

/*辨别多边形是否成立,不成立重新执行do-while

语句间的命令*/

do

(

intx;

printf("n=");

scanf("%d",&x);/*由键盘输入x的值*/

printf("%d\n",(x-2)*180);/*显示内角和,公式

为(x-2)*180*/

/*辨别多边形是否成立,不成立显示“Error",成立

显示“Right”*/

if(x<=2)

printf("Error\n");

else

printf("Right\n");

)

while(x<=2);/*do-while语句*/

getchar();

return0;

)

3.功能:由键盘输入两个数,显示器上显示较大数。

程序如下:

#include<stdio.h>

intbig(int,int);/*创建整型变量函数big*/

voidmain0

(

intx,y;

scanf("%d,%d",&x,&y);

printf("bigis%d\n",big(x,y));

/*输出big函数的值,因为main函数与用户自定义

函数big无关系,所以printf后的输出项表是big(x,y),

而不是big(nl,n2)♦/

getchar();

return0;

)

intbig(intnl,intn2)/*用户自定义函数big*/

(

if(nl>n2)

returnnl;/*返回nl值*/

else

returnn2;/*返回n2值*/

)

4.功能:由键盘输入一个等腰三角形的层数,画一个

这样的三角形。程序如下:

#include<stdio.h>

voidmain0

(

inti,j,n;

printf("n:");

scanf("%d",&n);

for(i=l;i<=n;i++)/*循环n次,每次输出一行*/

(

for(j=l;j<=n-i;j++)/*输出该行前面的空格*/

printf("");

for(j=l;j<=2*i-l;j++)/*输出该行中的星号*/

printf("♦");

printf("\n");

)

getchar();

return0;

)

注释:不能输入太多的行数,如10000。

5.功能:由键盘输入一个最大值,求2到这个最大值

中的所有质数(素数)。程序如下:

#include<stdio.h>

#include<math.h>/*数学文件*/

voidmain0

(

intn,m,flag,i,j,num=l;

printf("n:");

scanf("%d",&n);

printf("2-%d:\n",n);

for(i=2;i<=n;i++)/*循环查找质数*/

(

flag=l;

m=(int)sqrt(i);

for(j=2;j<=m;j++)

if(i%j==0)/*条件为真时表示不是质数,退出for

循环*/

(

flag=0;

break;

if(flag==l)/*条件为真时表示i是质数*/

printf("M",i);

if(num++==10)/*每行最多输出10个数*/

(

printf("\n");

num=l;

)

)

)

printf("\n");

getchar();

return0;

)

数电方面基础知识

要求:这些是电路设计的基础,要掌握基本的数电符号,和

基本的逻辑关系。考试是重点。

基本的逻辑运算表示式-基本逻辑门电路符号

1、与逻辑(ANDLogic)

与逻辑又叫做逻辑乘,下面通过开关的工作状态加以说明与

逻辑的运算。

从上图可以看出,当开关有一个断开时,灯泡处于灭的

状态,仅当两个开关同时合上时,灯泡才会亮。于是我们可以将与

逻辑的关系速记为:“有0出0,全1出1”。

图(b)列出了两个开关的所有组合,以及与灯泡状态的情况,

我们用0表示开关处于断开状态,1表示开关处于合上的状态;

同时灯泡的状态用0表示灭,用1表示亮。

图⑹给出了与逻辑门电路符号,该符号表示了两个输

入的逻辑关系,&在英文中是AND的速写,如果开关有三个则

符号的左边再加上一道线就行了。

逻辑与的关系还可以用表达式的形式表示为:

F=A•B

上式在不造成误解的情况下可简写为:F=ABO

2、或逻辑(ORLogic)

上图(a)为一并联直流电路,当两只开关都处于断开时,

其灯泡不会亮;当A,B两个开关中有一个或两个一起合上时,

其灯泡就会亮。如开关合上的状态用1表示,开关断开的状态

用0表示;灯泡的状态亮时用1表示,不亮时用0表示,则

可列出图(b)所示的真值表。这种逻辑关系就是通常讲的“或逻

辑”,从表中可看出,只要输入A,B两个中有一个为1,则

输出为1,否则为0o所以或逻辑可速记为:“有1出1,全0

出0”。

上图(c)为或逻辑门电路符号,后面通常用该符号来表示

或逻辑,其方块中的表示输入中有一个及一个以上的

1,输出就为lo

逻辑或的表示式为:

F=A+B

3、非逻辑(NOTLogic)

非逻辑又常称为反相运算(Inverters)。下图(a)所示的

电路实现的逻辑功能就是非运算的功能,从图上可以看出当开

关A合上时,灯泡反而灭;当开关断开时,灯泡才会亮,故

其输出F的状态与输入A的状态正好相反。非运算的逻辑表达式

为F-N

图(c)给出了非逻辑门电路符号。

(a)

(b)(c)

复合逻辑运算

在数字系统中,除了与运算、或运算、非运算之外,常常

使用的逻辑运算还有T是通过这三种运算派生出来的运算,

这种运算通常称为复合运算,常见的复合运算有:与非、或非、

与或非、同或及异或等。

4、与非逻辑(NANDLogic)

与非逻辑是由与、非逻辑复合而成的。其逻辑可描述为:

“输入全部为1时,输出为0;否则始终为ro下图(a)为与

非逻辑门电路符号。

多输入的与非逻辑表达式可写为:际

5、或非逻辑(NORLogic)

上图(b)为或非逻辑门电路符号,从与非的逻辑可以推出

或非的逻辑关系:“输入中有一个及一个以上1,则输出为0,

仅当输入全为0时输出为1"o或非逻辑的逻辑符号如下:

6、与或非逻辑

上图中图(c)为与或非逻辑门电路符号,A,B相与后输出

到或运算输入,同时C,D也相与后输出到或逻辑的输入,这两

个输出再进行或运算后加到非运算输出。上图与或非的逻辑

表达式为:

尸=丽而

7、异或逻辑

图(d)为异或逻辑门电路符号,=1表示当两个输入中只

有一个为1时,输出为1;否则为0。异或运算的逻辑表达

式为:

F=A®B=AB+AB

上式中,“”表示异或运算。

8、同或逻辑

图(e)为同或的逻辑关系,从图上可以看出同或实际上是异

或的非逻辑,下表也说明了其两者的非的逻辑关系。

异或逻辑及同或逻辑真值表

输入变量异或逻辑同或逻辑

ABAOBA0B

0001

0110

1010

1101

同或的逻辑表达式为:

F=AOB=AB+AB

上式中是同或逻辑门电路符号。

基本门电路-什么是门电路-逻辑门电路图

一、分立元件基本门电路

二极管与门电路图

「⑺uB(v)UF(V)

000.7

030.7

300.7

333.7

ABF

000

010

100

111

二极管或门电路图

UB(V)UF(V)ABF

000000

032.3011

302.3101

332.3111

三极管非门电路图

数制与编码-数制转换方法-数制计算运算公式

一、十进制数(DecimalNumber)

十进制数是日常生活中使用最广的计数制。组成十进制数的符号有0,1,2,3,4,5,6,

7,8,9等共十个符号,我们称这些符号为数码。

在十进制中,每一位有。〜9共十个数码,所以计数的基数为1。。超过9就必须用多位数来表

示。十进制数的运算遵循加法时:“逢十进一”,减法时:“借一当十”。

十进制数中,数码的位置不同,所表示的值就不相同。如:

I-------------*6X1000

|•8x100

'I*3x10

6834-*4x1

式中,每个对应的数码有一个系数1000,100,1“1与之相对应,这个系数就叫做权或位权。

对千位一十进制数可表示为:

xn-1n2:2

N10=aR_110+^2x10_+'"+axxlO^a0xio+a_1x10-+**'10"

=rKaixiox

式中:ai为0~9中的位一数码;10为进制的基数;10的i

次为第i位的权;m,n为正整数,n为整数部分的位数,m

为小数部分的位数。

二、二进制数(BinaryNumber)

与十进制相似,二进制数也遵循两个规则:

仅有两个不同的数码,即0,1;

进/借位规则为:逢二进一,借一当二。

咫于任意一个二进制数可表示为:

n-1

N尸器b:X2;

由于二进制数仅0,1两个数码,所以其运算规则比较简单,下

现列出了二进制数进行加法和乘法的规则:

加法乘法

0+0=0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论