人人范文网 范文大全

C语言

发布时间:2020-03-03 01:26:39 来源:范文大全 收藏本文 下载本文 手机版

第1章 C语言程序设计初步

本章是C语言程序设计的入门部分, 从整体上介绍C语言的起源和发展,讲述C语言的特点、结构和基础语法要点。

1.1 C语言概述

1.1.1 C语言的发展

C语言是界上广泛流行的的程序设计语言之一,它适合于作系统描述语言,即用来写系统软件,也可以用来写应用软件。

早期的操作系统等系统软件主要是用汇编语言编写的(包括UNIX操作系统在内)。但是汇编语言存在明显的缺点,即可读性和可移植性都比较差,为了提高可读性和可移植性,最好改用高级语言,但是一般高级语言难以实现汇编语言的某些功能(汇编语言可以直接对硬件进行操作,例如对内存地址的操作、位操作等)。人们希望能找到一种既具有一般高级语言特性,又具有低级语言底层操作能力的语言,集它们的优点于一身,于是C语言在70年代初应运而生了。1978年由美国电话电报公司(AT&T)的贝尔实验室正式发表了C语言,同时由B.W.Kernighan和D.M.Ritchit合著了影响深远的“THE C PROGRAMMING LANGUAGE”一书,通常简称为《K&R》,也有人称之为《K&R》标准。但是,在《K&R》中并没有定义一个完整的标准C语言,许多开发机构推出了自己的C语言版本,这些版本之间的微小差别不时引起兼容性上的问题,后来由美国国家标准学会ANSI(American National Standard Institute)在各种C语言版本的基础上制定了一个C 语言标准,于1983年发表。通常称之为ANSI C。1987年ANSI又公布了新标准——87 ANSI C。目前广泛流行的各种C编译系统都是以它为基础的。

早期的C语言主要是用于UNIX系统,由于C语言的强大功能和各方面的优点逐渐为人们认识,到了八十年代,C语言开始进入其它操作系统,并很快在各类大、中、小和微型计算机上得到了广泛的使用,成为当代最优秀的程序设计语言之一。

在C的基础上,1983年又由贝尔实验室的Bjarne Strou-strup推出了C++。 C++进一步扩充和完善了C语言,成为一种面向 对象的程序设计语言。C++提出了一些更为深入的概念,它所支持的这些面向对象的概念容易将问题空间直接地映射到程序空间,为程序员提供了一种与传统结构程序设计不同的思维方式和编程方法。因而也增加了整个语言的复杂性,掌握起来有一定难度。但是,C是C++的基础,C++语言和C语言在很多方面是兼容的。因此,掌握了C语言,再进一步学习C++就能以一种熟悉的语法来学习面向对象的语言,从而达到事半功倍的目的。

目前最流行的C语言有以下几种: ·Microsoft C 或称 MS C ·Borland Turbo C 或称 Turbo C

1 ·AT&T C 这些C语言版本不仅实现了ANSI C标准,而且在此基础上各自作了一些扩充,使之更加方便、完美。这些不同版本C语言之间有一定的差别,但对初学者来说,不必过多理会他们的差别,重在理解C语言的特点和编程方法。本书的叙述以TURBO C为准。

1.1.2 C语言的特点

C语言是一种通用、灵活、结构化、标准化、使用广泛的编程语言,能完成用户的各种任务,特别适合进行系统程序设计和对硬件进行操作的场合。C语言本身不对程序员施加过多限制,是一种专业程序员优先选择的语言。它有如下主要特点:

1.C语言简洁紧凑,压缩了一切不必要的成分。ANSI C有32个关键字,TURBO C有58个关键字,9种控制语句,书写形式自由。

2.C语言运算丰富,将括号、赋值、强制类型转换、取变量地址等都以运算实现。ANSI C提供34种运算符,TURBO C提供了44种运算符,灵活使用这些运算符可以实现其它高级语言难以实现的操作。C语言的表达式简练、多样、灵活、实用,加上分号可以构成语句。

3.C语言数据类型丰富,具有现代语言的各种数据类型,用户还能扩充它,实现各种复杂的数据结构,完成各种问题的数据描述。尤其是C语言的指针类型,非常有特色,可指向各种数据,完成数据的高效处理。C语言不但对数据作类型上的描述,还提供存储属性考虑。

4.C语言是一种结构化程序设计语言,层次清晰,便于按模块化方式组织程序,易于调试和维护。C程序由若干程序文件组成,一个程序文件由若干函数构成。

