本文作者:FiftyOne_77
版权声明:未经作者允许严禁转载
第1章 程序设计和C语言
1.1 什么是计算机程序
所谓程序,就是一组计算机能识别和执行的指令
1.2 什么是计算机语言
一种计算机和人都能识别的语言
计算机语言发展阶段
1. 机器语言
1.1 概念
计算机能直接识别和接受的二进制代码称为机器指令。机器指令的集合就是该计算机的机器语言。
1.2 初期计算机的工作原理
计算机工作基于二进制,从根本上说,计算机只能识别和接受由0和1组成的指令。一般计算机的指令长度为16,即以16个二进制数(0和1)组成一条指令。计算机要知道人类的意图,就要编写许多条由0和1组成的指令。然后要用纸袋穿孔机以人工的方式在特质的黑色纸袋上穿孔,在指定的位置上有孔代表1,无孔代表0,需要运行程序时就将纸带装在光电输入机上,当光电输入机从纸带读入信息时,有孔产生一个电脉冲,指令变成电信号,让计算机执行各种操作。
2.符号语言(符号汇编语言/汇编语言)
2.1 概念
用一些英文字母和数字表示一个指令。
2.2 为什么产生符号语言?
机器语言和人们习惯使用的语言差别太大,难学,难写,难记,难检查,难修改,难以推广使用。初期只有极少数的计算机专业人员会编写计算机程序。
2.3 符号语言的指令表达形式
例如:加法用ADD代表,减法用SUB代表
ADD A,B(执行A+B=>A,将寄存器A中的数与寄存器B中的数相加,放在寄存器A中。)
2.4 计算机识别和执行符号语言的工作原理
计算机并不能直接识别和执行符号语言的指令,需要一种称为汇编程序的软件,把符号语言的指令转换为机器语言。
一般,一条符号语言的指令对应一条机器语言的指令。转换的过程称为“代真”或“汇编”,因此符号语言又称符号汇编语言或汇编语言。
3.高级语言
3.1 概念
很接近于人们习惯使用的自然语言和数学语言,程序中用到的语句和指令是用英语单词表示的,程序中所用的运算符和运算表达式和人们日常所用的数学式子差不多,不依赖于具体机器,用它写出的程序对任何型号的计算机都适用(或只需要很少的修改),它与具体的机器距离较远,故称为计算机高级语言
3.2 为什么产生高级语言
为了克服低级语言的缺点,使人们更容易理解,书写和使用。
3.3 计算机识别和执行高级语言的工作原理
计算机是不能直接识别和执行高级语言程序的,也要进行“翻译”。用一种称为“编译程序”的软件,把用高级语言写的程序(称为源程序)转换为机器指令的程序(称为目标程序),然后让计算机执行机器指令程序,最后得到结果。
PS:高级语言的一个语句往往对应多条机器指令。
3.4 有哪些高级语言?
20世纪50年代创造了第一个计算机高级语言 ——FORTRAN语言。
全世界目前有2500种以上高级语言,每种高级语言都有其特定的用途,其中较为应用广泛的语言有100多种。
影响最大的有FORTRAN和ALGOL(适合数值计算),BASIC,和QBASIC(适合初学者的小型会话语言),COBOL(适合商业管理),Pascal(适合学的结构程序设计语言),PL/1(大型通用语言),C(系统描述语言),C++(支持面向对象程序设计的大型语言),Java(适合网络的语言)等。
3.5 高级语言经历了哪些阶段?
非结构语言:初期的语言属于非结构化语言,编程风格比较随意,流程可以随意跳转,使程序变得难以维护和阅读。
早期的BASIC,FORTRAN和ALGOL等都属于非结构化语言
结构化语言:规定程序必须由具有良好特性的**基本结构(顺序结构,选择(分支)结构,循环结构)**构成,程序中的流程不允许随意的跳转,程序总是由上自下顺序执行各个基本结构。这种程序结构清晰,易于编写,阅读和维护。C语言就是属于结构化语言。
面向对象的语言
PS:1和2都属于面向过程的语言
1.3 C语言的发展及其特点
C语言的祖先是BCPL语言。
BCPL语言--->B语言--->C语言
开发C语言的目的在于尽可能的降低用它所写的软件对硬件平台的依赖程度,使之具有可移植性。
C语言的主要特点
语言简洁,紧凑,使用方便,灵活。C语言一共只有37个关键字,9种控制语句,程序书写形式自由,主要用小写字母表示,压缩了一切不必要的成分。源程序短,输入程序时工作量小。C语言不直接提供输入输出语句,有关文件操作的语句和动态内存管理的语言等(这些操作都是由编译系统自带的库函数来实现),C的编译系统相当简洁。
**运算符丰富。**共有34种运算符。C语言把括号,赋值和强制类型转换等都作为运算符处理。
数据类型丰富:C语言提供的数据类型包括:整型,浮点型,字符型,数组类型,指针类型,结构体类型和共用体类型等。C99又补充了复数浮点类型和超长整型(long long)和布尔类型(bool)等。
具有结构化的控制语句:(如if......else语句,while语句,do......while语句,switch语句,for语句)用函数作为程序的模块单位,便于实现程序的结构化。
语法限制不太严格,程序设计自由度大。
C语言允许直接访问物理地址,能进行位(bit)操作。
用C语言编写的程序可移植性好。
生成目标代码质量高,程序执行效率高。
1.4 最简单的C语言程序
最简单的C语言程序举例
例1.1 要求在屏幕上输出以下一行信息
This is a C program.
解题思路:在主函数中用printf函数原样输出以上文字。
#include <stdio.h>//编译预处理指令
int main() //定义主函数
{ //函数开始的标志
printf("this is a C program/n"); //输出所指定一行的内容
return 0;//函数体执行完毕时返回的值0
}//程序结束的标志
运行结果:
![](https://i-blog.csdnimg.cn/blog_migrate/bd68fbd0e08a4f0af6e96d0097c61b70.png)
程序分析:
第2行,其中main是函数的名字,表示“主函数”,main前面的int表示函数的类型是int类型(整型)
第5行“return 0”的作用是:当mian函数执行结束前将整数0作为函数值,返回到调用函数处。
每一个C语言程序都必须且只有一个main函数
函数体用花括号{}括起来。
printf是C语言编译系统提供的库函数的输出函数,使用库函数前需引入头文件#<stdio.h>。
在以上程序各行的右侧,如果有//,则表示到本行结束是“注释”。用来对程序有关部分进行必要的说明。
在程序进行预编译处理时将每个注释替换为一个空格,因此在编译时注释部分不产生目标代码,注释对运行不起作用。
说明:C语言允许使用的两种注释方法
以//开始的单行注释:这种注释可以单独占一行,也可以出现在一行中其他代码的右侧。此种注释的范围以//为开始,以换行符为结束。这种注释不能跨行,如果注释内容一行写不下,可以用多个单行注释。
//如注释内容写不下
//可以在下一行重新使用“//”,然后继续写注释
以/开始, /结束的块式注释。这种注释可以包含多种内容。编译系统在发现一个/后,会开始寻找注释结束符/,把二者之间的内容作为注释。所以多行注释不能进行嵌套使用
但应该注意的是*在字符串中的//和/都不作为注释的开始。而是作为字符串中的一部分。
例1.2 求两个整数之和
解题思路:设置三个变量,a,b用来存放两个整数,sum用来存放和数。用赋值运算符“=”把相加的结果赋值给sum.
编写程序:
#include <stdio.h> //这是编译预处理指令
int main()//定义主函数
{//函数开始
int a = 2;//定义变量a且赋予初始值
int b = 3;//定义变量b且赋予初始值
int sum = 0;//定义变量sum且赋予初始值
sum = a + b;//进行a+b的运算,并把结果放在变量sum中。
printf("sum = %d\n", sum);//输出结果
return 0;//使函数返回值为0
}//函数结束
运行结果:
![](https://i-blog.csdnimg.cn/blog_migrate/a4a2f8686e72e09baf4ccea02c0b592a.png)
程序分析:
%d是指定的输出格式,d表示用“十进制整数”形式输出。
例1.3 求两个整数中较大者
解题思路:
1.用函数来实现求两个整数中较大者,在主函数中调用此函数并输出结果。
编写程序:
#include <stdio.h>
//求两个数较大的函数
int max(int x, int y) {//定义max函数,函数值为整型,形式参数x,y为整型。
if (x>y)
{
return x;
}
else {
return y;
}
}
//主函数
int main() {
int a = 0;//定义变量a并且赋予初始值
int b = 0;//定义变量b并且赋予初始值
int c = 0;//定义变量c并且赋予初始值
scanf("%d%d", &a, &b); //输入变量a和变量b的值
c = max(a, b);//调用max函数,得到最大值。
printf("max = %d\n", c);//输出c的值
return 0;//使函数返回值为0
}//函数结束
提示:
使用scanf语句会出现报错和警告:
“scanf”这个函数或变量可能不安全,考虑使用scanf_s来替代。禁用此警告,使用“ _CRT_SECURE_NO_WARNINGS”。
![](https://i-blog.csdnimg.cn/blog_migrate/2006542aca75077fa6c493cdff7201b3.png)
scanf是C语言函数库中提供的输入函数,不同的编译器可能不兼容此函数,故产生报错。但不建议使用编译器生产的函数“scanf_s”,如果使用“scanf_s”,换一个编译器可能就会产生报错。解除此报错,只需在文件头加入“#define _CRT_SECURE_NO_WARNINGS 1”,即可正常使用。
程序运行结果:
![](https://i-blog.csdnimg.cn/blog_migrate/19cdeeb8d7999a4f2291df6e3c0e140c.png)
程序分析:
本程序包括两个函数:1.主函数main 2.被调用函数max
在C语言中“&”是地址符,“&a”的含义是“变量a的地址值”。
C语言程序的结构
C语言程序结构的特点
**一个程序由一个或多个源程序文件组成。**在一个源程序文件中可以包括3个部分:
预处理指令:C编译系统在对源程序进行“翻译”以前,先由一个“预处理器”(也称“预处理程序”,“预编译器”)对预处理指令进行预处理。对于#include<stdio.h>指令来说,就是将stdio.h头文件的内容读进来,取代#include<stdio.h>。
全局声明:在函数外声明的变量称为全局变量。在整个源程序文件范围内有效。在函数内声明的变量是局部变量,只在函数内生效。
**函数定义:**如:int main ()就是函数的定义。
函数是C语言的主要组成部分。函数是C程序的基本单位,一个C语言程序是由一个或多个函数组成,其中必须包含一个main函数(且只能有一个main函数)
一个小程序只包含一个源程序文件,在一个源程序文件中包含若干个函数(其中只有一个main函数)。当程序规模较大时,所包含的函数的数量较多,如果把所有的函数都放在同一个源程序文件中,则此文件显得太大,不便于调试。为了便于调试和管理,可以使一个程序包含若干个源程序文件,每个源程序文件又包含若干个函数。一个源程序文件就是一个程序模块,即将一个程序分成若干个程序模块。
一个函数包括两个部分。
函数首部。包括函数名,函数类型,函数属性,函数参数(形式参数)名,参数类型。
函数体。即函数首部下面的花括号内的部分。如果一个函数中有多层花括号,则最外层一对花括号是函数体的范围。
函数体一般包括以下两部分:
声明部分:定义在本函数中所用到的变量,对本函数所调用进行声明。
执行部分:有若干个语句组成,指定在函数中所进行的操作。在某些情况下也可以没有声明部分,甚至可以既无声明部分,又无执行部分,它是一个空函数,起占位作用。
程序总是从main函数开始执行的。不论main函数在哪里,程序总是从main函数执行的。
程序对计算机的操作是由函数中的C语句完成的
在每一个数据声明和语句的最后必须有一个分号!!!
C语言本身不提供输入输出语句。输入和输出操作是由库函数scanf和printf等函数来完成的。
程序应当包含注释。目的是提高阅读性。
1.5 运行C程序的步骤和方法
计算机不能直接识别和执行用高级语言写的指令,必须用编译程序(也叫编译器)把C源程序(后缀为.c)翻译成二进制形式的目标程序(后缀为.obj),然后再将该目标程序与系统的函数库进行以及其他的目标程序连接起来,形成可执行的目标程序。
编译和运行的步骤
上机输入和编辑源程序。通过键盘向计算机输入程序,如有发现错误,要及时改正。最后将源程序以文件形式存放在自己指定的文件夹内。文件以.c作为后缀名,生成源程序文件。如f.c。
对源程序进行编译。先用C编译系统提供的“预处理器”(也称“预处理程序”,“预编译器”)对程序中的预处理指令进行编译预处理。由预处理得到的信息与程序其他部分一起,组成一个完整的,可以用来进行正式编译的源程序,然后由编译系统对源程序进行编译。
编译的作用:
对程序进行语法上的检查,判断程序是否存在语法上的错误。修改错误后,需重新编译,重复该行为,知道没有语法错误为止。
编译系统自动把源程序转换为二进制形式的目标程序,其后缀名为.obj。在用编译系统对源程序进行编译时,自动包括预编译和正式编译两个阶段。
进行链接处理。所有编译后得到的目标模块连接装配起来,再与函数库相连接称为一个整体,生成一个可供计算机执行的目标程序,称为可执行程序,其后缀为.exe。链接的工作是有一个称为“链接编辑程序”的软件来实现的。
运行可执行程序,得到运行结果。
1.6 程序设计的任务
程序设计是指从确定任务到得出结构,写出文档的全过程
程序设计的几个工作阶段
问题分析,确定数据结构。对于接手的任务进行分析,研究所给定的条件,分析最后应达到的目标,找出解决问题的规律,选择解决问题的方法。
设计算法。即设计出解题的方法和具体步骤
编写程序。根据得到的算法,用一种高级语言编写出源程序。
对源程序进行编辑,编译和链接,可得到可执行程序
运行结果,分析结果
编写程序文档。内容应包括程序名称,程序功能,运行环境,程序的装入和启动,需要输入的数据,以及使用注意事项等。
程序文档是软件的一个重要组成部分,软件是计算机程序和程序文档的总称。有的程序说明文件,在程序中以帮助(help)或redme形式提供。