C primer plus (第六版)第九章 编程练习第10题

发布于:2025-08-03 ⋅ 阅读:(15) ⋅ 点赞:(0)

题目:

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);
}