计算机基础C程序设计之三

学习目的:

1.掌握函数的嵌套与递归调用的全过程。

2.理解函数的定义及函数的调用过程(函数的调用格式、调用方式及被调用函数的使用说明)。

学习内容:

1.输入三个整数,用函数实现比较三个数的最大数,并输出显示到屏幕上。假设函数原型如下 int Func(int a,int b ,int c)

2.求出两个正整数的最大公约数(提示:能够整除这两个整数的最大整数)。

假设2个正整数a,b,函数实现原型为 int Gcd(int a,int b)

解题思路:

(1)穷极法:由于a,b的最大公约数不可能比a、b中的较小者还大,否则一定不能整除它,因此先找到a和b中的较小者t,然后从t开始逐渐减1,尝试每一种可能,即检验t到1之间的所有整数,第一个满足公约数条件的t就是a和b的最大公约数。

(2)递归法:对正整数a和b,

当a>b时,则a和b与a-b和b的最大公约数相同.

当b>a时,则a和b与a和b-a的最大公约数相同。

当a=b时,则a和b的最大公约数与a值和b值相同

3.使用函数的嵌套功能求1!+2!+3!+4!+……+n!的值?

4.有5个人坐在一起,问第五个多大年纪,他说比第四个人大2岁,问第四个人,他说比第三个人大2岁,问第三个人,他说比第二个人大2岁,问第二个人,他说比第一个人大2岁。第一个说自己10岁,请利用递归法编程并并计算出第5个人的年龄。

程序实现:

#include<stdio.h>
//
int Func(int a,int b,int c)
{
    int t;
    t=(a>b?a:b)>c?(a>b?a:b):c;
    return t;
}
//
int Gcd(int a,int b)
{
    int t;
    t=a<b?a:b;
    for(;t>=1;t--)
    {
        if(a%t==0&&b%t==0)
            break;
    }
    return t;
}
//
int Fact(int n)
{
    int i;
    int sum=1;
    for(i=1;i<=n;i++)
    {
        sum=sum*i;
    }
    return sum;
}
//
int  SumFact(int n)
{
    int i;
    int sumValue=0;
    for(i=1;i<=n;i++)
    {
        printf("Fact(%d)=%d\n",i,Fact(i));
        sumValue+=Fact(i);

    }
    printf("1!+2!+3!+……+%d!=%d\n",n,sumValue);
    return sumValue;
}
//
int Age(int n)
{
    if(n<=0)
        return -1;
    if(n==1)
        return 10;
    else if(n>1)
        return Age(n-1)+2;
}
//
main()
{
    int iSelect;
    //
    int i1,i2,i3;
    //
    int a,b;
    //
    int n;
    printf("函数使用程序集:\n");
    printf("1,输入三个整数,用函数实现比较三个数的最大数,并输出显示到屏幕上.\n");
    printf("2,求出两个整数的最大公约数.\n");
    printf("3,使用函数的嵌套功能求:1!+2!+3!+4!+……+n!的值\n");
    printf("4,求第五个人的年龄.\n");
    printf("5,退出.\n");
    printf("-----------------------------------------------\n");
    printf("说明:请您从上述列表中选择相应的数字编号进行查看相应程序.\n");
    do
    {
         printf("请输入您的选择:\t");
         scanf("%d",&iSelect);
         switch(iSelect)
         {
         case 1:
            printf("请您输入三个正整数:\t");
            scanf("%d%d%d",&i1,&i2,&i3);
            printf("您输入三个正整数是%d,%d,%d\n",i1,i2,i3);
            printf("最大数是:%d\n",Func(i1,i2,i3));
            break;
        case 2:
            printf("请您输入两个正整数:\t");
            scanf("%d%d",&a,&b);
            printf("%d和%d的最大公约数是:%d\n",a,b,Gcd(a,b));
            break;
        case 3:
            printf("请您输入n的值:(1<n<=10)\n");
            scanf("%d",&n);
            SumFact(n);
            break;
        case 4:
            printf("第五个人的年龄为:%d\n",Age(5));
            break;
        case 5:
            printf("程序即将关闭,下次再见!!!!!!!!!!\n");
            break;
        default:
            printf("您的输入有错误,请您检查后重新输入……\n");
            break;
         }

    }while(iSelect!=5);
}

猜你喜欢

转载自blog.csdn.net/qq_42880059/article/details/90743488