630 likes | 765 Views
第 1 章 C 语言概述. C 语言 是一种国内外广泛流行的、已经得到普遍应用,很有发展前途的程序设计语言,它既可以用来编写系统软件,又可以用来编写应用软件。 本章主要介绍 计算机语言、 C 语言的发展过程、 C 语言的特点、 C 语言的结构。. ( 1 )机器语言( Machine Language ) ( 2 )汇编语言( Assemble Language ) ( 3 )高级语言( High Level Language ) * (4) 面向对象的计算机语言. 1.1 程序设计语言的发展历程. 1.1 程序设计语言的发展历程.
E N D
C 语言是一种国内外广泛流行的、已经得到普遍应用,很有发展前途的程序设计语言,它既可以用来编写系统软件,又可以用来编写应用软件。 • 本章主要介绍计算机语言、C语言的发展过程、C语言的特点、C语言的结构。
(1)机器语言(Machine Language) (2)汇编语言(Assemble Language) (3)高级语言(High Level Language) *(4)面向对象的计算机语言 1.1 程序设计语言的发展历程
1.1 程序设计语言的发展历程 (1)机器语言(Machine Language) 计算机硬件系统只能执行由0和1二进制代码构成 的操作指令。每一台计算机都有一套指令系统,指令 系统中的每一条指令称为机器指令。每一种类的计算 机都有它特有的机器指令系统,这样的机器指令集合 称为机器语言。 用机器语言编写的程序,称为机器语言程序,计 算机可以直接识别并执行。
1.1 程序设计语言的发展历程 (2)汇编语言(Assemble Language) 为了方便记忆和编写程序,人们用一些符号和简 单的语法来表示二进制形式的机器指令。 汇编语言编写的程序称为汇编语言源程序。这种 程序计算机是不能直接识别和执行的,必须通过一个 专门的程序(汇编程序)将这些符号翻译成二进制数 的机器语言才能执行。这种“汇编程序”就是汇编语言 的翻译程序。
1.1 程序设计语言的发展历程 汇编语言程序的执行过程
1.1 程序设计语言的发展过程 (3)高级语言(High Level Language) 高级语言使用接近人类习惯的自然语言来编写计算机程序,如FORTRAN语言、C语言等。 例如下列C语言程序段: if(x>y) min=x; else min=y; 用高级语言编写的程序称为高级语言源程序。计算机不能直接识别和执行这种程序,必须经过翻译,才能将其转换成机器语言程序执行。 翻译的方法有两种,解释方式和编译方式。
1.1 程序设计语言的发展历程 解释方式 编译方式
1.2 C语言的发展历程 • 人们希望有一种语言既有高级语言使用方便的优点,又有低级语言能够直接操作计算机硬件的优点,因此,C语言就运用而产生了。 • 1963年英国的剑桥大学在ALGOL 60的基础上推出了CPL语言,但是CPL语言难以实现。1967年英国剑桥大学的学者对CPL语言作了简化和改进,推出了BCPL语言。1970年美国贝尔实验室的学者以BCPL语言为基础,又作了进一步的简化,设计出了很简单且接近硬件的B语言。1972年由美国的学者在B语言的基础上设计出了C语言。 • 1977年D.M.Ritchie发表了不依赖于具体机器的C语言编译文本《可移植C语言编译程序》,使C语言移植到其他机器时所需要的工作大大简化了。1978年以后,C语言先后移植到大、中、小、微型计算机上。C语言很快风靡全世界,成为世界上应用最广泛的程序设计语言。
1.3 C语言的主要特点 • 1. C语言简洁、紧凑、方便、灵活 • 2. 运算符丰富 • 3.数据结构丰富 • 4. C语言是结构化语言 • 5. 语法检查不太严格,程序设计自由度大 • 6.C语言允许直接访问物理地址 • 7. 生成的目标代码效率高 • 8. C语言适用范围大,可移植性好
1.3 C语言的主要特点 (1) C语言简洁、紧凑、方便、灵活 C语言共有32个关键字,9种控制语句,程序书写自由,主要用小写字母表示,压缩了一些不必要的成份。
1.3 C语言的主要特点 (2)运算符丰富 C语言的运算符包括的范围很广泛,共有34个运算符。 C语言把括号、下标、赋值、强制类型转换等都作为运算符处理。从而使C语言的运算类型极其丰富、表达式类型多样化,灵活使用各种运算符可以实现在其他高级语言中难以实现的运算。
1.3 C语言的主要特点 (3)数据结构丰富 C语言的数据类型有整型、实型、字符型、数组类型、结构体类型、共用体类型,具有现代高级语言所具有的各种数据类型,能够实现各种复杂数据结构的各种运算。尤其是C语言的指针类型,使程序效率更高。另外C语言也具有强大的图形功能, 支持多种显示器和驱动器。而且计算功能、逻辑判断功能也比较强大, 可以实现决策目的。
1.3 C语言的主要特点 (4)C语言是结构化语言 结构化语言的显著特点是代码及数据的分隔化, 即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调试。C 语言是以函数形式提供给用户的, 这些函数可方便的调用, 并具有多种循环、条件语句控制程序流向, 从而使程序完全结构化。
1.3 C语言的主要特点 (5)语法检查不太严格 一般的高级语言语法检查比较严,能够检查出几乎所有的语法错误。而C语言放宽了语法检查,允许程序编写者有较大的自由度。这是C语言的优点,也是C语言的缺点。限制严格就失去了灵活性,而强调灵活必然要放松限制。在程序设计中,程序员不要过分地依赖编译器的语法检查。
1.3 C语言的主要特点 (6)C语言允许直接访问物理地址 C语言中含有位运算和指针运算,能够直接对内存地址进行访问操作,可以实现汇编语言的大部分功能,即直接对硬件进行操作。 C语言既有高级语言的功能,又兼有汇编语言(低级语言)的大部分功能。有时,也称它为“中级语言”。
1.3 C语言的主要特点 (7)生成的目标代码效率高 仅比汇编程序生成的目标代码执行效率低10~20%。 (8)C语言适用范围大,可移植性好 C语言还有一个突出的优点就是适合于多种操作系统, 如DOS、UNIX,也适用于多种机型。这样C语言程序不作大的修改就可以很容易地移植到其他类型的机器上去。
1.4 C语言程序的基本组成 • 例1.1 输出:Let’s study the C language! • /* This is the first C program *///注释,也就是说明语句 • #include <stdio.h> // 程序需要使用C语言提供的标准函数库 • void main() //主函数 • { • printf(“Let’s study the C language!\n”); • } • 程序运行结果: • Let’s study the C language!
1.4 C语言程序的基本组成 • 例1.2 求两个数a与b之和。 • /* This is the second C program */ • #include <stdio.h> // 程序需要使用C语言提供的标准函数库 • void main() // 主函数 • { int a,b,sum; // 定义变量a,b,c • a=123; // 给变量赋值 • b=456; • sum=a+b; // 求和并把结果赋给sum • printf(“sum is:%d\n”,sum);//调用库函数printf输出最终计算结果 • } • 程序运行结果: • sum is: 579
1.4 C语言程序的基本组成 • 例 1.3 从键盘输入两个整数,在屏幕上输出它们的最大值。 • #include <stdio.h> /* 程序需要使用C语言提供的标准函数库 */ • int max(int x,int y); /* 对被调用函数max的声明 */ • void main() /* 主函数 */ • { int a,b,c; • printf(“input a,b=”); /* 输出提示字符串inpur a,b= */ • scanf(“%d,%d”,&a,&b); /* 由键盘输入a和b的值 */ • c=max(a,b); /*调用函数max,并将返回的值赋值给变量c*/ • printf(“max is:%d\n”,c); /* 输出结果 */ • } • int max(int x,int y) /* 定义函数max(),形参x、y为整型,返回整型值 */ • { int z; /* 定义变量z为整型 */ • if(x>y) /* 条件判断语句,判断x是否大于y */ • z=x; /* 条件为真时,将x值赋给z */ • else • z=y; /* 条件为假时,将y值赋给z */ • return(z); /* 返回z的值 */ • }
1.4 C语言程序的基本组成 • 一个自定义函数由函数的首部和函数体两部分组成: • ·函数的首部,即函数的第一行。包括函数名、函数类型、参数类型和参数名。例如: • int max( int x, int y) • 函数类型 函数名 参数类型 参数名 参数类型 参数名 • 一个函数后面必须跟一对圆括号,函数参数可以没有。 • · 函数体,即函数首部下面的大括号{……}内的部分。如果一个函数内有多个大括号,则最外层的一对{}为函数的范围。例如: • int max(int x, int y) • { ······ • ······ • }
1.4 C语言程序的基本组成 • 函数体一般包括说明部分和执行部分,它们都是C语句: • ·说明部分(也称数据定义部分或声明部分)用于定义函数内部所用到的所有变量的名字、变量的类型,并可对变量指定初值。 • ·执行部分用于完成函数内部所规定的各项操作。 • 例如,在函数max中,语句 int z; 构成了函数的说明部分,剩下的语句构成函数的执行部分。 • 当然,在某些情况下也可以没有说明部分。甚至可以既无说明部分,也无执行部分。例如: • max() • { • } • 它是一个空函数,什么也不做,但这是合法的。
1.4 C语言程序的基本组成 • C语言程序的结构特点: • (1) C语言程序主要由函数构成,C语言程序中有主函数、开发系统提供的库函数以及程序员自己设计的自定义函数三种类型的函数。 • (2)一个函数由说明部分和执行部分两部分构成。说明部分在前,执行部分在后,这两部分的顺序不能颠倒,也不能交叉。 • (3)一个程序总是从主函数开始执行的,无论主函数写在程序的什么位置。 • (4)C语言的语句都是以分号结尾。
1.4 C语言程序的基本组成 • (5)C程序书写格式自由一个语句可以占多行,一行也可 • 以有多个语句。例如, • a=123; • b=456; • (6)C语言没有输入输出语句,在C语言中输入输出操作 • 是由函数实现的。 • (7)为了增加程序的可读性和易读性,C程序中可对程序 • 进行注释。 • (8)程序中可以有预处理命令,预处理命令通常放在程 • 序的最前面。 a=123; b=456;
1.5 C语言程序的书写风格 • 书写C语言程序时应遵循以下规则: • (1)一个说明或一个语句占一行。 • (2)函数之间加空行以清晰地分出程序中有几个函数。 • (3)用花括号括起来的部分,通常表示了程序的某一层 • 次结构。花括号一般与该结构语句的第一个字母对齐,并单 • 独占一行。 • (4)低一层次的语句或说明可比高一层次的语句或说明 • 缩进若干格后书写,同一个层次的语句左对齐,以便看起来 • 更加清晰,增加程序的可读性。 • (5)对于数据的输入,运行时最好要出现输入提示,对 • 于数据的输出,也要有一定的提示格式。 • (6)为了增加程序的可读性,对语句和函数,应加上适 • 当的注释。
1.5 C语言程序的书写风格 • 例 1.4 将例 1.3的程序以不规范的形式书写如下。 • #include <stdio.h> • int max • (int x,int y); • main( ) {int • a,b,c; • printf(“input a,b=”); scanf • (“%d,%d”,&a,&b); c= • max(a,b); printf • (“max is:%d\n”,c);} • int • max(int x,int y) • {int z; • if(x>y) z=x; else z=y; return(z); }
例 1.3程序的规范书写形式。 • #include <stdio.h> • int max(int x,int y); /* 对被调用函数max的声明 */ • void main() /* 主函数 */ • { int a,b,c; • printf(“input a,b=”); /* 输出提示字符串inpur a,b= */ • scanf(“%d,%d”,&a,&b); /* 由键盘输入a和b的值 */ • c=max(a,b); /*调用函数max,并将返回的值赋值给变量c*/ • printf(“max is:%d\n”,c); /* 输出结果 */ • } • int max(int x,int y) /* 定义函数max(),形参x、y为整型,返回整型值 */ • { int z; /* 定义变量z为整型 */ • if(x>y) /* 条件判断语句,判断x是否大于y */ • z=x; /* 条件为真时,将x值赋给z */ • else • z=y; /* 条件为假时,将y值赋给z */ • return(z); /* 返回z的值 */ • }
1.6 C语言程序的基本标识符 • 1.C语言基本字符集 • 字符是组成语言的最基本的元素。C语言字符集由字母 • 、数字、空格、标点和特殊字符组成字符常量,字符串常 • 量和注释中还可以使用汉字或其他可表示的图形符号。 • (1)字母:小写字母a~z共26个,大写字母A~Z共26个。 • (2)数字:0~9共10个。 • (3)空白符:空格符、制表符和换行符等统称为空白符。 • 空白符只在字符常量和字符串常量中起作用,在其他地方 • 出现时,只起间隔作用,编译程序时对它们忽略。因此, • 在程序中使用空白符与否,对程序的编译不产生影响,但 • 在程序中适当的地方可使用空白符增加程序的清晰性和可 • 读性。
1.6 C语言程序的基本标识符 • (4)标点和特殊字符共有30个
1.6 C语言程序的基本标识符 • 2. C语言标识符 • 标识符是用来表示常量﹑变量﹑函数和数据类型的名字。C语言的标识符 • 分为3类:保留字符、预定义标识符和用户自定义标识符。 • (1)保留字符 • C语言的保留字符(也称关键字)共有32个 • ① 数据类型关键字(12个):char﹑double﹑enum﹑float﹑int﹑long﹑short﹑signed﹑struct﹑union﹑ • unsigned和void。 • ② 控制语句关键字(12个):break、case、continue、default、do、 else、for、goto、if、return、switch和while。 • ③ 存储类型关键字(4个):auto、extern、register和static。 • ④ 其他关键字(4个):const、sizeof、typedef和volatile。 • C语言的关键字都用小写字母表示。C语言中区分大、小写字母。在C语言 • 程序中不允许将关键字作为变量名或函数名。
1.6 C语言程序的基本标识符 • (2)预定义标识符 • C语言中除了上述保留字符外,还有一类具有特殊含义的标识符,它们被C语言系统用作库函数名、预编译命令,这类标识符称为系统预定义标识符。 • 例如:系统库数sin、cos、printf和scanf等;预编译命令define、include、undef和endif等。 • 一般来说,用户在编写C语言程序时,不应把这些标识再定义为其他用途的标识符(用户自定义标识符)。
1.6 C语言程序的基本标识符 • (3)用户自定义标识符 • 用户自定义标识符是用户根据编程的需要而定义的标识符,用于标识变量、符号常量、用户自定义函数和类型名等。 • C语言规定,标识符只能是大小写英文字母(A~Z,a~z)、数字(0~9)和下画线(_)组成的字符串,并且其第一个字符必须是字母或下画线。 • 正确的标识符命名: • _ 3a x3 BOOK1 PI • sum5 music _ 3 _ 4 abcD34xz • 不正确的标识符命名: • a+b Hi!Chm G.W.Bush 3s -3x • 3_a ab cd #xy $_3000 bowy-1
1.6 C语言程序的基本标识符 • 使用自定义标识符时必须注意以下几点: • (1)标准C语言不限制标识符的长度,但它受各种版本的 • C语言编译系统的限制,同时也受到具体机器的限制。例 • 如,Turbo C中规定标识符前32位有效,当两个标识符前 • 32位相同时,则被认为是同一标识符。 • (2)标识符中,大小写是有区别的。 • (3)标识符虽然可由程序员随意定义,但标识符是用于 • 标识某个量的符号。因此,命名应尽量有相应的意义,以 • 便阅读理解,做到“顾名思义”。 • (4)不使用C语言的关键字:类型说明符、语句定义符和 • 预处理命令。 • (5)标识符不能和用户定义的函数或C语言库函数同名, • 否则程序中调用库函数就会出错。
1.7 C语言程序的编译和执行 • 源文件的编辑(Edit) • 为了编译C源程序,首先要用系统提供的编辑器建立一个C语言程序的源文件。一个C源文件是一个编译单位,它是以文本格式保存的。源文件名自定,文件的扩展名(或后缀名)为“c”或“cpp”。例如,myfile.c和file.cpp。 2. 程序编译(Compiler) 将上一步形成的源程序文件作为编译程序的输入,进行编译。编译程序会自动分析、检查源程序的语法错误,并按两类错误类型(Waning和Error)报告出错行和原因。用户可根据报告信息修改源程序,再编译,直到程序正确后,输出中间目标程序文件(*.obj)。 3. 连接程序(Link) 使用连接程序,将上一步形成的中间目标文件与所指定的库文件和其他中间目标文件连接,这期间可能出现缺少库函数等连接错误,同样连接程序会报告错误信息。用户可根据错误报告信息修改源程序,再编译,再连接,直到程序正确无误后输出可执行文件(*.exe)。 4. 程序运行(Run) 执行文件生成后,就可执行它了。若执行的结果达到预想的结果,则说明程序编写正确,否则,就需要进一步检查修改源程序,重复上述步骤,直至得到正确的运行结果为止。
1.8.1 程序设计 • 编写程序的目的是使用计算机解决实际问题,使用计算机解决一个实际问题时,通常需要经过提出问题、确定数据结构(在程序中数据的类型和数据的组织形式)和算法,并据此编写程序,直至程序调试通过得到正确的运行结果。这一整个过程就称为程序设计。 程序=算法+数据结构+程序设计方法+语言工具+实验环境
1.8.2 算法的描述 • 算法是指为解决一个问题而采取的确定的、有限 • 的方法和步骤,即对操作的描述。 • 例如,复制文件,首先要寻找所要复制的文件, • 然后选中,再进行复制,最后移动到需要的地方进行 • 粘贴。这就是复制文件的算法。 • 常用的描述算法的方法有自然语言、伪代码、流 • 程图、N-S图、PAD图等方式。
1.8.2 算法的描述 • 1.流程图方式 • 流程图是用一些图框表示各种类型的操作,用线 • 表示这些操作的执行顺序。 起止框,表示算法由此开始或结束。 处理框,表示基本操作处理。 判断框,表示根据条件进行判断操作处理。 输入输出框,表示输入数据或输出数据。 流程线,表示程序的执行流向。
1.8.2 算法的描述 • 例如,判断两个输入数据的大小,输出其中的大数。用流程图表示如下:
1.8.2 算法的描述 • 2. N-S图方式 • 在N-S图方式中,完全去掉了带箭头的流程线。全部算法写在一个矩形框内,在该框内还可以包含其他的从属于它的框,或者说,由一些基本的框组成一个大的框。因此,也称为盒图。
1.8.2 算法的描述 N-S图十分适合描述结构化程序或算法的结构化实现,能够较好地反映算法和程序的层次结构,可读性好,具有自顶向下逐步求精的特征,因而很受欢迎。
1.8.2 算法的描述 • 例如,判断两个输入数据的大小,输出其中的大数,用N-S图表示如下:
1.9.1 Turbo C的启动与退出 • Turbo C是一个基于DOS平台的应用程序,也可以 • 在Windows环境下运行。 • 1.Turbo C可以有如下两种启动方法: • (1)进入DOS状态,键如如下命令: • C:\>CD\TC↙ /* 进入TC子目录 */ • C:\TC>TC↙ /* 执行tc.exe文件 */ • 这时就进入TC环境。 • 或者从Windows进入MS-DOS方式后使用DOS命令, • 键如如下命令: • C:\WINDOWS>CD\TC↙ /* 进入TC子目录 */ • C:\TC>TC↙ /* 执行tc.exe文件 */
1.9.1 Turbo C的启动与退出 • (2)启动Turbo C系统,也可以先打开TC文件夹,用鼠标双击TC.EXE文件,将该文件加载到内存。