C语言实验六实验报告.doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
高级语言程序设计上机实验报告
一、实验目的
1.理解递归问题基本思想
2.学会编写递归程序,理解递归何时结束。
3、清楚明白结束条件无法满足的递归程序将导致无穷递归的情况发生。
二实验题目
1.计算游戏人员的年龄
有5个人围坐在一起,问第5个人多大了年纪,他说比第4个人大2岁:问第4个人多大年纪。他说比第3个人大2岁;问第3个人多大年纪,他说比第2个人大2岁;问第2个人多大年纪,他说比第1个人大2岁。第1个人说自己10岁,问第5个人多大年纪。
(1)程序源代码:
#include
unsigned int ComputeAge(unsigned int n);
void main ()
{
unsigned int n =5;
printf("The 5th person's age is %d\n",ComputeAge(n));
}
unsigned int ComputeAge(unsigned int n)
{
unsigned int age;
if (n==1)
{
age =10;
}
else
{
age =ComputeAge(n-1)+2;
}
return age;
}
(2)运行结果
2.计算最大公约数
利用计算最大公约数的三条性质,用递归方法计算两个整数的最大公约数。
性质1 如果x>y, 则x和y的最大公约数与x-y和y的最大公约数相同,即 gcd(x,y)=gcd(x-y,y)(x>y)
性质2 如果y>x,则x和y的最大公约数与x和y-x的最大公约数相同,即 gcd(x,y)=gcd(x,y-x)(x 性质3 如果x=y,则x和y的最大公约数与x的值和y值相同,即 gcd(x,y)=x=y (1)程序源代码 #include int MaxCommonFactor(int a, int b); void main() { int x,y,z; printf("Please int x, y:"); scanf("%d, %d", &x, &y); z=MaxCommonFactor(x, y); printf("The max common factor = %d\n", z); } int MaxCommonFactor(int a, int b) { if (a<=0 ||b <=0) return -1; if (a == b) { return a; } else if (a>b) { return MaxCommonFactor(a-b, b); } else { return MaxCommonFactor(a, b-a); } } (2)运行结果 3.设计一个函数MaxCommonFactor(),利用欧几里德算法(也称辗转相除法)计算两个正整数的最大公约数 (1)程序源代码 #include #include int MaxCommonFactor(int a,int b); int main(void) { int a,b,x; printf("Please input a,b:"); scanf("%d, %d",&a,&b); z=MaxCommonFactor(a,b); if(x !=-1) { printf("MaxCommonFactor= %d\n",x); } else { printf("Input error!\n"); } return 0; } int MaxCommonFactor(int a,int b) { int r; if(a<=0||b<=0) return -1; do{ r=a%b; a=b; b=r; }while(r !=0); return a; } (3)运行结果