C语言程序设计(第四版)谭浩强ppt课件.ppt

上传人:小飞机 文档编号:1375840 上传时间:2022-11-16 格式:PPT 页数:834 大小:7.55MB
返回 下载 相关 举报
C语言程序设计(第四版)谭浩强ppt课件.ppt_第1页
第1页 / 共834页
C语言程序设计(第四版)谭浩强ppt课件.ppt_第2页
第2页 / 共834页
C语言程序设计(第四版)谭浩强ppt课件.ppt_第3页
第3页 / 共834页
C语言程序设计(第四版)谭浩强ppt课件.ppt_第4页
第4页 / 共834页
C语言程序设计(第四版)谭浩强ppt课件.ppt_第5页
第5页 / 共834页
点击查看更多>>
资源描述

《C语言程序设计(第四版)谭浩强ppt课件.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计(第四版)谭浩强ppt课件.ppt(834页珍藏版)》请在三一办公上搜索。

1、,课堂要求为什么学习程序设计 为什么选择C语言怎样学习C程序设计,课堂要求,在教室、机房都做到不迟到、不早退(每节课抽查点名)上课不说话作业认真完成,为什么要学习程序设计,计算机的本质是“程序的机器”,只有懂得程序设计,才能进一步懂得计算机,真正了解计算机是怎样工作的,掌握用计算机处理问题的方法;培养分析问题和解决问题的能力。即使将来不是计算机专业人员,由于学过程序设计理解软件生产的特点和生产过程,就能与程序开发人员个更好的沟通与合作,开展本领域中的计算机应用,开发与本领域有关的应用程序。,为什么选择C语言,进行程序设计,必须用一种计算机语言作为工具,否则只是纸上谈兵。可选择的语言很多,各有特

2、点和应用领域。 C语言的代码量小:同样功能的软件用C语言编写容量很小。Wps与office,界面功能基本类似,但是wps只有23.3M,但是微软office就有千兆左右。Wps的内核代码就是用C语言写的。以及我们的主板驱动、显卡驱动、摄像头驱动等都是用c语言。以及数据库DB2,oracle等都是用c语言和c+来写的。ACDSee、photoshop、2D(cs)、3D游戏等应用软件也是用C语言来编写的。速度快:windows内核是c语言外核是c+、unix和linux都是用c语言编写的。功能强大:c语言可访问我们的硬件,c语言中有指针可访问我们的内存等硬件。 C+是为处理大规模的程序开发而研制

3、的大型语言,比C语言复杂难学。C语言是更为基本的,最基础的。在它基础上学习java和c#更容易。C语言是当前程序员共同的语言。,怎样学习C语言,每一讲分4次课前两节是理论课,讲授理论知识后两节为上机课,在机房完成本课练习。检查后方可离开。多思考,多上机。目标:能看懂程序,并调试程序,自学能力要强。,第一章,程序设计和C语言,本章要点,什么是计算机程序什么是计算机语言C语言的发展及其特点运行C程序的步骤与方法最简单的C语言程序程序设计的任务,什么是计算机程序,计算机是万能的吗?-计算机的每一个操作都是根据人们事先指定的指令进行的。为了使计算机执行一系列的操作,必须事先编好一条条指令,输入到计算机

4、。 程序:就是一组计算机能识别和执行的指令。每一条指令使计算机执行特定的操作。为了使计算机系统能实现各种功能,需要成千上万个程序。 总之,计算机的一切操作都是由程序控制的,离开程序计算机将一事无成。所以,计算机的本质是程序的机器,只有懂得程序设计,才能真正了解计算机是怎样工作的,才能更深入的使用计算机。,2 什么是计算机语言,计算机和人都能识别的语言,就是计算机语言。发展阶段: 机器语言-汇编语言高级语言 计算机是不能直接识别高级语言编写的程序,要进行“翻译”。用一种称为编译程序的软件把高级语言写的程序(称为源程序)转换为机器指令的程序(称为目标程序),然后让计算机执行机器指令程序,最后得到结

5、果,语言发展及其特点,C语言是国际上广泛流行的高级语言。C语言是在B语言的基础上发展起来的。B (BCPL)语言是1970年由美国贝尔实验室设计的, 并用于编写了第一个UNIX操作系统,在PDP 7上实现。优点:精练,接近硬件,缺点:过于简单,数据无类型。 1973年贝尔实验室的D.M.Ritchie 在B语言的基础上设计出了C语言,对B取长补短,并用之改写了原来用汇编编写的UNIX,(即UNIX第5版),但仅在贝尔实验室使用。,1-1语言出现的历史背景,1975年UNIX第6版发布,C优点突出引起关注。1977年出现了可移植C语言编译程序 ,推动了UNIX在各种机器上实现 ,C语言也得到推广

