编写一个c程序,把十进制正整数转换为S进制(S=2,8,16)数输出的递归函数, 在main函数中 调用这个函数并输出结果。
时间: 2024-12-11 22:37:19 浏览: 66
在C语言中,编写一个将十进制正整数转换为二进制、八进制或十六进制的递归函数可以按照以下步骤进行:
```c
#include <stdio.h>
#include <string.h>
// 定义转换函数,接收输入数字、基数和结果字符串
void convert(int num, int radix, char* result, int base = 10) {
// 当num变为0,说明已经转换完成,添加空字符结束字符串
if (num == 0) {
*result = '\0';
printf("%s\n", result); // 输出结果
return;
}
// 根据基数将剩余位转换并追加到结果字符串
result[strlen(result)] = (char)(num % radix + '0'); // 小于 radix 的值加上 '0' 字符对应数字
convert(num / radix, radix, result, base);
}
int main() {
int decimal_num; // 输入的十进制数
int choice; // 用户选择的进制
// 获取用户输入的十进制数和进制选项
printf("请输入一个正整数: ");
scanf("%d", &decimal_num);
printf("请选择转换成的进制(2 for binary, 8 for octal, 16 for hexadecimal): ");
scanf("%d", &choice);
switch(choice) {
case 2: // 转换为二进制
char binary[32]; // 预留空间以防过长
convert(decimal_num, 2, binary);
break;
case 8: // 转换为八进制
char octal[32];
convert(decimal_num, 8, octal);
break;
case 16: // 转换为十六进制
char hex[17]; // 16进制最多需要16位,预留一位用于'0x'
convert(decimal_num, 16, hex, 16); // 在调用时指定base=16,表示十六进制
printf("0x"); // 添加前缀
break;
default:
printf("无效的选择!\n");
return 1;
}
return 0;
}
```
在这个程序中,`convert` 函数是一个递归函数,它会一直除以基数,直到商为0,然后将余数转换成相应的字符形式,并将其追加到结果字符串中。
运行此程序后,你可以输入一个正整数和对应的进制选择,程序将输出相应的S进制表示。
阅读全文
相关推荐


















