1. 预备知识回顾
在开始第12章的核心知识点自测之前,让我们快速回顾一下前几章的要点,以确保你有扎实的理论基础。
- 变量和类型:了解各种基本数据类型,如整型、浮点型、字符型等,以及它们的存储方式和范围。
- 控制结构:掌握if语句、switch语句、循环(for、while、do-while)的基本用法。
- 函数:学会定义和调用函数,理解参数传递、返回值的概念。
- 指针:掌握指针的概念,理解指针与变量的关系,学习指针运算和动态内存分配。
2. 第12章核心知识点
2.1 预处理器指令
- 宏定义:使用
#define创建宏,了解宏的简单和复杂形式,以及它们的优缺点。 - 条件编译:通过
#ifdef,#ifndef,#if,#else,#elif,#endif等指令进行条件编译,理解其应用场景。 - 文件包含:使用
#include指令包含头文件,学习头文件的正确使用方法。
2.2 动态内存分配
- malloc,calloc,realloc:掌握动态内存分配函数的使用,理解它们的区别。
- free:学习如何释放动态分配的内存,避免内存泄漏。
2.3 结构体和联合体
- 结构体:定义结构体,理解结构体成员的访问方式,学习使用结构体数组和指针。
- 联合体:了解联合体的概念,学习其内存占用特性。
2.4 位字段操作
- 位字段:在结构体中使用位字段,理解位字段的存储方式和位运算。
2.5 文件操作
- 标准I/O函数:使用
fopen,fclose,fread,fwrite,fprintf,fscanf等函数进行文件操作。 - 二进制文件:了解二进制文件与文本文件的区别,学习如何读写二进制文件。
3. 在线自测指南
3.1 选择题
以下哪个不是C语言中的基本数据类型? A. int B. float C. char D. void
以下哪个函数用于动态分配内存? A. malloc B. new C. calloc D. free
结构体与联合体的主要区别是什么? A. 结构体成员占用连续内存,联合体成员占用相同内存。 B. 结构体成员占用连续内存,联合体成员占用不连续内存。 C. 结构体成员占用不连续内存,联合体成员占用连续内存。 D. 结构体成员占用不连续内存,联合体成员占用相同内存。
3.2 编程题
编写一个程序,使用结构体存储学生信息,包括姓名、年龄和成绩,然后实现以下功能:
- 创建一个结构体数组存储多个学生的信息。
- 编写一个函数,计算所有学生的平均成绩。
- 打印所有学生的姓名和平均成绩。
// 代码示例
#include <stdio.h>
struct Student {
char name[50];
int age;
float score;
};
float calculateAverage(struct Student students[], int size) {
float sum = 0;
for (int i = 0; i < size; i++) {
sum += students[i].score;
}
return sum / size;
}
int main() {
struct Student students[3] = {
{"Alice", 20, 90.5},
{"Bob", 22, 85.0},
{"Charlie", 21, 92.0}
};
float average = calculateAverage(students, 3);
printf("Average score: %.2f\n", average);
return 0;
}
3.3 错误分析题
给定以下代码,找出错误并解释原因。
#include <stdio.h>
int main() {
int a = 10;
int *ptr = &a;
printf("%d", ptr);
return 0;
}
4. 总结
通过完成这些自测题目,你可以巩固第12章的核心知识点。记住,编程是一个实践的过程,不断练习和调试是提高编程技能的关键。祝你学习愉快!
