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

}

posted @ 2021-12-14 20:17  小耿想努力呀  阅读(308)  评论(0编辑  收藏  举报