十天学会C语言程序员C语言

笔记 | C 语言复习框架 (应试篇)

2017-04-13  本文已影响146人  Kofe_

序言

从标题中透漏的信息可知,本系列文章是围绕 “C语言” 展开学习的笔记总结,且目的很明确,笔记内容偏应试,适用于计算机等级考试、考研专业课(C语言)等的复习使用。文章推崇总结性、比对性的学习方法,对于模糊的知识模块需自行查阅参考书目,深化理解或可达到理想的效果。

针对C语言程序,推荐几本辅导复习的书目:

基础篇

进阶篇

总览

1 壹 程序设计和C语言

1.1 计算机程序与语言

程序:计算机能识别和执行的指令。
语言:人和计算机交流、人和计算机能识别的语言。
计算机语言发展阶段:

机器语言 符号语言 高级语言 ( 面向过程、面向对象 )
0和1指针 英文、数字表示指令 人类自然语言和数字语言

1.2 C语言

1.3 程序设计的任务

  1. 问题分析

  2. 设计算法

  3. 编写程序

  4. 对源文件编辑、编译 ( *.obj ) 和连接 ( *.exe )

  5. 运行程序并分析结果

  6. 编写程序文档

    [注] 对于编译,预编译和连接的概念及比对:

    • 编译:检索语言错误;把源程序转为二进制形式的目标程序。
    • 预编译:通过预处理得到的信息与程序其他部分一起,组成完整的、可以正式编译的源程序。
    • 连接:与函数库相连接。

2 贰 程序之魂:算法

2.1 引入

2.2 算法

2.3 三种基本结构和改进流程图

2.4 结构化程序设计方法

3 叁 简单的C语言程序设计

3.1 数据的表现形式及运算

3.1.1 常量

3.1.2 变量

先定义,后使用

[注释1] 符号常量与常变量的比较。

符号常量 常变量
不占内存单元,预编译后符号不复存在 占存储单元
不能重新赋值 不能改变其值

[注释2] 局部变量与全局变量,自动变量与静态变量,内部函数与外部函数的比较。

局部变量 全局变量
存放于动态存储区 存放于静态存储区 位置
在定义函数内起作用 自定义位置开始,本文件起作用 作用域
函数调用完释放内存 程序结束时释放内存 生存期
自动变量 静态变量
1. 声明该变量的语句块被执行结束释放内存() 1. 程序结束时才释放内存
2. 每次函数调用时赋值 2. 保留上一步的赋值
3. 在编时赋予初值0或'\0'

[注] 对比malloc()函数分配的内存,需调用free()函数释放内存。()

内部函数 外部函数 (default)
本文件内使用(不限位置) 可供其他文件使用(不限位置)
定义:static 函数类型 函数名 定义:(extern) 函数类型 函数名

3.1.3 数据类型

关键字 字节 取值范围
整型 int 2/4 $-2^{15}$ ~ $-2^{15}-1$ / $-2^{31}$ ~ $2^{31}-1$
unsigned int 2/4 0 ~ $-2^{16}-1$ / 0 ~ $-2^{32}-1$
字符型 char 1 $-2^7$ ~ $2^7-1$
unsigned char 1 0 ~ $2^8-1$
单浮点 float (有效小数:6) 4 --
双浮点 double (有效小数:15) 8 --

4 肆 选择结构程序设计

4.1 关系运算符及其优先次序

4.2 表达式

4.3 运算符与表达式

4.4 选择结构的嵌套

5 伍 循环结构程序设计

5.1 while 语句实现

express1;
while(express2){
    express3;
    ...
}

5.2 for 语句实现循环

for(express1; express2; express3){
    ...
}

5.3 do...while() 语句实现循环

express1;

do{
    express3;
} while(express2);

5.4 break、continue与goto语句

6 陆 数组

6.1 概念

6.2 定义

6.2.1 一维数组

6.2.2 二维数组

6.2.3 字符数组

7 柒 函数

7.1 为什么要用函数

7.2 定义函数

建立存储空间的声明

7.3 函数声明

不需要建立存储空间的声明

7.4 函数调用

8 捌 指针

8.1 指针是什么

8.2 指针移动 (运算:加、减)

对指针加一、减一运算,即地址会增加或减少一单位长度。单位长度具体具体指当前指针所指向数据类型的所占空间大小。

8.3 指针类型

8.3.1 空指针

确保没有指向任何一个对象的指针。通常以宏定义NULL(0)表示空指针的常量值。

关于NULL、0和'\0',大部分情况都为零。特别地,

int *p = 0; // 正确,编译器将指针指向内存地址为0处。 
int *p = 3; // 错误,赋值的数据类型不相符。

8.3.2 指针类型的派生

8.3.3 数组类型的派生

C语言 英语表示 中文表示
int huge; huge is int hoge是int型
int huge[10]; huge is array[10] of int hoge是int型的数组
int huge[2][4]; huge is array[2] of array[4] of int hoge是int型的数组的数组
int *huge[10]; huge is array[10] of point to int hoge是指向int型的指针的数组(存放指针变量)
int (*huge)[10]; hoge is pointer to array[10] of int hoge是指向int型的数组的指针
int func(int a); func is function(int a) returning int func是返回int型的函数
int (*func)(int a); func is pointer to function(int a) returning int func是指向返回int型值的函数的指针

8.4 指针的应用

8.4.1 指针与数组

8.4.2 指针与字符串

8.4.2.1 字符指针变量
8.4.2.2 字符数组

8.4.3 指针与函数

8.4.3.1 作为参数

即传递的是指向初始元素的指针。

8.4.3.2 作为返回值

返回指针值的函数,即返回的是地址。

[如] 返回的指针指向结构体变量、字符变量等。

9 玖 构造类型:用户自己建立数据结构

9.1 结构体类型

9.2 共用体类型

[注] 关于结构体、共用体类型的内存长度问题,遵循4字节倍数的原则进行内存布局对齐。
[如]
sizeof(struct Name) = 64 (63)
sizeof(union Name) = 4 (4)

9.3 枚举类型

9.4 Typedef 声明新类型名

10 拾 文件处理

10.1 文件与流

10.2 文件分类

10.3 文件类型指针:FILE型

[注] 指向文件的指针变量并不是指向外部介质上的数据文件开头,而是指向内存中的文件信息区的开头。

10.4 打开文件

文件类型 文本文件 二进制文件
模式 r w a rb wb ab
只读;只写(文件存在,则长度清零);追加 只读;只写(文件存在,则长度清零);追加
r+ w+ a+ rb+ wb+ ab+
读和写(打开文件);读和写(建立文件;文件存在,则长度清零);读和写(打开文件) 读和写(打开文件;文件存在,则长度清零);读和写(建立文件);读和写(打开文件)

10.5 关闭文件

10.6 顺序读写数据文件

10.7 随机读写数据文件

10.7.1 文件位置标记及其定位

10.7.2 随机读写

结合fseek()与fread()函数实现。

[如] 读取第1,3,5,7,9个学生数据并输出。

for(i = 0; i<10; i+=2){
    fseek(fp, i*sizeof(struct Student), 0);
    fread(&student[i], sizeof(struct Student), 1, fp);
}
上一篇下一篇

猜你喜欢

热点阅读