程序:计算机程序是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具。
程序设计:是人们根据任务的需要选择合适的语言,编写出程序,然后运行程序得到结果的过程。
源程序:是指未经编译的,按照一定的程序设计语言规范书写的,人类可读的文本文件。通常由高级语言编写。
目标程序:是源程序经编译程序编译后,可直接被计算机运行的机器码集合,在计算机文件上以.obj作扩展名。
可执行程序:所有目标程序连接装配起来后,再与函数库相连接成一个整体,生成的可供计算机执行的目标程序。
程序编辑:指用计算机所能识别的语言,按照一定的程序结构翻译出来,并可被计算机执行的编写代码的全过程。
程序编译:是用户使用编译程序对其个人编制的源程序进行编译,检查,判断有无语法错误的过程。
程序连接:把所有编译后得到的目标模块连接装配起来,再与函数库相连接成一个整体的过程。
程序模块:即可由汇编程序、编译程序、装入程序或翻译程序作为一个整体来处理的一级独立的、可识别的程序指令。它是大型程序指令的一个组成部分。
程序文件:包括源程序文件,目标文件,可执行文件等。文件的内容是程序代码。
程序调试:是上机测试,发现和修正程序中语法错误和逻辑错误的过程。
程序测试:设计多组测试数据,检查程序对不同数据的运行情况,尽量发现程序漏洞,并修改程序,使之能适用于各种情况。
结构化程序设计:是进行以模块功能和处理过程设计为主的详细设计的基本原则。
内容:主张使用顺序、选择、循环三种基本结构;自顶向下,逐步细化;模块化设计,结构化编码。
使用函数。
算法:是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。
结构化算法:是由一些基本结构顺序组成的,就是把一个大的功能的实现分隔为许多个小功能的实现。
优点:在基本结构之间不存在向前或向后的跳转流程的转移只存在于一个基本的结构范围内。这样的好处是可以将复杂问题简单化,让编程更容易,提高代码维护和可读性。
递归算法:在计算机科学中是指一种通过重复将问题分解为同类的子问题
而解决问题的方法。
优点:结构清晰;可读性强。
缺点:效率较低,时间和空间消耗大;可能导致调用栈溢出。
数据有两种表现形式:常量,变量。
常量:
变量:代表一个有名字,具有特定属性的存储单元。必须先定义,后使用。
常变量(c99):具有变量的基本属性,在变量存在期间不改变值。
字符常量:
字符集:ASCII标准有128个字符。
符号常量在预编译之后,就不再存在了。它不会被分配存储单元。
常变量占用存储单元。
一般习惯使用常变量。
每一个变量,函数都有两个属性:数据类型;数据的存储类型。
数据类型:
存储类别:auto;statis;register;extern。(自动存储;静态存储;寄存器;外部)
基本类型:整型(整型,短整型,长整型,双长整型(c99));实型(单精度,双精度,复数);字符型;布尔型(c99)。
函数类型:用来定义函数,描述一个函数接口,包括函数返回值的数据类型和参数类型。
定义:把建立存储空间的声明称为“定义”,也可称为“定义性声明”。
声明:把不需要建立存储空间的声明称为“声明”,也可称为“引用性声明”。
ps:声明和定义变量,函数时,应同时指定数据类型和存储类别(有默认值)。
其定义只能有一次,定义在所有函数之外。
但在同一文件中,可以有多次对同一外部变量的声明,声明位置可在函数内或函数外。
系统根据定义分配存储单元(声明仅仅扩展了作用范围)。
以存储生存期:静态存储方式;动态存储方式。
以作用域:全局变量;局部变量。
ps:依据变量的存储类别,可以知道其作用域和生存期。(全局)
局部变量:函数内部,或复合语句内部,定义的变量。只在函数,复合语句范围内有效,外部不能引用这些变量。形式参数也是局部变量,只在被调函数中有效。
全局变量:在函数外定义的变量。它可为全文本其他函数所共用,有效范围从定义位置始,到本源文件结束。
全局变量缺点:一个函数对全局变量做出改动,会影响其他函数中全局变量的值(同一文件中所有函数都可引用全局变量);降低程序的清晰性,易出错;全局变量会在程序的全部执行过程中占有存储单元;全局变量使函数的通用性变低(函数会受外部变量的影响,当函数移植到另一个文件时,要考虑此外部变量也需要一起移动;若外部变量出现与其他文件变量同名的情况,往往就出现问题)。
全局变量优点:各个函数间有了直接的传递通道(同一文件可被各个函数引用)。
ps:模块尽量单一,高内聚低耦合,最好只以实参形参作为函数与外界联系的渠道。
静态存储方式:程序运行期间由系统分配固定的存储空间的方式。
动态存储方式:在程序运行期间根据需要进行动态的分配空间的方式。
对于局部变量:
作用域固定(形参,复合语句内,函数内),生存期通过存储类别指定。
自动变量(auto类别):不声明的局部变量都为自动变量,动态分配存储空间。数据存储在动态存储区,关键字auto作存储类型的说明。忽略存储类型时的默认类型。
静态局部变量(static类别):函数中的变量的值在调用后不消失而继续保持原值,下一次调用,该变量具有此值。在静态存储区内分配存储单元,在整个程序运行期间都不释放,关键字static进行声明。
寄存器变量(register类别):对某些使用频繁的变量,为提高执行效率,允许将局部变量的值放在CPU的寄存器中,能更快速的存取。这种变量叫寄存器变量。关键字register。已过时了。
对于全局变量:
生存期固定(整个程序运行过程),作用域通过存储类别指定。
扩展全局变量(extern类别):变量在变量定义位置之前的函数内使用时,需在函数内做外部变量声明,把外部变量的扩展域扩展到此位置。关键字extern,声明时,类型名可以省略。(为避免麻烦,最好把全局变量定义在所以引用它的文件之前)
静态外部变量(static类别): 将全部变量作用域限制在本文件内,某些全局变量避免被其他文件引用,可以在定义时,用static 声明。(全局变量本身就带静态存储属性,此时前加static,是说明其不可被其他文件引用)
静态局部变量,在编译时赋初值(编译即预先走一遍程序,此时遇见静态局部变量,开辟存储单元后也不会关闭,知道程序关闭才关闭。),定义局部变量不赋初值,则编译时自动赋初值为0or\o’。静态局部变量在函数调用后任存在,但此时其他函数也不能引用它,因为它是局部变量。
静态局部变量缺点:占用内存长期不释放。降低了程序的可读性,往往弄不清局部变量的当前值。
静态全局变量优点:使每个文件独立,程序模块化,通用性更好;屏蔽了外界,安全。
编译遇见此关键字,先会从本文件中找外部变量的定义,找到即在本文件中扩展定义域,否则,就连接其他文件找外部变量的定义。再找不到,就按出错处理。
之于跨文件变量:可使全局变量的作用域,扩展到其他文件。只在一个文件中定义此全局变量,几个文件都需要同一个外部变量时,其他文件中用extern 关键字声明此变量名,避免程序连接时[重复定义]冲突。(缺点执行一个文件操作可能会改变全局变量的值,从而影响到其他涉及此全局变量的文件的执行)
程序区;
静态存储区:全局变量存放;
动态存储区:形参,除static限定的局部变量,函数调用时的现场保护和返回地址(分配和释放是动态的,同一函数的两次调用,被分配的存储空间地址可能不同)。
函数包括两部分:
从用户使用角度:
从函数形式: