C语言程序设计知识点总结归纳(全书)
一、基础语法与数据类型
1.1 变量与常量
C语言中,变量是存储数据的容器,需声明类型(如int、float、char等)后使用。常量则分为字面常量(如3.14、'A')和符号常量(通过#define定义)。例如:
#define PI 3.14159int radius = 5;float area = PI * radius * radius;
关键点:变量命名需遵循规则(字母、数字、下划线,首字符不为数字),常量定义提高代码可读性。
1.2 基本数据类型
C语言提供多种数据类型,包括整型(int、short、long)、浮点型(float、double)、字符型(char)和布尔型(C99起支持_Bool)。类型选择需考虑数据范围和精度需求。例如:
int age = 25; // 整型double salary = 5000.50; // 双精度浮点型char grade = 'A'; // 字符型
建议:处理大整数时使用long long,高精度计算优先选double。
二、控制结构
2.1 条件语句
if-else和switch-case是C语言的主要条件分支结构。if-else适用于二分逻辑,switch-case适合多分支场景。例如:
// if-else示例if (score >= 90) {printf("A");} else if (score >= 80) {printf("B");} else {printf("C");}// switch-case示例switch (day) {case 1: printf("Monday"); break;case 2: printf("Tuesday"); break;default: printf("Invalid");}
注意:switch中case后需跟常量表达式,break防止穿透执行。
2.2 循环结构
for、while和do-while循环用于重复执行代码块。for适合已知循环次数,while和do-while适合不确定次数场景。例如:
// for循环计算1到100的和int sum = 0;for (int i = 1; i <= 100; i++) {sum += i;}// while循环示例int count = 0;while (count < 5) {printf("%d ", count++);}
优化建议:循环内避免不必要的计算,如将循环上限100提取为常量。
三、函数与模块化编程
3.1 函数定义与调用
函数是C语言模块化的核心,通过返回值类型 函数名(参数列表)定义。例如:
// 计算两数之和的函数int add(int a, int b) {return a + b;}// 主函数调用int main() {int result = add(3, 5);printf("Sum: %d", result);return 0;}
关键点:函数需声明原型(尤其在调用前),参数传递支持值传递和指针传递。
3.2 递归函数
递归通过函数调用自身解决问题,需定义终止条件。例如计算阶乘:
int factorial(int n) {if (n == 0) return 1; // 终止条件return n * factorial(n - 1);}
注意:递归深度过大可能导致栈溢出,需谨慎使用。
四、数组与指针
4.1 数组
数组是同类型数据的集合,通过下标访问。例如:
int arr[5] = {1, 2, 3, 4, 5};printf("%d", arr[2]); // 输出3
操作建议:遍历数组时注意边界检查,避免越界访问。
4.2 指针
指针存储内存地址,是C语言高效操作的关键。例如:
int num = 10;int *ptr = # // ptr指向num的地址printf("%d", *ptr); // 输出10(解引用)
高级应用:指针数组、函数指针、动态内存分配(malloc/free)。
五、结构体与联合体
5.1 结构体
结构体将不同类型数据组合为一个整体。例如:
struct Student {char name[20];int age;float score;};struct Student s1 = {"Alice", 20, 95.5};printf("%s", s1.name);
扩展:结构体指针通过->访问成员,如s1_ptr->age。
5.2 联合体
联合体共享内存空间,适用于多类型数据交替存储场景。例如:
union Data {int i;float f;char str[20];};union Data data;data.i = 10;data.f = 3.14; // 覆盖i的值
六、文件操作
C语言通过标准库函数(如fopen、fread、fwrite)操作文件。例如:
// 写入文件FILE *fp = fopen("test.txt", "w");if (fp != NULL) {fprintf(fp, "Hello, World!");fclose(fp);}// 读取文件char buffer[100];fp = fopen("test.txt", "r");if (fp != NULL) {fgets(buffer, 100, fp);printf("%s", buffer);fclose(fp);}
错误处理:始终检查文件指针是否为NULL,操作后关闭文件。
七、预处理指令
预处理指令在编译前处理代码,包括宏定义(#define)、条件编译(#ifdef)和头文件包含(#include)。例如:
#define MAX 100#include <stdio.h>#ifdef DEBUGprintf("Debug mode");#endif
最佳实践:宏定义用括号避免运算符优先级问题,如#define SQUARE(x) ((x)*(x))。
八、实战建议
- 代码规范:遵循命名规则(如变量用小写,常量全大写),添加注释。
- 调试技巧:使用
printf或调试器(如GDB)定位逻辑错误。 - 性能优化:避免频繁内存分配,优先使用栈变量。
- 学习资源:参考《C程序设计语言》(K&R)、在线编译器(如GCC、Clang)。
通过系统学习上述知识点,读者可构建扎实的C语言基础,为后续学习数据结构、算法或嵌入式开发奠定基础。