题目:
10.为了让程序清单9.8中的to_binary()函数更通⽤,编写⼀个to_base_n()函数接受两个参数,且第⼆个参数在2〜10范围内,然后以第2个参数中指定的进制打印第1个参数的数值。例如,to_base_n(129, 8)显⽰的结果为201,也就是129的⼋进制数。在⼀个完整的程序中测试该函数。
思路:
查看程序清单9.8中to_binary()函数用的递归方法,盲猜直接将原函数中对2的底数取余改为对to_base_n()函数指定的底数取余,然后最后打印的时候打印余数即可;
//程序清单9.8 binary.c程序
/* binary.c -- 以⼆进制形式打印制整数 */
// #include <stdio.h>
// void to_binary(unsigned long n);
// int main(void)
// {
// unsigned long number;
// printf("Enter an integer (q to quit):\n");
// while (scanf("%lu", &number) == 1)
// {
// printf("Binary equivalent: ");
// to_binary(number);
// putchar('\n');
// printf("Enter an integer (q to quit):\n");
// }
// printf("Done.\n");
// return 0;
// }
// void to_binary(unsigned long n) /* 原程序清单9.8的递归函数 */
// {
// int r;
// r = n % 2;
// if (n >= 2)
// to_binary(n / 2);
// putchar(r == 0 ? '0' : '1');
// return;
// }
// 以下程序修改为函数to_binary输入需要转换的数n,进制数base_num
#include <stdio.h>
void to_base_n(unsigned long n, int base_num); //进制数为base_num,需要转换的数为n
int main(void)
{
unsigned long number;
int base_num;
printf("Enter an integer and base number (q to quit):\n");
while ((scanf("%lu %d", &number, &base_num) == 2) && (base_num <= 10) && (base_num >=2))
{
printf("In radix %lu the integer %d equivalent:", number, base_num);
to_base_n(number, base_num); //调用to_base_n函数
putchar('\n');
printf("Enter an integer and radix number(q to quit):\n");
}
printf("Done.\n");
return 0;
}
void to_base_n(unsigned long n, int base_num)
{
int r;
r = n % base_num;
if (n >= base_num)
to_base_n(n/base_num, base_num);
printf("%d",r);
}