C语言程序设计_S1_第1页
C语言程序设计_S1_第2页
C语言程序设计_S1_第3页
C语言程序设计_S1_第4页
C语言程序设计_S1_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

1、C 语言程序设计C第一章第一章 概述概述(2)第二章第二章 算法算法(1)第三章第三章 数据类型、运算符与表达式数据类型、运算符与表达式(3)第四章第四章 语句和控制流语句和控制流(4)第五章第五章 数组数组(4)第六章第六章 函数函数(4)第七章第七章 编译预处理编译预处理(1)第八章第八章 指针指针(5)第九章第九章 结构体和共用体结构体和共用体(2)第十章第十章 文件文件(2)第一章第一章 概概 述述C目录1.1 程序设计语言简介1.2 C语言的历史和发展状况1.3 C语言的特点1.4 简单的C程序1.5 C程序的上机步骤C1.1 程序设计语言简介语言是信息交流工具。基于一组记号与符号由

2、人工构造的形式化的系统(如符号逻辑),包括合法表达式的形成规则和转换规则。在计算领域,也存在不同层次的语言,这里所论及的是实现层次的语言,即程序设计语言。程序设计语言=字符集+规则集(用于组合字符)C机器语言汇编语言高级语言面向过程面向对象CPU指令系统,由0、1序列构成的指令码组成如:10000000 加 10010000 减用助记符号描述的指令系统如 ADD A, B面向机器的语言程序设计是数据被加工的过程客观世界可以分类,对象是类的实例对象是数据和方法的封装对象间通过发送和接受消息发生联系程序设计关键是定义类,并由类派生对象计算机上的语言层次C 比机器或汇编语言更易于学习。记号更接近问题

3、域;更少关心物理硬件 程序设计语言书写的程序更易于调试(程序更为短小;记号本身更自然,因此更多注意力可放在程序逻辑而非语法细节上)。 程序更易于理解 程序设计语言的记号自然起到了文档的作用 上述原因导致解决问题的时间和代价减少。程序设计语言的优点C 编译过程需要机器时间,它可能超过易于调试所节省的时间 编译器可能产生低效的代码 如果用户不知道机器代码或编译器未提供合适的调试工具,则程序调试可能非常困难。程序设计语言的缺点5260708090AdaALGOL60ALGOL68PascalModula-2CPL BCPL BCC+JavaLISPPROLOGCOBOLFORTRAN77FORTRA

4、NPL/1Simula 67Smalltalk 80BASICANSI-BASICQBASICVBFORTRAN90C Fortran 1956,第一个广泛使用的高级语言,为大量的科学和工程人员打开了使用计算机的大门 Cobol 1960,最广泛使用的数据处理语言。具有类英文的语法和机器独立性。 Algol60 1960,用于刻划算法。形式化语法定义,带动了语言的理论和实现技术研究。 Lisp 1960,引入了函数程序设计概念,基于表处理。 Pascal 1971,在一个小语言中引入了如赋类型的新概念,并以优美方式组合了各种著名结构。C1.2 C语言的历史和发展状况C语言是一种计算机高级语言。

5、C语言既可用来编写系统软件,也可编写应用软件。C语言具有一般高级语言的特性,又具有低级语言的特性,集两者的优点于一身。CC语言的历史和发展状况Algol1960CPL1963BCPL1967 B1970NB(C语言)1972Ken ThompsonDennis RitchieMartin RichardsUNIX 的创始者CC语言的历史和发展状况1978年,Brian Kernighan 和Dennis Ritchie合著了The C Programming Language,称为标准C,80年代中期,美国国家标准化协会(ANSI)制定了新的标准,称为ANSI C。1988年, The C P

