为了使下面程序中的函数to_binary()更一般化,可以在新的函数to_base_n()中使用第二个参数,且该参数的范围从2到10。然后,这个新函数输出第一个参数在第二个参数规定的进制数下的数值结果。例如,to_base_n (129,8)的输出是201,也就是129的八进制数值。最后在一个完整的程序中对该函数进行测试。
/* 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("%u1", &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) /* 递归函数 */
{
int r;
r = n % 2;
if(n >= 2)
to_binary(n / 2);
putchar ('0' + r);
return;
}

#include <stdio.h> void to_base_n(unsigned long , unsigned int); int main(void) { unsigned long number; unsigned int base; printf("Enter an integer (q to quit):\n"); while (scanf("%lu%u", &number, &base) == 2) //原书有误:不应该是%ul,而是%lu { printf("%lu's base %u equivalent: ", number, base); to_base_n(number,base); putchar('\n'); printf("Enter an integer (q to quit):\n"); } printf("Done.\n"); return 0; } void to_base_n(unsigned long n, unsigned int base) //* recursive function { int r; r = n % base; if (n >= base) to_base_n(n / base, base); putchar('0' + r); return; }