Chap10函数与程序结构10.1圆形体积计算器10.2汉诺塔问题10.3长度单位转换10.4大程序构成
Chap 10 函数与程序结构 10.1 圆形体积计算器 10.2 汉诺塔问题 10.3 长度单位转换 10.4 大程序构成
本章要点■怎样把多个函数组织起来?■怎样用结构化程序设计的思想解决问题?■怎样用函数嵌套求解复杂的问题?■怎样用函数递归解决问题?■如何使用宏?(自学)■如何使用多文件模块构建较大规模程序(自学)
本章要点 ◼ 怎样把多个函数组织起来? ◼ 怎样用结构化程序设计的思想解决问题? ◼ 怎样用函数嵌套求解复杂的问题? ◼ 怎样用函数递归解决问题? ◼ 如何使用宏?(自学) ◼ 如何使用多文件模块构建较大规模程序(自学)
10.1圆形体积计算器使用结构化程序设计方法解决复杂的问题口把大问题分解成若干小问题,小问题再进一步分解成若干更小的问题口写程序时,用main()解决整个问题,它调用解决小问题的函数口这些函数又进一步调用解决更小问题的函数,从而形成函数的嵌套调用
使用结构化程序设计方法解决复杂的问题 把大问题分解成若干小问题,小问题再进一步分解成 若干更小的问题 写程序时,用main()解决整个问题,它调用解决小问 题的函数 这些函数又进一步调用解决更小问题的函数,从而形 成函数的嵌套调用 10.1 圆形体积计算器
程序结构main()函数1函数2函数m函数函数函数函数m_1m_n1_11_2
main( ) 函数1 函数2 . . 函数m 函数 1_1 函数 1_2 函数 m_1 函数 m_n . . 程序结构
10.1.1程序解析-计算常用圆形体体积例10-1设计一个常用圆形体体积计算器,采用命令方式输入1、2、3,分别选择计算球体、圆柱体、圆锥体的体积,并输入计算所需相应参数。分析:口输入1、2、3选择计算3种体积,其他输入结束计算口设计一个控制函数calO,经它辨别圆形体的类型再调用计算球体、圆柱体、圆锥体体积的函数口设计单独的函数计算不同圆形体的体积
例10-1 设计一个常用圆形体体积计算器,采用 命令方式输入1、2、3,分别选择计算球体、 圆柱体、圆锥体的体积,并输入计算所需相应 参数。 分析: 输入1、2、3选择计算3种体积,其他输入结束计 算 设计一个控制函数cal(),经它辨别圆形体的类型 再调用计算球体、圆柱体、圆锥体体积的函数 设计单独的函数计算不同圆形体的体积 10.1.1 程序解析-计算常用圆形体体积
程序结构main()cal () vol_cylind ()vol_ball()vol_cone ()3层结构,5个函数降低程序的构思、编写、调试的复杂度可读性好
3层结构,5个函数 降低程序的构思、编写、调试的复杂度 可读性好 程序结构 main( ) cal ( ) vol_ball ( ) vol_cylind ( ) vol_cone ( )
#definePl3.141592654void cal (int sel);例10-1源程序int main(void)( int sel;while(1 )printf("1-计算球体体积\n");printf("2-计算圆柱体积In");printf("3-计算圆锥体积In");printf("其他-退出程序运行In");printf(“请输入计算命令:");scanf("%d",&sel);if (sel 3)break;*输入非1~3,循环结束*else/*输入1~3,调用cal0*cal (sel);7return O;7
例10-1源程序 #define PI 3.141592654 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 (sel 3) break; /* 输入非1~3,循环结束 */ else cal (sel ); /* 输入1~3,调用cal() */ } return 0; }
*常用圆形体体积计算器的主控函数*void cal(intsel)double vol ball(void);double vol_cylind(void );double vol_cone(void );switch (sel)case 1:printf("球体积为:%.2fn",vol_ball());break;case 2:printf("圆柱体积为:%.2fin",vol_cylind());break;case 3:printf("圆锥体积为:%.2fln",vol_cone());break;/*计算圆锥体积V=h/3*Pl*r*r*doublevol_cone(){ doubler, h;printf("请输入圆锥的底圆半径和高:");scanf("%lf%if",&r,&h);return(P*r*r*h/3.0);7
/* 常用圆形体体积计算器的主控函数 */ 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; } } /* 计算球体体积 V=4/3*PI*r*r*r*/ double vol_ball( ) { double r ; printf("请输入球的半径:"); scanf("%lf",&r); return(4.0/3.0*PI*r*r*r); } /* 计算圆柱体积 V=PI*r*r*h */ double vol_cylind( ) { double r , h ; printf("请输入圆柱的底圆半径和高:"); scanf("%lf%lf",&r,&h); return(PI*r*r*h); } /* 计算圆锥体积 V=h/3*PI*r*r */ double vol_cone( ) { double r , h ; printf("请输入圆锥的底圆半径和高:"); scanf("%lf%lf",&r,&h); return(PI*r*r*h/3.0); }
10.1.2函数的嵌套调用顺序调用mainint main(void)y = fact(3);factmypowz = mypow(3.5, 2);maindouble fact(int n)factAmypowdouble mypow(double x, in n)t1
10.1.2 函数的嵌套调用 ◼ 顺序调用 int main(void) { . y = fact(3); . z = mypow(3.5, 2); . } double fact(int n) { . } double mypow(double x, in n) { . } main fact mypow main fact mypow
10.1.2函数的嵌套调用嵌套调用main1int main(void)calcal (sel);vol_ball7void cal (int sel)mainvol_ballvol_ball()caldouble vol_ball()H
◼ 嵌套调用 int main(void) { . cal (sel); . } void cal (int sel) { . vol_ball() . } double vol_ball( ) { . } main cal vol_ball main cal vol_ball 10.1.2 函数的嵌套调用