《C语言程序设计》·第1章·程序设计和C语言 您所在的位置:网站首页 一个最简单的c语言程序 《C语言程序设计》·第1章·程序设计和C语言

《C语言程序设计》·第1章·程序设计和C语言

2023-03-28 07:38| 来源: 网络整理| 查看: 265

1.1:什么是计算机程序

为了使计算机执行一系列操作,需要事先编制好多条指令并输入计算机中,也就是说计算机的每一个操作都是根据人们事先指定的指令进行的。

所谓程序,就是一组计算机能识别和执行的指令。每一条指令使计算机执行特定的操作。只要让计算机执行这个程序,计算机就会“自动地”执行各条指令,有条不紊地进行工作。一个特定的指令序列用来完成一定的功能。为了使计算机系统能实现各种功能,需要成千上万个程序。

总之,计算机的一切操作都是由程序控制的,离开程序,计算机将一事无成。所以,计算机的本质是程序的机器,程序和指令是计算机系统中最基本的概念。只有懂得程序设计,才能真正了解计算机是怎样工作的,才能更深入地使用计算机。

1.2:什么是计算机语言

计算机语言经历了以下几个发展阶段。

1、机器语言

计算机工作基于二进制,从根本上说,计算机只能识别和接受由0和1组成的指令。在计算机发展的初期,一般计算机的指令长度为16,即以16个二进制数(0或1)组成一条指令,16个0和1可以组成各种排列组合。

要使计算机知道和执行自己的意图,就要编写许多条由0和1组成的指令。然后要用纸带穿孔机以人工的方法在特制的黑色纸带上穿孔,在指定的位置上有孔代表1,无孔代表0。一个程序往往需要一卷长长的纸带。在需要运行此程序时就将此纸带装在光电输入机上,当光电输入机从纸带读入信息时,有孔处产生一个电脉冲,指令变成电信号,让计算机执行各种操作。

这种计算机能直接识别和接受的二进制代码称为机器指令(machine instruction)。机器指令的集合就是该计算机的机器语言(machine language)。在语言的规则中规定各种指令的表示形式以及它的作用。

显然,机器语言与人们习惯用的语言差别太大,难学,难写,难记,难检查,难修改,难以推广使用,因此初期只有极少数的计算机专业人员会编写计算机程序。

想进一步学习计算机的底层原理请参考下述文章。2、符号语言

为了克服机器语言的上述缺点,人们创造出符号语言(symbolic language), 它用一些英文字母和数字表示一个指令,例如用ADD代表“加”,SUB代表“减”,LD代表 “传送”等。如上面介绍的那条机器指令可以改用符号指令代替: ADD A,B (执行A+B→A,将寄存器A中的数与寄存器B中的数相加,放到寄存器A中)

显然,计算机并不能直接识别和执行符号语言的指令,需要用一种称为汇编程序的软件把符号语言的指令转换为机器指令。一般,一条符号语言的指令对应转换为一条机器指令。转换的过程称为“代真”或“汇编”,因此,符号语言又称为符号汇编语言(symbolic assembler language)或汇编语言(assembler language)。

不同型号的计算机的机器语言和汇编语言是互不通用的。用甲机器的机器语言编写的程序在乙机器上不能使用。机器语言和汇编语言是完全依赖于具体机器特性的,是面向机器的语言。由于它“贴近”计算机,或者说离计算机“很近”,故称为计算机低级语言(low level language)。

3、高级语言

不依赖于具体的机器,且用它写出的程序适用于任何型号的计算机的语言,称为计算机高级语言(high level language)。

注意,需要经过编译程序的“翻译”,计算机才能识别高级语言。其中,高级语言写出的程序称为源程序(source program),对应的机器指令程序称为目标程序(object program)。高级语言的一个语句往往对应多条机器指令。

高级语言经历的不同发展阶段:

(1)非结构化的语言(2)结构化语言(3)面向对象的语言1.3:C语言的发展及其特点

C语言是一种用途广泛、功能强大、使用灵活的过程性(procedural)编程语言,既可用于编写应用软件,又可用于编写系统软件

C语言有以下一些主要特点:

(1)语言简洁、紧凑,使用方便、灵活

C语言一共只有37个关键字、9种控制语句,程序书写形式自由,主要用小写字母表示,压缩了一切不必要的成分。

C语言的关键字autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifinlineintlongregisterrestrictreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile_bool_Complex_Imaginary

C语言不直接提供输入和输出语句、有关文件操作的语句和动态内存管理的语句等(这些操作是由编译系统所提供的库函数来实现的),C的编译系统相当简洁。

在使用数学函数时,头文件应该包含以下命令行

#include 或 #include "math.h"(2)运算符丰富

C语言的运算符包含的范围很广泛,共有34种运算符。

