《高级语言程序设计》教案湖北师范学院计算机科学系C语言程序设计概述教学目标:了解程序设计语言的发展历史及其支持环境;熟悉C语言程序上机实验操作步骤;了解C语言程序的基本结构以及学会使用库函数和用户自定义函数组装C程序。
教学重点:C语言程序上机实验操作步骤;用库函数和用户自定义函数组装C程序。
教学难点:用用户自定义函数组装C程序。
§1.1 程序与程序设计语言程序设计语言是人与计算机进行信息交流的工具。
程序设计是一种编写计算机程序的活动。
由于计算机是一种专门用程序来解决特定问题的通用工具,因而程序设计是为解决某一特定问题而构造一种专用工具的活动。
程序是实体在计算机内部的表示。
实体具有一个名字,一组表示该实体特征的数据以及若干作用在这些数据上的行为。
实体具有的数据表示它的状态,而这些状态可由实体的行为来改变。
例如,银行帐户是实体,存款和取款是该实体的行为。
1.1.1 程序设计语言的发展程序设计语言伴随着计算机技术的进步而不断升级换代,通常人们将程序设计语言的发展分为以下四个阶段。
(1)机器语言机器语言是一种CPU的指令系统,它是该CPU可以识别的一组由0和1序列构成的指令代码。
下面是某CPU指令系统中的两条指令:10000000 加10010000 减用机器语言编写程序,就是从所使用的CPU的指令系统中挑选合适的指令,组成一个指令系列。
这种程序虽然可以被机器直接理解和执行,但是由于它们不直观、难记、难认、难理解、不易查错,只能被少数专业人员掌握,同时程序的生产效率很低,质量难以保证。
这种繁重的手工方式与高速、自动的计算机极不相称。
(2)汇编语言为减轻人们在编程中的劳动强度,20世纪50年代中期人们开始用一些“助记符”代表0,1编程。
例如,前面的两条机器指令可以定成:ADD A,BSUB A,B这种用助记符号描述的指令系统,称为符号语言或汇编语言。
用汇编语言编程,程序的生产率及质量都有所提高。
但是汇编语言指令是机器不能直接识别、理解和执行的。
用它编写的程序经检查无误后,要先翻译成机器语言程序才能被机器理解、执行。
这个翻译过程称为“代真”。
代真之后得到的机器语言程序称目标程序,代真之前的程序称为源程序。
机器语言和汇编语言都依赖于具体的计算机,是一种面向机器的程序设计语言。
面向机器的语言可以编制出效率极高的程序,但是需要程序员熟悉机器的内部结构,并且要“手工”地进行存储器分配。
这种编程劳动强度很大,给计算机的普及推广造成很大的障碍。
(3)高级语言机器语言和汇编语言是面向机器的,随机器而异。
1954出现的FORTRAN语言以及随后相继再现的其它高级语言,使人们开始摆脱进行程序设计必须先熟悉机器的桎梏,把精力集中于解题思路和方法,使程序设计语言开始与解题方法相结合。
其中一种方法是把解题过程看作是数据被加工的过程。
基于这种方法的程序设计语言称为面向过程的程序设计语言。
C语言就是一种面向过程的程序设计语言。
使用高级语言编程可以大大地降低编程过程的劳动强度,提高编程效率。
高级语言的诞生是计算机技术发展史上的一个里程碑。
它使人们能摆脱具体机器指令系统的束缚,用接近人们习惯的语言来构思解题过程,从而大大提高了编程效率,使人们能够编制出越来越大的程序,以满足日益广泛而深入的应用需求。
实际上,程序是对现实世界的动态状态的模拟。
面向过程的程序设计认为,每个程序都要完成一些规定的功能。
每个功能的实现是通过对数据进行一系列的加工的过程而实现的。
因而程序设计包括组织数据—设计数据结构,以及设计对数据结构进行加工的过程—设计算法两个部分。
N.wirth给出一个著名的公式:程序=数据结构+算法。
(4)面向对象的程序设计语言面向对象的程序设计是一种结构模拟方法,它把现实世界看成是由许多对象组成。
对象与对象之间通过相互发送和接收消息进行联系。
消息激发对象本身的运动,形成对象状态的变化。
从程序结构的角度来看,每个对象都是一个数据和方法的封装体—抽象数据类型。
从分类学的观点来看,客观世界中的对象都是可以分类的。
也就是说,所有的对象都属于特定的类,或者说每一个对象都是类的一个实例。
因而,面向对象的程序设计的一个关键是定义类,并由类生成对象。
面向对象的程序比面向过程的程序更清晰、易懂,更适宜编写更大规模的程序,已为成为当代程序设计的主流。
面向对象的程序设计语言很多,其中广泛使用的一种语言是C++。
C++语言是一种多范型程序设计语言,不仅可以用它编写面向对象的程序,还可以用它编写面向过程的程序。
1.1.2 程序设计语言的支持环境操作系统是各种软件中最重要的一种,它是各种软件的核心与基础,所有其它软件的运行都要在操作系统的控制下进行。
操作系统的作用是有效地组织和利用计算机的软、硬件资源,使各种程序都能在操作系统的管理下协调工作。
P3图1.2表示用高级语言书写的源程序必须经过高级语言编译系统处理(编译),然后在操作系统控制下才能被计算机执行。
操作系统的主要功能包括CPU管理、存储器管理、设备管理、文件管理和作业管理等。
不同操作系统的功能和工作方式是不同的。
目前,广泛流行的操作系统有WINDOWS和UNIX。
源程序的编辑、编译、连接与执行C语言采用编译方式将源程序转换成二进制的目标代码。
编写好一个C程序到完成运行一般经过以下几个步骤:(1)编辑:编辑包括以下内容:将源程序中的字符逐个输入到计算机内存;修改源程序;将修改好的源程序保存在磁盘文件中。
编辑的对象是源程序,它是以ASCII代码的形式输入和存储的,不能被计算机执行。
(2)编译:编译就是将已编辑好的源程序翻译成二进制的目标代码。
在编译时,还要对源程序进行语法(用来刻划什么样的符号串可组成一个有效的程序)检查,如果发现有错,则在屏幕上显示出错提示信息,此时应重新进入编辑状态,对源程序进行修改后再重新编译,直到通过编译为止。
应当指出,经过编译之后得到的二进制代码还不能直接执行,因为每一个模块往往是单独编译的,必须把经过编译的各个模块的目标代码与系统提供的标准模块(例如,C语言中的标准函数)连接后才能执行。
(3)连接:将各模块的二进制目标代码与系统标准模块经过连接处理后,得到具有绝对地址的可执行文件,它是计算机能够直接执行的文件。
(4)执行:执行一个经过编译和连接的可执行的目标文件。
只有在操作系统的支持和管理下才能执行可执行的目标文件。
集成化的工具环境已将编辑、编译、连接、调试工具集于一身(例如,TURBO C 2.0),用户可以很方便地在窗口下连续进行编辑、编辑、连接、调试、运行的全过程。
§1.2 C语言的历史和特点1.2.1 C语言的历史Algol 60 → CPL → BCPL → B → C →旧标准 C → ANSI C → C++ →Visual C++┆┆┆┆┆┆(新标准C)┆┆┆┆┆┆┆1960 1963 1967 1970 1972 1978 1983C语言的诞生与发展:在C语言诞生以前,系统软件主要是用汇编语言编写的。
由于汇编语言程序依赖于计算机硬件,其可读性和可移植性都很差;但一般的高级语言又难以实现对计算机硬件的直接操作(这正是汇编语言的优势),于是人们盼望有一种兼有汇编语言和高级语言特性的新语言。
C语言是贝尔实验室于70年代初研制出来的,后来又被多次改进,并出现了多种版本。
80年代初,美国国家标准化协会(ANSI),根据C语言问世以来各种版本对C语言的发展和扩充,制定了ANSI C标准(1989年再次做了修订)。
ALGOL60(1960,面向问题的高级语言,不宜用来编写系统程序)CPL(1963,英国剑桥大学,规模较大)BCPL(1967,剑桥大学Matin Richards,作了简化)B(1970,美国贝尔实验室Ken Thompson,进一步简化,又过于简单,功能有限)C(1972-1973,贝尔实验室D.M.Ritchie,保持了精练,接近硬件的优点,克服了B语言过于简单的缺点)1973年,K.Thompson和D.M.Ritchie合作用C改写UNIX(第5版)。
1975年出的的UNIX第6版使人们普遍注意C语言。
以1978年发表的UNIX第7版中的C编译程序为基础,Brian W.Kernigha和Dennis M.Ritchie合著了影响深远的《The C Programming Language》,书中介绍的C语言称为标准C。
1983年,美国国家标准化协会(ANSI)制定了新的标准,称为ANSI C。
现在微机上常用的C语言编译系统有Microsoft C,Turbo C,Quick C。
我们的教材选用的是Turbo C 2.0版本。
1.2.2 C语言的特点1.语言简洁,表达能力强语言简洁、紧凑,使用方便、灵活。
一共只有32个关键字,9种控制语句;运算符丰富。
共有34种运算符;数据结构丰富,便于数据的描述与存储;具有结构化的控制语句;强大的库函数,用函数作为程序模块以实现程序的模块化;语法限制不太严格,程序设计自由度大。
2.融合高、低级语言的中级语言具有高级语言基本结构;可直接对硬件进行操作,允许直接访问物理地址;生成的代码质量高,生成目标程序运行速度高,占有内存少,程序执行效率高。
3.可移植性好:独立于具体机器。
§1.3 用库函数组装C程序从语言学的角度来看,通常语言都具有如下的体系结构:符号=>字=>词=>短语=>句子=>段落=>篇章计算机语言属于语言范畴,当然满足这种普遍规律。
但是与自然语言相比,由于其受到使用环境的约束,计算机语言在语义(描述的是用这种语言编写程序的含义)上要简单得多。
例如,单词词汇相对较少,句子类型相对较少等等。
但是麻雀虽小,五脏俱全。
C语言的体系结构如下:字符=>标识符、常量、运算符、分界符=>表达式=>语句=>函数(库函数和用户自定义函数)=>程序可见C语言的结构和自然语言的结构基本保持一致。
C语言本身提供的语句很少,许多功能都是通过函数来实现的。
例如输入输出功能并不是C语言本身提供的,而是C的库函数所提供的。
这样做的目的是使C 语言的核心部分规模较小,而外围(函数)可以做得丰富,并且可以根据需要增加新的函数,使C语言具有较大的灵活性和多方面的功能。
在编写C程序时应尽量使用C的库函数所提供的函数功能来实现自己的目的。
例1.1:显示“Program is fun”信息。
main( ){printf(“Program is fun\n”);}说明:(1)C程序是由函数组成的,每一个函数完成相对独立的功能。
main是函数名,函数名后面一对圆括号是写参数的,本程序中main函数没有参数故不写,但是一对圆括号不能省略。