第5章作业1、为每种类型的模块耦合举一个具体的例子1)非直接耦合:#includestdio.hvoidmain(){inta,b;printf(printanintegernumber:);scanf(%d,&a);if(a0)printf(dataerror!);else{b=fac(a);prt(b);}}intfac(intn){intf;if(n==0,n==1)f=1;elsef=fac(n-1)*n;return(f);}voidprt(intx){printf(%d\n,x);}/*函数fac和prt之间为非直接耦合关系*/2)数据耦合:/*上例中,主函数main和子函数fac之间为数据耦合关系*/3)标记耦合:#includestdio.hvoidmain(){ints,j,b[10];for(j=0;j10;j++)b[j]=j;s=sum(b[10]);printf(%d\n,s);}intsum(inta[10]){intss=0,i;for(i=0;i10;i++)ss=ss+a[i];return(ss)}/*主函数main和子函数sum之间为标记耦合关系*/4)特征耦合:#includestdio.hvoidmain(){intj,b[10];for(j=0;j10;j++)b[j]=j;add3(b[10]);}voidadd3(inta[10]){ints=0;s=a[3]+1;printf(%d\n,s);}/*主函数main和子函数sum之间为特征耦合关系*/5)控制耦合:/*根据输入的年龄是否满十八岁判断是否到达法定饮酒年龄*/#includestdio.hvoidmain(){intAge=0;T=0;printf(%s,请输入您的年龄:);scanf(%d,&Age);if(age18)T=1;elseT=0;YesOrNot(T);}voidYesOrNot(ints){if(s==1)printf(%s\n,您已到达法定饮酒年龄!);elseprintf(%s\n,您未到达法定饮酒年龄!);}/*主函数main和子函数WineOrNot之间为控制耦合关系*/6)外部耦合:#includestdio.hinta,b;voidmain(){pin();b=a+1;prt();}voidpin(){printf(printanintegernumber:);scanf(%d,&a);}voidprt(){printf(%d\n,b);}/*三个函数之间都存在外部耦合关系*/7)公共环境耦合:两个程序共享一个文件8)现代程序设计语言已经从语法上杜绝了内容耦合2、为每种类型的模块内聚举一个具体的例子1)偶然类聚:Word窗口的工具菜单,在本菜单中,各工具间基本没什么联系。该菜单具有偶然内聚。2)逻辑内聚:一个函数能打印季度开支报告、月份开支报告和日开支报告,具体打印哪一个,将由传入的控制标志决定,该函数具有逻辑内聚性。3)时间内聚:操作系统的开机初始化模块,包含的动作没什么大的关系,但必须在开机后的一段时间内都完成。整个开机初始化模块具有时间内聚。4)过程内聚:一个模块,为某员工计算工龄工资:打开员工信息文件取出员工记录;按一定的算法计算工龄;按一定的算法计算工龄工资。该模块中的三个相对独立的子功能必须以特定次序执行,整个模块具有过程内聚。5)通信内聚:一个模块,接收一个远程传来的信息文件,保存,同时马上打印该文件。该模块针对同一个文件操作,打印和存盘操作没有前后顺序关系,整个模块具有通信内聚。6)顺序内聚:某干部退休,模块计算他的离/退休工资:打开干部信息文件;读出文件中他的职务/级别等信息,通过一定算法判断他是否具备离休资格,结论写入文件;再读出文件中他的目前工资、工作年限、是否离休等信息,通过一定算法计算他的离/退休工资,再结果写入文件。该模块操作同一个文件,必须先判断出他是否离休,再计算离/退休工资。整个模块具有顺序内聚。7)功能内聚:intfac(intn){intf;if(n==0,n==1)f=1;elsef=fac(n-1)*n;return(f);}/*函数fac,计算n!,本模块功能单一,具备功能内聚*/