C语言把括号、赋值和强制类型转换等都作为运算符处理,从而使C语言的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其他高级语言中难以实现的运算。

(3)数据类型丰富

C语言提供的数据类型包括整型、浮点型、字符型、数组类型、指针类型、结构体类型和共用体类型等,C99又扩充了复数浮点类型、超长整型(long long)和布尔类型(bool)等。

尤其是指针类型数据,使用十分灵活和多样化,能用来实现各种复杂的数据结构(如链表、树、栈等)的运算。

(4)具有结构化的控制语句

如if…else语句、while语句、do…while语句、switch语句和for语句)。

用函数作为程序的模块单位,便于实现程序的模块化。C语言是完全模块化和结构化的语言。

(5)语法限制不太严格,程序设计自由度大

例如,对数组下标越界不进行检查,由程序编写者自己保证程序的正确。对变量的类型使用比较灵活,例如,整型量与字符型数据以及逻辑型数据可以通用。一般的高级语言语法检查比较严,能检查出几乎所有的语法错误,而C语言为了使编写者有较大的自由度放宽了语法检查。

(6)C语言允许直接访问物理地址

物理地址,是存储器空间中某一存储单元的【实际地址】,用20位地址码表示,其编码范围是【00000H ~ FFFFFH】,在总线接口单元(BIU)的地址加法器中生成。

C语言的这一特点意味着它能进行位操作,实现汇编语言的大部分功能,也就意味着它可以直接对硬件进行操作。

综上,C语言既具有高级语言的功能,也具有低级语言的功能,可以用来编写系统软件。因此,它既是成功的系统描述语言,又是通用的程序设计语言。

(7)用C语言编写的程序可移植性好

由于C的编译系统相当简洁,因此很容易移植到新的系统。而且C编译系统在新的系统上运行时,可以直接编译“标准链接库”中的大部分功能,不需要修改源代码,因为标准链接库是用可移植的C语言写的。因此,几乎在所有的计算机系统中都可以使用C语言。

(8)生成目标代码质量高,程序执行效率高

C原来是专门为编写系统软件而设计的,许多大的应用软件也都用C语言编写,这是因为C语言的可移植性好,硬件控制能力高,表达和运算能力强。

许多以前只能用汇编语言处理的问题,后来可以改用C语言来处理了。目前C的主要用途之一是编写嵌入式系统程 序。由于具有上述优点,使C语言应用面十分广泛,许多应用软件也用C语言编写。

1.4:最简单的C语言程序1.4.1:最简单的C语言程序举例

下面介绍几个最简单的C语言程序。

——例1.1

要求在屏幕上输出以下一行信息。

This is a C program.

#include //这是编译器的预处理指令 int main() { printf("This is a C program.\n"); return 0; }注意

1、每一个C语言程序都必须有一个main函数。函数体由花括号{}括起来。

2、每个语句最后都有一个分号,表示语句结束。

3、在使用函数库中的输入输出函数时,编译系统要求程序提供有关此函数的信息(例如对输入输出函数的声明和宏的定义、全局量的定义等),程序第1行“#include ”的作用就是用来提供这些信息的。stdio.h是系统提供的一个文件名,stdio是 standard input &output的缩写,文件后缀.h的意思是头文件(header file),因为这些文件都是放在程序各文件模块的开头的。输入输出函数的相关信息已事先放在stdio.h文件中。现在,用#include指令把这些信息调入供使用。如果没有此#include指令,就不可能执行printf函数。

4、在以上程序各行的右侧,如果有//,则表示从此处到本行结束是“注释”,用来对程序有关部分进行必要的说明。在写C程序时应当多用注释,以方便自己和别人理解程序各部分的作用。

——例1.2求两个整数之和。 解题思路:设置3个变量,a和b用来存放两个整数,sum用来存放和数。用赋值运算符“=”把相加的结果传送给sum。 #include int main() { int a,b,sum; a=123; b=456; sum=a+b; printf("sum is %d\n",sum); return 0; }——例1.3求两个整数中的较大者解题思路:用一个函数来实现求两个整数中的较大者。在主函数中调用此函数并输出结果。#include //主函数 int main() { int max(int x,int y); int a,b,c; scanf("%d,%d",&a,&b); c=max(a,b); printf("max=%d\n",c); return 0; } //求两个整数中的较大者的max函数 int max(int x,int y) //定义max函数,函数值为整型,形式参数x和y为整型 { int z; if(x>y) z=x; else z=y; return(z); }注意

1、因为程序的编译是自上而下进行的,因此程序初始阶段并不能理解为什么max是什么,所以我们需要在第5行事先做一个声明。因为我们要求两个整数的最大值,最后结果一定会是一个整数,所以max函数对应“int”,即max函数的返回值也是一个整数。

