当前位置:文档之家› c语言第七章课后题

c语言第七章课后题

*/
int max(int a, int b)
{
int max=0;
max = (a>b)?a:b;
return max;
}
void main()
{
int x=0; /*输入的两个数x,y*/
int y=0;
int m=0; /*m用于接收max()函数的返回值*/
printf("input two integer numbers:");
return Gcd(b,b-a);
}
}
结果:
7-9、
#include <stdio.h>
/*old()函数
功能:计算第i个人的年龄
入口参数:人数i
返回值:年龄
*/
int old(int i)
{
if(i==1)
return 10;
else
return old(i-1)+2;
}
void main()
{
do{
printf("input n:");
scanf("%d",&n);
}while(n<0);
for(i=1; i<=n; i++)
{
m=fact(i);
printf("%d!=%ld\n",i,m);
}
}
/*fact函数
功能:计算n!
入口参数:n
返回值:n!
*/
long fact(int n)
功能:计算两数的最大公约数
入口参数:两个正数a,b
返回值:最大公约数
*/
int Gcd(int a,int b)
{
int r=0;
r=a%b;
if(r!=0)
{
do{
a=b;
b=r;
r=a%b;
}while(r!=0);
}
return b;
}
结果:
(3)递归方法:
#include <stdio.h>
printf("最大公约数:%d\n",m);
}
/*Gcd()函数
功能:计算两数的最大公约数
入口参数:两个正数a,b
返回值:最大公约数
*/
int Gcd(int a,int b)
{
if (a==b) /*递归出口*/
return a;
else
{
if(a>b)
return Gcd(a-b,b);
else
m = LCM(x,y);
printf("最小公倍数为:%d\n",m);
}
结果:
7-5、
#include <stdio.h>
long fact(int n);
void main()
{
int i=0; /*循环变量*/
int n=0; /*输入的值*/
int m=0; /*接收fact()函数的返回值*/
{
int x=0; /*键盘键入两个数*/
int y=0;
int m=0; /*接收Gcd的返回值*/
do{
printf("输入两个正数:");
scanf("%d,%d",&x,&y);
}while(x<0 || y<0);
m = Gcd(x,y);
printf("最大公约数:%d\n",m);
}
/*Gcd()函数
(2)、模块的实现细节对外不可见——信息隐藏。
外部:关心做什么;内部:关心怎么做。
实质:把不需要调用者知道的信息都封装在模块内部,是模块的实现细节对外不可见。
3、设计好模块接口
(1)、接口指罗列出一个模块的所有的与外部打交道的变量等
(2)、定义好后不要轻易改动。
(3)、在模块开头(文件的开头)进行函数声明。
{
update(); /*利用循环控制时钟运行时间*/
display(); /*显示时,分,秒*/
delay(); /*模一尺时间为1秒*/
}
return 0;
}
结果:
自动跳出时间
7-3、
#include <stdio.h>
/*max()函数
功能:找两个数的最大值
入口参数:两个整数a,b
返回值:两数的最大值
模块化程序设计:
1、定义:将系统划分为若干个子系统,任务划分为若干个子任务,本质思想就是实现不同层次的数据或过程的抽象过程。
2、模块分解的基本原则
(1)、保证模块的相对独立性——高聚合、低耦合。
高聚合:模块内部的联系越紧密越好,就是使模块的功能要相对独立和单一。
低耦合:模块之间的联系越松越好,就是使模块之间的接口越简单越好。
{
int i=0; /*循环变量*/
int min=0; /*循环寻找范围的最小值*/
int;b)?a:b; /*最小值为a,b中的最大值*/
max = a*b; /*最大值为a*b*/
for (i=min; i<=max; i++)
{
if(i%a==0 && i%b==0)
int Gcd(int a,int b);
void main()
{
int x=0; /*键盘键入两个数*/
int y=0;
int m=0; /*接收Gcd的返回值*/
do{
printf("输入两个正数:");
scanf("%d,%d",&x,&y);
}while(x<0 || y<0);
m = Gcd(x,y);
4、结构化程序设计思想:
(1)、逐步求精:将一个完整的、较复杂的问题分解成若干个相对独立的、较为简单的子问题,若这些子问题还较为复杂可再分解它们,直到能够容易的用某种高级语言表达为止。
(2)、自底向上:先编写出基础程序段,然后再扩大、扩充和升级。
(3)、自顶向下:先写出结构简单的、清晰的主程序来表达整个问题;在此问题中包含的复杂子问题用子程序来实现;直到每个细节都可用高级语言表达为止。
int x=5; /*人数为5*/
int y=0; /*接收old()函数的返回值*/
y=old(x);
printf("第五个人的年龄为:%d\n",y);
}
结果:
7-10、
#include <stdio.h>
void main()
{
int flag=0; /*设置标志变量*/
int a=0; /*百位*/
{
printf("%d : %d : %d\n",hour,minute,second);
}
void delay()
{
int t;
for (t=0;t<100000000;t++); /*用循环体为空语句的循环实现延时*/
}
int main()
{
int i;
second=0;
for(i=0;i<1000000;i++)
3、结构化程序设计也是模块化程序设计的一种,增强可读性。
return i;
}
}
void main()
{
int x; /*键盘输入两整数x,y*/
int y;
int m; /*m用于接收LCM()函数的返回值*/
do{ /*输入整数的合法数据*/
printf("输入两个正整数:");
scanf("%d,%d",&x,&y);
}while(x<0 || y<0);
总结:逐步求精技术-------是一种由不断的自底向上修正的所补充的自顶向下的程序设计方法。其特点:
<1>、程序结构清晰、容易阅读、容易修改
<2>、可简化程序的正确性验证,可减少程序调试的时间和复杂度。
5、用逐步求精实现技术求解问题的步骤为:
<1>、对实际问题进行全局性分析、决策,确定数学模型。
<2>、确定程序的总体结构,将整个问题分解成若干个相对独立的子问题。
printf("说出你的计算结果:");
scanf("%d",&sum);
for(i=100;i<=999;i++)
{
a=i/100;
b=i/10%10;
c=i%10;
m=a*100+c*10+b;
n=b*100+a*10+c;
p=b*100+c*10+a;
q=c*100+a*10+b;
r=c*100+b*10+a;
printf("输入两个正数:");
scanf("%d,%d",&x,&y);
}while(x<0 || y<0);
m = Gcd(x,y);
printf("最大公约数:%d\n",m);
}
/*Gcd()函数
功能:计算两数的最大公约数
入口参数:两个正数a,b
返回值:最大公约数
*/
int Gcd(int a,int b)
{
static long p=1;
p=p*n;
相关主题