版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1/40,、课前争取预习 、课上集中精力听讲,适当做笔记,积极思考和回答问题,调动自己的学习兴趣。 3、 课后一定要复习,重视问题的分析过程,多上机编写程序。 4 、上机前一定要认真准备纸质资料和程序,培养逻辑思维能力。 5、 上机后认真总结,写好实验报告。复习和总结是掌握知识的重要途径。 6、 养成相互讨论和上网查资料的习惯,培养自主学习能力。,如何学好C语言,2/40,关于教材和参考书,本门课程主要参考资料: “从问题到程序 程序设计与C语言引论(第2版)”, 裘宗燕 编著, 机械工业出版社 “C语言的科学与艺术”, Eric S.Roberts著, 翁惠玉等译,机械工业出版社 “C语言入
2、门经典(第4版)”,(美)Ivor Horton著,杨浩译, 清华大学出版社 “问题求解与程序设计 C语言版(第4版)”,Jeri R. Hanly, Elliot B. Koffman著, 朱剑平译, 清华大学出版社 “C语言程序设计”,谭浩强,清华大学出版社,第一章,C语言概述,4/40,本章目标,计算机的硬件组成和工作机制 程序设计语言与计算机软件 了解C语言的发展历史 认识简单的C程序 了解C语言程序开发方法 如何通过集成开发环境进行C程序设计,5/40,1.1计算机硬件的组成和工作机制,计算机不会自动工作,它是由程序控制的,人与计算机打交道的基本方式就是根据自己的需要写出一个程序,而
3、后把这个程序提供给计算机,命令它去执行。此后计算机就会按照程序的规定,一丝不苟地执行其中的指令,直至程序结束。这些用于指挥计算机工作的程序就是使用程序设计语言编写的,C语言是程序设计语言的一种,是程序员与计算机交流的工具。 本门课程主要学习如何使用C语言编写程序去指挥计算机工作。,6/40,1.1计算机硬件的组成和工作机制,现代计算机从广泛意义上讲包含硬件和软件两大组成部分,硬件就是我们能够直观看到的构成计算机的各种物理部件,软件则是无形的,是用于指挥计算机操作的程序、数据和文档的集合。 如果将一台计算机和一个人进行类比,那么硬件相当于人的躯体,是计算机进行工作的物理主体,而软件则相当于人的神
4、经和思想,是计算机的指挥官,指挥硬件去完成指定的功能。 我们在商店里看到的计算机通常是指它的硬件组成部分,包括主机和显示器,主机里面有CPU、内存和硬盘等各种部件。,7/40,1.1.1计算机硬件组成,尽管现在市场上出售的计算机在价格、大小、容量和性能上有着很大的差异,但大体上现代计算机都包括如下硬件设备: 中央处理单元(Central Processing Unit,简称CPU) 主存储器(Main memory) 辅助存储器(硬盘、光盘、闪存和移动存储等) 输入设备(键盘、鼠标、手写板、扫描仪等) 输出设备(显示器、打印机、扬声器等),8/40,1.1.2 二进制与计算机的工作机制,现代计
5、算机大都采用了大规模集成电路,在微小的芯片上集成了数以百万计的晶体管等元件,通过电路和元件状态的变化来实现计算功能。当计算机处于运行状态,每过来一个电脉冲,这些晶体管的状态就会在导通和断开中变换一次,从而产生一种新的状态,再来一个电脉冲,状态又变换一次,最终达到目标状态,完成任务。如果用数字1代表导通,数字0代表断开,则由0与1构成的二进制串刚好能够表示出电路的所有状态。 计算机使用二进制进行编码,而不是我们熟悉的十进制,最重要的原因是二进制物理上更容易实现。电子元器件大多具有两种稳定状态,如晶体管的导通和断开,电压的高和低,磁性的有和无等,而找到一个具有十个稳定状态的电子元器件是很困难的。二
6、进制计算方法符合计算机的物理设计,抗干扰能力强,技术实现和运算规则简单,有利于简化计算机内部结构,提高运算速度,易于与其他进制相互转换。 我们平时使用计算机时感觉不到它是在用二进制计算是因为计算机会把你输入的十进制数自动转换成二进制,算出的二进制数再转换成十进制数显示到屏幕上。这种转换对终端用户是透明的。二进制数据用0和1两个数码来表示,它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。,9/40,1.1.2 二进制与计算机的工作机制,二进制数据可以转换为其他进制表示,如十进制、八进制、十六进制等,其中二进制和十进制间的转换最为常用。例如: (1011)2 = (1*23+0*22
7、+1*21+1*20)10 = (8+0+2+1)10 = (11)10 (89)10 = (64+16+8+1)10 = (26+24+23+20)10= (1011001)2 计算机工作时怎么知道自己应该让哪个晶体管导通、哪个断开呢?这就要靠程序。程序员依据计算机每次要执行的动作事先编写好程序,计算机只需按程序进行工作就是了。 二进制编码是计算机能够直接识别的唯一语言形式,是最早出现的编程语言,也称为机器语言或低级语言。采用二进制编码编写程序时,编程人员必须记住每个代码的意义,编程难度可想而知。历经多次变革和发展,现在人们已经可以使用更容易为人类理解和使用的高级语言编写程序了。,10/40
8、,1.2 程序设计语言与计算机软件,程序一词源于生活,通常指完成某项事务所需要的一套既定活动方式或活动过程。生活中有很多关于程序的实例,例如,学生去食堂买饭的活动过程可描述如下: 进入食堂; 浏览各个售卖窗口,并告知食堂工作人员想要购买的菜品; 食堂工作人员将相应的菜品盛放在餐盘里; 刷卡支付餐费,取走菜品。 在计算机领域,程序就是使用程序设计语言编写的计算机指令的集合,用于指挥电子计算机执行一个或多个操作。,11/40,1.2.1 程序设计语言 概述,语言一词通常指人生活中使用的自然语言,如汉语、英语等。这些语言是人类信息交流的工具和媒介,其描述的程序是为了给人看,要人做的。为了与计算机进行
9、交流,指挥计算机工作,需要一种语义清晰、人用起来方便、计算机也能够处理的描述方式,实现人和计算机之间的交流。这种供人编写计算机能够处理的程序所使用的语言就是程序设计语言,也常被称为编程语言。 程序设计语言和前面提到的自然语言的区别主要在于交流的对象不同,英语和汉语都是人与人交流的工具,而程序设计语言则是人与计算机交流的工具,不仅人能够懂得和掌握它,使用它描述所需的计算过程,而且计算机也能够“理解”它,可以按照程序设计语言给出的计算过程的描述去执行任务,完成人们所需要的工作。每门语言都有沟通符号、表达方式与处理规则,一般人都必须通过学习才能获得语言能力,由单个词语到整个句子,再到对整个任务的描述
10、。 程序设计语言的发展至少经历了机器语言、汇编语言和高级语言三个阶段。,12/40,机器语言,计算机是人类发明的一种自动机器,能够执行一组基本操作,每个操作能完成一件很简单的工作,如做一次加减乘除运算,或者比较两个数值的大小等。在计算机内部,一切信息都是以二进制编码的形式存在,为了使人们能够指挥计算机工作,每种计算机都提供了一套指令,以及描述其指令的二进制编码形式。每条指令都对应于计算机能够执行的一个基本动作,而所谓的计算机程序就是一组这种指令形成的序列。 这种二进制的描述形式被称为机器语言,计算机能够直接“理解”和执行它。用机器语言编写的程序称为机器语言程序。计算机诞生之初,人们只能直接使用
11、机器语言来编写程序。但是,从使用的角度,二进制形式的机器语言很不方便,用它写程序难度很大,工作效率极低,写出的程序也晦涩难懂。见教材示例。 这段二进制代码描述了表达式a*b+c的求值过程。一个复杂的程序里可能会有成千上万条类似的指令,执行流程错综复杂,采用二进制编码来完成这样的复杂程序几乎是人力所不能及的事情。,13/40,前面的算术表达式用机器语言完成如下: 00000001000000001000 00000001000100001010 00000101000000000001 00000001000100001100 00000100000000000001 0000001000000
12、0001110,14/40,汇编语言,汇编语言采用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址,从而降低了程序的编写难度,增强了程序的可读性。 使用汇编语言编写的程序,机器不能直接识别,还要由专门软件(汇编语言编译器)转换成机器指令才能送给计算机去执行。 汇编语言的每条指令都对应于一条机器指令,但采用了助记符表示,这些符号非常接近于自然语言的要素,使得每条指令的意义更容易理解和掌握,程序设计也就更容易。 但是,汇编语言缺少高层结构的描述,难于从汇编语言代码上理解程序设计意图,可维护性差,难于维护,面对复杂问题时编程难度大。,15/40,前面的算术表达式用汇编语言完成如下:
13、 load 0 a load 1 b mult 0 1 load 1 c add 0 1 save 0 d,16/40,高级语言,高级语言与计算机的硬件结构及指令系统无关,它更接近于自然语言和数学表达式,通用性较好。高级语言的一个命令可以代替几条、几十条甚至几百条汇编语言的指令,具有更强的表达能力,易学易用。 高级语言的使用,大大提高了程序编写的效率和程序的可读性,使得有更多人能够并乐于加入到程序设计活动中。高级程序设计语言的诞生和发展,对于计算机的普及和发展起了极其重要的作用。 FORTRAN、BASIC 、PASCAL 、C语言、C+、DELPHI、VISUAL BASIC、JAVA和PY
14、THON 与汇编语言一样,计算机无法直接识别和执行高级语言,必须翻译成等价的机器语言程序才能执行。人们在设计好一个高级语言后,还需要开发与之相配套的实现软件,以便将高级语言编写的代码翻译或解释成计算机能够直接识别的二进制代码。,17/40,高级语言的实现方式,级语言的基本实现方式有两种,分别成为编译实现和解释实现。 1、编译实现的高级语言。采用编译方式实现的高级语言都有一个对应的翻译软件,用于将该种高级语言编写的计算机程序翻译成基于一定的计算机硬件平台的等价机器语言程序。这种实现方式的翻译过程与执行过程是分开的,首先统一将高级语言编写的程序翻译成机器语言程序(二进制代码),再通过执行机器语言程
15、序来实现功能。当需要再次执行该程序时,直接执行前面已经翻译好的机器语言程序即可,无需再次翻译。 2、解释实现的高级语言。采用解释方式实现的高级语言需要有一个对应的解释软件,用于读入这种高级语言编写的程序,并能一步步按照程序的要求一边翻译一边执行,完成程序所描述的工作。有了这种解释软件,我们只要把写好的程序送给运行着这个软件的计算机,就可以完成相应的程序功能。解释方式实现的过程中,不产生独立的机器语言程序,解释和执行是一体完成的。当需要再次执行该程序时,需要将高级语言编写的程序再次交给解释软件解释执行一次。 当前的实际计算机系统中,两种实现方式都较为常见。如C语言就是采用编译实现的高级语言,PE
16、RL语言和PYTHON语言则属于解释实现的高级语言,也有些语言结合了两种实现方式的优点,采用介于两者之间的实现方式,如JAVA语言和微软.NET平台提供的C#语言等。,18/40,1.2.2 计算机软件,未安装任何软件系统的计算机我们称之为裸机,只有安装了软件的计算机才能够被普通人所使用。 计算机软件,也称软件,是指计算机系统中的程序及其文档的集合。程序是对计算任务的处理对象和处理规则的描述,文档是为了便于了解程序所需的阐明性资料。软件是用户与硬件之间的接口,用户主要是通过软件与计算机进行交流。 软件系统可分为系统软件和应用软件两大类。系统软件通常又可细分为:操作系统、语言处理系统、服务程序和
17、数据库管理系统四大类。 操作系统(Operating System, 简写为OS) 语言处理系统。 服务程序。 数据库管理系统(Data Base Management System, DBMS)。,19/40,应用软件,通用软件。这类软件通常是为解决某一类问题而设计的,而这类问题是很多人都要遇到和解决的。例如:文字处理、表格处理、电子演示等,典型的有微软公司开发的Office系列,国内金山软件开发的WPS系列等。 专用软件。在市场上可以买到通用软件,但有些具有特殊功能和需求的软件是无法买到的。比如某个用户希望有一个程序能自动控制车床,同时也能将各种事务性工作集成起来统一管理。因为它对于一般用
18、户是太特殊了,所以只能组织人力开发。如针对各个学校自身情况专门定制的教务管理系统就属于专用软件。,20/40,1.3 C语言发展简史,C语言之所以命名为C,是因为 C语言源自Ken Thompson发明的B语言(BCPL语言),是对B语言的一种改进,而B语言之前还有A语言(ALGOL 60语言)。 ALGOL,为算法语言(ALGOrithmic Language)的缩写,是计算机发展史上首批产生的高级程序设计语言家族。1960年艾伦.佩利(Alan J.Perlis)在巴黎举行的全世界一流软件专家参加的讨论会上,发表了“算法语言Algol 60报告”,确定了程序设计语言Algol 60。 19
19、63年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言。 1967年,剑桥大学的Martin Richards对CPL语言进行了简化,于是产生了BCPL(Basic Combined Programming Language)语言。 1970年,美国贝尔实验室的 Ken Thompson,以BCPL语言为基础,设计出很简单且很接近硬件的B语言(取BCPL的首字母)。并且使用B语言编写了第一个UNIX操作系统。 1972年,美国贝尔实验室的 D.M.Ritchie 在B语言的基础上设计出了一种新的语言,他取了BCPL的第二个字母作为
20、这种语言的名字,这就是C语言。,21/40,C语言版本,C语言的一个优点就是让我们可以使用类似于日常英语的语言来编写程序,即使不懂得如何编写程序,也可能能够阅读并理解一些简单的程序。 下面给出的本章前面使用的计算两个数和的加法运算示例程序:,22/40,程序解释,该程序本身作为一个文件存储在计算机的辅助辅助器上(硬盘),只要用户不主动删除将一直保存;文件名为Add.c,其中“.c”说明该文件为C语言程序。 Add.c程序从整体上可划分为三个部分:程序注释、预处理指令列表和主程序。尽管其结构非常简单,但它是C语言程序的典型框架,一般的C语言程序都将包含这三部分内容。 注释。本程序的第一部分是一段
21、英文注释,即包含在“/*”与“*/”之间的文字,在程序中起说明作用。 预处理指令列表。预处理指令以井号(#)作为其第一个非空字符串,如示例中“#include”一行即为预处理指令,预处理指令根据程序的需要可以有多行,通常并列写在程序的开头部分,用于在编译前对C程序进行修改。 主程序。Add.c文件的最后一部分是程序的主体,即“int main()”一行开始,一直到程序的结束部分(“”)。,23/40,1.4.2 C程序的加工和执行,C语言是编译实现的高级程序设计语言,用C语言编写的程序通常称为源程序,人容易使用、编写和阅读这种程序,但计算机并不能直接执行它,计算机只能识别和执行特定的二进制形式
22、的机器语言程序。 为了使计算机能够完成C语言源程序描述的工作,需要借助C语言的编译器来将C语言编写的源程序转换为二进制形式的机器语言程序,这种转换过程称为“C程序的加工”。 每个C语言的集成开发环境都包含了加工C语言源程序的功能,包括“编译”、“连接”等功能。 高级语言源程序的加工过程通常分两步:第一步是由编译器对源程序文件进行分析和处理,生成相应二进制形式的目标文件,保存到相应文件夹里。目标文件虽然已经是二进制形式,但还不能执行,因为其缺少C程序运行所需要的一些公共部分和程序中引用的函数库模块。为了使程序能够运行,还需要进行第二步加工 连接。连接工作将编译得到的目标模块与其他必要的部分(函数
23、库模块等)拼装起来,生成可执行程序。,24/40,25/40,1.5 C语言程序设计方法,程序设计语言是使用计算机解决问题的工具,要想更好地掌握C语言,我们首先要理解使用C语言解决问题时的思考方式。C语言是一种“面向过程”的程序设计语言,是一种以过程为中心的编程思想,即采用自顶向下的思考方式,首先分析出解决问题所需要的步骤,然后通过函数把这些步骤分别实现,使用的时候依次调用设计好的函数就可以了。 例如以学生起床上学为例,使用面向对象的思考方式就可将其归纳为如下几个步骤: (1)起床 (2)穿衣 (3)洗脸刷牙 (4)去学校 这4步就是完成起床上学这个问题所对应的解决方案,步骤间的先后顺序很重要
24、,明确了解决问题的步骤后,只须逐个实现这些步骤就可以了。,26/40,C语言开发程序的过程,当我们面对一个相对复杂的问题时,通常并不能直接给出问题的详细解决方案,而是需要通过对用户需求的分析,寻找解决问题的方法,并逐步将其步骤化。 所谓解决问题的方法就是针对现有的初始状态,通过一系列的处理,最终实现用户的需求。对于C语言程序而言,初始状态通常表现为现有的各种数据,实现用户的需求就是通过对这些数据进行加工,产生用户预期的输出结果。 综上,用C语言开发程序的过程大体可以分为四个阶段: 分析问题。准确描述出需要解决的问题,即需要针对哪些数据进行处理,产生何种预期的结果 设计解决问题的方法。通过自顶向
25、下的分析方法,针对初始输入状态进行分析,逐步求精,明确实现预期结果所需的核心过程,最终实现解决问题的方法步骤化。 编程实现。使用C语言提供的程序设计方法编程实现步骤化的解决方案。 程序的测试与维护。测试程序在多种输入条件下的运行情况,确定能实现用户的预期功能,并在交付用户使用的一定期限内(由双方共同制定)修正以前未曾发现的错误,测试后提交给用户新的版本,直到维护期结束或软件停止使用。,27/40,1.5.1 分析问题,明确功能需求,准确描述出需要解决的问题,即需要针对哪些数据进行处理,产生何种预期的结果 分析问题阶段通常需要从用户的需求描述中准确找出问题的输入(即我们需要处理的初始数据)、问题
26、的输出(即预期结果)、以及可能对解决方案产生影响的约束条件 用户的需求往往是抽象的,需要对其具体化,想象出解决方案的外在表现(程序运行后的交互形式),甚至设计一个黑盒原型,来辅助分析。具体实现细节这一阶段暂时无需考虑。 问题:“设计一个简单的计算器,实现加减乘除等简单的二元操作” 。 问题的输入:操作数1,操作数2,操作符 问题的输出:操作数1和操作数2运算后的结果,28/40,1.5.2 设计解决问题的方案,解决问题的核心步骤的列表被我们称为算法。编写算法通常是解决问题过程中最难的部分,要求具备较好的逻辑思维能力。通常在设计算法的开始阶段,先不要试图去解决问题中的每一个细节,而是要训练自己使
27、用自顶向下的设计方法思考问题。 自顶向下的分析方法要求首先列出需要解决问题的最核心的步骤(每个核心步骤可以称为一个子问题),然后通过解决每一个子问题来构造整个问题的解决方案。在规划出子问题后,就可以各个击破,通过逐步细化求精的方式去构造每个子问题的解决方案(即完成每个子问题所需要的详细步骤),从而达到解决最终问题的目的 。,29/40,设计解决方案,图1-2给出了自顶向下分析问题的一个示意图,在初始分析时,首先将整个大问题分解为n个子问题,而暂时不去考虑具体每个子问题如何实现。当明确步骤1-n为问题的解后(可通过模拟算法的计算机执行来进行确认),再具体思考每个子问题如何解决,思考方式仍然为自顶
28、向下的方法,设计出每个子问题的实现步骤1-m。整个分析过程自顶向下,逐层分解,直到能够用于指导程序设计为止。 对于大多数可以用计算机实现的问题,其解决方案中通常都至少包含如下这些子问题: 获取数据 执行计算 显示结果,30/40,设计解决方案,31/40,设计解决方案,起床 刷牙 洗脸 吃饭 早自习,拿饭碗 去食堂 排队买饭 吃饭 洗碗 离开食堂,排队 选饭 选菜 付款,“程序”分解实例(早起活动):,32/40,设计解决方案,综上,计算器问题的算法可采用如下设计: 1、获取需要计算的两个操作数和运算标识符 2、对运算标识符进行判断,并使用两个操作数进行相应的二元运算 3、将二元运算的结果保存
29、到计算机中 4、显示计算结果给用户,33/40,1.5.3 C语言编程实现,算法设计好了,接下来要做的就是算法的实现部分了,即使用具体的编程语言将算法细化为一系列的语句,并组合到一起。具体编写程序过程中,可以先分别编写每个子问题的实现代码,并设计为子函数,然后在主执行过程(main函数)中逐个调用每个子函数即可。 代码编写好了,还要通过调试来确保程序能够通过编译器的检查,从而生成可执行文件。编译器能够发现的错误主要有两类: 1. 局部的语法错误。 2. 程序上下文关系上的错误。 编译器发现错误后总会给出出错位置和错误描述信息,这些信息对程序调试是非常重要的。有时,编译器还会给出一些称为“警告(warning)”的信息,这种信息的出现表示编译器发现了可能引起程序错误的信息,对于这类信息,我们也不能大意,警告通常暗示了隐藏较深的实际错误,必须认真的查明其原因 连接器也可能发现错误,34/40,1.5.4程序的测试和维护,前面提到的调试能够发现一些语法类的错误,而对于编程过程中出现的逻辑错误编译器就无法准确识别了。一个程序能够运行,接收输入并产生输出,并不意味着程序是正确的,还需要通过进一步的测试来确认其是否实现了预先要求的功能。这里的测试并不是指真正意义上的软件测试,而是程序员为了确认程序功能而做的一些输入和输出测试,正
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 钟表零件加工工达标模拟考核试卷含答案
- 压雪车驾驶员岗中水平测试考核试卷含答案
- 化工萃取工技术综合知识考核试卷含答案
- 隧道巡视养护工创新思维考核试卷含答案
- 等静压成型工岗位常识考核试卷含答案
- 运输平台建设方案范文
- 风电叶片叶片运输包装方案分析
- 咖啡行业的法律分析报告
- 人工智能+行动智能供应链优化下的生产力变革研究报告
- 金融行业发展研究报告
- 殡葬协会财务制度
- (2026年春期)部编人教版五年级下册语文 第六单元 核心素养教案
- 护理礼仪及行为规范
- 客户服务热线接听规范手册
- 起重指挥Q1培训课件
- 人才池管理办法
- DB32/T 3576-2019农村产权交易场所建设与管理
- 2025年少先队辅导员技能大赛考试题库(含答案)
- 门诊危重病人处置流程
- 冷却塔填料更换及安全措施
- T-CACM 1411-2022 糖尿病基层中医防治管理指南
评论
0/150
提交评论