zoukankan      html  css  js  c++  java
  • 习题10(递归函数)

    1、编写函数midfind:功能为用二分查找法在n个数中查找指定数字的位置。 

    编程实现:在任意6个升序排列的数中查找指定数字的位置。

    #include<stdio.h>

    int midfind(int ch[],int n)

    {

           int i,mid,s=0,e=5;

    while(s<=e)

           {

                  mid=(s+e)/2;

                  if(ch[mid]==n) break;

                  if(ch[mid]>n) e=mid-1;

                  if(ch[mid]<n) s=mid+1;

           }

           if(s>e) return -1;

           else return mid;

    }

    void main()

    {

           int ch[6],n,re,i;

           printf("请输入一组数字:");

           for(i=0;i<6;i++)

                  scanf("%d",&ch[i]);

           printf("请输入要查找的数字:");

           scanf("%d",&n);

           re=midfind(ch,n);

           if(n==-1)

                  printf("找不到%d",n);

           else

                  printf("找到了,%d在%d位置\n",n,re);

     

    }


    2、编写函数trans:功能为4行4列的矩阵转置

     编程实现:对任意4行4列的矩阵转置输出

    #include <stdio.h>

    void trans(int x[4][4])

    {

           int i,j,t;

           for(i=0;i<4;i++)

           {

                  for(j=i;j<4;j++)

                  {

                         if(i!=j)

                         {

                                t=x[i][j];

                                x[i][j]=x[j][i];

                                x[j][i]=t;

                         }

                  }     

           }

    }

    void main()

    {

           int a[4][4],n,m;

           printf("请输入一个矩阵数据:");

           for(n=0;n<4;n++)

           {

                  for(m=0;m<4;m++)

                  {

                         scanf("%d",&a[n][m]);

                         printf("%3d ",a[n][m]);

                  }

                  printf("\n");

           }

           printf("转置后的矩阵为:\n");

           trans(a);

           for(n=0;n<4;n++)

           {

                  for(m=0;m<4;m++)

                  {

                         printf("%3d ",a[n][m]);

                  }

                  printf("\n");

           }

    }

     

     

    3、编写函数insert:功能为在一个字符串中指定位置插入指定字符,若指定位置大于等于字符串长度则是把字符追加到字符串最后。编程实现:对任意输入的字符串中指定位置插入指定字符。

    #include <stdio.h>

    #include <string.h>

    char insert(char ch[],char c,int p)

    {

           int i,len=strlen(ch);

           if(p<len)

           {

                  for(i=len;i>p;i--)

                  {

                         ch[i]=ch[i-1];

                  }

                  ch[p]=c;

           }

           else

           {

                  ch[len]=c;

           }

    }

    void main ()

    {

           char x[]={"0"};

           int i,j,p,c,len;

           printf("请输入字符串:");

           gets (x);

           printf("请输入需插入的字符和位置:");

           scanf("%c%d",&c,&p);

           printf("插入后的字符串:");

           insert(x,c,p);

           puts(x);

    }

     

     

     

     

    4、编程实现:输出第n天的桃子数。猴子第一天摘下若干个桃子,立即吃了一半,还不过瘾又多吃了一个,第二天将第一天剩下的桃子吃了一半又多吃了一个,以后每天以这个规律吃下去,到第十天再去吃时发现只剩下一个桃子。

    编写递归函数peach:功能为第n天的桃子数

    #include <stdio.h>

    int peach(int day)

    {

        if(day==10) 

                  return 1;

        else 

                  return 2*(peach(day+1)+1);

    }

    int main()

    {

           int n;

           printf("你想知道第几天的桃子数量吗?:");

           scanf("%d",&n);

           if(n>0 && n<=10)

           {

                   printf("第%d天有%d个桃子\n",n,peach(n));

           }

           else

           printf("没有桃子!");

    }

     

     

     

     

     

    5、编程实现:求组的值。m个的元素中取出n个元素的不同取法个数。,当n=m或者m=0时值是1。

    方法1编写递归函数fun:功能为求任意一个正整数或者0的阶乘。

    #include <stdio.h>

    #include <stdlib.h>

    long int fun(int x)

    {

           if(x==0||x==1) return 1;

           else return fun(x-1)*x;

    }

    int main( )

    {

        int m, n;

        printf("请输入元素个数和抽取的个数:");

        scanf("%d %d",&m, &n);

        if(m>=n)

               printf("%d个元素中抽取%d个的组合有%d",m,n,fun(m)/(fun(m-n)*fun(n)));

        else

              printf("个数输入错误!");

    }

     

    方法2编写递归函数zhuhe:功能为求组的值。

    #include <stdio.h>

    #include <stdlib.h>

    long int zhuhe(int n,int m)

    {

           if(m>n) return 0;

           else if(m==n || m==0)

                  return 1;

           else

           return zhuhe(n-1,m)+zhuhe(n-1,m-1);

    }

    int main( )

    {

        int m, n;

        printf("请输入元素个数和抽取的个数:");

        scanf("%d %d",&m, &n);

        if(m>=n)

               printf("%d个元素中抽取%d个的组合有%d",m,n,zhuhe(m,n));

        else

              printf("个数输入错误!");

    }

    小胖专属学习分享
  • 相关阅读:
    Python中所有的关键字
    关于selenium的8种元素定位
    对提示框的操作
    selenium+webservice进行百度登录
    MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled...报错解决
    Vue中使用echarts
    npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142解决方法
    插入排序
    冒泡排序优化
    roject 'org.springframework.boot:spring-boot-starter-parent:XXX' not found 解决
  • 原文地址:https://www.cnblogs.com/xpl520/p/15689804.html
Copyright © 2011-2022 走看看