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("个数输入错误!");

    }

    小胖专属学习分享
  • 相关阅读:
    处理数据
    Vue--Vue常用指令及操作
    Vue--Vue实例
    ES6--解构赋值
    ES6--入门
    前端模块化开发
    Node.js--入门
    HTML5--canvas与svg的使用
    input整理
    移动端开发入门
  • 原文地址:https://www.cnblogs.com/xpl520/p/15689804.html
Copyright © 2011-2022 走看看