资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2021/2/28,北京科技大学 计算机系,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2021/2/28,北京科技大学 计算机系,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2021/2/28,北京科技大学 计算机系,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2021/2/28,北京科技大学 计算机系,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2021/2/28,北京科技大学 计算机系,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2021/2/28,北京科技大学 计算机系,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2021/2/28,北京科技大学 计算机系,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2021/2/28,北京科技大学 计算机系,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2021/2/28,北京科技大学 计算机系,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2021/2/28,北京科技大学 计算机系,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2021/2/28,北京科技大学 计算机系,*,第1章 程序设计与,C,语言概述,C,语言程序设计,2021/2/28,1,1.1,程序与程序设计,1.2 程序设计语言,1.3,C,语言概述,1.4 程序开发环境与程序调试,本章主要内容,2021/2/28,2,1.1,程序与程序设计,1.1.1,程序,1.1.2,算法,1.1.3,程序设计方法和风格,返回,2021/2/28,3,1.1.1 程序,程序是指存储在计算机内部存储器中可以连续执行的一条条指令的集合。,著名计算机科学家沃思(,Nikiklaus Wirth),提出一个公式:程序=数据结构+算法。即一个程序应该包括两方面的内容:数据结构和算法。,2021/2/28,4,1.1.1 程序,数据结构(,data structure),是对数据的描述,在程序中要指定数据的类型和数据的组织形式。,算法(,algorithm),是对操作的描述,即操作步骤。是用来解决做什么和怎么做的问题。,计算机算法可分为两大类:数值运算算法和非数值运算算法。,2021/2/28,5,1.1.1 程序,设计一个程序时,除了考虑数据结构和算法这两个因素之外,还应当采用程序设计方法进行程序设计,并且考虑用一种语言来表示。因此,一个程序应该表示为:,程序,=,数据结构,+,算法,+,程序设计方法,+,语言工具和环境,2021/2/28,6,1.1.2 算法,1,算法概述,算法是指为解决某个问题而采用的方法和步骤。这些步骤是按一定的顺序进行的,每个步骤不能缺少,它们之间的次序也不能颠倒。算法体现了人们解决某一类问题时的思维方法和过程,描述了人类解决某类问题所依据的规则和操作。,2021/2/28,7,1.1.2 算法,计算机算法可分为两大类:数值运算算法和非数值运算算法。,数值运算算法主要用于求解数值问题,如求函数值、求方程的根等。一般数值运算有现成的模型,可以运用数值分析方法,因此对数值运算的算法的研究比较深入,各种数值运算都有比较成熟的算法可供选用。非数值运算算法常用于事务管理领域,如人事管理、行车调度管理等。由于非数值运算要求各异,很难规范化,因此一般只对一些典型的非数值运算算法作比较深入的研究。,2021/2/28,8,1.1.2 算法,2,算法的特性,有穷性:,一个算法应包含有限的操作步骤,且每一步都可在有穷的时间内完成。,确定性:,算法中每一个步骤必须有确切的含义,并且在任何条件下,算法只有惟一的一条执行路径,即对于相同的输入只能得出相同的输出。,可行性:,一个算法是能行的,即算法中描述的操作都是可以通过已经实现的基本运算执行有限次来实现的。,2021/2/28,9,1.1.2 算法,有零个或多个输入:,这些输入取自于某个特定的对象的集合。,有一个或多个输出:,这些输出是同输入有着某些特定关系的量,在一个完整的算法中至少会有一个输出。,2021/2/28,10,1.1.2 算法,3,算法的描述方法,1966,年,,Bohra,和,jacopini,证明了任何单入口单出口没有死循环的程序都可以由三种基本的控制结构构造出来。这三种基本结构就是顺序结构、选择结构和循环结构,它们作为表示一个良好算法的基本单元。,2021/2/28,11,1.1.2 算法,算法的表示方法很多,常用的有自然语言、传统流程图、,N-S,流程图、伪代码、计算机语言等。,2021/2/28,12,1.1.2 算法,(,1,)用自然语言表示算法,自然语言就是人们日常使用的语言,可以是汉语、英语或其他语言。,下面通过实例来说明用自然语言来描述三种基本结构的算法。,2021/2/28,13,1.1.2 算法,【例,1-,1,】,已知,a,的值是,7,,,b,的值是,10,,将,a,、,b,的值互换,互换后,a,的值为,10,、,b,的值为,7,,然后输出交换后,a,、,b,的值。,步骤,1,:把,7,赋给变量,a,步骤,2,:把,10,赋给变量,b,步骤,3,:将变量,a,的值赋给变量,c,步骤,4,:将变量,b,的值赋给变量,a,步骤,5,:将变量,c,的值赋给变量,b,步骤,6,:输出变量,a,和变量,b,的值,步骤,7,:算法结束。,2021/2/28,14,1.1.2 算法,【例,1-,2,】,输出,a,、,b,两个不同数中的较大数。,步骤,1,:输入,a,和,b,的值,步骤,2,:判断,a,大于,b,否,如果,a,大于,b,,,执行第,3,步,否则执行第,4,步,步骤,3,:输出,a,的值,步骤,4,:输出,b,的值,步骤,5,:算法结束。,2021/2/28,15,1.1.2 算法,【例,1-,3,】,求,1+2+3+100,。,步骤,1,:使,p=1,步骤,2,:使,q=2,步骤,3,:使,p+q,,,和仍放在,p,中,可表示为,p+q,p,步骤,4,:使,q,的值加,1,,即,q+1,q,。,步骤,5,:如果,q,不大于,100,,返回重新执行步骤,3,、步骤,4,和步骤,5,。否则,算法结束。最后得到,p,的值就是,1+2+3+100,的和。,2021/2/28,16,1.1.2 算法,(,2,)用流程图表示算法,流程图是用一些图框表示各种操作。美国国家标准化协会,ANSI,规定了一些常用的流程图符号,已为世界各国程序工作者普遍采用。流程图符号如图1-1所示。,图1-1,2021/2/28,17,1.1.2 算法,【例1-,4】,已知,a,的值是,7,,,b,的值是,10,,将,a,、,b,的值互换,互换后,a,的值为,10,、,b,的值为,7,,然后输出交换后,a,、,b,的值。用流程图表示算法。流程图如图1-2所示。,图1-2,2021/2/28,18,1.1.2 算法,【例,1-,5,】,输出,a,、,b,两个不同数中的大数。用流程图表示算法。流程图如图,1-3,所示。,图,1-3,2021/2/28,19,1.1.2 算法,【例1-,6】,求,1+2+3+,+100,。算法用流程图表示。流程图如图,1-4,所示。,图,1-4,2021/2/28,20,1.1.2 算法,用流程图表示算法直观形象,易于理解,不会产生,“,歧义性,”,。,三种基本结构的共同特点:,只有一个入口,只有一个出口,结构内的每一部分都有机会被执行到,结构内不存在,“,死循环,”,2021/2/28,21,1.1.2 算法,(,3,)用,N-S,流程图表示算法,N-S,流程图是美国学者,I.Nassi,和,B.Shneiderman,于,1973,年提出的一种新的流程图。,N-S,流程图的主要特点是取消了带箭头的流程线,全部算法写在一个矩形框内,在该框内还可以包含其他的从属于它的框。,N-S,流程图如同一个多层的盒子,又称盒图。,2021/2/28,22,1.1.2 算法,图,1-5,表示顺序结构 图,1-6,表示选择结构,图,1-5,图,1-6,2021/2/28,23,1.1.2 算法,图,1-7表示当型循环结构,图,1-8,表示直到型循环结构,图,1-7,图,1-8,2021/2/28,24,1.1.2 算法,已知,a,的值是,7,,,b,的值是,10,,将,a,、,b,的值互换,,互换后,a,的值为,10,、,b,的,值为,7,,然后输出交换后,a,、,b,的值。用,N-S,流程图,表示算法。如图,1-9,所示。,图,1-9,2021/2/28,25,1.1.2 算法,输出,a,、,b,两个不同数中,的大数。用,N-S,流程图,表示算法。如图,1-10,所,示。,图,1-10,2021/2/28,26,1.1.2 算法,求1+2+3+,+100。用,N-S,流程图表示算法。,如图,1-11,所示。,图,1-11,2021/2/28,27,1.1.2 算法,(4),用伪代码表示算法,伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法的。,用伪代码表示算法时,可以用英文伪代码,也可以用汉字伪代码,还可以中英文混用。,用伪代码写算法并无固定的、严格的语法规则,只要用清晰易读的形式把意思表达清楚即可。,2021/2/28,28,1.1.2 算法,【例,1-,7,】,求,1+2+3+100,。用伪代码表示算法。,BEGIN,(,算法开始),1,p,2,q,while qb)printf(%dn,a);,else printf(%dn,b);,2021/2/28,32,1.1.2 算法,【例,1-1,0,】,求,1+2+3+100,)用,C,语言表示算法。,#include,void main(),int p,q;,p=1;q=2;,while(q=100),p=p+q;q=q+1;,printf(1+2+3+,+100=%dn,p);,2021/2/28,33,1.1.3 程序设计方法和风格,程序设计(,Programming,),是指对提出的问题进行分析、确定数据模型、设计算法、编写源代码、调试并运行程序的方法和过程。,按照结构性质,程序设计分为非结构化程序设计和结构化程序设计。,非结构化的程序设计方法设计出来的程序无章可循,程序常常带有强烈的个人色彩。这样的程序可读性差,编写、调试和维护工作都十分困难。,2021/2/28,34,1.1.3 程序设计方法和风格,结构化程序设计强调从程序的结构上和风格上来研究程序设计方法,提倡利用三种基本结构进行规范化程序设计,使程序具有良好的结构框架。用结构化程序设计方法得到的程序不仅在结构上良好、清晰易读易写,而且易维护、易排错、易验证正确性。,在前面介绍的算法中,顺序、选择和循环就是结构化程序设计方法强调使用的三种基本结构。,2021/2/28,35,1.1.3 程序设计方法和风格,程序设计风格是指编写程序时表现出的特点、习惯和逻辑思路。良好的程序设计风格是程序质量的重要保证,因为良好的程序设计风格使程序结构清晰合理,便于阅读和维护,提高软件的开发效率。,2021/2/28,36,1.2 程序设计语言,程序设计语言(,Programming Language,),就是计算机所能识别的代码,计算机代码通常要能够向计算机描述清楚做什么,用什么做这两个问题,因此计算机代码的一般形式是:,操作码,目的操作数,源操作数,2021/2/28,37,1.2 程序设计语言,程序设计语言按照语言级别可以分为低级程序设计语言和高级程序设计语言。,低级程序设计语言提供的语句是计算机所能进行的基本操作,如:数据传送指令,算术运算指令,逻辑运算指令等。,高级程序设计语言是接近于自然语言或数学语言的计算机语言。高级语言不再面向机器,而是面向解题的过程,因而又称为算法语言或称为过程语言。,2021/2/28,38,1.2 程序设计语言,对于计算机本身来说,它并不能直接识别由高级语言编写的程序,它只能接收和处理由,0,和,1,的代码构成的二进制指令或数据,这种形式的指令是面向机器的,因此也称为,“,机器语言,”,。计算机所能直接接受的是二进制信息,利用高级语言编写的程序,应转变为机器代码,才能在计算机上运行。,2021/2/28,39,1.2 程序设计语言,利用高级语言编写程序的过程是:借助每种语言提供的各自的编辑软件生成各自的高级语言源程序,利用各自的翻译程序(编译或解释程序)将高级语言源程序自动翻译成目标程序(,.obj,文件),再将目标程序与高级语言提供的各种库函数进行连接,生成一个可执行文件(,.exe,文件)。,2021/2/28,40,1.2 程序设计语言,利用高级语言编写程序的过程可以用图,1-12,表示。,图,1-12,2021/2/28,41,1.3,C,语言概述,1.3.1,C,语言的发展过程,1.3.2,C,语言的特点,返回,2021/2/28,42,1.3.1,C,语言的发展过程,C,语言是在,B,语言的基础上发展起来的,它的根源可以追溯到,ALGOL,语言(算法语言)。1972年,贝尔实验室的,Dennis Ritchie,对,B,语言进行了扩充和完善,并取,BCPL,的第二个字母,C,作为新语言的名称,这就是,C,语言。1983年,美国国家标准研究所(,ANSI),为,C,语言制定了一套,ANSI,标准,成为现行的,C,语言标准,称之为,ANSI C。,2021/2/28,43,1.3.1,C,语言的发展过程,为了对,C,语言先有一个直观的了解,来看几个简单的,C,程序例子。,【例,1-1,1,】,编写一个,C,语言程序,在屏幕上显示一行字符“,You are welcome!”.,main(),printf(You are welcome!n);,运行结果:,You are welcome!,2021/2/28,44,1.3.1,C,语言的发展过程,【例,1-1,2,】,编程实现从键盘输入两个整数,求和并将其结,果显示在屏幕上。,#,include,main(),int a,b,c;,scanf(%d,%d,c=a+b;,printf(The sum is%d,c);,程序运行情况如下:,5,10,The sum is 15,2021/2/28,45,1.3.1,C,语言的发展过程,源程序的结构特点:,(,1,),C,程序是由函数构成的。一个,C,源程序至少有且只能有一个,main,函数(即主函数),可以包含若干个其他函数。因此,函数是,C,程序的基本单位。,(,2,)函数由函数首部和函数体两部分组成。函数的第一行是函数首部,包含函数类型、函数名、函数参数等。函数体是由一对花括号,“,”,括起来的语句集合,函数体中一般包含变量声明和执行语句。,2021/2/28,46,1.3.1,C,语言的发展过程,(,3,),C,程序的函数可以是用户自定义的函数,也可以是系统提供的标准函数(如,printf,函数、,math,函数等)。,(,4,)在,C,程序中,,main,函数可以放在程序最前,也可以放在程序最后。不论,main,函数在整个程序中的位置如何,,C,程序总是从,main,函数开始执行。,(,5,),C,程序中的每一个变量声明和语句都必须以分号结束,分号是,C,语句的必要组成部分。,(,6,),C,语言本身没有输入输出语句,输入和输出的操作是由库函数,scanf,和,printf,等函数来完成的。,2021/2/28,47,1.3.1,C,语言的发展过程,(,7,),C,程序书写格式自由,一行内可以写几个语句,一个语句也可以分写在多行上,,C,程序没有行号。,(,8,),C,语言用,“,/*,*/,”,对程序进行注释,注释可以出现在程序中任意合适的位置,它对程序的运行不起作用。一个好的,C,程序应有必要的注释,以便阅读。,2021/2/28,48,1.3.1,C,语言的发展过程,书写,C,程序时应遵循以下规则:,(,1,)一个说明或一个语句最好独占一行。,(,2,)用,“,”,括起来的部分,通常表示程序的某一种层次结构,,“,”,一般与该结构语句的第一个字母对齐,并独占一行。,(,3,)低一层次的语句或说明可比高一层次的语句或说明缩进若干空格后书写,以提高程序的可读性。,(,4,)为源程序添加注释部分,以增加程序的可读性。,2021/2/28,49,1.3.2,C,语言的特点,C,语言主要具有下列特点:,(,1,),C,语言简洁、紧凑,使用方便。,C,语言一共有,32,个关键字(请见附录,),,9,种控制语句,程序书写自由。,(,2,)运算功能丰富。,C,语言不仅提供了,34,种运算符(请见附录,),还提供了强大的库函数(见附录,),从而使,C,语言的运算类型极为丰富。,2021/2/28,50,1.3.2,C,语言的特点,(,3,)数据结构丰富。,C,语言具有现代化语言的各种数据结构,,C,语言的数据类型有整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等,能用来实现各种复杂的数据结构运算。,(,4,),C,语言具有结构化的特点。以函数为单位,通过结构化的控制语句(如,if,else,语句、,switch,语句、,for,语句、,while,语句等),实现了程序的模块化。,(,5,)语法规则相对宽松,程序设计自由度大。,2021/2/28,51,1.3.2,C,语言的特点,(,6,)生成目标代码质量高,程序执行效率高。,(,7,),C,语言允许直接访问物理地址,能进行位操作等,具有汇编语言的大部分功能。,(,8,)可移植性好。基本上不做修改就能用于各种型号的计算机和各种操作系统。,2021/2/28,52,1.4 C,程序开发环境与程序调试,对,C,程序进行编译的系统比较多,大多数,C,编译系统都是集成环境,即把编辑、编译、连接和运行等操作全部集成在一个界面中进行。常用的有,Turbo C 2.0,、,Turbo C+3.0,、,Visual C+,等。由于,Turbo C 2.0,是用于,DOS,环境的,在进入,Turbo C 2.0,环境后,不能用鼠标操作,主要用键盘操作,所以,目前用的比较少。,2021/2/28,53,1.4.1 Turbo C+3.0,集成开发环境,Turbo C+3.0,是美国,Borland,公司为,C+,程序的编辑、编译、连接和运行而研制的集成开发环境,由于,C+,是从,C,语言发展而来的,,C+,对,C,程序是兼容的,因此可以用,C+,的编译系统对,C,程序进行编译。,Turbo C+3.0,是,DOS,环境下的集成环境,但是可以把启动,Turbo C+3.0,集成环境的,DOS,执行文件,“,tc.exe,”,生成快捷方式,并以图标的形式放在,Windows,桌面上,只要双击该图标,就能进入,Turbo C+3.0,环境,并能用鼠标操作菜单。,2021/2/28,54,1.4.1 Turbo C+3.0,集成开发环境,1,打开,Turbo C+3.0,集成环境,在,Windows,环境下,安装,Turbo C+3.0,时会在桌面上生成一个快捷方式图标,双击该图标即可进入,Turbo C+3.0,集成开发环境。,Turbo C+3.0,集成环境如下图所示。,请进入,Turbo C+3.0,集成环境对其进行介绍,2021/2/28,55,1.4.1 Turbo C+3.0,集成开发环境,2,编辑源文件,单击,“,File,”,“,New,”,菜单命令,新建一个,C,源程序,在集成环境的上部出现了编辑窗口,供用户输入,C,源程序。如果想对已经保存过的,C,源程序文件进行修改,单击,“,File,”,菜单项,从其下拉菜单中选择,“,Open,”,菜单命令,在,Name,下面输入文件所在的文件路径和文件名,然后单击,【Open】,按钮,系统将把指定的,C,源程序调入内存并显示在编辑窗口中。可以对打开的源文件进行插入、删除或修改,直到满意为止。,2021/2/28,56,1.4.1 Turbo C+3.0,集成开发环境,3,保存源文件,对,C,程序完成编辑之后,应该保存它。如果需要保存的,C,源文件是新创建的,选择,“,File,”,下拉菜单中的,“,Save,”,菜单命令,弹出,“,Save,”,对话框,在,“,Save,”,下方的输入框中,输入文件的保存路径和文件名,然后单击,【OK】,按钮。,2021/2/28,57,1.4.1 Turbo C+3.0,集成开发环境,需要说明的是,保存源文件时文件没有加后缀,系统会认为其是,C+,程序,将自动加上后缀,“,.cpp,”,。所以,保存,C,源程序时需要加上后缀,“,.c,”,,在编译时系统能识别并编译以,“,.c,”,为后缀的,C,程序。,2021/2/28,58,1.4.1 Turbo C+3.0,集成开发环境,4,编译源程序,编写好一个,C,源程序后,系统需要对程序进行编译,生成,“,.obj,”,目标文件。选择,“,Compile,”,“,Compile,”,菜单命名,或者按下,组合键,会在屏幕上出现一个编译消息框,显示出编译的信息。如果源程序有语法错误,系统将在编译消息框中显示出错信息,用户根据信息对程序进行修改,然后再进行编译,直到不再出现错误或警告信息为止。按下任意键消息框消失。,2021/2/28,59,1.4.1 Turbo C+3.0,集成开发环境,5,连接生成可执行文件,C,源程序经过编译后生成目标代码文件,其后缀为,“,.obj,”,,需要让其和系统提供的函数库连接成为一个整体,生成可执行文件,其后缀名为,“,.exe,”,。方法是选择,“,Compile,”,“,Line,”,菜单命令,或按下,键。直接按下,键,系统会把编译和连接合为一个步骤来进行。,2021/2/28,60,1.4.1 Turbo C+3.0,集成开发环境,6,执行,C,源程序文件,选择,“,Run,”,“,Run,”,菜单命名,或按下,组合键,系统会执行已经编译和连接好的可执行文件。若程序需要输入数据,屏幕会切换到运行窗口。输入数据后,将把执行结果输出在运行窗口中。为了查看程序的运行结果,按下,组合键,或选择,“,Window,”,“,User screen,”,菜单命令,均可切换到程序运行窗口。,选择,“,File,”,“,Quit,”,菜单命令,即可退出,Turbo C+3.0,集成环境。,2021/2/28,61,1.4.2 Microsoft Visual C+6.0,集成环境,1,启动,Microsoft Visual C+6.0,启动,Microsoft Visual C+6.0,可以通过,“,开始,”,菜单,也可以通过桌面快捷方式等方式。启动,Microsoft Visual C+6.0,后的开发环境如图,1-19,所示。,2021/2/28,62,1.4.2 Microsoft Visual C+6.0,集成环境,2,创建一个工程,3,修改新工程的配置,4,确认创建新工程,5,创建一个,C,源程序文件到空的工程中,6,编写,C,源代码,7,编译,C,程序,8,运行程序,2021/2/28,63,1.4.2 Microsoft Visual C+6.0,集成环境,9,调试程序,(,1,)设置断点:将鼠标停留在要被暂停的那一行,单击工具栏中的按钮,即可在指定的位置添加一个红色圆形的断点。再次单击工具栏中的按钮,将删除设置的断点。,(,2,)开始调试:选择,“,BuildStart Debuggo,”,菜单命令,或单击按钮,或按下,F5,键,均可开始调试程序。,VC,环境将进入调试模式,并且目标程序会在断点处被暂停。,2021/2/28,64,1.4.2 Microsoft Visual C+6.0,集成环境,(,3,)单步运行,选择,“,DebugStep Over,”,菜单命令或者单击工具栏中的按钮,或者按下,F10,键,均可进行程序的单步运行。,(,4,)动态察看变量的值,对于含有变量的,C,程序,在单步调试程序的过程中,可以在,“,Watch,”,窗口中动态地察看变量的值。如果本地变量比较多,自动显示的窗口比较混乱,可以在,“,Watch,”,列表中添加自己想要监控的变量名。添加结束后,该变量的值会被显示出来,并且随着单步调试的进行,会看到变量值的变化情况。,返回,2021/2/28,65,1.5,实训,一、实训目的,熟悉,TC,的运行环境。,理解算法的特性和描述方法。,掌握简单,C,源程序的运行过程和调试方法。,二、实训内容,请见教材具体要求。,返回,2021/2/28,66,
展开阅读全文