2.1 编写程序的格式

专题讲座:光盘\MR\Video\2\C语言程序的格式.exe

视频速递:全面解读C语言程序的格式

下面给出一段完整的代码,并对代码给出相应的含义。

编写C语言具有一定的格式特点,具体如下。

◆ 主函数main

一个C程序都是从main函数开始执行的。main函数不论放在什么文件的位置都没有关系。

◆ C程序整体是由函数构成的

程序中main函数就是其中的主函数,当然,在程序中是可以定义其他函数的。在这些定义函数中进行特殊的操作,使得函数完成特定的功能。如果将所有的执行代码全部放入main函数,虽然程序也是可行的,但是将其分成一块一块,每一块使用一个函数进行表示,那么整个程序看起来就具有结构性,并且易于观察和修改。

◆ 函数体的内容在“{}”中

每一个函数都要执行特定的功能,那么,怎么能看出一个函数具体操作的范围呢?答案就是找寻“{”和“}”这对大括号。C语言使用一对大括号来表示程序的结构层次,需要注意的就是左右大括号要对应使用。函数的具体操作范围如图2.1所示。

图2.1 函数的具体操作范围

学习手册技巧 在编写程序时,为了防止对应大括号的遗落,在每一次编程时都将两个对应的大括号先写出来,然后再向大括号中添加代码。

◆ 每一个执行语句都以“;”结尾

如果注意观察前面的两个实例就会发现,在每一个执行语句后面都会有一个“;”作为语句结束的标志。“;”的重要性如图2.2所示。

图2.2 “;”的重要性

◆ 英文字符大小写通用

在程序中,可以使用英文的大写字母,也可以使用英文的小写字母。但一般情况下,使用小写字母多一些,因为小写字母易于观察。但是在定义常量时常常使用大写字母,而在定义函数时,有时也会将第一个字母大写。

◆ 空格、空行的使用

使用适量的空格和空行,可以使得程序代码位置安排合理、美观,增加程序的可读性。但是,变量名、函数名和C语言保留字中间不能加入空格。除此之外的空格和空行可以任意根据程序可读性和美观的需要进行设置,此时C语言编译系统不会理会这些空格和空行。

例如,下面代码的书写就非常不利于观察:

        int max(int a,int b)/*定义取两数最大者函数*/{
        int c;/*定义存放最大数的变量*/
        c=a>b?a:b;/*将两数中较大的数赋给c*/
        return c;
        /*返回最大的数c*/
        }

但是如果将其中的执行语句在函数中进行一下缩进,使得函数体内代码开头与函数头的代码不在一列,这样就会有层次感,例如下面的代码:

        int max(int a,int b)         /*定义取两数最大者函数*/
        {
                int c;               /*定义存放最大数的变量*/
                c=a>b?a:b;           /*将两数中较大的数赋给c*/
                return c;            /*返回最大的数c*/
        }

2.1.1 一个简单的C程序

想要到达胜利的彼岸,原地踏步是永远不会成功的,只有脚踏实地一步一步地向着目标坚定不移地前进,才会摘取胜利的果实。随着时代步伐的不断前进,人类想要在现代社会生存,计算机知识已经是不可缺少的一部分,如今计算机日益普及,编程知识也在逐渐呈现大众化,没有一定的计算机水平,无疑将被社会所淘汰。

C语言作为众多语言的基础,熟练地掌握C语言的知识,那么再去学习其他编程语言就会事半功倍,效果显著。C语言是人类公有的财富,任何人只要通过努力学习,就可以掌握。下面,先通过一个简单的程序,让我们迈出走向成功的第一步。

实例位置:光盘 \MR\ Instance\2\2.1

【实例2.1】 一个简单的C程序

本实例程序实现的功能只是显示一条信息“Hello world!”用这个程序使你初窥C程序样貌。虽然这个简单的小程序仅仅只有几行代码,但是却充分说明了C程序是由什么位置开始的,什么地方结束的。

程序代码如下:

运行程序,显示效果如图2.3所示。

图2.3 一个简单的C程序

现在来分析一下上面的实例程序。

❶ #include指令

实例代码中的第1行。

      #include<stdio.h>

这个语句的功能是进行有关的预处理操作。#include称为文件包含命令,后面尖括号中的内容,称之为头部文件或者首文件。有关预处理的内容,本书将会在后面的章节中进行详细的讲解。在此,读者只需要先对此概念有所了解就可以。

❷空行

实例代码中的第2行。

