实验10 程序结构与递归函数 下载本文

实验10 程序结构与递归函数 【实验目的】

(1) 了解结构化程序设计的基本思想。

(2) 掌握使用工程组织多个程序文件的方法。 (3) 掌握函数嵌套的使用方法。 (4) 掌握递归函数的编程方法。 【实验内容】

一、调试示例

改正下列程序中的错误。设计一个常用圆形体体积的计算器,采用命令方式输入1、2、3,分别选择计算球体、圆柱体、圆锥体的体积,并输入计算所需的相应参数。该计算器可支持多次反复计算,只要输入1、2、3,即选择计算3种体积,如果输入其他数字,将结束计算。

本例一共包含5个函数,它们的调用结构如图10.1所示,采用3个文件模块方式实现:error10_1_main.cpp、error10_1_cal.cpp、error10_1_vol.cpp,其中error10_1_vol.cpp包含3个函数vol_ball()、vol_cylind()、vol_cone()。 main()

main()

main() main() main()

源程序(有错误的程序) 文件error10_1_main.cpp

1 /* 常用圆形体的体积计算器:1.计算球体,2.计算圆柱体, 3.计算圆锥体*/ 2 #include 3 #include

4 #include “error10_1_cal.c”; 5 #include “error10_1_vol.c”; 6 #define PI 3.141592654 7 int main(void) 8 {

9 int sel; 10

11 /*循环选择计算圆形体的体积,直到输入非1-3的数字为止*/ 12 while(1){ /*永久循环,通过循环体中的break语句结束循环*/ 13 printf(“1-计算球体体积 ”); 14 printf(“2-计算圆柱体体积 ”); 15 printf(“3-计算圆锥体体积”);

16 printf(“ 其他-退出程序运行\\n”);

17 printf(“请输入计算命令:”); /*输入提示*/ 18 scanf(“%d”,&sel);

19 20 21 22 23 24 25 26

if(sel<1||sel>3) /*输入非1-3的数字,结束循环*/ break; else

cal(sel); }

return 0; }

文件error10_1_cal.cpp

1 /*常用圆形体体积计算器的主控函数*/ 2 void cal (int sel) 3 {

4 double vol_ball(void); /*函数声明*/ 5 double vol_cylind(void); 6 double vol_cone(void); 7

8 swtich(sel){

9 case 1: /*计算球体体积*/

10 printf(“球体体积为:%.2f\\n”, vol_ball()); 11 break; 12 case 2:

13 printf(“圆柱体体积为:%.2f\\n”,vol_cylind()); 14 break; 15 case 3:

16 printf(“圆锥体体积为:%.2f\\n”,vol_cone()) 17 break; 18 } 19 }

文件error10_1_vol.cpp 1 /*计算球体体积*/ 2 double vol_ball() 3 {

4 double r; 5

6 printf(“请输入球体的半径:”); 7 scanf(“%lf”,&r); 8

9 return (4.0/3.0*PI*r*r*r); 10 } 11

12 /*计算圆柱体体积*/ 13 double vol_cylind()

{

double r,h;

printf(“请输入圆柱体的半径和高:”); scanf(“%lf%lf”,&r,&h);

return (PI*r*r*h); }

/*计算圆锥体体积*/ double vol_cone() {

double r;

printf(“请输入圆锥体的半径:”); scanf(“%lf”,&r);

return (PI*r*r*h、3.0); }

运行结果(改正后程序的运行结果)

1-计算球体体积 2-计算圆柱体体积 3-计算圆锥体体积 其他-推出程序运行 请输入计算命令:1 请输入球体的半径:2 球体体积为33.51

1-计算球体体积 2-计算圆柱体体积 3-计算圆锥体体积 其他-推出程序运行 请输入计算命令:3

请输入球体的半径:2.4 3 球体体积为18.10

1-计算球体体积 2-计算圆柱体体积 3-计算圆锥体体积 其他-推出程序运行 请输入计算命令:0

实现方式1:文件包含方式

(1) 把3个源程序复制到同一个文件目录中。

(2) 使用VC++打开error10_1_main.cpp文件,进行编译链接。

(3) 编译后共有 error(s), warning(s),请填写各出错信息(error和warning

的中文含义)并分析原因。

① ②

(4) 编译错误并改正。

①编译预处理include行尾不能有分号。

②编译预处理include中包含的文件应该是error10_1_cal.cpp和error10_1_vol.cpp,而不能是.c文件,文件扩展名不一致。

(5) 修改后重新编译,仍有编译错误,请填写出错信息。

分析:文件包含的作用是把所指定的文件插入include所在的位置,因此,#define PI

14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32