6、,其发展相辅相成。1978年影响深远的名著The C Programming Language由 Brian W.Kernighan和Dennis M.Ritchie 合著,被称为标准C。之后,C语言先后移植到大、中、小、微型计算机上,已独立于UNIX和PDP,风靡世界,成为最广泛的几种计算机语言之一。,语言出现的历史背景,1983年,美国国家标准化协会(ANSI)根据C语言各种版本对C的发展和扩充,制定了新的标准ANSI C ,比标准C有了很大的发展。1988年K & R按照 ANSI C修改了他们的The C Programming Language。1989年,ANSI公布了一个完整的c

7、语言标准ANSI C或C89。1990年,国际标准化组织接受了C89为ISO C 的标准(ISO98991990)。1995年,ISO又修订了C语言标准。1999年,ISO有对C语言标准进行修订在基本保留原来的c语言特征的基础上,针对应用的需要又增加一些功能。命名ISO/IEC9899:19992001和2004年先后进行两次技术修正(TC1、TC2)ISO/IEC9899:1999及其技术修正被称为C99。讲课依据c99标准。,说明: 不同版本的C编译系统所实现的语言功能和语法规则又略有差别,因此我们应了解所用的C语言编译系统的特点(可以参阅网上相关资料)。我们使用的是二级语言考试的编译程序

8、Visiua C+6.0.,语言的特点,(1)语言简洁、紧凑,使用方便、灵活。 37个关键字、9种控制语句,程序形式自由,主要用小写字母表示,压缩而一切不必要的成分。(2)运算符丰富。34种运算符,把括号、复制和强制类型转化等都作为运算符处理,从而使C语言的运算类型机极其丰富,表达式类型多样化,灵活使用各种运算符。(3)数据类型丰富,具有现代语言的各种数据结构。整型、浮点型、字符型、数组类型、指针类型、结构体类型和共用体类型,C99扩充了复数浮点类型、超长整型和布尔类型。(4)具有结构化的控制语句 ,是完全模块化和结构化的语言。 (5)语法限制不太严格,程序设计自由度大。例如对数组越界不进行检

9、查,由程序编写者自己保证程序的正确,对变量的类型使用比较灵活。c语言允许程序编写者有较大的自由度,放宽了语法检查。一般的高级语言语法检查比较严。,37个关键字,auto break case char const continue default do double else enum extern float for goto if inline int long register restrict return short signed sizeof staic struct switch typedef union unsigned void volatile while _bool _

10、Complex _Imaginary,语言的特点,(6)允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可直接对硬件进行操作。兼有高级和低级语言的特点 。既是成功的系统描述语言,有时通用的程序设计语言。(7)目标代码质量高,程序执行效率高。只比汇编程序生成的目标代码效率低10-20%。(8)程序可移植性好(与汇编语言比)。基本上不做修改就能用于各种型号的计算机和各种操作系统。,语言的特点,解释1:C+是由于开发大型应用软件的需要而产生的,并不是所有的人都要去编写大型软件;解释2:面向对象的基础是面向过程。C+是面向对象的语言,C是面向过程的,学起来比C语言困难得多,所以不太适合

11、程序设计的初学者。,问题:既然有了面向对象的C+语言,为什么还要学习C语言?,运行C程序的步骤与方法-在Visual C+6.0环境下运行C程序的方法,一 安装Visual C+6.0和进入Visual C+6.0环境Visual C+6.0是在Windows环境下工作的, Visual C+6.0有中文版和英文版,方法相同。为了能使用Visual C+6.0集成环境,必须事先在所用的计算机上安装Visual C+6.0。,filenewfilesC+Source File,表示要建立新的c+源程序文件。然后在location(位置)中输入源程序文件的存储路径,file(文件)输入源程序文件的

12、名字。我们指定的文件名后缀为.c,如果是.cpp则表示要建立的是C+程序。,打开已有程序,到源程序 或 文件打开或在此基础上修改另存为一个新的源程序。 在编译新程序前,应先用file-close workspace(关闭工作空间) 将原有的工作区关闭,以免新文件在原有的工作区进行编译。,程序的编译 - Ctrl+F7,在编辑和保存了源文件以后,如需要对其进行编译,单击build(组建),在菜单中选择编译,此编译命令要求一个有效地项目工作区,你是否同意建立一个默认的项目工作区。单击“是”,表示同意由系统建立默认的项目工作区,然后开始编译。在进行编译是,编译系统检查源程序中有无语法错误,然后在调试

