第1章 C语言概述
本章要点
了解C语言的特点,初步掌握C语言的基本结构,掌握在VC++6.0环境下C语言程序的编辑、编译、连接与运行,了解算法的概念及用传统流程图表示算法的方法。本章的重点和难点是VC++6.0集成环境下C语言程序的运行方法。
第一节 C语言的发展与特点
一、C语言的发展
C语言诞生以前,系统软件主要是用汇编语言编写的。但由于汇编语言依赖于计算机硬件,其可读性和可移植性都很差,而一般的高级语言又难以实现对计算机硬件直接进行操作。所以人们希望出现一种兼有汇编语言和高级语言优点的新语言,于是诞生了C语言。
C语言是由贝尔实验室的Dennis Ritchie在20世纪70年代初发明的,最初是作为UNIX系统的开发语言。70年代末,随着微型计算机的发展,C语言开始移植到非UNIX环境中,并逐步成为独立的程序设计语言。1978年,Brian.W.Kernighan和Dennis.M.Ritchie出版了名著《The C Programming Language》,通常简称为《K&R》,该书中介绍的C语言成为后来广泛使用的C语言版本的基础,也有人称之为《K&R》标准。但是,在《K&R》中并没有定义一个完整的标准C语言。继C语言问世之后出现了许多版本,由于没有统一的标准,不同C语言版本之间缺乏兼容。为了改变这种情况,美国国家标准化协会ANSI(American National Standards Institute)于1983年根据C语言问世以来各种版本对C语言的发展和扩充,公布了第一个C语言标准草案(’83 ANSI C)。1989年,ANSI公布了一个完整的C语言标准,常称ANSI C或C89,该标准定义了语言和一个标准C库。1990年,C89被国际标准化组织ISO(International Standard Organization)接受作为国际标准,常称C90,C89和C90实质上是同一个标准。1999年,ISO对C语言标准进行修订,在基本保留原来的C语言特征的基础上,针对应用的需要,增加了一些功能,尤其是C++中的一些功能,命名为C99。本书基本上以C89为基础进行介绍。
二、C语言的特点
C语言是一种用途广泛、功能强大、使用灵活的结构化程序设计语言。由于以下原因而在程序员中流行:
1. C语言具有结构化的高级编程语言应有的所有高级指令,使程序员不需要知道硬件细
节。同时,C也具有一些低级指令,允许程序员能够直接快速地访问硬件。这种把高级语言的基本结构和语句与低级语言的实用性结合起来的特点使得C语言在通用程序设计和系统程序设计上都能满足程序员的需要。
1
2. C语言是结构式语言。结构式语言的显著特点是代码及数据的分隔化,即程序的各个
部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
3. C语言是一种高效的语言。在设计上它充分利用了当前计算机在能力上的优点,生成
的目标代码质量高,运行速度快。
4. C语言简洁紧凑,使用方便灵活。C语言只有37个关键字,9种控制语句。程序书写形式自由,源程序短。
5. C语言运算符丰富。C语言提供的运算符范围广泛且功能强大,共有34种运算符,程序员可以简单地表达自己的意图,书写的程序更为简洁且运行效率更高。
6. C语言是一种可移植性语言。可移植性意味着在一个系统上编写的C程序经过很少改动或不经修改就可以在其他系统上运行。
当然,C语言也有一些缺点。由于用C语言进行程序设计时自由度大,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查,尤其是对指针的使用,可能经常出现难以追踪的编程错误。此外,C语言输入输出相对很多语言都较为复杂,对于字符串的处理,只能通过字符数组实现。与其他高级语言相比,C语言较难掌握。
第二节 简单的C程序介绍
简单地讲,计算机程序是指用某种程序设计语言编写并能够运行于某种目标体系结构上的一组指令序列,告诉计算机完成一些特定的任务。C程序就是用C语言所编写的计算机程序。
先来看几个简单的C程序例子。 例1.1 在屏幕上输出一行文字信息。 #include
printf (\}
程序运行结果:
Welcome to the world of C! 例1.2 求两数之和。 #include
int a,b,sum; /* 声明部分,定义整型变量a、b、sum*/ a=25;b=68; /* 以下3 行为C 语句 */
2
sum=a+b;
printf(\}
程序运行结果: sum=93
例1.3 求两个数中较大者。 #include
int max(int a,int b) /*定义函数max,a和b为函数的接口,即形式参数*/ {
int c; /* max函数中的声明部分,定义整型变量c*/ if(a>b) c=a; else c=b;
return (c); /*返回变量c的值*/ }
void main( ) {
int x,y,z; /* 主函数中的声明部分,定义整型变量x、y、z*/ printf(\请输入两个整数:\
scanf(“%d,%d”,&x,&y); /*输入变量x和y的值*/
z=max(x,y); /*调用函数max,得到的值赋给z,x,y是实际参数*/ printf(\两数中较大者为:%d\\n\}
程序运行结果:
请输入两个整数:20,35↙ (从键盘上输入20,35,↙表示回车键,下同) 两数中较大者为:35
下面就程序中的一些知识点进行简单说明,在随后的章节中将逐一详细介绍。
(一)#include
三个程序中都包含了该行“文件包含”处理语句,其作用是告诉编译器包含文件stdio.h中的全部信息。文件stdio.h是所有C语言编译包的一个标准部分,当在程序中用到系统提供的标准函数库中的输入输出函数时,必须包含该文件。
(二)void main( )
C程序包含一个或多个函数,它们是C程序的基本模块。例1.1和1.2只包含了一个main函数,该函数是主函数,每一个C语言程序都必须有一个main函数。void表示此函数是“空类型”,即执行此函数后不产生函数值。例1.3中除了主函数main之外还有一个max函数,该函数是用户自定义函数,其作用是将a和b两个数中较大者的值赋给变量c,return语句的作用是将c的值返回给主调函数main。在主函数main中有一行语句“z=max(x,y);”,其作用是在主函数中调用max函数,函数的返回值赋给变量z。
(三)变量声明语句
3
例1.2和1.3中都包含了变量声明语句,如例1.2中的“int a,b,sum;”,例1.3中的“int x,y,z;”等。声明语句的作用是定义程序(或函数)中要使用的变量,并定义每个变量的类型。在C语言中,要求对所有用到的变量必须先定义、后使用。
(四)scanf()和printf()
这是C语言提供的两个标准输入输出函数,scanf()是输入函数,printf()是输出函数。如例1.1中的“printf (\”,该语句的作用是调用printf函数,输出括号内的字符串,“\\n”是换行符,即在输出“Welcome to the world of C!”后回车换行,也就是把光标移到下一行的开始位置。例1.3中“scanf(“%d,%d”,&x,&y);”语句的作用是要求用户从键盘输入变量x和y的值,中间以逗号隔开,“&”是取地址符号。输入输出函数中的“%d”表示“以十进制整数类型”,用来指定输入输出时的数据类型和格式。
(五)/* …… */
表示注释部分,注释只是为了帮助读者理解程序,在编译时将被编译器忽略,即编译和运行时不起作用。
第三节 C程序的基本结构和语法基础
通过以上三个由简到难的程序,可以分析并了解组成一个C源程序的基本部分和书写格式。
(一)在程序开始,C语言用#include命令实现文件包含操作,通常称为编译预处理命
令,作用是将尖括号内的文件(一般称之为“头文件”)包含到程序中,成为该程序的一部分。C语言的头文件中包括了各个标准库函数的函数原型。
(二)C语言程序是由函数构成的。每个C程序有且只有一个主函数main(),main函数
可以放在程序中的任何位置,但程序总是从main函数开始执行。除了main函数外,程序还可以包含若干个其它函数,每个函数根据用户需求设计,完成某一特定的功能,多个函数之间可以相互调用。此外每个C语言版本都会提供很多库函数,在程序开发中可直接调用。
C语言函数由函数头和函数体两部分组成。 1.函数头,即函数的第一行。其结构如下:
函数类型 函数名(形式参数1类型 形式参数1名称,形式参数2类型 形式参数2名称,??)
例如:int max(int a,int b)
函数也可以没有参数,如void main( )
2.函数体,函数头下面花括号内的部分称为函数体。如果一个函数中包含多个花括号,最外面一层花括号所包含部分是函数体范围。
函数体由声明部分和执行部分组成。声明部分对程序中所使用的变量进行说明,执行部分由若干条语句组成。
(三)C语言程序语句以分号结束,分号是语句的一部分。但是,预处理命令、函数头
和花括号“}”之后不能加分号。
(四)C语言程序中,/*和*/之间的部分称为注释,目的是为了增加程序的可读性,但
4
在程序执行过程中不起任何作用。C语言的注释可以出现在程序中的任何地方,一个较长的注释可以放在一行或是多行上。无论你使用何种编程语言,一个好的源程序都应该有必要的、完整的注释。
(五)C语言中的关键字。所谓关键字是指在C语言中已经使用了的有特殊含义的字符,
在程序中不能作其它用途使用,也成为保留字。例如“int”用于声明整型变量或函数,“if”用来控制程序中语句的执行顺序。在定义变量名或函数名时不能使用这些关键字,否则在编译时会产生错误。
由ANSI标准定义的C语言关键字共有32个。根据关键字的作用,可分为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类,如表1-1所示。
表1-1 C语言关键字 关键字类型 数据类型关键字 控制语句关键字 存储类型关键字 其它关键字 关键字 char double enum float int long short signed struct union unsigned void break case continue default do else for goto if return switch while auto extern register static const sizeof typedef volatile C99标准中新增了五个关键字:restrict,inline,_Complex,_Imaginary,_Bool,读者可参考其它相关的书籍。
(六)C语言程序书写格式比较自由,例如一行可以写一个语句也可以写多个语句,一
个语句可以分写在多行上。
一个优秀的编程人员,不仅要实现程序的功能,也要让自己的程序具有良好的可读性。尤其对于一个团对而言,良好的可读性不仅利于团队成员之间的互相交流,也为软件后期维护节约成本,因此在编写程序时一定要养成良好的编程风格。从上一节的三个例子中可以看出,在书写程序时注重了以下几个方面:缩进,每行只写一条语句,添加必要的注释等。此外,在使用变量名和函数名时尽量做到“见名知意”,例如声明语句“int Stu_age;”,从变量名Stu_age可以立即看出该变量表示学生的年龄。同时为了避免一些小的不易发现的错误,在书写成对的符号如“{ }”、“( )”时,尽量先成对的写出,再在符号之间添加内容。关于如何使得程序的逻辑结构更为清晰,可读性更好,在以后的编程中可以慢慢领悟。
第四节 C程序的运行
一、Visual C++ 编译系统简介
Visual c++是微软公司推出的一个功能强大的可视化软件开发工具,目前比较常用的版本是Visual C++ 6.0,简称VC 6.0。VC 6.0不仅仅是一个C/C++编译器,它为用户提供了一套良好的可视化开发环境,包括文本编辑器、资源编辑器、工程创建工具、调试器、程序向导AppWizard、类向导ClassWizard等等。用户可以在集成开发环境中创建工程、打开工程,建立、打开和编辑文件、编译、链接、调试、运行应用程序。
在Windows环境中运行VC 6.0后,即进入C/C++语言的集成开发环境。程序运行的主界
5