目录
1.C语言概述
1.1C语言发展史
1.ALGOL 60 语言
1960年,由算法表示法被综合后诞生了一种算法语言——ALGOL 60语言(算法语言 60),特点是局部性、动态性、递归性和严谨性。
2.CPL 语言
基于ALGOL 60的高级语言,其规模较大,难以实现。
3.BCPL 语言
BCPL语言是典型的面向过程的高级语言,适用于开发精巧、高要求的应用程序,对编译器要求也不高。也是最早使用库函数封装基本输入\输出的语言之一,这使得其跨平台的移植性很好。
4.B 语言
B 语言只有一种数据类型,即计算机字。大部分操作将其看作整数对待,但其他操作将其看作一个复引用的内存地址。
5.C语言
1989年,ANSI发布了第一个完整的C语言标准——ANSI X3.159——1989,简称“C89”。
C89在1990年被ISO一字不改地采纳,ISO官方给予的名称为:ISO\IEC 9899,简称“C90”。
1999年,ISO官方进行了一些必要的修改和完善,发布了新的C语言标准,命名为ISO\IEC 9899: 1999,简称“C99”。
2011年,ISO又发布了新的标准,称为ISO\IEC 9899:2011,简称“C11"。
1.2 C语言的特点
1.简单紧凑,灵活方便
在C语言中包含32个关键字,9种控制语句,程序书写形式比较自由,区分大小写。
C语言把高级语言的基本结构和语句与低级语言的实用性进行了结合。
2.运算符丰富
C语言有34种运算符,并且在C语言中,括号、赋值、强制类型转换都被作为运算符进行处理,通过各种运算符可以实现在其他高级语言中难以实现的运算。
3.数据类型丰富
数据类型有整型、实型、浮点型、字符型、数组类型、指针类型、结构体类型、共用同类型等,通过这些数据类型可以实现各种复杂的数据类型的运算。
4.表达方式灵活实用
C语言提供多种运算符和表达式值的方法,对问题的表达可通过多种途径获得,程序设计更加主动,灵活。并且C语言语法限制不太严格,使得程序的设计自由度更大,如整形量与字符型数据几逻辑型数据可以通用等。
5.允许直接访问物理地址,对硬件进行操作
它既具有高级语言的功能,又具有低级语言的许多功能。能像汇编语言一样对位(bit)、字节和地址进行操作,而这三者是计算机最基本的工作单元,可用来编写系统软件。
6.生成的目标代码质量高,程序执行效率高
C语言描述问题比汇编语言迅速,工作量小,可读性好,易于调试、修改和移植,而代码质量和汇编语言相当,C语言一般来讲只比汇编程序生成的目标代码效率低10%~20%。
7.可移植性好
C语言在不同机器上的编译程序,86%的代码是公开的,所以C语言的编译程序便于移植。在一个环境上用C语言编写的程序,不需改动或稍加修改,就可移植到另一个完全不同的环境中运行。
2.编写第一个C语言程序
1.C语言编译机制
1.C语言的编译机制,用编译原理的话来说,分为词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成几个阶段。
在编译运行的过程中,它包含以下几个步骤:
编辑:
将程序代码输入,交给C语言开发环境。
编译:
将高级语言转化为计算机可以识别的二进制语言,并生成目标程序文件.obj。
连接:
连接就是将编译产生的.obj 文件和系统库连接装配成一个可以执行的程序(*.exe)。
运行:
像运行其他程序一样运行生成的可执行文件(*.exe)。
对C语言来说,一般只需要知道编译和连接两个阶段,编译阶段是将源程序(*.c)转换为目标代码(一般是.obj 文件),连接阶段是把源程序转换成的目标代码(.obj 文件)与程序里面调用的库函数对应的代码连接起来形成对应的可执行文件(.exe 文件)。
3.C语言程序的组成
1.#include 的秘密
一个完整的C语言程序是由一个或多个源程序文件组成的,而每一个源文件中又包含一个或多个函数、预处理命令以及全局变量声明部分。在每一个函数中,又是由函数首部与函数体组成的。
2.程序的入口——main 函数
1.main 函数的形式
main()函数被称为主函数,一个C语言程序总是由main()函数开始执行的
如果在main()前面没有定义函数类型,默认为int 类型。
main()函数没有参数,或者有两个参数。这两个参数,一个是int类型,一个是字符串char类型。
第一个参数是命令行中的字符串数,按照惯例,这个int 参数被称为 argc(argument count)。
第二个参数是一个指向字符串的指针数组。命令行中的每个字符串被存储到内存中,并且分配一个指针指向它。按照惯例,这个指针数组被称为argv(argument value)。
2.main 函数返回值
main 函数的返回值类型是int 型的,而程序最后的“return 0”也与之遥相呼应,“0”就是 main() 函数的返回值。而“0”返回到操作系统,表示系统正常退出,因为 return 语句通常写在程序的最后,不管返回什么值,只要到达这一步,都表示程序已经运行完毕。而 return的作用不仅在返回一个值,还在于结束函数。
3.数据集装箱——常量和变量
在程序执行过程中,数值不发生改变的就是常量,其值可变的就是变量。
他们可与数据类型结合起来。
一个变量拥有一个名字,在内存中占据一定的存储单元,空间大小由数据类型来决定。定义变量必须放在变量使用之前,一般放在函数体的开头部分。
4. 输出函数
printf 函数称为格式输出函数,其关键字中的字母f即为“格式”(format)之意。输出函数的功能是按照用户所指定的格式,将指定的数据显示到屏幕上。
printf 函数调用的一般格式为:
printf("格式控制字符串",输出表列);
其中,“格式控制字符串”用于指定输出格式。“格式控制字符串”可由格式字符串和非格式字符串组成,格式字符串控制输出的数据类型,非格式字符串原样输出。
“输出列表”中给出了各个输出项,要求格式字符串和各输出项在数量和类型上一一对应。
5.注释
#include<stdio.h>
/*主函数*/
int main()
{
//输出函数
printf("hello world!"\n);
return 0;
}
有两种形式:// 和 /*要注释内容*/。
注释的原则:
语言准确、简洁、易懂。对程序添加正确的注释能使函数、变量、结构更加清晰合理,增加代码的可读性。
注释的目的:
为程序添加注释是为了解释代码的用途、功能、采用的方法或者编写者的思想等,为阅读者提供了代码以外的信息,帮助读者准确地理解代码。
代码的注意事项:
1.保持代码与注释的一致性,最好是边写代码边添加注释,如果修改程序应将相应的注释一并修改。
2.注释时注意表达内容要简单明了,含义准确,避免二义性。
3.避免在注释中添加缩写,如必须使用,尽量对缩写及逆行说明。
4.注释时应将描述说明放在代码的上方或右边。
5.全局变量在注释时需要包含对其功能、取值范围、包含函数等进行说明。