6、rogramming Language的第二版出版(已被译为多种语言出版)。1987年,公布了87 ANSI C,目前常用的编译系统都是以它为基础的。近年来的发展,有Concurrent C Gehani 1989, Objective C Cox 1986, C* Thinking1990, 和 C+ Stroustrup1986. C1.3 C语言的特点 语言表达能力强 语言简捷,使用方便灵活,易于学习和应用 数据类型丰富 运算符丰富 具有结构化的控制语句 允许直接访问物理地址,能进行位操作CC语言的特点 生成目标代码质量高,程序执行效率高(仅比汇编程序生成的目标代码执行效率低1020%。

7、) 程序可移植性好 语法限制不严格,程序设计自由度大(程序员必须对大部分语法错误负责)。 C语言突出的优点:高效、可移植、灵活、能力强C1.4 简单的C程序例1.1 main() printf ( Hello,world n); 该程序的作用:在屏幕上输出一行信息: Hello,world 本例中,主函数main()仅包含一个语句,该语句仅由printf()输出函数构成。语句后面有一个分号。;C简单的C程序例1.2 求两数之和。 main() int a, b, sum; /* 定义三个整型变量 */ a = 123; b = 456; sum = a + b; printf(sum is %

8、dn, sum); sum is 579C简单的C程序 本程序的作用:求两整数a、b之和sum,并在屏幕上输出sum。 /* */中间的内容表示“注释”。注释是程序员对程序某部分的功能和作用所做的说明,是给人看的,对编译和运行不起作用。 语句 int a,b,sum;定义三个整型变量。(int = integer)语句 a = 123;是一个赋值(assign)语句,把常数123赋给变量a。语句b = 456;也是一个赋值语句。该行包括两个语句。(C语言中,一个语句可以占多行,一行也可以有多个语句)。C简单的C程序 语句 sum = a + b;计算a、b之和,并把和值赋变量给sum,这是一个

9、赋值语句。 printf()输出sum的值,输出格式用“格式字符串”%d指定。%d表示整型格式,在输出时,该位置用对应变量sum的值代替。程序的输出信息为:sum is 579C例1.3 从键盘输入两个整数,在屏幕上输出它们的最大值。main() /*主函数*/int a,b,c; /*定义变量*/ scanf(“%d, %d”, &a, &b); /*输入变量a和b的值*/ c = max(a, b); /*调用max函数,将返回值赋给c*/ printf(“max = %d”, c); /*输出c的值*/int max(x,y) /*定义max函数,函数值为整型*/int

10、x, y; /*定义形式参数x,y为整型*/int z; /*定义变量z为整型*/if (xy) z = x; else z = y;return (z); /*将z值返回*/8,5 max=8C从以上三个例子中,可以看到:1. C程序主要由函数构成,C程序中有三种类型的函数:main():主函数,开发系统提供的特殊函数,每一个C程序必须且只有一个main()函数。它代表程序开始执行的起始位置开发系统提供的库函数,如printf()、scanf()等程序员自己设计的函数,如例1.3中的max()。C程序由函数构成的这种特点有利于实现程序的结构化。C2. 一个函数由两部分构成:函数的说明部分,包

11、括:函数名、函数类型(返回值类型)、函数属性(前面的例子中未使用函数的属性。属性包括near和far)、形式参数名、形式参数类型。函数体,大括号 中的部分。函数体中包含变量定义部分和执行部分。C3. 一个C程序总是从main()处开始执行,而不管main()在源程序中的位置4. C程序书写格式自由,一个语句可以占多行,一行也可以有多个语句5. 语句和数据定义后必须要有分号。 例、c = a + b ;6. C语言用函数进行输入输出,如scanf()、printf()7. C语言用/* */作注释编辑连接编译执行程序代码的录入,生成源程序 *.c语法分析查错,翻译生成目标程序 *.obj与其它目

12、标程序或库连接装配,生成可执行程序 *.exe1.5 C程序的上机步骤C运行一个语言程序的一般过程运行一个语言程序的一般过程 1. 进入集成环境2. 编辑(或修改)源程序3. 编译。如果编译成功,则可进行下一步操作;否则,返回2修改源程序,再重新编译,直至编译成功4. 连接。如果链接成功,则可进行下一步操作;否则,根据系统的错误提示,进行相应修改,再重新连接,直至链接成功5. 运行。通过观察程序运行结果,验证程序的正确性。如果出现逻辑错误,则必须返回2修改源程序,再重新编译、连接和运行,直至程序正确6. 退出集成环境,结束本次程序运行第二章第二章 算算 法法C2.1 算法基本概念 程序的构成:

13、数据 对数据的处理。 计算机科学家沃思提出的公式: 程序 = 数据结构 + 算法对数据的描述:数据的类型和数据的组织形式对操作的描述:操作的步骤程序 = 数据结构 + 算法 + 程序设计方法 + 语言工具和环境考虑程序设计方法和使用的语言及开发环境,表达为:C简单算法举例 例2.1 求1231002100100)(1第一种方法: 12,再加3,一直加到100,得到结果5050第二种方法: (199)(298) (4951)5010049100501005050第三种方法:5050C2.2 算法的特性 有穷性 确定性 有零个或多个输入 有一个或多个输出 有效性 C2.3 算法的表示方法 自然语言

14、 流程图 伪代码 计算机语言 CThe C Programming Language, Second EditionCThe C Programming Language, Second EditionCThe C Programming Language, Second EditionCC语言是面向结构设计的语言,通用性好。不局限于某种机器。它能直接处理数字、字符和地址,可以完成通常由硬件实现的算术、逻辑运算,可以取代汇编语言来编写系统软件和应用软件。以UNIX系统为例。UNIX系统主要分为三层:核心(操作系统)、与外层的接口shell命令解释顺序以及外层大量的子系统,包括各种软件工具、实用

15、程序和应用软件,除了核心内部的1000行左右(占核心的10)是用汇编语言书写之外,其余的都是用C语言写的。如FORTRON、APL、PASCAL、LISP、LOGO、BASIC的编译程序或解释程序是用C写成的。C将成为当今最重要的语言之一。CC语言只有32个关键字,程序书写形式自由,输入工作量小auto break case char constcontinue default do double elseenum extern float for gotoif int long register returnshort signed sizeof static structswitch ty

16、pedef unsigned union voidvolatile whileCC语言有9种控制语句if( )elsefor( )while( )dowhile( )continuebreakswitchgotoreturnC34种运算符:算术运算符:+ - * / % + -关系运算符: = !=逻辑运算符:! & |位运算符 : | &赋值运算符:= 及其扩展条件运算符:?:逗号运算符:,指针运算符:* &求字节数 :sizeof强制类型转换:(类型)分量运算符:. -下标运算符:其它 :( ) -CC数据类型有整型、实型、字符型、数组类型、指针类型、结构体类型和共

17、用体类型等,可用来实现各种复杂的数据结构,如链表、树、栈等的运算C流程图流程图:用一些规定的简单图形来表示算法起、止输入输出判断处理连接点流程线开始1i输入ni,gii+1ii501igi80打印ni,gii+1ii50结束YNYNY流程图流程图C用伪代码表示算法 用流程图或是N-S流程图表示算法,是在算法已形成条件下,在初期的设计算法过程中,用伪代码更方便。实际上就是不画框图,用词、句子(主要是英文)和C的控制语句及其它符号将算法的思路表达出来,特点是方便灵活,容易修改。C用设计语言表示算法 算法确定之后,要实现所设计的功能,必须用符合C语法规则的语句将算法表述出来,这样就得到了解决相应问题

18、的C源程序。C 语言发展可追溯到1945年,德国的Konrad Zuse设计了“Plankalkul”,未实现。 1954年,Laning和Zierler开发了一个用于数学计算的高级语言,运行于M.I.T的Whirlwind上,这大概是第一个运行的编译器。它可以书写数学表达式(具有上、下标)、赋值、分叉、输入/输出、子程序,并处理微分方程 第一个广泛使用的高级语言是Fortran。IBM的John Backus领头在50年代中期完成,初衷是解决科学及工程计算,但后也用于更多领域,甚至写编译器。该语言证明了高级语言的可行性,奠定了后来语言研究的基础。程序设计语言的发展C 1958年,ACM和欧洲

19、的GAMM联合开发用于算法处理的语言IAL(International Algebraic Language),最终修改变成了Algol60(较早的版本是Algol58),Algol58和Algol60导致了很多相关的程序设计语言研究和编译技术开发的发展。在实践方面Fortran有很大影响,但Algol带动了语言的理论研究热潮。 50年代中期,Remington Rand Univac的Grace Hopper及其同事设计了Flow-Matic,该语言面向商业数据处理,这是第一个面向英语的语言,并成为Cobol的主要源泉。程序设计语言的发展C 1959年,在DoD赞助下,组织了一批计算机制造商

20、和用户开发了Cobol(Common Business Oriented Language),该语言在商业数据处理领域的影响甚至大于Fortran在科学计算领域的影响。 1958、1959可能是语言历史上生产率最大的两年。M.I.T的Victor Yngve开发了Comit,这是串处理语言,用于翻译自然语言。M.I.T的John McCarthy和其学生开发了人工智能语言Lisp。Lisp至今仍在使用,Comit后来变成了Snobol(Bell电话实验室于60年代中期开发)程序设计语言的发展C 科学计算和数据处理是计算机早期的主要应用,语言也是如此,向跨两个领域的通用性发展。 1959-196

21、0,System Development Corporation和Jules Schwartz在Algol58基础上开发了Jovial,这是第一次通用性尝试。 19671977,在美国,在给定年度内使用的语言数大概是170种,同时,每年或每两年有2530种的增减。1978年HOPL会议,讨论的语言满足如下标准:程序设计语言的发展C a.1967年时已出版并被使用。 b.1977年仍在使用。 c.在计算领域有很大影响。选出的语言有:Algol, Apl, APT, Basic, Cobol, Fortran, GPSS, Joss,Jovial, Lisp, PL/I, Simula, Snob

22、ol。80年代的两个重要语言PASCAL(Niklaus Wirth, 1968)和Ada未列入。 PASCAL在70年代后期成为非常重要的语言,特别是在计算机教学方面。程序设计语言的发展CE.Sammet在“Programming Language: History and Future”,Communications of the ACM中列出了若干代表性语言: APT 1956,第一个专用领域语言 Fortran 1956,第一个广泛使用的高级语言,为大量的科学和工程人员打开了使用计算机的大门 Flow-Matic 1956,第一个商业数据处理语言 IPL-V 1958,第一个表处理语言

23、 Comit 1957,第一个实用的串处理和模式匹配语言。 Cobol 1960,最广泛使用的数据处理语言。具有类英文的语法和机器独立性。程序设计语言的发展C Algol60 1960,用于刻划算法。形式化语法定义,带动了语言的理论和实现技术研究。 Lisp 1960,引入了函数程序设计概念,基于表处理。 Jovial 1960,第一次包含了科学计算,I/O信息的逻辑操作、数据存贮和处理等能力。大多数Jovial编译器用Jovial书写。 GPSS 1961,第一个仿真语言。 Joss 1964,第一个交互式语言。程序设计语言的发展C Formac 1964,第一个广泛使用的形式代数操作语言。

24、 APL/360 1967,引入了许多高级操作子,允许很短的算法,产生了看问题的新方式。 Pascal 1971,在一个小语言中引入了如赋类型的新概念,并以优美方式组合了各种著名结构。程序设计语言的发展C Formac 1964,第一个广泛使用的形式代数操作语言。 APL/360 1967,引入了许多高级操作子,允许很短的算法,产生了看问题的新方式。 Pascal 1971,在一个小语言中引入了如赋类型的新概念,并以优美方式组合了各种著名结构。程序设计语言的发展C早期,计算机非常昂贵,语言设计是为了更高效地执行程序,高级语言需和汇编语言竞争。60年代中期,程序设计发生了变化,机器价格下降,程序

25、设计价格上升。程序移植的需求越来越多,软件的维护占用了大量的计算资源。此时的目标不再是编译程序后使其高效地运行,高级语言的任务变成使其易于开发正确的程序以解决某给定应用领域中的问题。编译技术成熟于60、70年代,语言技术以解决特定领域问题为中心,如:Fortran用于科学计算,COBOL用于商业应用,JOVIAL用于军事应用,LISP用于人工智能应用,以及Ada用于嵌入式军事应用等。程序设计语言的作用C程序设计语言也会进化和消亡,如:Algol已不再使用,Cobol使用正在下降,Pascal的很多结构仍在Ada中存在,但其黄金时代已过去。仍在使用的旧语言也经历了不断的修订以反应来自其他计算领域

26、的影响,Fortran和Cobol已有多个标准化标本。Ada有1995年新标准。Lisp修订后有Scheme和Common Lisp。C+和ML则反应了人们在设计和使用语言中获得的经验的混合。程序设计语言的作用C影响语言发展的因素主要有:计算机能力、应用、程序设计方法、实现方法和标准化等,以下是相关的技术影响。195155:硬件:电子管计算机,水银延迟线内存方法:汇编语言,基础概念:子程序,数据结构语言:表达式编译器的实验性使用195660:硬件:磁带存储器,磁芯内存,晶体管电路方法:早期编译技术,BNF文法,代码优化,解释器,动态存储方法和表处理语言:FORTRAN,ALGOL 58,ALG

27、OL 60,COBOL,LISP程序设计语言和硬件的关系C196165硬件:可兼容的体系结构家族,磁盘存储器方法:多道程序设计操作系统,语法制导的编译器语言:COBOL 61,ALGOL 60(修订),SNOBOL,JOVIAL,APL符号体系19661970硬件:增加尺寸和速度并降低成本,小型计算机,微程序设计,集成电路方法:分时和交互式系统,优化编译器,翻译器书写系统语言:APL,FORTRAN 66,COBOL 65,ALGOL 68,SNOBOL 4,BASIC,PL/1,SIMULA 67,ALGOLW程序设计语言和硬件的关系C197175硬件:微型计算机,小型计算机时代,小型大规模

28、存储系统,磁性内存的衰落和半导体内存的兴起方法:程序验证,结构化程序设计,软件工程作为一门学科的早期发展语言:PASCAL,COBOL 74,PL/1(标准),C,Scheme,Prolog1976-80硬件:商用质量的微机,大型大规模存储系统,分布式计算方法:数据抽象,形式化语义,并发、嵌入式、和实时程序设计技术语言:Smalltalk,Ada,FORTRAN 77,ML程序设计语言和硬件的关系C198185硬件:个人计算机,第一代工作站,视频游戏,局域网,Arpanet方法:面向对象程序设计,交互式环境,语法制导编辑器语言:Turbo Pascal,Smalltalk 80,Prolog的

29、发展,Ada 83,Postscript198690硬件:微机时代,工程工作站的上升,RISC体系结构,全域网,Internet方法:客户/服务器计算语言:FORTRAN 90,C+,SML(标准ML)程序设计语言和硬件的关系C199195硬件:非常快的廉价工作站和微机,大规模并行体系结构,语音,视频,传真,多媒体方法:开放系统,环境框架,国家信息基础设施(信息高速公路)语言:Ada 95,过程语言(TCL,PERL)19962000硬件:二代Internet,机群,网络计算机(NC)方法:软件构件技术,Agent,中间件,浏览器/服务器计算,Internet计算语言:JAVA,XML,IDL

30、程序设计语言和硬件的关系C1. 熟悉电脑的一些最基本的原理和操作;2. 学习BASIC语言;3. 学习C(注意不是C+),如果感觉有困难也可以先学Pascal过渡一下。4. 学习数据结构。要学会用数据结构的知识来规范自己的程序设计和提高程序的效率;5. 学习汇编。可以对I/O有了个很彻底的认识;6. 学习编译原理。增强对程序语言的控制能力;7. 学习C+,学习面向对象的程序设计;8. 学习操作平台。如win32 api、MFC、VCL、VC、C+Builder及OLE(ActiveX),.NET成为一个好的程序员的道路CC语言的历史和发展状况C语言是由贝尔实验室的Dennis Ritchie在

31、1972年所发明的,当时他正与Ken Thompson共同设计UNIX操作系统。当然C语言并不是凭空想象出来的而是源于Thompson的B语言,此又源自BCPL(basic combined programming language)的组合语言,由Martin Richards所开发。至于BCPL是如何产生的呢?可以追溯至1960年C语言最早的前身Algol,可Algol在美国没有广泛地流行。CPL修改Algol,使其能够直接作较低层次的操作。跟A1gol一样,CPL有太多特性,使得它很难了解,因此BCPL的出现乃是针对此问题而产生的语言。CC语言的历史和发展状况1973年Thompson和R

32、itchie将UNIX系统用C重写,即UNIX5,由此奠定了UNIX系统的基础,今天,UNIX系统几乎成了16位微型机的标准操作系统,如PDP11,VAX11,AT&T,IBM370等。而C语言已成为独立于UNIX和PDP在从微型机到巨型机上都能见到的世界上应用最广泛的程序设计语言之一。CC语言的历史和发展状况1978年,Brian Kernighan 和Dennis Ritchie合著了The C Programming Language,称为标准C,80年代中期,美国国家标准化协会(ANSI)制定了新的标准,称为ANSI C。1988年, The C Programming Language的第二版出版(已被译为多种语言出

温馨提示

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

评论

0/150

提交评论