13、信息窗口输出便以信息,如果无错,生成目标文件c1-1.obj,如果有错,指出位置和性质,提示改正。,编译系统能查出程序中的语法错误。语法错误分为两类:一类是致命错误,以error表示,如果有这种错误就通不过编译,无法形成目标程序。另一类是轻微错误,以warning表示,这类错误不影响生成目标程序和可执行程序,但可能影响运行的结果。,程序的连接,得到目标程序后,就可以对程序进行链接了,生成的目标程序c1-1.obj编译系统据此确定在连接后生成一个c1-1.exe的可执行文件,在菜单中显示了此文件名。build(组建)-bulid(组建)。,程序的运行,在得到可执行文件.exe后,就可以直接执行.

14、exe了。选择build(组建)-!execute(执行)。按任何一键以便继续。回到主窗口,建立新的程序选择关闭工作空间,简单的C语言程序介绍,#include /这是编译预处理指令int main( ) /定义主函数 /函数开始 printf (“This is a C program.n”); /输出所指定的一行信 return 0; /函数执行完毕时返回函数值0 /函数结束的标志,说明: main-主函数名, 每个C程序必须有一个主函数main,main前面的int表示此函数的类型。在执行主函数后会得到一个值(即函数值)。return 0;当main函数执行结束前将整数0作为函数值,返回

15、到调用函数处(返回给调用main函数的操作系统的。程序员可以利用操作指令检查main函数的返回值,从而判断main函数师傅正常执行。)。(c99建议。) 是函数开始和结束的标志,不可省每个C语句以分号结束printf是c编译系统提供的函数库中的输出函数。使用函数库中的输入输出函数时,编译系统要求程序提供有关此函数的信息。应在程序开头一行写: #include stdio.h是系统提供的一个文件名。用#include指令把这些信息调入供使用,说明: 本程序的作用是输出一行信息:This is a C program.,注释,行右侧如果有/,表示聪从/到本行结束是注释。再写程序时应多用注释,方便自

16、己和别人理解。在程序进行编译处理时将每个注释替换为一个空格,不产生目标代码。c语言允许的两种注释方式:1)以/开始的单行注释。不能跨行。如果注释内容一行内写不下,可以另起一行重新用/,继续注释。注释范围从/开始,以换行符结束。2)以/*开始以*/结束的块式注释,可以包含多行。内容它可以单独占一行,也可包含多行。编译系统在发现一个/*后,会开始找注释结束符*/。把中间内容作为注释。注释可用汉字或英文字符表示,例1.2 求两数之和#include int main( ) /*求两数之和*/ int a,b,sum; /*声明,定义变量为整型*/ /*以下3行为C语句 */ a=123; b=456