C语言是一个灵活性较强的语言,所以格式并不是固定不变、拘于一格的。空格、空行、跳格并不会影响程序,因为在执行程序的时候,大多情况下编译程序并不识别空格、空行和跳格。

学习手册注意 不是所有的空格都是没有用的,例如在两个关键字之间被空格隔开(else if),这种情况下如果将空格去掉的话,程序不能通过编译。在这里先进行一下说明,在以后章节的学习中就会慢慢领悟。

可能有些读者会不理解,心中有疑问,“既然空格、空行、跳格都没有用,那为什么要写这些多余的空格和空行呢?”其实凡事都有一定的规律约束,我国古人说的好:“没有规矩不成方圆”。合理、恰当地使用这些空格、空行,可以使编写出来的程序更加规范,为日后的阅读和整理起着重要的作用。所以,在此也提醒读者在写程序的时候,最好将程序写得规范、干净。否则,修改代码的时候就会很麻烦,不容易找到需要修改的地方,而且也不方便其他人阅读程序代码,理解程序的目的和意图。

❸main函数声明

实例代码中的第3行。

        int main()

这一行代码的意思是声明main函数为一个返回值为整型的函数。其中,int叫做关键字,这个关键字代表的类型是整型。

在函数中这一部分叫做函数头部分。在每一个程序中都有且只有一个main函数。那么main函数有什么作用呢?main函数就是一个程序的入口部分。也就是说,程序都是从main函数头开始执行的,然后进入main函数中,执行main函数中的内容。

◆ 函数体

实例代码中的第4~7行代码。

        {
                printf("Hello world!\n");        /*输出要显示的字符串*/
                return 0;                         /*程序返回0*/
        }

在上面介绍main函数时,提到了一个名词叫做“函数头”,大家通过这个词可以进行一下联想,既然有函数头,那也应该有函数的身体吧?没错,一个函数分为两个部分:一个部分是函数头,一个部分是函数体。

程序代码中的第4行和第7行这两个大括号就构成了函数体的部分,函数体也可以称为函数的语句块。在函数体中,第5行就是函数体中要执行的内容。

◆ 执行语句

在函数体中,第5行代码:

        printf("Hello world!\n");                /*输出要显示的字符串*/

执行语句就是函数体中要执行的动作内容。这一行代码是这个例子中最复杂的一句。这一句虽然看似复杂,其实也不难理解,printf是产生格式化输出的函数,可以简单地理解为向控制台进行输出文字或符号的作用。在括号中的内容称为函数的参数,括号内可以看到输出的字符串"Hello world!"。其中可以看到\n这样一个符号,这个反斜杠加上n,称之为转义字符。

◆ return语句

在函数体中,第6行代码:

        return 0;                             /*程序返回0*/

这行语句告诉main函数终止运行,并向操作系统返回一个0,整型常量。在前面介绍main函数时,说过返回一个整型,此时0就是要返回的整型。在此处可以将return理解成main函数的结束标志。

◆ 代码的注释

在程序的第5行和第6行后面都可以看到有一段关于这行代码的文字描述。

        printf("Hello world!\n");                /*输出要显示的字符串*/
        return 0;                                 /*程序返回0*/

这段对代码的解释描述,称为代码的注释。代码注释的作用,相信读者现在已经知道了。就是用来对代码进行解释说明,为日后的阅读或者他人阅读源程序时,方便理解程序代码含义和设计思想所用。它的语法格式就是:

        /*其中为注释内容*/

学习手册说明 虽然没有强行规定程序中一定要写注释,但是为程序代码写注释是一个良好的习惯,这会为以后查看代码带来非常大的方便。并且如果程序交给别人看,他人便可以快速掌握其中的程序思想与代码作用。所以编写良好的代码格式规范和添加详细的注释,是一个优秀程序员应该具备的好习惯。

2.1.2 标识符与关键字

标识符与关键字是每个学习C语言编程的人都必须要掌握的知识,如果这个基础没有熟练掌握,那么在今后的学习中会走很多弯路,甚至无法继续进行学习。所以对于本节的知识点一定要熟练的掌握。

1.了解标识符

在编辑C语言程序的时候,为了在程序运行的过程中,可以使用变量、常量、函数、数组等,就要为这些形式设定一个名称,而设定的名称就是所谓的标识符。