2、本例程序中两个函数都有return语句,请注意它们的异同。两个函数都定义为整型,都有函数值,都需要用return语句为函数指定返回值。但是main函数中的return语句指定的返回值一般为0,而max函数的返回值是max函数中求出的两数中的最大值z,只有通过return语句才能把求出的z值作为函数的值并返回调用它的main函数中(即程序第8行,并把此值赋给变量c)。不要以为在max函数中求出最大值z后就会自动地作为函数值返回调用处,必须用return语句指定将哪个值作为函数值。也不要不加分析地在所有函数的最后都写上“return 0;”。

1.4.2:C语言程序的结构

通过以上几个程序例子,可以看到一个C语言程序的结构有以下特点:

(1)一个程序由一个或多个源程序文件组成

一个规模较小的程序,往往只包括一个源程序文件,如例1.1和例1.2是一个源程序文件中只有一个函数(main函数),例1.3中有两个函数,属于同一个源程序文件。

在一个源程序文件中可以包括3个部分:

①预处理指令——如#include(还有一些其他预处理指令,如#define等)。

C编译系统在对源程序进行“翻译”以前,先由一个预处理器(也称预处理程序、预编译器)对预处理指令进行预处理,对于#include指令来说,就是将stdio.h头文件的内容读进来,取代#include。

由预处理得到的结果与程序其他部分一起,组成一个完整的、可以用来编译的最后的源程序,然后由编译程序对该源程序正式进行编译,才得到目标程序。

②全局声明——即在函数之外进行的数据声明。

例如可以把例1.2程序中的“int a,b, sum;”放到main函数的前面,这就是全局声明,在函数外面声明的变量称为全局变量。如果是在程序开头(定义函数之前)声明的变量,则在整个源程序文件范围内有效。在函数中声明的变量是局部变量,只在函数范围内有效。

③函数定义。

如例1.1、例1.2和例1.3中的main函数和例1.3中的max函数,要指定每个函数的功能。在调用这些函数时,会完成函数定义中指定的功能。

(2)函数是C程序的主要组成部分

程序的几乎全部工作都是由各个函数分别完成的,函数是C程序的基本单位,在设计良好的程序中,每个函数都用来实现一个或几个特定的功能。编写C程序的工作主要就是编写一个个函数。

一个C语言程序是由一个或多个函数组成的,其中必须包含一个main函数(且只能有一个main函数)。例1.1和例1.2中的程序只由一个main函数组成,例1.3程序由一个main函数和一个max函数组成,它们组成一个源程序文件,在进行编译时对整个源程序文件统一进行编译。

一个小程序只包含一个源程序文件,在一个源程序文件中包含若干个函数(其中有一个main函数)。当程序规模较大时,所包含的函数的数量较多,如果把所有的函数都放在同一个源程序文件中,则此文件显得太大,不便于编译和调试。为了便于调试和管理,可以使一个程序包含若干个源程序文件,每个源程序文件又包含若干个函数。一个源程序文件就是一个程序模块,即将一个程序分成若干个程序模块。

在程序中被调用的函数,可以是系统提供的库函数(例如printf和scanf函数),也可以是用户根据需要自己编制设计的函数(例如例1.3中的max函数)。

(3)一个函数包括两个部分①函数首部

即函数的第1行,包括函数名、函数类型、函数属性、函数参数(形式参数)名、参数类型。

一个函数名后面必须跟一对圆括号,括号内写函数的参数名及其类型。如果函数没有参数,可以在括号中写void,也可以是空括号,如: int main(void) 或者 int main() 。

②函数体

即函数首部下面的花括号内的部分。如果在一个函数中包括有多层花括号,则最外层的一对花括号是函数体的范围。

函数体一般包括以下两部分。

(1)声明部分。声明部分包括:定义在本函数中所用到的变量,如例1.3中在main函数中定义变量“int a,b,c;”;对本函数所调用函数进行声明,如例1.3中在main函数中对max函数的声明“int max(int x,int y);”。

(2)执行部分。由若干个语句组成,指定在函数中所进行的操作。

(4)程序总是从main函数开始执行的

main函数可以放在程序最前头,也可以放在程序最后,或在一些函数之前、另一些函数之后),但是不论main函数在整个程序中的位置如何,程序总是从main函数开始执行的。

(5)在每个数据声明和语句的最后必须有一个分号

分号是C语句的必要组成部分。如:c=a+b; 中的分号是不可缺少的。

(6)C语言本身不提供输入输出语句

输入和输出的操作是由库函数scanf和printf 等函数来完成的。C语言对输入输出实行“函数化”。由于输入输出操作涉及具体的计算机设备,把输入输出操作用库函数实现,就可以使C语言本身的规模较小,编译程序简单,很 容易在各种机器上实现,程序具有可移植性。

(7)程序应当包含注释

一个好的、有使用价值的源程序都应当加上必要的注释,以增加程序的可读性。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有