17、; sum=a+b; printf(sum is %dn,sum);,说明: /*/表示注释。注释只是给人看的,对编译和运行不起作用。所以可以用汉字或英文字符表示,可以出现在一行中的最右侧,也可以单独成为一行。,说明: 输出一行信息:sum is 579,例1.3 求3个数中较大者。#include int main( ) /* 主函数*/ int max(int x,int y); / 对被调用函数max的声明 */ int a, b, c; /*定义变量a、b、c */ scanf(d,d, /*输出c的值*/,int max(int x, int y) int z; if (xy) z=

18、x; else z=y; return (z); ,max(int x,int y);,max(a,b);,说明:本程序包括main和被调用函数max两个函数。max函数的作用是将x和y中较大者的值赋给变量z。return语句将z的值返回给主调函数main。,C语言程序的结构,(1)一个程序由一个或多个源程序文件组成。一个规模较小的程序,往往只包括一个源程序文件。一个源程序文件包括3部分: 预处理指令:由预处理的到的结果与程序其它部分一起,组成一个完整的,可以用来编译的最后的源程序。 全局声明:例如把例2中的int a,b,sum;放到main函数的前面,就是全局声明,在整个源程序文件范围内有

19、效在函数中声明的变量,只在函数范围内有效。本节所讲例子没有用全局声明。只定义了局部变量。 函数定义(2) 函数是c程序的主要组成部分,程序的几乎全部工作都是由各个函分别完成的,函数是c程序的基本单位。必须包含仅一个main函数(3)一个函数由两部分组成: 函数的首部:例1.3中的max函数首部 int max(int x,int y ) 函数体:花括号内的部分。若一个函数有多个花括号,则最外层的一对花括号为函数体的范围。 函数体包括两部分 :声明部分:int a,b,c; 可缺省执行部分:由若干个语句组成。可缺省,简单的C语言程序介绍,注意:函数的声明部分和执行部分都可缺省,例如:void d

20、ump ( ) 这是一个空函数,什么也不做,但是合法的函数。,简单的C语言程序介绍,小结:(3) C程序总是从main函数开始执行的,与main函数的位置无关。(4) C程序书写格式自由,一行内可以写几个语句, 一个语句可以分写在多行上,C程序没有行号。(5) 每个语句和数据声明的最后必须有一个分号。(6) C语言本身没有输入输出语句。输入和输出的操作是由库函数scanf和printf等函数来完成的。C对输入输出实行“函数化”。(7)程序应当包含注释。增加程序的可读性。,运行程序的步骤和方法,一、运行程序的步骤上机输入与编辑源程序对源程序进行编译与库函数连接运行目标程序,第一章 作业,上机运行

21、3个例题。参照例题:编写一个c程序,输出以下信息:*Very good !*,第二章,程序的灵魂-算法,本章要点,算法的概念 算法的表示结构化程序设计方法,主要内容,2.1 算法的概念2.2 简单算法举例2.3 算法的特性2.4 怎样表示一个算法2.5 化程序设计方法,一个程序应包括两个方面的内容:,对数据的描述:数据结构(data structure)对操作的描述:算法(algorithm),著名计算机科学家沃思提出一个公式: 数据结构 + 算法 = 程序,数据结构算法程序设计方法语言工具,完整的程序设计应该是:,2.1 算法的概念,广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”

22、。,方法1:1+2,+3,+4,一直加到100 加99次方法2:100+(1+99)+(2+98)+(49 +51)+50 = 100 + 49100 +50 加51次,对同一个问题,可有不同的解题方法和步骤,例: 求,2.1 算法的概念,为了有效地进行解题,不仅需要保证算法正确,还要考虑算法的质量,选择合适的算法。希望方法简单,运算步骤少。,计算机算法可分为两大类别:数值运算算法:求数值解,例如求方程的根、求函数的定积分等。非数值运算:包括的面十分广泛,最常见的是用于事务管理领域,例如图书检索、人事管理、行车调度管理等。,2.2 简单算法举例,例2.1: 求12345,步骤1:先求12,得到

23、结果2步骤2:将步骤1得到的乘积2再乘以3,得到结果6步骤3:将6再乘以4,得24步骤4:将24再乘以5,得120,太繁琐,如果要求121000,则要写999个步骤,S1:使p=1 S2:使i=2 S3:使pi,乘积仍放在变量p中,可表示为:pip S4:使i的值加1,即i+1i。 S5:如果i不大于5,返回重新执行步骤S3以及其后的步骤S4和S5;否则,算法结束。最后得到p的值就是5!的值。,可以设两个变量:一个变量代表被乘数,一个变量代表乘数。不另设变量存放乘积结果,而直接将每一步骤的乘积放在被乘数变量中。设p为被乘数,i为乘数。用循环算法来求结果, 算法可改写:,S1:1pS2:3iS3

24、:pipS4:i+2pS5:若i11,返回S3。否则,结束。,如果题目改为:求1351000算法只需作很少的改动:,算法简练,用这种方法表示的算法具有通用性、灵活性。S3到S5组成一个循环,在实现算法时 要反复多次执行S3,S4,S5等步骤,直到某一时刻,执行S5步骤时经过判断,乘数i已超过规定的数值而不返回S3步骤为止。此时算法结束,变量p的值就是所求结果。,例2.2 有50个学生,要求将他们之中成绩在80分以上者打印出来。设n表示学号, n1代表第一个学生学号, 代表第i个学生学号。用G代表学生成绩 , gi代表第i个学生成绩,算法表示如下:,S1:1i S2:如果80,则打印和,否则不打

25、印。 S3:i+1i S4:如果i50,返回S2,继续执行。否则算法结束,变量i作为下标,用来控制序号(第几个学生,第几个成绩)。当i超过50时,表示 已对50个学生的成绩处理完毕,算法结束。,例2.3 判定20002500年中的每一年是否闰年,将结果输出。,变量i作为下标,用来控制序号(第几个学生,第几个成绩)。当i超过50时,表示 已对50个学生的成绩处理完毕,算法结束。,分析:闰年的条件是:(1)能被4整除,但不能被100整除的年份都是闰年,如1996,2004年是闰年;(2)能被100整除,又能被400整除的年份是闰年。如1600,2000年是闰年。不符合这两个条件的年份不是闰年。,设

26、y为被检测的年份,算法可表示如下 :S1:2000yS2:若y不能被4整除,则输出y “不是闰年”。然后转到S6。S3:若y能被4整除,不能被100整除,则输出y “是闰年”。然后转到S6。S4:若y能被100整除,又能被400整除,输出y“是闰年”,否则输出“不是闰年”。 然后转到S6。S5: 输出y “不是闰年”。S6:y+1yS7:当y2500时,转S2继续执行,如y2500,算法停止。,以上算法中每做一步都分别分离出一些范围(巳能判定为闰年或非闰年),逐步缩小范围,直至执行S5时,只可能是非闰年。“其它” 包括能被4整除,又能被100整除,而不能被400整除的那些年份(如1990) 是

27、非闰年。,例2.4 求,算法如下 :,S1:sign=1 S2:sum=1 S3:deno=2 S4:sign=(-1)sign S5:term=sign(1/deno) S6:sum=sum+term S7:deno=deno+1 S8:若deno100返回S4,否则算法结束。,单词作变量名,以使算法更易于理解:sum表示累加和,deno是英文分母(denom inator)缩写,sign代表数值的符号,term代表某一项。,反复执行S4到S8步骤,直到分母大于100为止。一共执行了99次循环,向sum累加入了99个分数。sum最后的值就是多项式的值。,例2.5 对一个大于或等于3的正整数,

28、判断它是不是一个素数。,概念:所谓素数,是指除了1和该数本身之外,不能被其它任何整数整除的数。例如,13是素数。因为它不能被2,3,4,12整除。,分析:判断一个数n(n3)是否素数的方法: 将n作为被除数,将2到(n-1)各个整数轮流作为除数,如果都不能被整除,则n为素数。,算法如下 :,S1:输入n的值S2:i=2 (i作为除数)S3:n被i除,得余数rS4:如果r=0,表示n能被i整除,则打印n“不是素数”,算法结束。否则执行S5S5:i+1iS6:如果in-1,返回S3。否则打印 n “是素数”。然后结束。,实际上,n不必被2到(n-1)的整数除,只需被2到n/2间整数除,甚至只需被2

29、到 之间的整数除即可。,2.3 算法的特性,有穷性:包含有限的操作步骤确定性:算法中的每一个步骤都应当是确定的 有零个或多个输入:输入是指在执行算法时需要从外界取得必要的信息 有一个或多个输出:算法的目的是为了求解,“解” 就是输出 有效性:算法中的每一个步骤都应当能有效地执行,并得到确定的结果 。,一个算法应该具有以下特点:,2.4 算法的表示,可以用不同的方法表示算法,常用的有:自然语言传统流程图结构化流程图伪代码PAD图,2.4.1 用自然语言表示算法,自然语言就是人们日常使用的语言,可以是汉语或英语或其它语言。用自然语言表示通俗易懂,但文字冗长,容易出现“歧义性”。自然语言表示的含义往

30、往不大严格,要根据上下文才能判断其正确含义,描述包含分支和循环的算法时也不很方便。因此,除了那些很简单的问题外,一般不用自然语言描述算法。,2.4.2 用流程图表示算法,美国国家标准化协会ANSI(American National Standard Institute)规定了一些常用的流程图符号:,例2.6 将求5!的算法用流程图表示,如果需要将最后结果打印出来,可在菱形框的下面加一个输出框。,例2.7 将例2.2的算法用流程图表示。打印50名 学生中成绩在80分以上者的学号和成绩。,如果如果包括这个输入数据的部分,流程图为,例2.8 将例2.3判定闰年的算法用流程图表示,用流程图表示算法要

31、比用文字描述算法逻辑清晰、易于理解。,例2.9 将例2.4的算法用流程图表示,例2.10 将例2.5判断素数的算法用流程图表示,小结:,流程图是表示算法的较好的工具。一个流程图包括以下几部分 :(1)表示相应操作的框;(2)带箭头的流程线;(3)框内外必要的文字说明。,2.4.3 三种基本结构和改进的流程图,1、传统流程图的弊端 传统流程图用流程线指出各框的执行顺序,对流程线的使用没有严格限制。因此,使用者可以毫不受限制地使流程随意地转向,使流程图变得毫无规律,阅读者要花很大精力去追踪流程,使人难以理解算法的逻辑。如图:,传统流程图的流程可以是:,这种如同乱麻一样的算法称为BS型算法,意为一碗

32、面条(A Bowl of Spaghetti),乱无头绪。,缺点:难以阅读、修改,使算法的可靠性和可维护性难以保证。解决办法:必须限制箭头的滥用,即不允许无规律地使流程随意转向,只能顺序地进行下去。,2、三种基本结构 Bohra和Jacopini提出了以下三种基本结构: 顺序结构、选择结构、循环结构 用这三种基本结构作为表示一个良好算法的基本单元。,三种基本结构的图示:,顺序结构,选择结构,循环结构的图示:,当型(While型)循环结构,直到型(Until型)循环,三种基本结构的共同特点:(1)只有一个入口; (2)只有一个出口;(请注意:一个菱形判断框有两个出口,而一个选择结构只有一个出口。

33、不要将菱形框的出口和选择结构的出口混淆。)(3)结构内的每一部分都有机会被执行到;(4)结构内不存在“死循环”(无终止的循环)。,图中没有一条从入口到出口的路径通过A框。,不正确的流程表示:,流程内的死循环,小结:,由三种基本结构顺序组成的算法结构,可以解决任何复杂的问题。由基本结构所构成的算法属于“结构化”的算法,它不存在无规律的转向,只在本基本结构内才允许存在分支和向前或向后的跳转。,扩展:,只要具有上述四个特点的都可以作为基本结构。可以自己定义基本结构,并由这些基本结构组成结构化程序。,此图符合基本结构的特点,这是一个多分支选择结构,根据表达式的值决定执行路线。虚线框内的结构是一个入口一

34、个出口,并且有上述全部的四个特点。由此构成的算法结构也是结构化的算法。可以认为这是由三种基本结构所派生出来的。,2.4.4 用N-S流程图表示算法,1973年美国学者I.Nassi和B.Shneiderman提出了一种新的流程图形式。在这种流程图中,完全去掉了带箭头的流程线。全部算法写在一个矩形框内,在该框内还可以包含其它的从属于它的框,或者说,由一些基本的框组成一个大的框。这种流程图又称N-S结构化流程图 。,N-S流程图用以下的流程图符号:,(1)顺序结构,(2)选择结构,(3)循环结构,用三种N-S流程图中的基本框,可以组成复杂的N-S流程图。图中的A框或B框,可以是一个简单的操作,也可

35、以是三个基本结构之一。,A框可以是一个选择结构,B框可以是一个循环结构,例2.11 将例2.1的求5!算法用N-S图表示,例2.12 将例2.2的算法用N-S图表示。(打印50名学生中成绩高于80分的学号和成绩),没有输入数据,例2.12 将例2.2的算法用N-S图表示。(打印50名学生中成绩高于80分的学号和成绩),有输入数据,例2.13 将例2.3判定闰年的算法用N-S图表示,例2.14 将例2.4的算法用N-S图表示,例2.15 将例2.5判别素数的算法用N-S流程图表示。,传统流程图分析:,此图不符合基本结构特点!由于不能分解为三种基本结构,就无法直接用N-S流程图的三种基本结构的符号

36、来表示。因此,应当先作必要的变换。,例2.15 将例2.5判别素数的算法用N-S流程图表示。,传统流程图变换为:,用N-S流程图表示:,N-S图表示算法的优点,比文字描述直观、形象、 易于理解;比传统流程图紧凑易画。尤其是它废除了流程线,整个算法结构是由各个基本结构按顺序组成的,N-S流程图中的上下顺序就是执行时的顺序。用N-S图表示的算法都是结构化的算法,因为它不可能出现流程无规律的跳转,而只能自上而下地顺序执行。,小结:,一个结构化的算法是由一些基本结构顺序组成的。在基本结构之间不存在向前或向后的跳转,流程的转移只存在于一个基本结构范围之内(如循环中流程的跳转);一 个非结构化的算法可以用

37、一个等价的结构化算法代替,其功能不变 。如果一个算法不能分解为若干个基本结构,则它必然不是一个结构化的算法。,2.4.5 用位代码表示算法,概念:伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法。特点:它如同一篇文章一样 ,自上而下地写下来。每一行(或几行)表示一个基本操作。它不用图形符号,因此书写方便 、格式紧凑,也比较好懂,也便于向计算机语言算法(即程序)过渡。用处:适用于设计过程中需要反复修改时的流程描述。,IF x is positive THEN print x ELSE print -x也可以用汉字伪代码表示: 若 x为正 打印 x 否则 打印 -x也可以中英文混用,如

38、: IF x 为正 print x ELSE print -x,例: “打印x的绝对值”的算法可以用伪代码表示为:,开始 置t的初值为1 置i的初值为2 当i=5,执行下面操作: 使t=ti 使i=i+1 循环体到此结束 输出t的值 结束,也可以写成以下形式: BEGIN算法开始 1t 2 i while i5 ti t i+1 i print t END算法结束,例2.16 求5!。用伪代码表示算法:,例2.17 输出50个学生中成绩高于80分者的学号和成绩。用伪代码表示算法:,BEGIN算法开始 1 i while i50 input and i+1 i 1 i while i50 if

39、80 print and i+1 i END算法结束,2.4.6 用计算机语言表示算法,概念:用计算机实现算法。计算机是无法识别流程图和伪代码的。只有用计算机语言编写的程序才能被计算机执行。因此在用流程图或伪代码描述出一个算法后,还要将它转换成计算机语言程序。 特点:用计算机语言表示算法必须严格遵循所用的语言的语法规则,这是和伪代码不同的。用处:要完成一件工作,包括设计算法和实现算法两个部分。设计算法的目的是为了实现算法。,#include void main( ) int i,t; t=1; i=2; while(i=5) t=t*I; i=i+1; printf(“%dn”,t); ,例

40、2.20 将例2.16表示的算法(求5!)用C语言表示。,应当强调说明:写出了C程序,仍然只是描述了算法,并未实现算法。只有运行程序才是实现算法。应该说,用计算机语言表示的算法是计算机能够执行的算法。, 2.5 结构化程序设计方法,一个结构化程序 就是用高级语言表示的结构化算法。用三种基本结构组成的程序必然是结构化的程序,这种程序便于编写、便于阅读、便于修改和维护。 结构化程序设计强调程序设计风格和程序结构的规范化,提倡清晰的结构。结构化程序设计方法的基本思路是:把一个复杂问题的求解过程 分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。, 2.5 结构化程序设计方法,采取以下

41、方法来保证得到结构化的程序:自顶向下;逐步细化;模块化设计;结构化编码。,两种不同的方法:自顶向下,逐步细化;自下而上,逐步积累。,用这种方法逐步分解,直到作者认为可以直接将各小段表达为文字语句为止。这种方法就叫 做“自顶向下,逐步细化”。,自顶向下,逐步细化方法的优点: 考虑周全,结构清晰,层次分明,作者容易写,读者容易看。如果发现某一部分中有一段内容不妥,需要修改,只需找出该部分修改有关段落即可,与其它部分无关。我们提倡用这种方法设计程序。这就是用工程的方法设计程序。,模块设计的方法:模块化设计的思想实际上是一种“分而治之”的思想,把一个大任务分为若干个子任务,每一个子任务就相对简单了。在

42、拿到一个程序模块以后,根据程序模块的功能将它划分为若干个子模块,如果这些子模块的规模还嫌大,还再可以划分为更小的模块。这个过程采用自顶向下方法来实现。子模块一般不超过50行划分子模块时应注意模块的独立性,即:使一个模块完成一项功能,耦合性愈少愈好。,第三章,数据类型、运算符与表达式,本章要点,数据的描述规则数据的操作规则,主要内容,3.1 C的数据类型3.2 常量与变量3.3 整型数据3.4 浮点型数据运行3.5 字符型数据,主要内容,3.变量赋初值 3.7 各类数值型数据间的混合运算 3.8 算术运算符和算术表达式 3.9 赋值运算符和赋值表达式 3.10 逗号运算符和逗号表达式, 3.1

43、C的数据类型,C语言提供了以下一些数据类型。,数据类型,构造类型,指针类型,空类型(无值类型) void,3.2 常量与变量,3.2.1 常量和符号常量在程序运行过程中,其值不能被改变的量称为常量常量区分为不同的类型:,整型 100,125,-100,0实型 3.14 , 0.125,-3.789字符型 a, b,2字符串 a, ab,1232,例3.1 符号常量的使用#define PRICE 30#include void main ( ) int num, total; num=10; total=num * PRICE; printf(total=%dn,total); ,说明: 程序

44、中用#define命令行定义PRICE代表常量30,此后凡在本文件中出现的PRICE都代表30,可以和常量一样进行运算,说明:用一个标识符代表一个常量的,称为符号常量,即以标识符形式出现的常量。符号常量的值在其作用域(在本例中为主函数)内不能改变,也不能再被赋值。,说明:如再用赋值语句给PRICE赋值是错误的。 PRICE=40; /* 错误,不能给符号常量赋值。,运行结果: total=300,3.2 常量与变量,3.2.2变量变量代表内存中具有特定属性的一个存储单元,它用来存放数据,这就是变量的值,在程序运行期间,这些值是可以改变的。变量名实际上是一个以一个名字对应代表一个地址,在对程序编

45、译连接时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。,图,3.2 常量与变量,变量命名的规定:语言规定标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。 例:sum,_total, month, Student_name, lotus_1_2_,BASIC, li_ling M.D.John, ¥123,3D64,ab,3.2 常量与变量,注意:编译系统将大写字母和小写字母认为是两个不同的字符。 建议变量名的长度最好不要超过8个字符。在选择变量名和其它标识符时,应注意做到“见名知意”,即选有含

46、意的英文单词 (或其缩写)作标识符。要求对所有用到的变量作强制定义,也就是“先定义,后使用” 。,3.3 整型数据,3.3.1整型常量的表示方法 整型常量即整常数。在语言中,整常数可用以下三种形式表示:(1)十进制整数。 如:123, -456.4。(2)八进制整数。以0头的数是八进制数。 如:0123表示八进制数123,等于十进制数83,-011表示八进制数-11,即十进制数-9。,3.3 整型数据,(3)十六进制整数。以0 x开头的数是16进制数。 如:0 x123,代表16进制数123,等于十进制数 291。 -0 x12等于十进制数10。,3.3.2 整型变量 (1)整型数据在内存中的

47、存放形式 数据在内存中是以二进制形式存放的。 如: int i; /* 定义为整型变量 */ i=10; /* 给i赋以整数10 */,图,3.3 整型数据,注意:十进制数10的二进制形式为1010,Turbo C 2.0和Turbo C+ 3.0为一个整型变量在内存中分配2个字节的存储单元(不同的编译系统为整型数据分配的字节数是不相同的,VC+ 6.0则分配4个字节)。数值是以补码(complement) 表示的。,3.3 整型数据,(2)整型变量的分类:,共六种,有符号基本整型有符号短整型有符号长整型无符号基本整型无符号短整型无符号长整型,(signed)int (signed)short

48、 (int )(signed) long (int)unsigned intunsigned short (int)unsigned long (int),注意:括号表示其中的内容是可选的.,3.3 整型数据,整数类型的有关数据:,类型 类型说明符 长度 数的范围 基本型 int 2字节 -3276832767 短整型 short 2字节 -215215-1 长整型 long 4字节 -231231-1 无符号整型 unsigned 2字节 065535 无符号短整型 unsigned short 2字节 065535 无符号长整型 unsigned long 4字节 0(232-1),3.3

49、 整型数据,(3)整型变量的定义: 规定在程序中所有用到的变量都必须在程序中定义,即“强制类型定义”。 例如: int a,b(指定变量、为整型) unsigned short c,d;(指定变量、为无符号短整型) long e,f;(指定变量、为长整型),例3.2 整型变量的定义与使用#include void main() int a,b,c,d; /*指定、为整型变量* unsigned ; *指定为无符号整型变量* 12;-24;10; ; printf(,); ,说明: 可以看到不同种类的整型数据可以进行算术运算,运行结果: ,,例3.3 整型数据的溢出#include void m

50、ain()int a,b; a=32767; b=a+1; printf(“%d,%dn”,a,b);,说明:数值是以补码表示的。一个整型变量只能容纳-3276832767范围内的数,无法表示大于32767或小于-32768的数。遇此情况就发生“溢出”。,运行结果: 32767,-32768,3.3 整型数据,3.3.3 整型常量的类型 (1)一个整数,如果其值在-32768+32767范围内,认为它是int型,它可以赋值给int型和long int型变量。 (2) 一个整数,如果其值超过了上述范围,而在-2147483637+2147483647范围内,则认为它是为长整型。可以将它赋值给一个

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号