函数进阶及结构化编程(new).ppt
文本预览下载声明
第 7 章 函数进阶和结构化编程 学习目标 1.掌握源程序结构中函数的组织方法; 2.理解结构化程序设计思想,并能利用它来解决问题; 3. 理解函数嵌套调用的概念,并能熟练利用函数的嵌套调用来解决问题; 4.理解递推、递归及其算法实现; 5.理解编译预处理的概念,能熟练应用宏定义和文件包含; 6.了解用户自定义库模块。 7.1 结构化编程 结构化程序设计(Structured Programming)是一种良好的程序设计技术,它由著名计算机科学家E·W·Dijkstra于1969年提出 7.1.1 自顶向下分析问题 自顶向下分析问题就是把一个较大的复杂问题分解成几个小问题后再解决。 7.1.2 模块化设计 模块化设计时要遵循模块独立性的原则,即模块之间的联系应该尽量简单。具体体现在: 1.一个模块只完成一个指定的功能 2.模块间只通过参数进行调用 3.一个模块只有一个入口和一个出口 4.模块内慎用全局变量 在C语言中,模块一般通过函数来实现,一个模块对应一个函数。 7.1.3 结构化编码 经模块化设计后,每个模块都可以独立编码。编程时应选用顺序、选择和循环3种控制结构,并使程序具有良好的风格。 1.见名知义命名对象名 2.使用注释 3.使程序结构清晰 4.使程序具有良好的交互性 7.2 函数的嵌套调用 例: 设计一个用于计算常用圆形体体积的计算器,该计算器可支持多次反复计算。采用菜单方式输入1或2或3,分别表示需要计算球体、圆柱体和圆锥体的体积,计算时需输入函数所需的相应参数。 #includestdio.h #includemath.h #define PI 3.141592654 void calculate(int); void main(void) { int sel; /* 循环选择计算圆形体的体积,直到输入非1~3数字为止 */ while(1) { printf(\t\t%s,1--ball\n); printf(\t\t%s,2--cylind\n); printf(\t\t%s,3--cone\n); printf(\t\t%s,other--exit\n); printf(\t\tPlease input your selete: ); scanf(%d,sel); if(sel1||sel3) { printf(\n input error\nplease input 1~3\n); break; } else calculate(sel); } } void calculate(int sel) { double vol_ball(void); double vol_cylind(void); double vol_cone(void); switch(sel) { case 1: printf(ball:%.2lf\n,vol_ball()); break; case 2: printf(cylind:%.2lf\n,vol_cylind()); break; case 3: printf(cone:%.2lf\n,vol_cone()); break; } } /* cylind : v=PI*r*r*h */ double vol_cylind() { double r,h; printf(Please input rh:); scanf(%lf%lf,r,h); return PI*r*r*h; } /* cone : v=PI*r*r*h/3.0 */ double vol_cone() { double r,h; printf(Please input rh:); scanf(%lf%lf,r,h); return PI*r*r*h/3.0; } 7.3 递推 7.3.1 递推的一般概念 递推也称为迭代,思路是通过数学推导,将一个复杂的运算化解为若干简单运算的重复执行。 例:通过公式: 计算的近似值,计算过程在所加项的值小于10-10时终止。 #includestdio.h double fun(double); void main( ) { double eps=1e-10,sum; sum=fun(eps); printf(\nPI=%.8lf,sum); } double fun(double eps) { d
显示全部