人与人之间交换信息需要借助于语言工具,人与计算机交换信息也同样要用语言工具,这一工具就是计算机语言。用计算机语言编写的代码叫作程序。所谓程序,就是一系列的指令集合。计算机的一切操作都是由程序控制的,在运行程序时,程序中的指令集决定计算机如何对用户的输入进行处理。
随着计算机技术的发展,计算机语言逐步得到完善。最初使用的计算机语言是用二进制代码表达的语言——机器语言,后来采用与机器语言相对应的助记符表达的语言——汇编语言。我们称这两种计算机语言为低级语言。虽然用低级语言编写的程序执行效率高,但程序代码长,并且这些程序都依赖于具体的计算机,因此编码、调试、阅读程序很困难,通用性也差。现在使用最广的计算机语言是高级语言——用更接近于人类自然语言和数学语言的表达语言。用高级语言编写的程序独立于机器,编码相对短,可读性强,但必须通过编译和连接后,才能被计算机执行。用高级语言编写的程序叫作源程序。
由上可见,低级语言和高级语言各有利弊。C语言是高级语言,它是一种用途广泛、功能强大、使用灵活的面向过程的语言,它不仅具有高级语言的功能,还具有低级语言的许多功能,因此是国际上广泛流行的计算机语言。Windows、Linux和UNIX等操作系统都是用C语言编写的。
C语言的主要特点有:语言简洁,使用方便,编程自由度大,具有结构化的控制语句,运算符和数据类型丰富,而且允许直接访问物理地址,能实现汇编语言的大部分功能,可以直接对硬件进行操作,用C语言编写的程序可移植性好,生成目标代码质量高,程序执行效率高。
要得到C语言程序的运行结果,首先将源程序输入计算机内(在计算机上输入或修改源程序的过程叫作编辑),然后将源程序翻译(叫作编译)成机器能识别的目标程序,最后还要把目标程序和系统提供的库函数等连接起来生成可执行文件,这时才可以运行程序,并看到运行结果。C语言的编辑、编译、连接、运行过程可用图1.1表示(以文件名为test.c的C程序为例)。
图1.1 C程序的编辑、编译、连接、运行过程
C语言的编辑、编译、连接、运行过程可以在不同的环境中进行。
程序设计是指从确定任务到得到结果、写出文档的全过程。程序设计的步骤大体上分为:1、问题定义 2、算法设计 3、流程图设计 4、编写程序代码 5、测试与调试 6、整理文档 7、系统维护
1.1.2 C程序形式和程序执行过程
下面举一个C程序的完整例题,用此例说明C程序的一般形式和程序的执行过程。程序中的具体语法规则和其他细节将在后续章节中陆续介绍。
【例1.1】编写一个完整的C语言程序示例。
c=4.0; //以下各行均为语句部分 } //主函数到此结束
1. 正如本例所示,C语言程序是由若干函数构成的,函数中至少包含一个主函数,C程序从主函数开始执行,主函数名必须是main。例1.1中程序的执行过程如图1.2所示,程序按1-9的顺序执行。
2. 程序中从“//”到本行结束是注释部分,用此对该行代码进行说明,注释对程序的运行无任何作用,注释的目的是方便阅读程序。注释还可以用“/* */"括起,例如:
1.2 简单C程序及其上机步骤
1.2.1 简单C程序和编程风格
1. 程序中main是主函数名,每一个C程序都必须包含而且只能包含一个主函数。
3. C语言中区分大小写,即main不能写成Main,printf也不能写成Printf。若程序中有此类错误,则很难发现。
4. printf是C语言标准库中提供的输出函数。需要在程序中使用输入、输出函数,程序的开头要加“#include<stdio.h>”命令行。实际上,每个程序中必定会有输出操作,因此编写程序时,在程序的第一行都写此命令行。
2. “\n”是换行符,如果程序中去掉“\n”,则输出形式为:
3. C程序的书写格式比较自由。例如,一行内可以包括多条语句,一条语句可以写在多行上,每行的内容可以从任何一列开始写,等等,但提倡学习者在编写程序时要形成良好的程序设计风格。良好的编程风格能提高程序的可读性、可维护性,也有助于促进技术交流,便于团队合作。在此介绍如下几点风格,其他风格在后续章节陆续介绍。
(1) 合理安排各成分的位置。一般#include命令行在程序的最前面,接着依次为#define命令行、类型声明(如结构体类型声明)、函数原型说明、各函数定义等。
(2)适当加注释。一般在程序的开头加注释,解释本程序的功能和一些说明,在函数或程序段的开头加注释,解释其要实现的功能、算法、参数等,在变量的定义行后面加注释,解释该变量的用途等。
(3)在程序中适当加上空行。在命令行和类型声明之间、类型声明和函数原型之间、函数原型与函数定义之间、函数内部变量定义与其下执行语句之间均空一行,有些地方视情况可空两行。
(4) 采用缩进格式。一般用Tab键将某些行向右缩进,这样可使程序的逻辑结构更加清晰,层次分明,显著提高程序的可读性。例如,
在多人共同完成一项任务时,如果不用Tab键而用空格键缩进,则可能对统一格式带来不便。
(5)标识符要见名知意。可用英文单词、拼音或缩写作为标识符的一部分,一般标识符的第一个字符用字母,其余字符用字母、数字或下划线。
(6)一行写一条语句。
(7)算法简单明了。尽量采用简单易懂的算法,不使用过分复杂的算法。
(8) 用户界面友好。一般使用计算机解决问题时,采用人机对话形式。当要求用户输入信息时,给出提示信息,而且输入格式要一致,如果用户误操作,输入的数据有错误,则应进行相应的处理,保证软件不崩溃(使程序具有健壮性)。输出数据时适当控制输出格式,使输出的数据清晰、美观。
需要注意的是,在编写代码时应时刻注意编码风格,良好的风格是为编程者服务的。
C语言中常用的数据类型有整型、实型、字符型、数组、结构体类型、指针类型等。在程序设计中,根据不同的需要正确选用数据类型是至关重要的。
【例 1.4】编写输出5和6的和与平均值的程序。
1、 a、b、sum和ave是变量,其中a、b、sum是整型变量,而ave是实型变量,整型变量中只能存放整型值,实型变量中只能存放实型值。
2、为什么输出结果不是sum=11,ave=5.500000呢?其原因是程序中第8行sum中的值11和除数2都是整数,在C语言中两个整数的商仍为整数,表达式11/2的值为5。由于ave是实型变量,因此其中只能存放实型数5.0而不能存放整型数5(参见1.4.3节)。如果将此行改成“ave=sum/2.0;”,则输出:sum=11,ave=5.500000.
在处理数据和输出数据时,一定要选择合适的数据类型和正确的输出格式说明,否则将得到错误的运行结果或程序出错。如果在上面的程序中将sum的数据类型改为实型,ave的数据类型改为整型,则在执行“ave=sum/2;”后,sum/2的值为5.5,但ave值为5.
3、程序中最后一条语句“printf("sum=%d,ave=%lf\n",sum,ave); ”与例1.2中输出语句格式不同。本语句的作用是按原样输出双引号内除%d和%lf以外的内容,而在%d的位置上输出sum的值,%lf的位置上输出ave的值(小数点后保留6位)。%d和%lf是输出函数的格式说明,分别用于输出整型数和实型数(详见2.3.1节)。