实验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
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