《高级语言程序设计》教案.doc_第1页
《高级语言程序设计》教案.doc_第2页
《高级语言程序设计》教案.doc_第3页
《高级语言程序设计》教案.doc_第4页
《高级语言程序设计》教案.doc_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

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

文档简介

C程序设计 正大软件学院网络技术系 教案2010年2011学年第一学期课程名称C程序设计任课教师 贺 燕第1章 程序设计和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 1983语言的诞生与发展:在C语言诞生以前,系统软件主要是用汇编语言编写的。由于汇编语言程序依赖于计算机硬件,其可读性和可移植性都很差;但一般的高级语言又难以实现对计算机硬件的直接操作(这正是汇编语言的优势),于是人们盼望有一种兼有汇编语言和高级语言特性的新语言。语言是贝尔实验室于70年代初研制出来的,后来又被多次改进,并出现了多种版本。80年代初,美国国家标准化协会(ANSI),根据语言问世以来各种版本对语言的发展和扩充,制定了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 funn”);说明:(1) C程序是由函数组成的,每一个函数完成相对独立的功能。main是函数名,函数名后面一对圆括号是写参数的,本程序中main函数没有参数故不写,但是一对圆括号不能省略。一个完整的C程序必须有一个称为主函数的main函数,main函数在程序中的位置可以改变,但是程序总是从main函数开始执行。main函数后面有一对花括号,花括号中的内容称为函数体。函数体通常由变量说明部分和语句执行部分组成。变量说明部分的作用是定义数据类型,语句执行部分给出操作指令以便实现函数功能。语句执行部分又由若干条语句组成。C语言中规定每条语句以分号结束,分号是语句不可缺少的组成部分。(2) printf是C库函数中的一个函数,它的功能是按照指定的输出格式在显示器上显示指定的内容。字符串末尾的字符n是C语言中的一个转义字符,其作用是“回车换行”。注意:printf在输出时实际上是将字符n转换成“回车”符和“换行”符后再进行输出的。(3) 函数printf由主函数main调用。例1.2 计算一个数的正弦值。#include math.hmain( ) float x;x=sin(0.19199); /*调用sin函数*/printf(%fn,x);说明:(1) 语句“float x;”的作用是声明x是一个实型变量。(2) 语句“x=sin(0.19199);”的作用是执行一次函数调用,求出0.19199弧度的正弦值,并送给左边的实型变量x。sin是C系统的库函数,在调用数学库函数时,要用到一些系统提供的信息,这些信息包含在math.h头文件中。编译命令#include “math.h”的作用是将math.h文件的内容代替这行#include命令,也就是使该文件的内容被整个地调到main的前面。printf函数和scanf函数的定义在头文件“stdio.h”中,在TC2.0中使用printf函数和scanf函数时可以不需要使用#include “stdio.h”命令将该文件显式地包含进来,但在BC3.1中使用printf函数和scanf函数时必须使用#include “stdio.h”命令将该文件显式地包含进来。(3) printf函数括号中的内容分为两部分:双引号内的部分是格式字符串,用它指定输出时的打印格式,双引号外的部分是输出项列表。(4) 符号“/*”与“*/”之间的内容为注释信息。注释信息对程序的运行结果不发生任何影响,只是为了帮助人们更好地理解程序中有关部分的功能。1.4 用自己设计的C函数组装C程序用库函数组装C程序是程序设计的一条捷径和重要方法。但是任何函数库都不可能是包罗万象的,当我们在函数库中找不到所需功能的函数时,便要动手设计自己所需要的函数。设计的基本方法是从主函数开始,按调用关系,自上而下地进行。例1.3 求三个数的平均值。main( )float a,b,c,ave;a=3.5; b=4.6; c=7.9;ave=average(a,b,c); printf(average=%f,ave);说明:语句“ave=average(a,b,c);”定义了一个复合操作。它的执行过程是首先调用一个函数average,该函数的实在参数是a,b,c,然后再把函数average的计算结果赋给变量ave。那么究竟函数average要进行怎样的运算呢?这要根据average的定义来确定。这个定义可以由系统预先定义好放在函数库中,也可以由程序员自己定义。这里我们需要一个求三个数平均值的函数,但从库函数中找不到求三个数平均值的函数,因此就需要自己设计一个average函数来实现上述功能。函数average的定义如下所示:float average(float a,float b,float c)float aver;aver=(a+b+b)/3;return(aver);说明:“float average(float x,float y,float z)”称为函数首部,用于说明函数的名称,返回值的类型,以及对什么样的数据进行操作。函数体中的return语句的作用是将运算结果aver的值返回主调函数。函数定义中所使用的参数称为形式参数(例如,average函数中的a,b,c)。注意:形式参数只用于描述被加工的数据是一种什么样的角色,以及如何对它们进行加工,并不说明也不可能说明哪些具体的数据被加工,具体的数据由函数调用语句在调用时从对应的实在参数传递给形式参数。例1.4 求任意三个数的平均值。上面的例子是求三个固定数的平均值,这三个数是在main函数中用赋值语句确定的。本例中不用赋值语句确定三个变量的值,而从键盘上输入三个实数,以增加程序的灵活性。只要将上例main函数中的第四行赋值语句改写成以下输入语句就可满足本题的要求:scanf(“%f,%f,%f”,&a,&b,&c);说明:scanf函数是C语言提供的库函数,它的功能是从键盘上输入所需要的数据并赋给有关变量。在定义变量a,b,c后,系统编译时给变量a,b,c在内存中分配固定的存储单元。&a,&b,&c分别表示变量a,b,c所对应的存储单元的地址。语句:scanf(“%f,%f,%f”,&a,&b,&c);的含义是把从键盘输入的三个数送到地址&a,&b,&c的单元中去。例1.5 求两个数中的最大数。main( )float a,b;scanf(%f%f,&a,&b);if (ab) printf(%fn,a); else printf(%fn,b);说明:if语句的功能是通过对变量a和b的值进行比较,决定输出变量a的值还是输出变量b的值。也可以定义一个求两个数中最大数的函数max2。在主函数main中调用max2求出变量a和b中最大的数,并把此数赋给变量max,最后通过printf函数输出变量max的值。float max2(float x,float y)float z;if(xy) z=x; else z=y;return(z);main( )float a,b,max; scanf(%f%f,&a,&b);max=max2(a,b);printf(max is %fn,max);例1.6 求1+2+3+10的值。main( )int sum,i; s

温馨提示

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

最新文档

评论

0/150

提交评论