1.程序设计和C语言
程序:就是一组计算机能识别和执行的指令。
低级语言
完全依赖具体机器特性,面向机器的语言,由于”贴近“计算机。
机器语言:能直接识别和接受的二进制代码称为机器机器指令。机器指令的集合称为该计算机的机器语言。
符号语言:计算机不能直接识别和执行符号语言的指令,需要用汇编程序把符号语言的指令转换为机器指令。又称汇编语言。
高级语言
与具体机器距离较远,故被称为计算机高级语言。
用编译程序把用高级语言写的程序(源程序)转换为机器指令的程序(目标程序),高级语言的一个语句往往对应多条机器指令
高级语言发展阶段
- 非结构化的语言。如早期BASIC,FORTRAN。
- 结构化语言
- 面向对象的语言
C语言特点
- 语言简洁、紧凑、使用方便、灵活。只有37个关键字,9种控制语句。 C语言不直接提供输入和输出语句、有关文件操作的语句和动态内存管理的语句等由编译系统提供的库函数来实现。
- 运算符丰富
- 数据类型丰富。
- 具体结构化的控制语句(if-else)、while、do-while
- 语法限制不太严格,程序设计自由度大。
- 允许直接访问物理内存,能进行位操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。
- 可移植性好。
- 生成目标代码质量高,程序执行效率高
C语言程序结构
- 一个程序由一个或多个源程序文件组成
预处理指令,全局声明,函数定义 - 函数是C程序的重要组成部分
- 一个函数包括两个部分
函数首部:函数名,函数类型,函数属性,参数,参数类型
函数体:声明部分,执行部分 - 程序总是从main函数开始执行,而不论main在程序中的位置如何
- 程序对计算机的操作由函数中的C语句完成的。
- 每个数据声明和语句的最后必须有一个分号
- C语言本身不提供输入输出语句
- 程序应当包含注释
运行C的步骤与方法
-
输入和编辑源程序
-
对源程序进行编译。先用预处理器对程序中的预处理指令进行编译预处理。由预处理得到的信息与程序其他部分一起,组成一个完整的、可以用来进行正式编译的源程序,然后由编译程序对该源程序进行编译。 当没有语法错误时,编译程序把源程序转换为二进制形式的目标程序。
编译时,自动包括预编译和正式编译,用户不必分别发出二次指令。 -
进行连接处理。一个程序可能包含若干个源程序文件,必须把所有的编译后得到的目标文件连接装配起来,再与库函数相连接成一个整体,生成可供计算机执行的目标程序,称为:可执行程序。
-
运行可执行程序
程序设计的任务
- 问题分析
- 设计算法
- 编写程序
- 对源程序进行编辑、编译和连接
- 运行程序,分析结果
- 编写程序文档
2.算法
一个程序主要包括以下两方面的信息:
- 对数据的描述。(数据结构)
- 对操作的描述。(算法)
沃思提出公式:
算 法 + 数 据 结 构 = 程 序 算法+数据结构=程序 算法+数据结构=程序
计算机算法分成两大类别:数值运算算法与非数值运算算法。
算法的特征
- 有穷性:有限个操作步骤
- 确定性:每一个步骤应当是确定的。
- 有零个或多个输入:
- 有一个或多个输出
- 有效性:每个步骤都应当能有效地执行,并得到确定的结果。
算法的表示方法
- 自然语言
- 流程图。ANSI规定一些常用的流程图符号。
三种基本结构与改进的流程图
BS(a bowl of noodle)算法的弊端:流程图毫无规律,如同乱麻。
基本结构
- 顺序结构
- 选择结构
- 循环结构
当型(while):如果条件成立则执行。
直到型(until):执行至条件成立。
共同特点: 只有一个出口,只有一个入口。结构内每一部分都有机会被执行。结构内不存在死循环。
N-S流程图
- 循环结构
2.选择结构
- 循环结构
伪代码
介于自然语言和计算机语言之间的文字和符号来描述算法。
计算机语言
必须严格遵循所用的语言的语法规则
结构化设计方法
- 自顶向下
- 逐步细化
- 模块化设计:低耦合,高内聚
- 结构化编码
3.顺序结构设计
数据存储形式
常量
在程序运行过程中,其值不能被改变的量称为常量。
- 整形常量
- 实型常量
十进制小数
指数形式(e或 E前必须有数字,且e或E以后必须为整数) - 字符常量
普通字符
转义字符 - 字符串常量:双撇号的括号中全部字符,不包括双撇号。
- 符号常量:用#define,指定用一个符号名称代表变量。优点:含义清楚,程序多处使用时只用修改一处。
符号常量不等于变量,不占用内存,只是临时符号,预编译后符号就不存在
变量
变量代表一个有名字、具有特定属性的一个存储单元。用来存放数据,存放变量的值。先定义再使用
常变量
C99允许使用。具有变量的基本属性,但不允许修改值, 常量是没有名字的不变量,常变量是有名字的不变量。
标识符
计算机高级语言中,用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列。只能由字母、数字、下划线3种字符组成,且第一个字符必须为字母或下划线。
数据类型
数据存放在存储单元中。类型就是对数据分配存储单元的安排,包括存储单元的长度和存储类型。
基本类型和枚举类型统称算术类型。算术类型和指针类型统称纯量类型。 数组和和结构体统称组合类型。
整形
- 基本整形int。(2字节或4字节)
数值范围-32768~32767或 − 2 31 , 2 31 − 1 -2^{31},2^{31}-1 −231,231−1 - 短整型short int (2字节)
- 长整形long int(4字节)
- 双长整形long long int(8字节 C99支持)
in addition:不严格要求空间大小,但满足以下条件
s i z e o f ( s h o r t ) ≤ s i z e o f ( i n t ) ≤ s i z e o f ( l o n g ) ≤ s i z e o f ( l o n g l o n g ) sizeof(short)\leq sizeof(int)\leq sizeof(long)\leq sizeof(lo