正在加载图片...
printf("g(%d, %d)+%d= %d, m-1, 2*n, n, val return 0 8.17编写一函数 digit(n,k),它把数n从右边起的第k位数字的值给出来,其中n为 正整数,若n的位数不足k,则返回值0 算法分析:这是数字分离技术的简单应用,连续使用k次“%”“/”运算就可以把数n 的第k位数字提取出来。下面是同一种方法的两种写法 方法一: #include<stdio. h> int digit(int n, int k) nt val val =n%10: /1 Iwhile(k>0) return val 方法二 digit(int n, i int i =0. val val =n %10: /= fwhile(n ! 0) return o 8.18编写一递归函数,函数返回值为a[~an间的最大数的下标(0≤i≤n 算法分析:对任意给定的i,从第i个位置开始,逐个与后面的比较,每次比较总是保 留当前那个最大数的下标。显然,除了i不断增加外,每一步的操作都是一样的。据此,我 们可以考虑用递归实现。下面是它的一个实现方案 #include<stdio. h> #definen 9 int a[N={3,4,66,4,95,5,8,12,881};/*一个示意性的例子*/ int maino t maxloca (int) /*函数声明* printf(" AnIndex=%dn", maxloca(0));/*为简便起见,假设i=0*/ nt maxloca(int i 66 printf( "g(%d,%d)+%d = %d",m-1,2*n,n,val ); return 0; } 8.17 编写一函数 digit(n,k) ,它把数 n 从右边起的第 k 位数字的值给出来,其中 n 为 正整数,若 n 的位数不足 k,则返回值 0。 算法分析:这是数字分离技术的简单应用,连续使用 k 次“%”“/”运算就可以把数 n 的第 k 位数字提取出来。下面是同一种方法的两种写法: 方法一: #include<stdio.h> int digit(int n,int k) { int val; do{ val = n % 10; n = n / 10; k--; }while( k > 0 ); return val; } 方法二: int digit(int n,int k) { int i = 0,val; do{ val = n % 10; n /= 10; i++; if(i == k) return val; }while(n != 0); return 0; } 8.18 编写一递归函数,函数返回值为 a[i]~a[n]间的最大数的下标(0≤i≤n)。 算法分析:对任意给定的 i,从第 i 个位置开始,逐个与后面的比较,每次比较总是保 留当前那个最大数的下标。显然,除了 i 不断增加外,每一步的操作都是一样的。据此,我 们可以考虑用递归实现。下面是它的一个实现方案。 #include<stdio.h> #define N 9 int a[N]={3,4,66,4,955,5,8,12,881}; /* 一个示意性的例子 */ int main() { int maxloca(int); /* 函数声明 */ printf("\nIndex = %d\n", maxloca(0) ); /* 为简便起见,假设 i = 0 */ } int maxloca(int i ) { int index;
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有