習題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("個數輸入錯誤!");
}
小胖專屬學習分享