第8讲模块化程序设计 请大家及时消化我课上讲的内容,并举一反三,模仿未讲 过的例题多写程序。 如果说学习C语言有捷径的话:那就是多读程序,多写程序
第8讲 模块化程序设计 •请大家及时消化我课上讲的内容,并举一反三,模仿未讲 过的例题多写程序。 •如果说学习C语言有捷径的话:那就是多读程序,多写程序
include 上周作业答案1 Include void maino [int i, a, b, c: for(i=100;<=999+) a=i/100:求百分位* b=(-100a/10:/求十分位* c=i%10;/求个位* if(pow(a, 3)+pow(b, 3)+pow(c, 3)==i) printf( yd is a shui xian hua shu!,i)
2 #include #include void main() {int i,a,b,c; for(i=100;i<=999;i++) { a=i/100; /*求百分位*/ b=(i-100*a)/10; /*求十分位*/ c=i%10;/*求个位*/ if(pow(a,3)+pow(b,3)+pow(c,3)==i) printf("%d is a shui xian hua shu!",i); } } 上周作业答案1
# Include void maino lint i,j, k, num: for(i=;i<=9:++)列举百分位*/ for(j=0j<=9:++)/列举十分位* for(k=1:k<=9:k+)/列举个位*/ mum=10010+k if(pow (i, 3)+pow(j, 3)+pow(k, 3)==num) printf( %d is a shui xian hua shu! num):
3 #include #include void main() {int i,j,k,num; for(i=1;i<=9;i++) /*列举百分位*/ for(j=0;j<=9;i++) /*列举十分位*/ for(k=1;k<=9;k++) /*列举个位*/ { num=i*100+j*10+k; if(pow(i,3)+pow(j,3)+pow(k,3)==num) printf("%d is a shui xian hua shu!",num); } } 上周作业答案2
怎样解决一个复杂的问题? 简单问题: 分析问题→写算法→编写程序→调试 大型软件开发的过程大致分为:系统定义、 需求分析、系统设计、编写程序、系统测 试、系统维护等阶段。这些工作不可能由 个人在短时间内完成。 ■模块化程序设计的主要思想 自顶向下、逐步求精
4 怎样解决一个复杂的问题? ▪ 简单问题: ▪ 分析问题→写算法→编写程序→调试 ▪ 大型软件开发的过程大致分为:系统定义、 需求分析、系统设计、编写程序、系统测 试、系统维护等阶段。这些工作不可能由 一个人在短时间内完成。 ▪ 模块化程序设计的主要思想 ▪ “自顶向下、逐步求精
例:高校信息管理系统功能分解 个项目 个源程序文件 prJ 高校信息管理系统 人事管理财务管理学生管理教学管理设备管理 子系统 子系统 子系统 子系统 子系统 系统管理学籍管理‖班级管理成绩管理数据查询综合测评 用「退录修录修录「1「学「班「成函数 管日系信信信信信信查查查 理统 息息息息息询询询
5 例:高校信息管理系统功能分解 高校信息管理系统 人事管理 子系统 设备管理 子系统 教学管理 子系统 财务管理 子系统 学生管理 子系统 …… 系统管理 学籍管理 班级管理 成绩管理 数据查询 综合测评 …… 用 户 管 理 退 出 系 统 录 入 信 息 修 改 信 息 录 入 信 息 修 改 信 息 录 入 信 息 修 改 信 息 学 籍 查 询 班 级 查 询 成 绩 查 询 …… 函数 一个源程序文件 *.c 一个项目 *.prj
c程序结构 C程序 c prj) 源程序文件1(,c)源程序文件。c)源程序文件n(c 预编译命令 函数1 函数i 函数n 函数声明部分 函数执行部分
6 C程序结构 C程序 (*.prj) 源程序文件1(*.c) 源程序文件i(*.c) 源程序文件n(*.c) 预编译命令 函数1 函数i 函数n 函数声明部分 函数执行部分
为什么模块化? 1、大任务要分成小的模块,以利于任务 的分配。 2、模块化可以实现程序代码的复用,提 高编程效率
7 为什么模块化? 1、大任务要分成小的模块,以利于任务 的分配。 2、模块化可以实现程序代码的复用,提 高编程效率
模块化的几个原则 模块分解的原则 保证模块的相对独立性 高聚合:一个模块只能完成单一的功能,代码 般几十行。 ■低耦合:指模块之间参数传递尽量少,尽量不 通过全局变量来实现数据传递 信息隐藏 把所有用户不需要关心的细节隐藏至模块内部
8 模块化的几个原则 ▪ 模块分解的原则 ▪ 保证模块的相对独立性 ▪ 高聚合:一个模块只能完成单一的功能,代码 一般几十行。 ▪ 低耦合:指模块之间参数传递尽量少,尽量不 通过全局变量来实现数据传递 ▪ 信息隐藏 ▪ 把所有用户不需要关心的细节隐藏至模块内部
我们怎么做? 关键是如何“分段”。 比较独立的、完整的功能分为一个函数, 般函数十几行 函数定义时注意与被调函数之间的沟通与 联系,即参数传递与返回两个方向的数据 流动。 在讲例题的时候请注意这两点
9 我们怎么做? ▪ 关键是如何“分段” 。 ▪ 比较独立的、完整的功能分为一个函数, 一般函数十几行。 ▪ 函数定义时注意与被调函数之间的沟通与 联系,即参数传递与返回两个方向的数据 流动。 ▪ 在讲例题的时候请注意这两点
例5-1:计算三个数最大数与最小数的差 include int dif(int x, int y, int z) int max(int x, int y, int z) int min(int x, int y, int 2): 程序的执行顺序: void maino int a, b, c, d main( di函数 nax PcC%%中a 函数 2:m=%小w调用函数d〔(调用函数 max 9,min函数 it dif(int x, int y,mt2)/定 14 调用函数 lmin 10 t int m1, m 输出 13 11 m1= max(x,y, z) 12 结束 m2= min( x return m1 int max(int x, int y, int2)/定义max函数求三数的最 int rl, r2 嵌套调用 2=(r1 多个函数时使用这种 return (r2) 方法将多个函数连在 mmim( nt x, int y, int)/定义mim函数求三数的最一起,构成整个程序。 r=(x<y?X 读程序时要按这个顺 return(r< z) 序运行程序
10 例5-1:计算三个数最大数与最小数的差 #include int dif(int x,int y,int z); int max(int x,int y,int z); int min(int x,int y,int z); void main() { int a,b,c,d; printf("Input Data: "); scanf("%d%d%d",&a,&b,&c); d=dif(a,b,c); printf("Max-Min=%d\n",d); } int dif(int x,int y,int z) /* 定义dif函数求三数的差值 */ { int m1,m2; m1= max(x,y,z); m2= min(x,y,z); return m1-m2; } int max(int x,int y,int z) /* 定义max函数求三数的最大值 */ { int r1,r2; r1=(x>y)?x:y; r2=(r1>z)?r1:z; return(r2); } int min(int x,int y,int z) /* 定义min函数求三数的最小值 */ { int r; r=(x<y)?x:y; return(r<z?r:z); } 程序的执行顺序: main( ) 调用函数dif 输出 结束 dif函数 max函数 调用函数max 调用函数min min函数 1 2 3 4 5 6 8 9 10 11 12 13 14 •嵌套调用 •多个函数时使用这种 方法将多个函数连在 一起,构成整个程序。 •读程序时要按这个顺 序运行程序