1、.程序设计基础(c语言)复习提纲第一章 程序设计概述1、C程序的组成和形式的基本特点(1)C程序是由函数构成的,一个C源程序至少且仅包含一个main函数,也可以包含一个main函数和若干个其他函数。(2)一个函数由两部分组成 函数的首部:即函数的第一行,包括函数类型、函数名(参数类型、参数名)例:int max (int x, int y)一个函数名后面必须跟一对圆括号,括号内写函数的参数类型、参数名。函数可以没有参数,如main()。 函数体:即函数首部下面的花括号内的部分。如果一个函数内有多个花括号,则最外层的一对花括号为函数体的范围。函数体一般包括:声明部分、执行部分2、 运行C程序的步
2、骤及每个步骤生成文件的类型及特点C源程序(*.C)预编译处理(*.C)编译、优化程序(*.s、*.asm)汇编程序(*.obj、*.o、*.a)链接程序(*.lib、*.exe、*.elf、*.axf)。3、 计算机程序设计语言从机器语言、汇编语言到高级语言。机器语言:用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合。由0和1按一定规则排列组成的一个指令集。汇编语言:用助记符代替操作码和用地址符号或标号代替地址码。机器不能直接识别,需要翻译成机器语言。高级语言:更接近于自然语言。使用高级语言编写的程序不能直接运行,需要转换成机器语言才能运行,转换方式有解释和编译两种。4、 一个程序
3、应包括数据结构即对数据的描述;算法也就是操作步骤。著名计算机科学家沃思提出一个公式: 数据结构 + 算法 = 程序。计算机算法可分为两大类:数值运算算法和非数值运算算法。5、 数据结构(Data Structure)是计算机存储、组织数据的方式。数据类型有整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。6、 广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”。算法是一系列解决问题的清晰指令。算法的特征:有穷性、确切性、可行性、输入、输出。算法的表示方法:自然语言表示法、流程图表示法、N-S图表示法、伪代码表示法。7、 一个算法的基本结构:顺序结构、选择结构(选取结构或
4、分支结构)、循环结构。顺序结构:先执行A操作,再执行B操作。选择结构:当p条件成立,执行A操作,当p条件不成立,执行B操作。循环结构:循环结构分为当型循环和直到型循环当型循环(while):当条件p成立时,反复执行A操作,直到p条件不成立为止。直到型循环(until):先执行循环体A,直到条件p成立,循环终止。8、 C语言一共有32个关键字,9种控制语句,34种运算符。结构化的控制语句有:(如ifelse语句、while语句、dowhile语句、switch语句、for语句)。C语言就是面向过程的程序设计语言;C+语言就是面向对象的程序设计语言。9、 结构化程序设计的设计原则:自顶向下、逐步细
5、化、模块化设计、结构化编码。第二章 C语言基础与程序结构1.C语言字符集: 字符是C语言的最基本的元素。C语言字符集由字母、数字、空格、标点和特殊字符组成。由字符集中的字符可以构成C语言(标示符、关键词、运算符等)。 1.字母:小写字母az共26个 大写字母AZ共26个。 2.数字: 09共10个。 3.空白符:空格符、制表符、换行符等统称为空白符。 4.标点符号和特殊字符。2、标识符的命名规则标示符是一个名字,用来标识常量、变量、类型、语句、标号及函数的名称。C语言中标识符有三类:关键字、预定义标识符和用户定义标识符。C语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字
6、母或下划线,合法的标识符可以作为变量名。已经被C系统所使用的标示符称为关键字。C语言的关键字共有32个,根据关键字的作用,可分其为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类。(1)数据类型关键字(12个):char, double, enum, float, int, long, short, signed, struct, union, unsigned, void (2)控制语句关键字(12个):break, case, continue, default, do, else, for, goto, if, return, switch, while (3)存储类型关键
7、字(4个):auto, extern, register, static (4)其它关键字(4个):const, sizeof, typedef, volatile3、运算符运算符可以由一个或者多个字符组成。运算符将常量、变量、函数连接起来组成表达式表示各种运算。运算符根据参与运算的操作数的个数分为:单目、双目、三目运算符。1.算术运算符:用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(+)、自减(-)共七种。2.关系运算符:用于比较运算。包括大于()、小于(=)、小于等于(=)和不等于(!=)六种。3.逻辑运算符:用于逻辑运算。包括与(&)、或(|
8、)、非(!)三种。4.位操作运算符:参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非()、位异或()、左移()六种。5.赋值运算符:用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,=,=,)等几种。4、C语言的基本数据类型和构造数据类型C数据类型基本类型构造类型指针类型空类型void定义类型typedef字符类型char枚举类型enum整型实型单精度型float双精度型double数组结构体struct共用体union短整型short整型int长整型long5、数据类型:整型常量即整常数的3种表示方式:十进制整数;八
9、进制整数(以0开头);十六进制整数(以0x开头)。 2进制用两个阿拉伯数字:0、1;8进制用八个阿拉伯数字:0、1、2、3、4、5、6、7;10进制用十个阿拉伯数字:0到9;16进制09然后用A,B,D,E,F表示10,11,12,13,14,15类型符号关键字所占位数数的表示范围整型有(signed)int16-3276832767(signed)short16-3276832767(signed)long32-21474836482147483647无unsigned int16065535unsigned short16065535unsigned long3204294967295实型
10、有float323.4e-383.4e38有double641.7e-3081.7e308字符型有Char8-128127无unsigned char802556、复合赋值运算符:a+=3;等价于a=a+3;7、逗号运算符及其优先级、逗号表达式:逗号表达式一般形式 表达式1,表达式2,表达式N。表达式N的值作为整个逗号表达式的值。赋值运算符的级别高于逗号运算符 a=3*5,a*4; a的值为15,表达式的值为6010、强制类型转换打个括号:(double)a;(int)(x+y);11、自增、自减运算i+或+i1. 自增自减运算符只能用于变量,不能用于常量或表达式。2. +和的结合方向是自右至
11、左,例-i+合法,先输出-i再加一。例:i=3;a=i+;b=i+;c=i+;d=a+b+c;最终输出d=12。12、C语言程序结构 预处理命令 全局变量的定义 /限制使用 函数声明 主函数main() /函数体开始 声明部分 执行部分 /函数体结束 其他函数 声明部分 执行部分 一个C程序总是从main()函数开始执行的,也是从main终止的,而不论main()函数在程序中的位置。 C语言的预处理功能主要包括:宏定义、文件包含、条件编译。分别用宏定义命令(#define)、文件包含命令(#include)、条件编译(#ifdef#else#endif)实现,为了与一般语句区别这些命令以“#”
12、开头。最基本的输入/输出函数包括:scanf/printf(格式输入/格式输出)、getchar/putchar(字符输入/字符输出)、gets/puts(字符串输入/字符串输出)等。 printf函数一般格式:printf(“格式控制字符串”,输出项列表); printf(“Enter value of an”);在屏幕上打印出Enter value of aprintf(“sum is %dn”,sum);在屏幕上打印出sum is 数值 /注释:(数值是sum的)scanf函数一般格式:scanf(“格式控制字符串”,地址列表);scanf(“%d”,&a);&与变量名a连用代表:a的内
13、存地址,系统把用户输入的值存储在&a。putchar()、getchar()函数putchar函数(字符输出函数)作用是向终端输出一个字符。其一般形式为putchar(c)putchar(n)作用是输出一个换行符,使输出的当前位置移到下一行的开头getchar函数(字符输入函数)的作用是从终端输入一个字符,其一般形式为getchar()例如char c;c=getchar();putchar(c);此时屏幕上将输出c的输入值。转义字符 意义格式占位符(%)n换新行起始符%a,%A 读入一个浮点值(仅C99有效) r回车(到本行起始)%c 读入一个字符b退格符%d 读入十进制整数 f换页符%i
14、读入十进制,八进制,十六进制整数t横向制表符%o 读入八进制整数 v纵向制表符%x,%X 读入十六进制整数 反斜杠%s 读入一个字符串,遇空格、制表符或换行符结束。 单引号%f,%F,%e,%E,%g,%G 用来输入实数,可以用小数形式或指数形式输入。双引号%p 读入一个指针?问号%u 读入一个无符号十进制整数0空字符(NULL)%n 至此已读入值的等价字符数 ddd1到3为八进制数所代表的字符l用于长整型整数,可加载个师傅d,o,x,u前面xhh1到2位十六进制树所代表的字符m数据最小宽度n对实数,表示输出n位小数,对字符串,表示截取的字符个数-输出的数字或字符在域内向左靠13、三种预处理包
15、括:宏定义、文件包含、条件编译。宏定义是用一个宏名(例如PI)表示一个字符串(例如:3.14)(字符串可以是常数、表达式、格式串等)。在宏展开时用该字符串取代程序中出现的宏名(宏名一般习惯用大写字母表示)。1.不带参数的宏定义的一般形式:#define标识符 字符串 例如:#define PI 3.14 2.带参数的宏定义的一般形式: #define宏名(形参表)字符串 例如:#define S(a,b) a*b 文件包含命令的功能是把指定的“头文件”插入该命令行位置取代该命令行,从而把指定的“头文件”和当前的源程序文件连成一个源文件。一般形式: #include /*stdio.hstdio
16、.h被包含#includeVoid main()#includeVoid main()Void main()file.cfile.c #include”头文件名”条件编译命令的一般形式第一种形式:#ifdef标识符: 程序段1 #else 程序段2#endif 它的功能是,如果标识符已被#define命令定义过,则对程序段1进行编译;否则对程序段2进行编译。第二种形式:#ifndef标识符: 程序段1 #else 程序段2#endif 它的功能与第一种形式的功能是相反的,如果标示符未被#define命令定义过,则对程序段1进行编译,否则对程序段2编译。第三种形式:#if 常量表达式 程序段1
17、#else 程序段2#endif 它的功能是,若常量表达式的值为真(非0),则对程序段1进行编译,否则语句段2编译。因此可以使程序在不同条件下,完成不同的功能。14、位运算是指按二进制进行的运算。操作符优先级作用要求运算符的个数结合方向取反高低按位取反单目从右到左右移左移、右移双目从左到右&按位与按位与双目从左到右按位异或按位异或双目从左到右|按位或按位或双目从左到右第三章 程序的控制结构1、关系运算符及其优先次序 (小于) (大于) = (大于等于) = (等于) != (不等于)= (等于)、!= (不等于)优先级相同低于 (小于)、 (大于)、=(大于等于)。逻辑运算 (1)& (逻辑与
18、) 相当于其他语言中的AND(2)| (逻辑或) 相当于其他语言中的OR(3)! (逻辑非) 相当于其他语言中的NOT!(非)&()|();逻辑运算符中的“&”和“|”低于关系运算符,“!”高于算术运算符2、控制语句 9种Ifelse/for/while/dowhile/continue/break/switch/goto/return(1) 单分支结构形式如下:if(表达式) 语句;例:if(xy)printf(“%d”,x);(2) 双分支结构形式如下:if(表达式) 语句1; else 语句2;例:if(xy) printf(“%d”,x); else printf(“%d”,y);(3
19、) 多分支结构if(表达式1) 语句1; else if(表达式2) 语句2;else if(表达式3) 语句3; else if(表达式n) 语句n;else 语句n+1;例:if(number500)cost=0.15;else if(number300)cost=0.10;else cost=0;(4) switch语句的基本格式: switch(表达式) case常量表达式:语句组;break; case常量表达式:语句组;break; case常量表达式:语句组;break; default:语句 (5) if语句的嵌套形式:if(表达式1)if(表达式2)语句1;else语句2;e
20、lseif(表达式3)语句3; else语句4;3、 C语言可实现循环结构的语句:用goto 和 if 构成循环;while 语句;do while 语句;for 语句(1) while(表达式) 语句;先计算while后面表达式的值,如果其值为“真”(非0)则执行循环体。例子:while(i=100)sum=sum+I;i+;(2) do 语句; while(表达式);执行do后面的循环体语句,计算while后面表达式的值,如果其值为“真”(非0),则继续执行循环体,如果表达式的值为“假”(0),退出循环。例子:dosum=sum+I;i+;while(i=100);printf(“%dn”
21、,a);(3) for(表达式1;表达式2;表达式3) 循环体; 计算表达式1; 计算表达式2,若其值为真(非0,表示循环条件成立),则转步。若其值为假(0,循环条件不成立),转。 执行循环体 计算表达式3,则转判断循环条件是否成立。 结束循环,执行for循环之后的语句。例子:for(;i=100;)sum=sum+i;i+例子:for(i=1;iastrcmp(“35+78”,“4”);/返回值为-1,3y?x:y;return(z);空函数类型说明符 函数名() 例如 void dummy() 3、函数的参数、实参和形参之间的数值传递、函数值实际参数:调用函数时函数名后面括号中的值形式参数
22、:定义函数时函数名后面括号中的值实参可以是常量、变量、表达式或函数调用。在进行函数调用时,实参必须具有确定的值,以便把这些值传递给形参。简单变量作函数参数只有在函数被调用时系统才会为形参分配内存单元, 在函数调用结束时,系统会立即释放形参所占用的内存单元。因此,形参只在函数内部有效,在函数调用过程中,形参的值发生改变,不会影响实参,函数调用结束返回主调函数后则不能使用该形参变量。数组名作函数参数 数组是数组的首地址,所以数组做函数参数时,不能把实参数组的每一个元素都赋予形参数组的各个元素,而是把实参数组的首地址传给形参数组。所以实际上形参数组和实参数组拥有同一段内存空间,因此当形参数组发生变化
23、时,实参数组也随之变化。4、函数的嵌套调用嵌套调用:主调函数调用被调函数,而在被调函数的执行过程中又调用另一个函数。main( )调用f1函数Main函数结束f1函数f2函数调用f2函数f1函数结束f2函数结束5、函数的递归调用及应用递归函数定义:函数直接或间接的调用自身叫函数的递归调用。 递归问题的解决包括两个部分:一是:递归的结束条件(即在此条件下可以直接求解问题);二是求解问题的递归方式(即有明确的递归定义规则,可将问题简化成较小规模的同类问题)6、C语言中的变量有作用域和生存周期的概念,变量的作用域指出了变量在什么范围内有效。变量的生存周期决定了变量的存活期,从系统为变量分配内存空间开
24、始,到系统收回内存空间为止。按照作用域范围可以分为两种:局部变量和全局变量。在函数内(或复合语句)定义的变量是局部变量,在函数之外定义的变量称为外部变量,外部变量是全局变量也称全程变量。全局变量可以为本文件中其他函数所共用。它的有效范围为从定义变量的位置开始到本源文件结束。例如int p=1,q=5;float f1(int a)int b,c;char f2(intx,inty)int x,int y从变量 (生存周期)分动态与静态两种存储方式:静态存储:程序运行期间分配固定存储空间,从程序开始执行到程序结束。动态存储:程序运行期间根据需要动态分配存储空间,从包含该变量定义的函数开始执行至函
25、数执行结束。7、变量的分类及其存储类别存储类别是指数据在内存中的存储方式,具体包含以下四种:auto-自动型 static-静态型extern-外部型 register-寄存器型 局部atuo:在声明局部变量时,若不指定 static,默认均是 auto,这类变量都是动态分配存储空间的,数据存储在动态存储区中。离开函数,值就消失,内存单元释放。static:在声明局部变量时,使用关键字 static 将局部变量指定为“静态局部变量”,这样在函数调用结束后不消失而保留原值,即占用的存储单元不释放,在下一次函数调用时,该变量已有值就是上次函数调用结束时的值。register:在声明动态局部变量或者
26、函数形参时,可将变量声明为register,这样编译系统就会为变量分配一个寄存器而不是内存空间,通过这种方式可提升对某些局部变量频繁调用的程序的性能。(寄存器运算速度远高于内存)离开函数,值就消失,寄存器释放.全局静态外部变量,只限本文件引用,分配固定的内存单元extern:用于扩展全局变量的作用域。1)比如函数想引用一个外部变量,但该外部变量在该函数后定义,那么这个函数需要使用 extern 来声明变量,这样才能使用在该函数后面定义的全局变量。2)此外,extern 还可以在多文件的程序中声明外部变量和外部函数。8、内部函数和外部函数如果一个函数只能被本文件中其它函数所调用,它称为内部函数。
27、如果一个函数能被本文件中和其他文件中的函数调用,称为外部函数。外部函数不仅可以被定义它的源文件调用,而且可以被其他的文件中的函数调用,即其作用范围不只局限于源文件,而是整个程序的所有文件。第六章 指针1、变量的地址和变量的值2、指针和指针变量一个变量的地址称为该变量的“指针”。如果有一个变量专门来存放另一变量的地址(指针),则它称为“指针变量”。3、指针变量的定义方式、引用方式指针变量定义的一般形式为:类型标示符 * 指针变量名;*表示这是定义一个指针变量。例如:int *p1; /表示p1是一个指向整型变量的指针变量double *p2; /p2是指向双精度浮点型变量的指针变量float *
28、p3; /p3是指向单精度浮点型变量的指针变量char ch,*p4; /p4是指向字符型变量的指针变量指针变量通过地址运算“&”赋值。通过地址运算符“&”可以把一个变量的地址赋给指针变量。 例如: int f,*p; p=&f;执行后把变量f的地址赋值给指针变量p,指针变量p就指向了变量f。说明指针p指向f,f是p指向的对象,可以用*p来引用f,此时*p与f代表f的值,而p与&f都代表变量f的地址。C语言提供了指针运算符“*”。指针运算符是单目运算符,运算对象只能是指针变量或地址,可以用“指针运算符”来存取相应的存储单元的数据。 例如: f=6;和*p=6;等价。 scanf(“%d”,&f
29、);和scanf(“%d”,p);等价。p=&f;*p=6;4、指针变量作为函数参数(利用函数来改变实参的值)、实参和形参的值传递指针作为函数参数#includevoid main( ) int x1,x2; scanf(“%d,%d”,&x1,&x2); swap(&x1,&x2) ; /注意实参是变量x1和x2的地址 printf(“nx1=%d,x2=%dn”,x1,x2);void swap(int *p,int *q) /由于传递的地址,相应的定义指针变量作形参 int temp; temp=*p;*p=*q;*q=temp;5、指向数组元素的指针一个变量有地址,一个数组包含若干元素
30、,每个数组元素都在内存中占用存储单元,它们都有相应的地址。指针变量既然可以指向变量,当然也可以指向数组元素(把某一元素的地址放到一个指针变量中)。所谓数组元素的指针就是数组元素的地址。 例如: int a10,*p; /定义为包含个整型数据的数组 int *p; /定义为指向整型变量的指针变量语句p=a;和p=&a0;是等价的,都表示指针变量p指向a数组的首地址。数组首地址的值在c语言中是一个地址常量,是不能改变的。例如:int a10,*pi=a;float f10,*pf=f;则pi+1将指向a1,pi+1和a+1的值都是a1的地址,pf+1将指向pf1,pf+1和f+1的值都是f1的地址
31、。6、一维数组元素和地址的表示方法、利用指针处理数组元素7、指向字符串的指针、利用它来处理字符串字符串的指针是动态的,指向字符串的首地址。第七章 结构体与共用体 本章主要考查类型定义符typedef、结构体(即“结构”)与共用体(即“联合”),包括类型定义符typedef,结构体和共用体类型数据的定义方法和引用方法,结构指针变量,结构数组,用指针和结构体构成链表,单向链表的建立、输出、删除与插入等知识点。通过对历年试卷内容的分析,本章考核内容约占5%,属于一般考查内容。由命题走势图13-1可知,本章部分所涉及考题分值有减少趋势。13.1 类型定义符13.1.1 考点1:typedefC语言不仅提供了丰富的数据类型,而且还允许由用户自己定义类型说明符,也就是说,允许由用户为已存在的数据类型名定义一个“别名”。类型定义符typedef即可用来完成此功能。说明新类型名的语句一般形式为:typedef 类型名 标识符;这里的“类型名”必须是在此语句之前已有定义的类型标识符,可以是任何基本类型、结构或联合类型符号,也可以是typedef定义的类型名。“标识符”是一个用户定义标识符,用作新的类型名。例如:typedef int INTEGER;该语句把一个用户命名的标识符INTEGER说明成一个int类型的类型名。在此说明之后,就可以用INTEGER来代替i