1、 实验 8 预处理一、 实验学时:2 课时二、 实验目标1. 熟练掌握函数的嵌套调用和递归调用的方法。2. 学习带参数和不带参数的宏定义。3. 学习“文件包含”处理和条件编译。三、 实验要求:1. 在上实验课之前,每一个同学必须将实验的题目、程序编写完毕,做好充分的准备。2. 所有实验环节均由每位同学独立完成,严禁抄袭他人实验结果,若发现有结果雷同者,按实验课考核办法处理。 四、 实验步骤和内容 【启动 Visual C+】 【新建工程】 选中【C+ Source File】项,【新建源程序文件】 编辑程序 执行程序1.【例 6.5】用递归方法计算 n!(1! = 1,n! = (n-1)!
2、* n (n2))算法分析:1) 根据计算 n!的递归定义可知,为了计算 n!,必须首先计算(n-1)!;以此类推,直至 1!(1! = 1) 。2) 依据 1!求 2!=1!*2,再依据 2!求 3!=2!*3;同理,依据(n-1 )!求 n!= (n-1)! *n。【启动Visual C+】|【新建工程】| 【新建源程序文件】:选中【C+ Source File】项输入如下代码:/* 源文件名:Li6_5.c功能:利用递归求一个数的阶乘 */#include “stdio.h“long factor(int n)/*定义求阶乘函数 factor()*/int i;long f;if(n1)
3、f=n*factor(n-1);else f=1;return f;void main()int n;long s;printf(“please input a number:“);scanf(“%d“,s=factor(n);/*调用 factor()函数*/printf(“%d!=%ldn“,n,s);1) 观查执行结果,是否与教材相同。2) 理解递归函数的调用过程2.【例 6.13】不带参数的宏的使用举例【启动Visual C+】|【新建工程】| 【新建源程序文件】:选中【C+ Source File】项输入如下代码:/* 源文件名:Li6_13.c功能:利用无参宏求圆的周长和面积 */
4、#include “stdio.h“#define PI 3.1415926void main( )double r, circle, area;printf(“nPlease input radius: “);scanf(“%lf“,circle = 2 * PI * r;area = PI * r * r;printf(“ncircle=%lf,area=%lfn“,circle, area);【例 6.14】带参数的宏的使用举例【启动Visual C+】|【新建工程】| 【新建源程序文件】:选中【C+ Source File】项输入如下代码:/* 源文件名:Li6_14.c功能:利用有参宏求两个数中的最大值*/#include “stdio.h“#define MAX(a,b) (ab)?a:bvoid main()int x,y,max;printf(“input two numbers: “);scanf(“%d%d“,max=MAX(x,y);printf(“max=%dn“,max); 1) 观查执行结果,是否与教材相同。2) 掌握无参宏和有参宏的定义和使用五、 思考题1. 函数递归调用的执行过程?2. 有参宏使用时的注意事项。六、 实验小结: