资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,*,*,C,程序设计,谭浩强 主编,数学系计算机系列课程课件之一,11/27/2024,1,第一章,C,语言概论,本章要点,语言的发展过程,语言的特点,简单的程序介绍,源程序的结构特点,语言的字符和词汇,程序设计上机指导,11/27/2024,2,一、语言的发展过程,语言是在,70,年代初问世的。一九七八年由美国电话电报公司,(AT&T),贝尔实验室正式发表了语言。同时由,B.W.Kernighan,和,D.M.Ritchit,合著了著名的“,THE C PROGRAMMING LANGUAGE”,一书。通常简称为,K&R,,也有人称之为,K&R,标准。但是,在,K&R,中并没有定义一个完整的标准,C,语言,后来由美国国家标准学会在此基础上制定了一个,C,语言标准,于一九八三年发表,通常称之为,ANSI C,。,11/27/2024,3,1960,年,ALGOL,语言,1963,年,CPL,语言在,ALGOL,基础上离硬件近一些,但规模较大,难以实现。,1967,年 剑桥的马丁,.,理查德推出了,BCPL,语言,1970,年 美国贝尔实验室设计出,B,语言,1972-73,年 设计出,C,语言,1978,年,K&R,合著了,C,语言书,1983,年,ANSI,制定了标准,C,1988,年 正式问世,C,语言的发展过程,11/27/2024,4,C,语言的产生基于两个方面的需要。一是为满足,UNIX,操作系统开发的需要。,UNIX,操作系统是一个通用的、复杂的计算机管理系统。二是为拉近高级语言与硬件之间距离的需要。,C,语言集高级语言与汇编语言优点于一身。,C,语言面对实际应用的需要而产生,直至今日仍不改初衷,。,11/27/2024,5,1960,年出现的,ALGOL,语言是一种面向问题的高级语言,远离硬件,不适于开发系统软件。,1963,年,英国剑桥大学推出,CPL,语言,CPL,语言比,ALGOL,语言接近硬件一些,但规模较大,难以实现。,1969,年,剑桥大学的,M.Richards,对,CPL,语言进行简化,推出,BCPL,语言,(BCPLBasic Combined Programming Language),。,1970,年,贝尔实验室的,K.Thompson,为,DEC,公司,PDP7,计算机上运行的一种早期,UNIX,操作系统设计了一种类,BCPL,语言,称为,B,语言。,B,语言规模小,接近硬件,1971,年在,PDP-11,计算机上实现,并写了,UNIX,操作系统。,1960,年,1971,年是,C,语言的萌芽阶段。,11/27/2024,6,1972,年,1973,年间,贝尔实验室的,D.M.Ritchie,在保留,B,语言优点的基础上,创建了,C,语言。,1973,年,UNIX,操作系统被用,C,语言改写,称为,UNIX,第五版。最初的,C,语言只是一种,UNIX,操作系统的工作语言,依附于,UNIX,系统,主要在贝尔实验室内部使用。,UNIX,以后的第六版、第七版、,SYSTEM,和,SYSTEM,都是在第五版的基础上发展起来的,C,语言也作了多次改进。到,1975,年,UNIX,第六版的公布,使,C,语言受到人们的普遍注意。,11/27/2024,7,UNIX,操作系统的广泛使用,促进了,C,语言的迅速发展与普及,C,语言的发展与普及也促进了,UNIX,操作系统的推广。到,1978,年出现了独立于,UNIX,和,PDP,计算机的,C,语言,从而,,C,语言被迅速移植到大、中、小与微型机上。当年,B.W.Kernighan,和,D.M.Ritchie,以,UNIX,第七版的,C,编译程序为基础,出版了影响深远的名著,C,程序设计语言,。,11/27/2024,8,各机构推出了自己的,C,语言与版本,某些执行过程的微小差别不时引起,C,程序之间的不兼容。美国国家标准协会(,ANSI,)从,1983,年开始,经过长达五年的努力,制定了,C,语言的新标准,ANSI C,现在提及,C,语言的标准就是指该新标准。,ANSI C,比原标准,C,有很大的发展,解决了经典定义中的二义性,给出了,C,语言的新特点。,K&R,也以新标准改写了他们的经典著作。任何,C,程序都必须遵循,ANSI C,标准,本教材的主体也以,ANSI C,作为基础。,11/27/2024,9,二、当代最优秀的程序设计语言,早期的,C,语言主要是用于,UNIX,系统。由于语言的强大功能和各方面的优点逐渐为人们认识,到了八十年代,,C,开始进入其它操作系统,并很快在各类大、中、小和微型计算机上得到了广泛的使用。成为当代最优秀的程序设计语言之一。,11/27/2024,10,三、语言的特点,3,、数据结构丰富,具有现代化语言的各种数据结构。,C,的数据类型丰富,能实现各种复杂的数据运算(其中指针类型更为特殊);,1,、语言简洁、紧凑,使用方便、灵活。,C,语言一共只有,32,个关键字,,9,种控制语句,书写形式自由,压缩了一切不必要的成分;,2,、运算符丰富。,C,语言运算符包含的范围广泛,共有,34,种运算符,使,C,的运算类型极其丰富,表达式类型多样化,灵活使用各种运算符可以实现其他语言难以实现的运算;,11/27/2024,11,7,、生成目标代码质量高,程序执行效率高,可移植性好。,4,、具有结构化的控制语句(如,ifelse,语句、,switch,语句、,while,语句、,dowhile,语句、,for,语句)。用函数作为程序模块单位,便于实现程序的模块化;,5,、语法限制不太严格,程序设计自由度大;,6,、,C,语言允许直接访问物理地址,能进行位(,bit,)操作,能实现汇编语言的大部分功能,可以对硬件直接操作,因此语言集高级语言和低级语言的功能于一体。既可用于系统软件的开发,也适合于应用软件的开发;,11/27/2024,12,四、语言版本,目前最流行的语言有以下几种:,Microsoft C,或称,MS C,Borland Turbo C,或称,Turbo C,AT&T C,这些语言版本不仅实现了,ANSI C,标准,而且在此基础上各自作了一些扩充,使之更加方便、完美。,11/27/2024,13,五、面向对象的程序设计语言,在,C,的基础上,一九八三年又由贝尔实验室的,Bjarne Strou-strup,推出了,C+,。,C+,进一步扩充和完善了语言,成为一种面向对象的程序设计语言。,C+,目前流行的最新版本是,Borland C+4.5,Symantec C+6.1,和,Microsoft VisualC+6.0,。,C+,提出了一些更为深入的概念,它所支持的这些面向对象的概念容易将问题空间直接地映射到程序空间,为程序员提供了一种与传统结构程序设计不同的思维方式和编程方法。因而也增加了整个语言的复杂性,掌握起来有一定难度。,11/27/2024,14,六、和,C,语言是面向过程的程序设计语言,是,C+,的基础;,C+,语言是,C,语言发展的新阶段,是一种更好的,C,语言,是应用广泛的面向对象的程序设计语言。,C+,语言和语言在很多方面是兼容的。因此,掌握了语言,再进一步学习,C+,就能以一种熟悉的语法来学习面向对象的语言,从而达到事半功倍的目的。,11/27/2024,15,七、简单的程序介绍,为了说明语言源程序结构的特点,先看以下几个程序。这几个程序由简到难,表现了语言源程序在组成结构上的特点。虽然有关内容还未介绍,但可从这些例子中了解到组成一个,C,源程序的基本部分和书写格式。,11/27/2024,16,例,EX1_1,输出一条语句。,main(),printf(“This is a C program.n);,main,是主函数的函数名,表示这是一个主函数。每一个,C,源程序都必须有,且只能有一个主函数,(main,函数,),。函数调用语句,,printf,函数的功能是把要输出的内容送到显示器去显示。,printf,函数是一个由系统定义的标准函数,可在程序中直接调用,。,11/27/2024,17,例,EX1_2,输出正弦三角函数的值。,#include“,stdio.h,”,/*include,称为文件包含命令*,/,#include“,math.h,”,/*,扩展名为,.h,文件也称为头文件*,/,main(),/*main,函数*,/,double x,s;,/*,定义两个实数变量*,/,printf(input number:n);,/*,显示提示信息*,/,scanf(%lf,/*,从键盘获得一个实数,x*/,s=sin(x);,/*,求,x,的正弦,并把它赋给变量,s*/,printf(sine of%lf is%lfn,x,s);,/*,显示程序运算结果*,/,/*main,函数结束*,/,11/27/2024,18,main(),之前的两行称为预处理命令,(,详见第十章,),。预处理命令还有其它几种,这里的,include,称为文件包含命令,其意义是把尖括号,或引号,“”,指定的文件包含到本程序来,成为本程序的一部分。被包含的文件通常是由系统提供的,其扩展名为,.h,。因此也称为头文件或首部文件。语言的头文件中包括了各个标准库函数的函数原型。因此,凡是在程序中调用一个库函数时,都必须包含该函数原型所在的头文件。在主函数前用,include,命令包含了,sin,,,scanf,和,printf,,其头文件为,math.h,和,stdio.h,。,11/27/2024,19,主函数体中又分为两部分,一部分为说明部分,另一部分执行部分。说明是指变量的类型说明。语言规定,源程序中所有用到的变量都必须,先说明,后使用,,否则将会出错。这一点是编译型高级程序设计语言的一个特点。说明部分是,C,源程序结构中很重要的组成部分。本例中使用了两个变量,x,,,s,,用来表示输入的自变量和,sin,函数值。由于,sin,函数要求这两个量必须是双精度浮点型,故用类型说明符,double,来说明这两个变量。说明部分后的四行为执行部分或称为执行语句部分,用以完成程序的功能。执行部分的第一行是输出语句,调用,printf,函数在显示器上输出提示字符串,输入自变量,x,的值。第二行为输入语句,调用,scanf,函数,接受键盘上输入的数并存入变量,x,中。第三行是调用,sin,函数并把函数值送到变量,s,中。第四行是用,printf,函数输出变量,s,的值,即,x,的正弦值。,11/27/2024,20,scanf,和,printf,这两个函数分别称为格式输入函数和格式输出函数。其意义是按指定的格式输入输出值。因此,这两个函数在括号中的参数表都由以下两部分组成:,“格式控制串”,参数表,格式控制串是一个字符串,必须用双引号括起来,它表示了输入输出量的数据类型。在,printf,函数中还可以在格式控制串内出现非格式控制字符,这时在显示屏幕上将原文照印。参数表中给出了输入或输出的量。当有多个量时,用逗号间隔。例如:,printf(sine of%lf is%lfn,x,s);,其中,%lf,为格式字符,表示按双精度浮点数处理。它在格式串中两次现,对应了,x,和,s,两个变量。其余字符为非格式字符则照原样输出在屏幕上。,11/27/2024,21,例,EX1_3,求两个数中较大的一个,并输出。,int max(int a,int b);,/*,函数说明*,/,main(),/*,主函数*,/,int x,y,z;,/*,变量说明*,/,printf(input two numbers:n);,scanf(%d%d,/*,输入,x,y,值*,/,z=max(x,y);,/*,调用,max,函数
展开阅读全文