C语言程序设计谭浩强重点笔记.docx
- 文档编号:3875928
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:24
- 大小:204.71KB
C语言程序设计谭浩强重点笔记.docx
《C语言程序设计谭浩强重点笔记.docx》由会员分享,可在线阅读,更多相关《C语言程序设计谭浩强重点笔记.docx(24页珍藏版)》请在冰豆网上搜索。
C语言程序设计谭浩强重点笔记
C语言设计
学习笔记
早晨:
06:
40起床
07:
20——08:
20英语1小时
新概念英语(单词、语法、听读背)
大学英语(单词、语法、听读背)
上午:
08:
30——10:
30计算机基础2小时
10:
50——11:
30计算机科学技术导论
计算机组成原理
微机原理及接口技术
Intel微处理器结构编程与接口
深入理解计算机系统
80x86汇编语言程序设计
8086-8088宏汇编语言程序设计教程
BIOS研发技术剖析
自己动手写操作系统
操作系统原理
Windows操作系统原理
Windows内部原理系列
Windows程序内部运行原理
计算机网络第五版
中午:
12:
00——02:
00午休
下午:
02:
30——04:
30计算机应用及编程
Windows用户管理指南、AD配置指南、网络专业指南、Windows即学即会教程
Windows下32位汇编语言程序设计、C#编程
晚上:
05:
30——08:
00锻炼、晚餐
08:
00——09:
00辅导
09:
00——11:
00专业基础2小时
大学数学、大学物理、电机及拖动、电力电子技术、通信技术
11:
30休息
第一章C语言概述
1.1C程序结构特点16
1、C程序的基本构件——函数。
2、一个函数由函数首部和函数体两部分构成。
Ø函数首部一般包括函数类型、函数名、函数参数等。
Ø函数体一般包括声明部分和执行部分。
其中:
在声明部分中定义所用到的变量;执行部分则由若干个语句组成。
3、C程序只有一个main函数,且总是从main函数开始执行。
4、C语言语句必须以“;”结束。
5、用/**/作为注释。
6、C编译器一般自顶向下顺序编译C源程序,如果被调函数定义在主调函数之后位置时,要在主调函数前,给出被调函数的原型说明。
以便编译器在编译被调函数的调用语句时,对调用语句进行参数检查。
如果不进行原型说明,则无法通过编译检查。
原型说明:
类型说明函数名(参数类型,参数类型,……)
7、头文件——头文件包含了C语言的标准函数库的原型说明。
C语言通过使用#include<>预处理命令,将库函数的原型说明插入到源文件中。
1.2C程序上机步骤17
1、编辑源文件.c;
2、编译成目标文件.obj;
3、连接——将目标程序和库函数及其他目标程序连接起来,生产可执行文件,文件扩展名为.exe;
4、执行。
第二章程序的灵魂——算法23
2.1算法24
1、算法——指为求解某一问题而采用的具体方法和步骤。
2、两类算法——数值运算算法和非数值运算算法
3、算法的特性——有穷性、确定性、有效性等
4、算法描述——文字描述法(如伪代码描述算法)、图形描述法(如流程图和NS流程图描述算法)。
2.2算法的三种基本结构
顺序、选择、循环
2.3结构化程序设计方法42
1、自顶向下——首先对问题进行分析,确定算法思路。
2、逐步细化——根据算法思路,制定原始算法流程,并不断细化流程。
3、模块设计——分解算法流程,将功能相对独立的部分划分为一个模块。
4、结构化编码——利用高级语言正确实现3种基本结构。
第三章数据类型运算符与表达式48
3.1C语言的基本元素48
1、符号集——C语言使用的基本符号。
2、标识符——用来标记常量、变量、函数及文件名字的字符序列。
3、关键字——C程序规定的,具有特定含义、专门用作语言特定成分的一类标识符。
ANSI推荐的C语言关键字是32个。
关键字全部应该小写。
3.2C的数据类型48
数据是操作的对象,数据类型是指数据的内在表现形式。
如(数据代码、存储、运算)。
1、基本类型:
整型、字符型、实型。
2、构造类型:
在基本类型的基础上,按照某种构成规则构造而成的类型。
数组、结构体、共用体、枚举型。
3、指针类型:
用于存储地址的一类数据类型。
4、空类型:
编译器根据变量的数据类型,给变量分配存储单元。
3.3常量与变量48
1、符号常量——符号常量在其作用域内不能改变,也不能被赋值。
#define符号常量(大写)常量
2、变量——变量由变量名和变量值标识。
数据类型变量;
Ø变量名实际上是一个符号地址,编译连接程序时给每个变量名分配一个内存地址,当程序访问变量值时,实际上是通过变量名找到相应的内存地址,从其存储单元中读取数据。
3.4基本类型
1、整形数据在内存中的存放,是以补码形式存放的。
2、实型数据:
单精度双精度。
Ø在内存中以指数形势存放。
Ø若数据超过有效位,则超过C语言规定有效位的数据将被舍去,故产生误差。
3、字符型数据:
用一个字节存储单元存储。
即将字符的ASCII码存储到内存单元中。
Ø用单引号括起来的一个字符。
Ø转义字符——特殊字符常量或者控制字符常量,它们都以“\”开头。
ØChar、unsignedchar区别:
char用7位数表示,最大表示编码为127的字符;unsignedchar用8位数表示,最大表示编码为255的字符。
Ø字符数据与整型数据可以相互赋值。
Ø字符数据可以以字符数据输出,也可以以整型数据形式输出。
4、字符串常量:
C语言中,必须是用字符数组来保存字符串常量。
在内存中顺序存储。
Ø用一对双引号括起来的字符序列。
Ø每个字符串常量结尾以一个字符\0作为结束标记。
(一般由系统自动加上)。
3.5变量63
1、自动变量——在函数体内或复合语句中定义的非静态变量称为自动变量。
ØC语言编译时,不对自动变量赋初值。
Ø当程序执行到自动变量的作用域时,程序才为自动变量分配空间。
当定义自动变量的函数或复合语句执行结束后,程序释放自动变量的存储空间。
Ø自动变量保存在程序的动态存储空间。
2、静态局部变量——在函数体内或复合语句中用static定义的变量称为静态局部变量。
ØC语言编译时,对静态局部变量赋初值。
Ø静态局部变量存储在程序的静态存储空间。
Ø静态局部变量在程序的整个运行期间均占用程序的静态存储空间,直到程序退出后才释放存储空间。
3、寄存器变量——用register声明的变量。
4、外部变量(全局变量)——在函数的外部定义的变量。
它的作用域是从定义处开始,到本程序文件的末尾结束,在此作用域内,全局变量可以为程序的各个函数引用。
ØC语言编译时,对全局变量赋初值。
Ø全局变量存储在程序的静态存储空间。
Ø全局变量在程序的整个运行期间均占用程序的静态存储空间,直到程序退出后才释放存储空间。
注意:
(1)当引用本源文件后面定义的全局变量或引用在其他源文件中定义的全局变量是,应在引用位置前,利用extern声明该全局变量,以告诉编译器编译时,引用的是一个外部变量,在编译器连接时,将引用的外部变量的作用域扩展到本文件extern声明处。
(2)用static声明的全局变量,不能被其他文件引用。
注意:
(1)变量声明分为定义性声明和引用性声明。
(2)一般把建立存储空间的声明称为变量定义,把不需要建立存储空间的声明成为变量声明。
3.6不同类型数据间的混合运算
Ø不同类型数据进行混合运算时,不同类型的数据要先转换成同一类型,按照类型级别由低到高(char,short—int——unsigned—long—double;float—double)的顺序进行转换。
Ø强制类型转换——(类型名)表达式。
强制类型转换也就是将存储数据的内存单元强制转换为另一种数据类型的单元大小。
即强制将存放数据的内存单元改变。
Ø赋值时进行类型转换:
将数据复制给变量时,将会将数据强制转换为要赋值变量的类型。
一般短类型转换为长类型时,进行符号扩展;长类型转换为短类型时,仅赋值低位,难以保证数据的正确性。
3.7函数的调用过程(补充)
ØC函数其实就是一个程序模块。
ØC函数在编译时,单独编译成一个指令模块,在函数模块开始处定义保护现场指令,将用到的CPU寄存器压入堆栈。
在返回时定义了恢复现场指令,将堆栈数据恢复到CPU寄存器。
Ø在调用函数时,一般利用堆栈传递输入参数;利用EAX传递输出参数,注意在函数调用完成后,要维持堆栈平衡,且函数返回输出参数在EAX中,在使用输出参数前,不要改变EAX的值。
第四章最简单的C程序设计——顺序程序设计77
4.1字符数据的输入输出
1、C语言没有输入输出语句,IO操作通过调用系统函数实现。
2、在程序的开头,要有:
#include“stdio.h”或#include
stdio.h输入输出语句
string.h字符串操作函数
math.h定义数字函数
ctype.h字符函数库
intrins.h内部函数
stdlib.h标准函数库
absacc.h绝对地址访问
reg.h专用寄存器文件
默认输出设备——显示屏,默认输入设备——键盘。
第五章选择结构的程序设计
第六章循环结构程序设计
6.1语句标号
语句标号——用于定义程序中的某个位置,用标识符表示,不能只用数字。
6.2break语句和continue语句
1、break语句结束循环语句和switch语句。
2、continue结束本次循环,即忽略循环体中剩余的语句。
第七章数组132
7.1构造类型
构造类型——是由基本类型按照一定规则构造而成的。
(如数组、结构体、共同体、枚举型)
构造类型的每个分量(元素),是一个变量,它可以是一个简单类型或者构造类型。
构造类型的分量占用相邻的存储空间。
7.2数组133
1、数组——是有序数据的集合,数据元素类型相同,顺序存储,占用相邻的存储空间。
2、数组——数组必须先定义后引用。
静态数组变量定义时编译器自动初始化数据元素为0,动态数组变量在程序执行时分配存储空间,在未被赋值初始化之前其值随机。
3、C语言只能逐个引用数组元素,不能一次引用整个数组。
4、数组引用是“数组名+下标”引用,数组下标均为整数。
如a[2]。
7.3二维数组
1、数组元素为数组。
2、在内存中,C语言的二维数组中数组元素的存放顺序是按行存放的。
3、二维数组引用是“数组名+下标+下标”。
如a[1][2]。
7.4字符串——字符数组
1、一般用\0来标识字符串结尾。
\0占用一个字符变量空间。
2、用字符串赋值字符数组时,C编译器在字符串后自动加\0赋给字符数字。
3、字符数组可以一次引用整个字符串数组。
如整个字符串(数组)的输入输出,用%s格式,且在输入字符数组时,用数组名代表数组的首地址,对于二维数组,仅仅写行下标不写列下标,也可以代表给行数组的首地址。
在用%s输入输出字符串数组时,遇到\0结束。
7.5字符串处理函数#include
1、gets(字符数组名)
从键盘输入一个字符串(以回车结束),并返回字符数组的起始地址。
如get(str)。
2、puts(字符数组名/字符串)
将数组中的字符串(\0结尾的字符序列)输出到终端上,输完换行。
如puts(str),puts(“ok”)。
3、strcpy(目的字符数组1名,源字符串/字符数组2名)
拷贝时,将“\0”一起拷贝过去。
4、strcat(字符数组1名,字符串/字符数组2名)
将字符串/字符数组2连接到字符数组1中。
连接时,编译器去掉字符数组1的“\0”。
5、strcmp(字符串/字符数组1名,字符串/字符数组2名)
比较字符串/字符数组1名和字符串/字符数组2名的大小。
字符串/字符数组1>字符串/字符数组2,返回正数
字符串/字符数组1=字符串/字符数组2,返回0
字符串/字符数组1<字符串/字符数组2,返回负数。
第八章函数153
8.1c程序的结构154
1、一个C程序可以分为若干个函数。
2、每个程序只能有一个主函数,C程序的执行从main函数开始,从main函数结束。
3、函数间可以互相调用,但主函数不能被调用。
4、从用户角度看,函数可分为标准函数(库函数)和自定义函数。
其中,编译器仅编译自定义函数,在连接时才将标准库函数的目标代码连接到程序。
5、一个C源程序由一个或多个文件构成,一个源程序文件是一个编译单位。
8.2函数调用参数传递
1、值传递——如数值形参。
此时,将实参值复制压栈,被调函数对复制到栈中的数值进行操作,不改变原来实参值。
2、地址传递——如数组形参(指针形参),此时,将实参数组的首地址压栈,被调函数引用实参数组的首地址,找到实参数组,对实参数组进行操作,改变实参数组值。
即形参数组和实参数组共享同一单元。
8.3函数变量的作用范围
1、局部变量——在定义局部变量的范围内有效。
当局部变量重名时,有效范围小的优先。
Ø在函数内部定义局部变量
Ø函数的形式参数
Ø在某个复合语句中定义的变量。
2、全局变量——在函数之外定义的变量。
有效范围是从定义变量的位置开始到源文件结束。
8.4变量的存储类别
变量的存储类别,即生存期。
内存中供用户使用的存储空间包括:
程序区、静态存储区、动态存储区。
1、静态存储区——在编译时分配空间,在程序运行完后才释放存储空间。
存储静态局部变量和全局变量。
Ø局部静态变量在编译时赋初值,在执行时可改变该值,但该存储空间一直保存到程序结束。
Ø定义局部静态变量,如果没有赋初值,编译时会自动赋默认初值。
Ø局部静态变量只能在定义它的函数中使用。
Ø全局变量都是静态的。
Ø利用extern外部变量方式表示变量的定义在别的文件中,提示编译器遇到此变量时,在其他模块中寻找其定义。
而函数则是利用函数原型来声明。
Ø用static关键字说明一个不能在其他源文件中引用的全局变量。
即静态全局变量在声明它的整个文件都是可见的,但是在文件之外是不可见的。
2、动态存储区——仅在在执行时分配空间,用完后释放存储空间。
存放自动变量和形式参数。
Ø寄存器变量——用register关键字说明。
寄存器变量对寄存器的占用是动态的。
第九章预处理命令197
9.1预编译命令作用
预编译命令主要完成宏定义、文件包含、条件编译三种功能。
1、宏定义——指用一个指定的标识符(名字)来代表一个字符串。
在预编译时,将宏名替代成字符串的过程称为宏展开。
如:
Ø#definePI3.1415926定义宏,
#undefPI终止宏定义的作用域。
Ø#defineV(a,b,c)a*b*c定义带参数的宏。
当宏展开时,将引用宏名语句中的实参字符串代替宏定义的形参字符串。
intv=V(2,3,4)则宏展开后为:
intv=2*3*4;
2、文件包含——指一个源文件可以将另一个源文件的全部内容包含进来。
如:
Ø#include“文件名”或
#include<文件名>
Ø编译预处理时,将包含文件的全部内容复制到源文件中。
在编译时作为一个源程序来编译。
3、条件编译——在预编译处理时,确定编译时要编译的部分。
如:
Ø#ifdef标识符
程序段1
#else
程序段2
#endif
Ø#if表达式
程序段1
#else
程序段2
#endif
第十章指针211
10.1变量的访问方式
1、直接访问——如:
inta=10;
2、间接访问——定义一个指针变量p,存放变量a的首地址,通过p访问变量a。
则称指针变量p指向变量a。
如:
inta=10;int*p1;p=&a;b=*p1;或*p1=100;等价于a=100;
10.2指针变量
1、指针变量的类型——是指该变量指向的内存数据的数据类型。
2、必须用引用变量的地址给指针变量赋值。
3、可以给指针变量赋值空值null,防止指针变量存储随机值导致系统错误。
4、数组名代表数据的首地址。
数组指针或数组名+1,指向下一个数组元素的存储地址。
声明格式:
数据类型*p;
赋值格式:
p=a;或p=&a[0];
引用格式:
*p=常量;等价于p[0]=常量;等价于a[0]=常量;等价于*a=常量;
*(p+1)=常量;等价于p[1]=常量;等价于a[1]=常量;
等价于*(a+1)=常量;
5、数组名和指针变量虽然都可以代表数组的首地址,但是指针变量值可以改变,而数组名的值不可以改变。
6、函数的指针专门用来存放函数的入口地址,当把函数的地址赋值给它时,它就指向该函数的入口地址。
声明格式:
数据类型(*指针变量名)()如:
int(*P)();
赋值格式:
p=max;注max为定义的函数名;函数名代表该函数的入口地址。
引用格式:
c=(*p)(a,b);等价——c=max(a,b);
7、只能将变量已分配的地址赋值给指针变量,不能直接将整数赋值给指针变量。
8、指针变量可以有null值,防止指针误作用。
第十一章结构体270
11.1结构体270
1、作用——将不同类型的数据组合成一个有机的整体。
2、结构体的定义——结构体是一种数据结构,按照某种规则定义,将若干个不同数据类型(也可相同)的数据项的组合成的一个有机整体。
3、声明结构体类型的形式:
struct结构体类型名字{成员列表};
Ø成员列表形式:
类型符成员名如:
intnum;
11.2声明结构体类型变量的方法271
1、先定义结构体类型:
struct结构体类型名字{成员列表};再定义结构体变量:
struct结构体类型名字结构体变量名。
2、可在定义结构体类型时,定义结构体类型变量。
struct结构体类型名字{成员列表}结构体类型变量1,结构体类型变量2,……;
11.3结构体变量引用273
1、不能将一个结构体变量作为一个整体进行输入输出,只能对结构体变量成员分别赋值。
2、结构体变量成员引用方式:
结构体变量名.成员名
3、如果结构体变量成员是另一个结构体变量,则要用若干个成员运算符,一级一级找到最低一级的成员。
11.4结构体变量初始化
1、在声明变量时整体赋值。
2、复制相同结构的变量赋值。
3、除以上两种情况下可以对结构体类型变量整体赋值,其余情况下只能对变量成员分别赋值。
11.5结构体数组275
1、结构体数组在内存中连续存放。
2、声明方式:
与定义结构体变量方法相同。
见11.2,只是在变量名后+[n]。
也可在定义结构体数组时直接初始化结构体数组,此时可采用+[]的形式。
3、初始化方式:
同定义结构体变量方法。
11.6结构体类型指针
结构体类型指针——是指指向结构体变量所占据的内存的起始位置的指针。
声明形式:
struct结构体类型名*指针名。
如:
structstudent*p;
赋值形式:
指针名=&结构体变量。
如:
p=&studengt1;
引用形式:
(*P).成员名或p->成员名。
*p表示指针p指向的结构体变量。
注意:
1、定义的结构体类型,和声明结构体变量时不分配空间。
2、结构体可以嵌套定义。
3、结构体成员名可以与变量名相同。
11.7链表283
1、单项链表结构:
链表有一个头指针和表尾null指针。
每个结点包含实际数据和下一个结点的地址。
2、可以用结构体类型指针,将多个结构体变量链接起来形成结构体链表。
如:
11.8共用体297
1、共用体指将几种不同类型的变量存储在同一段内存单元中。
2、共用体变量的存储单元大小等于最长成员变量所占内存的长度
3、共用体变量中起作用的是最后一次存放成员。
4、共用体类型声明方式:
union公用体类型名称{成员变量列表};
5、共用体变量声明方式:
(1)union公用体类型名称{成员列表}共用体变量;
(2)先声明共用体类型,然后声明共用体变量,union公用体类型名称共用体变量。
11.9枚举类型301
1、枚举类型——指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内的一个。
2、声明枚举类型:
enum枚举类型名称{枚举常量列表};
3、声明枚举变量:
enum枚举类型名称枚举类型变量;
11.10用typedef定义的类型304
1、typedef的作用——可以用typedef声明新的类型名来代替已有的类型名。
2、声明方式:
typedef类型名称新的类型名称。
第十二章位运算308
12.1位段315
1、位段——是一种特殊的数据结构,它允许定义一个由位组成段,并可为它赋以一个名字。
位段一般作为结构体的成员。
2、声明方法:
Ø位段结构类型声明方法:
struct结构体类型名称{位段成员列表};
Ø位段结构成员(即位段变量)声明方法:
unsignedint位段变量:
n;
如:
Østructpacked_struct{
unsignedintf1:
1;
unsignedintf2:
1;
unsignedintf3:
1;
unsignedinttype:
4;
unsignedintindex:
9;
};
3、位段结构类型变量声明方法:
同结构体。
4、同一位段必须存储在同一个存储单元中,不能跨两个单元。
第十三章文件319
13.1文件319
1、文件——指存储在外部介质上的数据集合(数据文件),操作系统以文件为单位对数据进行管理。
13.2文件的分类319
1、从用户的观点看:
Ø特殊文件——指标准输入输出文件或标准设备文件。
Ø普通文件——指磁盘文件。
2、从操作系统的角度看:
每一个与主机相关联的输入输出设备都可看作一个文件。
(1)根据文件的组织形式分为:
顺序存取文件和随机存取文件。
(2)根据文件的存储形式分为:
ASCII文件和二进制文件。
13.3C语言对文件的处理方法319
C语言中对文件的存取是以字符(字节)为单位的,一个输入输出流就是一个字节流或二进制流。
文件的存储方式分为缓冲文件系统和非缓冲文件系统。
区别是缓冲文件系统是系统自动开辟缓冲区,非缓冲文件系统是由程序为每个文件设定缓冲区。
ANSIC标准只采用缓冲文件系统来处理文件。
13.4文件结构体类型321
缓冲文件系统中,每个被使用的文件都在内存中开辟一个FILE结构体类型的区,用来存放文件的有关信息(文件名字、文件状态、当前位置、缓冲区等有关信息),
FILE结构体类型原型:
Øtypedefstruct{
shortlevel;/*缓冲区“满”或“空”的程度*/
unsignedflags;/*文件状态标志*/
charfd;/*文件描述符*/
unsignedcharhold;/*如无缓冲区不读取字符*/
shortbsize;/*缓冲区的大小*/
unsignedchar*buffer;/*数据缓冲区的位置*/
unsignedchar*curp;/*指针,当前的指向*/
unsignedistemp;/*临时文件,指示器*/
shorttoken;/*用于有效性检查*/}FILE;
13.5文件结构体数组和指针321
FILE*fp——声明了一个指向FILE类型结构体的指针变量。
FILEf[5]——声明了一个文件结构体数组f,它有5个元素,存放5个文件的信息。
FILE变量——声明
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 谭浩强 重点 笔记