在自然界中,不论是人或者是物,都有属于他们的名字。不同的区域命名的规则也不相同。在国外,人们是将名字放在前面,而将家族的姓氏放在后面,在中国却恰恰相反,把姓氏放在前面,而将名字放在后面。从中可以看出名字是可以随便起的,但是也要按照一定的规律要求进行规范。在C语言中,设定一个标识符的名称是非常自由的,可以设定自己喜欢、容易理解的名字,但是还是应该遵从一定的规范才能够进行自由发挥。

下面介绍一下有关设定C语言标识符应该遵守的一些命名规则。

◆ 所有标识符都必须由字母或下画线开头,而不能使用数字或者符号作为开头。

读者朋友可以对下面标识符正确的写法和错误的写法进行比较,以助于理解。例如:

错误的设定:

        Int #shi;                                 /*错误,标识符第一个字符不能为符号*/
        Int 1qian;                                /*错误,标识符第一个字符不能为数字*/

正确的设定:

        int number;              /*正确,标识符第一个字符为字母*/
        int _hao;                /*正确,标识符第一个字符为下画线*/

◆ 在设定标识符时,标识符除开头外,其他位置都可以用字母、下画线或数字组成。

例如:

在标识符中,有下画线的情况:

        int hello_way;           /*正确,标识符中可以有下画线*/

在标识符中,有数字的情况:

        int bus7;                /*正确,标识符中可以有数字*/
        int car6V;               /*正确*/

学习手册注意 虽然在设定标识符的时候,数字是不允许放在一个标识符的开头位置的,但是数字可以放在标识符中。一些符号同样是不允许放在一个标识符的开头位置,而且放在标识符中也是不允许的。

例如:

        int !you;                /*错误,标识符的第一位必须是字母和下画线,不能是符号*/
        int love!;               /*错误,符号不仅不能放在第一位,放在标识符任何位置都不对*/

◆ 英文字母的大小写代表不同的标识符。也就是说,在C语言中是区分大小写字母的,大小写不同的标识符,它们代表的意义并不相同,例如:

        int mingri;              /*全部是小写*/
        int MINGRI;              /*全部是大写*/
        int MingRi;              /*一部分是小写,一部分是大写*/

从上述的例子不难看出,只要标识符中的字符有一项是不同的,那么代表的就是一个新的名称。

◆ 标识符不能是关键字。关键字是进行定义一种类型使用的字符,标识符是不能进行使用的。例如,定义第一个整型时,会使用int关键字进行定义,但是定义的标识符就不能使用int。如果将其中标识符的字母改写成大写字母,这样就可以通过编译了。

        int int;                 /*错误!*/
        int INt;                 /*正确,改变标识符中的关键字,字母为大写*/

◆ 标识符的命名最好具有相关的含义。将标识符设定成有一定含义的名称,这样可以方便程序的编写,并且以后想再进行回顾时,或者他人想进行阅读时,具有含义的标识符使得程序便于观察、理解。例如,在定义一个长方体的长、宽和高时,如果只为一时的方便,可以简单地进行定义:

        int a;                   /*代表长度*/
        int b;                   /*代表宽度*/
        int c;                   /*代表高度*/

具有相关含义的定义:

        int iLong;
        int iWidth;
        int iHeight;

从上面举出的标识符可以看出,标识符的设定如果不具有一定的含义,那么没有后面的注释很难理解要代表的作用是什么。但是如果将标识符设定具有其功能的含义,那么通过直观的查看就可以了解其具体的含义。

ANSI标准规定,标识符可以为任意长度,但外部名至少能由前8个字符区分。这是因为某些编译程序(如IBM PC的MS C)仅能识别前8个字符。

2.了解关键字

什么是关键字?C语言有多少个关键字?通过下面的学习,我们来找到这两个问题的答案。

关键字是由C语言规定的具有特定意义的字符串,通常也称为保留字。用户定义的标识符不应与关键字相同。C语言的关键字分为以下几类。

(1)类型说明符

用于定义、说明变量、函数或其他数据结构的类型。如前面例题中用到的int等。

(2)语句定义符

用于表示一个语句的功能。如下面表中的if else就是条件语句的语句定义符。

(3)预处理命令字

用于表示一个预处理命令。

在C语言中有32个关键字,在此将其整理列出。在今后的学习中将会逐渐接触到这些关键字的具体使用方法。如表2.1所示。

表2.1 C语言中的关键字

学习手册说明 在C语言中,关键字是不允许作为标识符出现在程序中的,关键字也不能用于其他方面,例如,不能将关键字作为变量名或者是函数名使用。

学习手册注意 C语言是区分大小写的,关键字都是使用小写的字母。例如,int是关键字,而INT则不是。