程序设计专题 结构化程序设计与递归函数 主讲教师:刘新国
主讲教师: 刘新国
专题要点 ◇用结构化程序设计的思想解决问题 ◇将多个函数组织起来,将多个源程序文件组 织起来 ◇理解程序设计规范及其重要性 ◇函数嵌套求解复杂的问题 ◇理解和使用函数递归 ◇类型定义与宏定义 ◇编译预处理
用结构化程序设计的思想解决问题 将多个函数组织起来,将多个源程序文件组 织起来 理解程序设计规范及其重要性 函数嵌套求解复杂的问题 理解和使用函数递归 类型定义与宏定义 编译预处理
结构化程序设计 ◇使用结构化程序设计方法解决复杂的问题 把大问题分解成若干小问题,小问题再进一步 分解成若干更小的问题 ◇写桯序时,用 maino解决整个问题,它调用解 决小问题的函数 这些函数又进一步调用解决更小问题的函数, 从而形成函数的嵌套调用
使用结构化程序设计方法解决复杂的问题 把大问题分解成若干小问题,小问题再进一步 分解成若干更小的问题 写程序时,用main()解决整个问题,它调用解 决小问题的函数 这些函数又进一步调用解决更小问题的函数, 从而形成函数的嵌套调用
程序结构 maino 函数1函数2 函数m 函数函数 函数 函数 12
main( ) 函数1 函数2 … … 函数m 函数 1_1 函数 1_2 函数 m_1 函数 m_n … …
函数定义 ◇好的函数名字:描述函数所做的所有事情。如: ◆ checkUrderinto e ca l mOnth l y Revenues(.) ◇一个函数只实现一个功能 ◇函数参数: ◇按照输入-修改-输出的顺序排列参数 ◎考虑对参数采用某种表示输入、修改、输出的命名规则 使用所有的参数 把状态或出错变量放在最后 ◇不要把函数的参数用作工作变量 在接口中对参数的假定加以说明 尽可能少的参数(限制在大约7个以内)
好的函数名字:描述函数所做的所有事情。如: checkOrderInfo(...) calcMonthlyRevenues(...) 一个函数只实现一个功能 函数参数: 按照输入-修改-输出的顺序排列参数 考虑对参数采用某种表示输入、修改、输出的命名规则 使用所有的参数 把状态或出错变量放在最后 不要把函数的参数用作工作变量 在接口中对参数的假定加以说明 尽可能少的参数(限制在大约7个以内) 5
例程10-1]计算常用圆形体体积 设计一个常用圆形体体积计算器,采用命令方式 输入1、2、3,分别选择计算球体、圆柱体、圆 锥体的体积,并输入计算所需相应参数。 析 ◇输入1、2、3选择计算3种体积,其他输入结束计算 ◆设计一个控制函数caO,经它辨别圆形体的类型 再调用计算球体、圆柱体、圆锥体体积的函数 令设计单独的函数计算不同圆形体的体积
设计一个常用圆形体体积计算器,采用命令方式 输入1、2、3,分别选择计算球体、圆柱体、圆 锥体的体积,并输入计算所需相应参数。 分析: 输入1、2、3选择计算3种体积,其他输入结束计算 设计一个控制函数cal(),经它辨别圆形体的类型 再调用计算球体、圆柱体、圆锥体体积的函数 设计单独的函数计算不同圆形体的体积
程序结构 maino cal( vol ball( vol_ cylind() vol cone () ◇3层结构,5个函数 ◇降低程序的构思、编写、调试的复杂度 ◇可读性好
3层结构,5个函数 降低程序的构思、编写、调试的复杂度 可读性好 main( ) cal ( ) vol_ball ( ) vol_cylind ( ) vol_cone ( )
例10-1源程序 # define p|3.14159265 f (sek3) void cal( int sel break int main(void) e cal(se1 ); int sel whi le(1)I return 0: pr intf("1-计算球体体积\n"); pr intf("2-计算圆柱体积\n") pr intf("3-计算圆锥体积\n"); pr intf("其他一退出运行\n") pr intf(“请输入计算命令:”) scan f("%d",&se);
#define PI 3.14159265 void cal ( int sel ); int main(void) { int sel; while( 1 ){ printf(" 1-计算球体体积\n"); printf(" 2-计算圆柱体积\n"); printf(" 3-计算圆锥体积\n"); printf(" 其他 -退出运行\n"); printf(“请输入计算命令:”); scanf("%d",&sel); if (sel3) break else cal(sel); } return 0; }
主控函数Cl void cal( int sel double vol bal I(void) double vol cy l ind (void double vol cone(void) switch (sel) case1: printf("球体积为:%.2f\n", vol ball() break; case2: printf("圆柱体积为:%.2f\η", vol cyl ind()); break case3: printf("圆锥体积为:%.2fⅦn", vo cone()); break
void cal ( int sel ) { double vol_ball(void ); double vol_cylind(void ); double vol_cone(void ); switch (sel) { case 1: printf("球体积为:%.2f\n", vol_ball( )); break; case 2: printf("圆柱体积为:%.2f\n", vol_cylind( ) ); break; case 3: printf("圆锥体积为:%.2f\n", vol_cone( ) ); break; } }
球体体积函数 vol ball double vol balI() double r pr intf("请输入球的半径:"); scanf(%If, &r) return(4.0/3.0*P|**r*r)
double vol_ball( ) { double r ; printf("请输入球的半径:"); scanf("%lf",&r); return(4.0/3.0*PI*r*r*r); }