5.C语言可以直接访问物理地址,进行位(bit)一级的操作,能实现汇编语言的大部分功能。由于C语言实现了对硬件的编程操作,因此C语言集高级语言和低级语言的功能于一体的表现能力和处理能力极强,有时也被称作中级语言。 6.C语言提供了预处理机制,有利于大型程序的编写和调试。

7.C语言生成的目标代码质量很高,程序执行效率很高。一般只比汇编程序生成的目标代码效率低10~20%。

8.用C语言写的程序可移植性好(与汇编语言比)。基本上不作修改就可以用于各种型号的计算机和各种操作系统。

9.C语言语法限制不太严格,程序员设计自由度较大。例如,对数组下标越界不做检查,由程序员自己保证程序的正确。一般的高级语言语法检查比较严,能检查出几乎所有的语法错误,而C语言允许程序员有较大的自由度,因此放宽了语法检查。限制与灵活是一对矛盾,限制严格,就失去灵活性;而强调灵活,就必然放松限制。一个不熟练的人员,编一个正确的C程序可能会比编一个其它高级语言程序难一些。也就是说,对用C语言的人,要求对程序设计更熟练一些。

1.2 基本语法成分

本节介绍C语言的字符集、关键字、标识符、运算符、分隔符和注释符等基本语法成分。

2 1.2.1 C语言的字符集

字符是组成语言的最基本的元素。C语言字符集由字母,数字,空格,标点和特殊字符组成。在字符串常量和注释中还可以使用汉字或其它可表示的图形符号。

1.字母

小写字母a~z共26个,大写字母A~Z共26个。 2.数字

0~9共10个

3.空白符 空格符、制表符、换行符等统称为空白符。空白符只在字符常量和字符串常量中起作用。在其它地方出现时,只起间隔作用,编译程序对它们忽略。因此在程序中使用空白符与否,对程序的编译不发生影响,但在程序中适当的地方使用空白符将增加程序的清晰性和可读性。

4.标点和特殊字符 主要有 ! # % ^ & + - * / = ~ \\ | ., : ; ? ’ ” ( ) { } [ ] 等等。

由字符集中的字符可以构成C语言进一步的语法成分,如标识符、关键字、特殊的运算符等。

1.2.2 标识符

在程序中使用的变量名、函数名、标号等统称为标识符,用来标识各种程序成分。除库函数的函数名由系统定义外,其余都由用户自定义。C语言规定,标识符只能是由字母(A~Z,a~z)、数字(0~9)、下划线(_)组成的字符串,并且其第一个字符必须是字母或下划线。

以下标识符是合法的:

a , x , x3 , BOOK1 ,sum5 , num_1 以下标识符是非法的: 3s 以数字开头 s*T 出现非法字符* -3x 以减号开头

bowy-1 出现非法字符-(减号) 在使用标识符时还必须注意以下几点:

(1) 标准C不限制标识符的长度,但它受各种版本的C 语言编译系统限制,同时也受到具体机器的限制。例如在某版本C 中规定标识符前八位有效,当两个标识符前八位相同时,则被认为是同一个标识符。TURBO C中标识符最大长度为32个字符。

(2) 在标识符中,大小写是有区别的。例如BOOK和book 是两个不同的标识符。习惯上符号常量用大写字母表示,而变量名等用小写字母表示。

(3) 标识符虽然可由程序员随意定义,但不能与关键字同名,也不能与系统预先定义的标准标识符(如标准函数)同名。标识符是用于标识某个量的符号,因此,命名应尽量有相应的意义,以便阅读理解,做到“见名知义”。

1.2.3 关键字

关键字是由C语言规定的具有特定意义的字符串,通常也称为保留字。如类型说明符int,double等;语句特征if、switch、while等;预处理命令include、define等。关键字是构成C语言的语法基础,用户定义的标识符不应与关键字相同,也不能对关键字进行重新定义。

3 常见的关键字参见附录1。

1.2.4运算符

C语言中含有相当丰富的运算符。运算符与变量、函数一起组成表达式,表示各种运算功能。运算符由一个或多个字符组成。根据参加运算对象的个数,运算符可分为单目运算符、双目运算符和三目运算符。

C语言中的运算符都由特定的意义和格式,这些将在后续章节中详述,并请读者参考附录3。

1.2.5 分隔符

