C语言程序设计谭浩强重点笔记.docx
- 文档编号:24816628
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:30
- 大小:204.41KB
C语言程序设计谭浩强重点笔记.docx
《C语言程序设计谭浩强重点笔记.docx》由会员分享,可在线阅读,更多相关《C语言程序设计谭浩强重点笔记.docx(30页珍藏版)》请在冰豆网上搜索。
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变量——申明了一个文件结构体变量。
13.6文件操作321
C语言要求,在文件读写之前要“打开”文件,在使用结束后要“关闭”文件。
1、打开文件:
ØFILE*fp;
Øfp=fopen(“文件名”,“使用文件方法”);指针变量指向被打开文件。
比如:
fp=fopen(“a1”,“r”)。
2、关闭文件:
fclose(文件指针);返回值:
关闭成功返回值为0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 谭浩强 重点 笔记