下载下载
第1章程序设计与算法
1.1 程序设计语言的发展
自1 9 4 6年世界上第一台电子计算机问世以来,计算机科学及其应用的发展十分迅猛,计
算机被广泛地应用于人类生产、生活的各个领域,推动了社会的进步与发展。特别是随着国
际互联网(I n t e r n e t)日益深入千家万户,传统的信息收集、传输及交换方式正被革命性地改
变,我们已经难以摆脱对计算机的依赖,计算机已将人类带入了一个新的时代—信息时代。
新的时代对于我们的基本要求之一是:自觉地、主动地学习和掌握计算机的基本知识和
基本技能,并把它作为自己应该具备的基本素质。要充分认识到,缺乏计算机知识,就是信
息时代的“文盲”。
对于理工科的大学生而言,掌握一门高级语言及其基本的编程技能是必需的。大学学习,
除了掌握本专业系统的基础知识外,科学精神的培养、思维方法的锻炼、严谨踏实的科研作
风养成,以及分析问题、解决问题的能力的训练,都是日后工作的基础。学习计算机语言,
正是一种十分有益的训练方式,而语言本身又是与计算机进行交互的有力的工具。
一台计算机是由硬件系统和软件系统两大部分构成的,硬件是物质基础,而软件可以说
是计算机的灵魂,没有软件,计算机是一台“裸机”,是什么也不能干的,有了软件,才能灵
动起来,成为一台真正的“电脑”。所有的软件,都是用计算机语言编写的。
计算机程序设计语言的发展,经历了从机器语言、汇编语言到高级语言的历程。
1. 机器语言
电子计算机所使用的是由“
0”和“1”组成的二进制数,二进制是计算机的语言的基础。
计算机发明之初,人们只能降贵纡尊,用计算机的语言去命令计算机干这干那,一句话,就
是写出一串串由“
0”和“1”组成的指令序列交由计算机执行,这种语言,就是机器语言。
使用机器语言是十分痛苦的,特别是在程序有错需要修改时,更是如此。而且,由于每台计
算机的指令系统往往各不相同,所以,在一台计算机上执行的程序,要想在另一台计算机上
执行,必须另编程序,造成了重复工作。但由于使用的是针对特定型号计算机的语言,故而
运算效率是所有语言中最高的。机器语言,是第一代计算机语言。
2. 汇编语言
为了减轻使用机器语言编程的痛苦,人们进行了一种有益的改进:用一些简洁的英文字
母、符号串来替代一个特定的指令的二进制串,比如,用“
A D D”代表加法,“M O V”代表
数据传递等等,这样一来,人们很容易读懂并理解程序在干什么,纠错及维护都变得方便了,
这种程序设计语言就称为汇编语言,即第二代计算机语言。然而计算机是不认识这些符号的,
这就需要一个专门的程序,专门负责将这些符号翻译成二进制数的机器语言,这种翻译程序
被称为汇编程序。
汇编语言同样十分依赖于机器硬件,移植性不好,但效率仍十分高,针对计算机特定硬
件而编制的汇编语言程序,能准确发挥计算机硬件的功能和特长,程序精炼而质量高,所以
2 C语言程序设计
下载
2 C语言程序设计
下载
至今仍是一种常用而强有力的软件开发工具。
3. 高级语言
从最初与计算机交流的痛苦经历中,人们意识到,应该设计一种这样的语言,这种语言
接近于数学语言或人的自然语言,同时又不依赖于计算机硬件,编出的程序能在所有机器上
通用。经过努力,1 9 5 4年,第一个完全脱离机器硬件的高级语言—F O RT R A N问世了,4 0多
年来,共有几百种高级语言出现,有重要意义的有几十种,影响较大、使用较普遍的有
F O RT R A N、A L G O L、C O B O L、B A S I C、L I S P、S N O B O L、P L / 1、P a s c a l、C、P R O L O G、
A d a、C + +、V C、V B、D e l p h i、J AVA等。
高级语言的发展也经历了从早期语言到结构化程序设计语言,从面向过程到非过程化程
序语言的过程。相应地,软件的开发也由最初的个体手工作坊式的封闭式生产,发展为产业
化、流水线式的工业化生产。
6 0年代中后期,软件越来越多,规模越来越大,而软件的生产基本上是人自为战,缺乏
科学规范的系统规划与测试、评估标准,其恶果是大批耗费巨资建立起来的软件系统,由于
含有错误而无法使用,甚至带来巨大损失,软件给人的感觉是越来越不可靠,以致几乎没有
不出错的软件。这一切,极大地震动了计算机界,史称“软件危机”。人们认识到:大型程序
的编制不同于写小程序,它应该是一项新的技术,应该像处理工程一样处理软件研制的全过
程。程序的设计应易于保证正确性,也便于验证正确性。
1 9 6 9年,提出了结构化程序设计方
法,1 9 7 0年,第一个结构化程序设计语言—P a s c a l语言出现,标志着结构化程序设计时期的
开始。
8 0年代初开始,在软件设计思想上,又产生了一次革命,其成果就是面向对象的程序设
计。在此之前的高级语言,几乎都是面向过程的,程序的执行是流水线似的,在一个模块被
执行完成前,人们不能干别的事,也无法动态地改变程序的执行方向。这和人们日常处理事
物的方式是不一致的,对人而言是希望发生一件事就处理一件事,也就是说,不能面向过程,
而应是面向具体的应用功能,
也就是对象(
o b j e c t)。其方法就是软件的集成化,如同硬件的
集成电路一样,生产一些通用的、封装紧密的功能模块,称之为软件集成块,它与具体应用
无关,但能相互组合,完成具体的应用功能,同时又能重复使用。对使用者来说,只关心它
的接口(输入量、输出量)及能实现的功能,至于如何实现的,那是它内部的事,使用者完
全不用关心,C + +、V B、D e l p h i就是典型代表。
高级语言的下一个发展目标是面向应用,也就是说:只需要告诉程序你要干什么,程序
就能自动生成算法,自动进行处理,这就是非过程化的程序语言。
1.2 C语言的特点
1.2.1 C语言是中级语言
C语言通常称为中级计算机语言。中级语言并没有贬义,不意味着它功能差、难以使用、
或者比B A S I C、P a s c a l那样的高级语言原始,也不意味着它与汇编语言相似,会给使用者带来
类似的麻烦。C语言之所以被称为中级语言,是因为它把高级语言的成分同汇编语言的功能结
合起来了。表1 - 1表明了C语言在计算机语言中所处的地位。
第1章程序设计与算法3
下载
第1章程序设计与算法3
下载
表1-1 C语言在计算机语言中的地位
高级
A d a、M o d u l a - 2、P a s c a l、C O B O L、F O RT R A N、B A S I C
中级
C、F O RT H、M a c r o - a s s e m b l e r
低级
A s s e m b l e r
作为中级语言,
C允许对位、字节和地址这些计算机功能中的基本成分进行操作。
C语言
程序非常容易移植。可移植性表示为某种计算机写的软件可以用到另一种机器上去。举例来
说,如果为苹果机写的一个程序能够方便地改为可以在
IBM PC 上运行的程序,则称为是可移
植的。
所有的高级语言都支持数据类型的概念。一个数据类型定义了一个变量的取值范围和可
在其上操作的一组运算。常见的数据类型是整型、字符型和实数型。虽然
C语言有五种基本数
据类型,但与
P a s c a l或A d a相比,它却不是强类型语言。
C程序允许几乎所有的类型转换。例
如,字符型和整型数据能够自由地混合在大多数表达式中进行运算。这在强类型高级语言中
是不允许的。
C语言的另一个重要特点是它仅有
3 2个关键字,这些关键字就是构成
C语言的命令。和
IBM PC的B A S I C相比,后者包含的关键字达
1 5 9个之多。
1.2.2 C语言是结构化语言
虽然从严格的学术观点上看,
C语言是块结构(b l o c k - s t r u c t u r e d)语言,但是它还是常被
称为结构化语言。这是因为它在结构上类似于
A L G O L、P a s c a l和M o d u l a - 2(从技术上讲,块
结构语言允许在过程和函数中定义过程
或函数。用这种方法,全局和局部的概念可以通过
“作用域”规则加以扩展,“作用域”管理变量和过程的“可见性”。因为C语言不允许在函数
中定义函数,所以不能称之为通常意义上的块结构语言)。
结构化语言的显著特征是代码和数据的分离。这种语言能够把执行某个特殊任务的指令
和数据从程序的其余部分分离出去、隐藏起来。获得隔离的一个方法是调用使用局部(临时)
变量的子程序。通过使用局部变量,我们能够写出对程序其它部分没有副作用的子程序。这
使得编写共享代码段的程序变得十分简单。如果开发了一些分离很好的函数,在引用时我们
仅需要知道函数做什么,不必知道它如何做。切记:过度使用全局变量(可以被全部程序访
问的变量)会由于意外的副作用而在程序中引入错误。
结构化语言比非结构化语言更易于程序设计,用结构化语言编写的程序的清晰性使得它
们更易于维护。这已是人们普遍接受的观点了。
C语言的主要结构成分是函数
C的独立子程序。
在C语言中,函数是一种构件(程序块),是完成程序功能的基本构件。函数允许一个程序的
诸任务被分别定义和编码,使程序模块化。可以确信,一个好的函数不仅能正确工作且不会
对程序的其它部分产生副作用。
1.2.3 C语言是程序员的语言
也许你会问“所有的计算机语言不都是程序员使用的吗?”,回答是断然的“否”。我们
考虑典型的非程序员的语言
C O B O L和B A S I C。C O B O L的设计使程序员难以改变所编写代码
的可靠性,甚至不能提高代码的编写速度。
然而C O B O L设计者的本意却是打算使非程序员能读程序(这是不大可能的事)。注意,
4 C语言程序设计
下载
4 C语言程序设计
下载
这并不是攻击C O B O L的优点,而是想指出,它没有被设计成为程序员的理想语言。
BASIC 的
程序员最常用的编程语言主要目的是允许非专业程序员在计算机上编程解决比较简单的问题。与其形成鲜明对照的是
C
语言,由于程序生成、修改和现场测试自始至终均由真正的程序员进行,因而它实现了程序
员的期望:很少限制、很少强求、块结构、独立的函数以及紧凑的关键字集合。用
C语言编程,
程序员可以获得高效机器代码,其效率几乎接近汇编语言代码。
C语言被程序员广泛使用的另一个原因是可以用它代替汇编语言。汇编语言使用的汇编指
令,是能够在计算机上直接执行的二进制机器码的符号表示。汇编语言的每个操作都对应为
计算机执行的单一指令。虽然汇编语言给予程序员达到最大灵活性和最高效率的潜力,但开
发和
调试汇编语言程序的困难是难以忍受的。非结构性使得汇编语言程序难于阅读、改进和
维护。也许更重要的是,汇编语言程序不能在使用不同
C P U的机器间移植。
最初,C语言被用于系统程序设计。一个“系统程序”是一大类程序的一部分,这一大类
构成了计算机操作系统及实用程序。通常被称为系统程序的有:
. 操作系统。
. 翻译程序。
. 编辑程序。
. 汇编程序。
.
编译程序。
. 数据库管理程序。
随着C语言的普及,加之其可移植性和高效率,许多程序员用它设计各类程序。几乎所有
的计算机上都有
C语言编译程序,这使我们可以很少改动甚至不加改动地将为一种机器写的
C
语言源程序在另一种机器上编译执行。可移植性节省了时间和财力。
C语言不仅在速度和结构上有它的优势,而且每个
C语言系统都提供了专门的函数库,程
序员可以根据不同需要对其进行剪裁,以适应各种程序的设计。由于它允许(更准确地说是
鼓励)分别编译,所以
C语言可使程序员方便地管理大型项目,最大限度地减少重复劳动。
1.3 C语言的程序结构
1.3.1 基本程序结构
任何一种程序设计语言都具有特定的语法规则和规定的表达方法。一个程序只有严格按
照语言规定的语法和表达方式编写,才能保证编写的程序在计算机中能正确地执行,同时也
便于阅读和理解。
为了了解C语言的基本程序结构,我们先介绍几个简单的
C程序。
[例1 - 1 ]
# include <stdio.h>
m a i n ( ) / *主函数* /
{
printf("This is a sample of c program. \n"); /*
调用标准函数,
显示引号中的内容* /
}
第1章程序设计与算法5
下载
第1章程序设计与算法5
下载
这是一个最简单的
C程序,其执行结果是在屏幕上显示一行信息:
R U N.
This is a sample of c program.
[例1 - 2 ]
m a i n ( ) / *主函数* /
{
void proc(); /* 函数声明
* /
int a=3; / *指定a为整数,初始值为3 * /
p r o c ( ) ; / *调用函数p r o c ,无返回* /
a = f u n c ( ) ; / *调用函数f u n c ,结果返回给a * /
printf("This is a sample of c program. \n");
}
void proc() / *定义函数p r o c , v o i d指定该函数不返回结果* /
{
printf("Hello. \n");
}
int func() / *定义函数f u n c , i n t指定该函数返回一个整数* /
{
r e t u r n ( 2 ) ; / *返回整数2 * /
}
本程序的执行过程是:
. 程序从m a i n ( )处开始。
.
变量a代表一个整数,并且初始值为
3。
. 执行程序(函数)
p r o c ( );屏幕上显示H e l l o,\ n为转义字符,代表换行的意思。
. 执行程序(函数)f u n c ( );并将结果赋予a,此时,a的值为2。
.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论