《C语言程序设计》(江宝钏著)实验五主要关注C语言中函数的使用、预处理以及程序的调试和改错。以下是该实验涉及的关键知识点的详细解释:
1. **函数的定义与调用**:
- 函数是C语言中组织代码的基本单元,可以实现特定功能并重复使用。在实验中,`swap()`函数用于交换两个整数的值,但最初版本的`swap()`并未真正改变传入的`a`和`b`的值,因为C语言采用值传递,函数内部的改变不会影响到实参。正确做法是通过指针引用实参,如修改后的`swap()`函数所示。
2. **参数传递**:
- 在C语言中,函数参数传递有两种方式:值传递(如原题中的`swap()`函数)和引用传递(修改后的`swap()`函数)。值传递时,函数接收到的是实参的副本,对副本的修改不会影响实参。引用传递则允许直接修改实参。
3. **全局变量与局部变量**:
- 全局变量在整个程序中可见,而局部变量只在定义它的函数内部有效。全局变量在程序执行期间一直存在,而局部变量在函数调用结束后会被销毁。
4. **动态存储分配**:
- 动态内存分配使用`malloc()`、`calloc()`、`realloc()`和`free()`等函数来在运行时动态地分配和释放内存。实验中虽然没有具体涉及,但在实际编程中,动态内存管理是避免内存泄漏和提高程序效率的重要技能。
5. **预处理指令**:
- 预处理包括宏定义(`#define`)和文件包含(`#include`)。宏定义可以创建符号常量或实现简单的文本替换,而文件包含可以将头文件或其他源文件的内容插入到当前文件中,便于代码重用和模块化。
6. **函数的返回值**:
- 函数可以通过`return`语句返回一个值,如`fun()`函数用于计算整数序列的和。注意,函数的返回值类型必须与返回值的类型匹配。
7. **循环与条件语句**:
- `for`循环在`fun()`函数中用于累加序列中的每个数。`if`语句用于控制特定条件下的代码执行,如在修改后的`swap()`函数中。
8. **错误检测与调试**:
- 程序改错题旨在训练读者的调试技巧,例如在计算整数各位数字乘积的函数中,原始代码未检查`num`是否为零,可能导致错误。修正后的代码使用`num!=0`作为循环结束条件。
9. **编程题**:
- 编程题要求编写函数将输入的四位数字字符转换为整数,以及计算连续立方和的函数。这涉及字符串处理、字符转数字的转换以及数学运算。
通过这个实验,学习者将深入理解C语言的函数机制,掌握如何定义和调用函数,以及如何处理参数传递。同时,还会学习到预处理指令的使用,以及如何通过调试和改错来提高代码质量。这些知识对于理解和编写复杂的C程序至关重要。