C语言中的分隔符有逗号和空格两种,逗号主要用在类型说明和函数参数表中,分隔各个变量。空格多用于语句各单词之间,作间隔符。在关键字、标识符之间必须要有一个以上的空格符作间隔, 否则将会出现语法错误。例如把“int a;”,写成“ inta;”,C编译器会把“inta”当成一个标识符处理,其结果必然出错。

1.2.6 注释符

注释符是以“/*”开头并以“*/”结尾的串。在“/*”和“*/”之间的即为注释。程序编译时,不对注释作任何处理。注释可出现在程序中的任何位置。注释用来向用户提示或解释程序的意义。在调试程序时对暂不使用的语句也可用注释符括起来,使编译跳过不作处理,待调试结束后再去掉注释符。

1.3 C程序结构

为了说明C语言源程序结构的特点,先看以下几个程序。这几个程序由简到难,表现了C语言源程序在组成结构上的特点。虽然有关内容还未介绍,但可从这些例子中了解到组成一个C源程序的基本部分和书写格式。

【例1-1】 main() { printf(\"Hello world!\\n\"); } main是主函数的函数名,表示这是一个主函数。每一个C源程序都必须有,并且只能有一个主函数(main函数),这是整个C程序运行的入口点。printf是C语言中的输出函数(详见第4章),是一个由系统定义的标准函数,可在程序中直接调用,它的功能是把要输出的内容送到显示器去显示。双引号内字符串原样输出,“\\n”是回车换行符。

【例1-2】

/* 例1-2,求两数的和。*/ main() { int a,b,sum; /* 这是定义变量*/ a=12; b=34; sum=a+b;

4 printf(\"sum is %d\\n\",sum); } 本程序的作用是求两个整数a和b之和。/*„„*/表示注释部分,为便于理解,这儿用汉字表示注释,当然也可以用英语或汉语拼音作注释。注释只是用来向用户提示或解释程序的意义,对程序编译不起任何作用。注释可出现在程序中的任何位置。程序第三行是变量说明部分,说明a和b是整型(int)变量。第四行是两个赋值语句,使a和b的值分别为12和34。第五行使sum的值为a+b。第六行中“%d”是输入输出的格式字符串,用来指定输入输出时的数据类型和格式(详见第四章),“%d”表示十进制整数类型。在执行输出时此位置上代以一个十进制整数值。printf函数中括号内最右端sum是要输出的变量,现在它的值为46(即12+34=46),因此输出一行信息为:

sum is 46

【例1-3】

/* 例1-3 此函数的功能是输入两个整数,输出其中的大数。*/ #include “stdio.h”

int max(int a,int b); /*函数说明*/ main() /*主函数*/ { int x,y,z; /*变量说明*/ printf(\"input two numbers:\\n\"); scanf(\"%d%d\",&x,&y); /*输入x,y值*/ z=max(x,y); /*调用max函数*/ printf(\"maxmum=%d\",z); /*输出*/ } int max(int a,int b) /*定义max函数*/ { if(a>b) return a; else return b; } 上面程序的功能是由用户输入两个整数,程序执行后输出其中较大的数。本程序由两个函数组成,主函数和max 函数,两者之间是并列关系。max 函数是一个用户自定义函数, 要先给出说明(程序第二行),它的功能是比较两个数,然后把较大的数返回。程序的执行过程是,首先在屏幕上显示提示字符串,请用户输入两个数,回车后由scanf函数语句接收这两个数送入变量x,y中,然后调用max函数,并把x,y 的值传送给max函数的参数a,b。在max函数中比较a,b的大小,把大者返回给主函数的变量z,最后在屏幕上输出z的值。有关函数、参数等的概念以后章节会详细讲述,这儿只想使读者有个初步印象。

5 程序第二行以#开头的称为预处理命令(详见第9章)。预处理命令还有其它几种,这里的include 称为文件包含命令,其意义是把尖括号或双引号\"\"内指定的文件包含到本源程序文件中来,成为本程序的一部分。被包含的文件通常是由系统提供的,其扩展名为.h。因此也称为头文件或首部文件。C语言系统提供的头文件中包括了各个标准库函数的函数原型,因此,凡是在程序中调用一个库函数时,都必须包含该函数原型所在的头文件。在本例中,使用了两个库函数:格式化输入函数scanf和格式化输出函数printf,其头文件为stdio.h,因此在程序的主函数前用include命令包含了它。

需要说明的是,C语言规定对scanf和printf这两个函数可以省去对其头文件的包含命令。所以在本例中也可以删去第二行的包含命令#include。同样,在例1-1和例1-2中使用了printf函数,也省略了包含命令。

通过以上几个例子,我们可以看到C源程序的结构特点:

1.一个C语言源程序可以由一个或多个源文件组成,每个源文件以“.c”作为扩展名。 2.每个源文件可由一个或多个函数组成。

3.一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数,整个程序的运行从主函数开始。

4.源程序中可以有预处理命令(include 命令仅为其中的一种),预处理命令通常应放在源文件或源程序的最前面。

5.每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“}”之后不能加分号。

6.标识符,关键字之间必须至少加一个空格以示间隔。若已有明显的间隔符,也可不再加空格来间隔。

书写程序时应遵循的规则

从书写清晰、便于阅读、理解和维护的角度出发,在书写程序时 应遵循以下规则: 1.一个说明或一个语句占一行。

2.用{} 括起来的部分,通常表示了程序的某一层次结构。{}一般与该结构语句的第一个字母对齐,并单独占一行。

3.低一层次的语句或说明可比高一层次的语句或说明缩进若干格后书写。以便看起来更加清晰,增加程序的可读性。在编程时应力求遵循这些规则,以养成良好的编程风格。

1.4 C语言的编辑、编译和运行

6 C程序在计算机上的实现与其它高级语言一样,一般要经过编辑、编译、连接、运行四个步骤,如图1-1所示。

1.编辑

编辑就是建立、修改C语言源程序并把它输入计算机的过程。C语言的源文件以文本文件的形式存储在磁盘上,它的后缀名为.C。

源文件的编辑可以用任何文字处理软件完成,一般用编译器本身集成的编辑器进行编辑。

2.编译

C语言是以编译方式实现的高级语言,C程序的实现必须经过编译程序对源文件进行编译,生成目标代码文件,它的后缀名为.obj。

编译前一般先要进行预处理,譬如进行宏代换、包含其它文件等等。

编译过程主要进行词法分析和语法分析,如果源文件中出现错误,编译器一般会指出错误的种类和位置,此时要回到编辑步骤修改源文件,然后再进行编译。

3.连接

编译形成的目标代码还不能在计算机上直接运行,必须将其与库文件进行连接处理,这个过程由连接程序自动进行,连接后生成可执行文件,它的后缀名为.exe。

如果连接出错同样需要返回到编辑步骤修改源程序,直至正确为止。 4.运行

一个C源程序经过编译、连接后生成了可执行文件。要运行这个程序文件,可通过编译系统下的运行功能,也可以在DOS系统的命令行输入文件名后再按“Enter”确定,或者在Window系统上双击该文件名。

程序运行后,可以根据运行结果判断程序是否还存在其它方面的错误。编译时产生的错误属于语法错误,而运行时出现的错误一般是逻辑错误。出现逻辑错误时需要修改原有算法,重新进行编辑、编译和连接,再运行程序。

本章小结

C语言已有较长的发展历史,目前,ANSI 标准 C具有基础性地位。

C语言是一种高级语言,它可读性强,层次清晰,便于按模块化方式组织程序,易于调试和维护。同时,C语言的数据类型丰富而有特色,能实现各种复杂的数据结构,完成各种问题的数据描述。除了这些作为高级语言的优点外,C语言可以直接访问物理地址, 7 进行位(bit)一级的操作,能实现汇编语言的大部分功能。因此,C语言集高级语言和低级语言的优点于一身,有时也被称作中级语言。

C语言源程序的书写规范非常重要,主要包括大小写习惯、语句的结束符号、层次与缩进、合理使用注释等等。这些规范有的是强制执行,不这样做就会导致编译错误。另外有一些是经验总结,使程序易于理解和调试,我们应一开始就养成自觉遵守书写规范的好习惯。

本章还介绍了C语言的结构特征、主函数的作用及位置无关性(最先执行)、函数的分类及库函数、头文件及预处理、标识符的构成规则等基础知识。在等级考试中,这些内容经常出现在选择题中,尤其是标识符的构成规则、主函数的特性等。

习题

1.简述C语言的主要特点。 2.简述标识符的构成规则。

3.简述注释在C语言中的作用及书写方法。 4.简述C程序的实现步骤。

5.下列选项中,可以作为C语言标识符的是(

A、3stu B、#stu C、stu3 Dstu.3 6.下列选项中,不可以作为C语言标识符的是( )

A、num B、turbo_c C、printf D、student3

C语言

C语言

c语言

c语言

c语言

C语言

C语言

C语言

C语言

c语言

C语言
《C语言.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档