用c语言编程将一个十进制数转换成二进制数(或八进制数、或十六进制数),通过键盘输入一个十进制数;将此数转换成对应的非十进制数(如二进制数、八进制数或十六进制数)。
时间: 2024-10-25 14:15:15 浏览: 109
在C语言中,我们可以使用`itoa()`函数(在头文件`<string.h>`中)来将十进制数转换成字符形式的字符串,然后再根据需求将其分割成对应进制的数字。对于非`itoa()`提供的功能,比如八进制和十六进制,我们需要手动实现转换过程。以下是一个基本的示例,演示如何完成这三个任务:
```c
#include <stdio.h>
#include <string.h>
#include <ctype.h> // 使用isdigit()检查字符是否为数字
// 十进制转其他进制辅助函数
char* decimalToBase(int num, char base[], int size) {
char *result = (char*)malloc(size + 1);
if (!result) {
perror("Memory allocation failed");
return NULL;
}
if (num == 0) { // 数字转换到0的情况
result[size] = '\0';
return result;
}
result[size] = '\0'; // 结尾留空
while (num > 0) {
result[--size] = num % base + '0'; // 加上ASCII码
num /= base;
}
return result;
}
int main() {
int decimalNum;
printf("Enter a decimal number: ");
scanf("%d", &decimalNum);
char binaryStr[33], octalStr[50], hexStr[64]; // 分别存储二进制、八进制和十六进制字符串
binaryStr[32] = '\0'; // 假设最大二进制数长度为31位
strcpy(binaryStr, decimalToBase(decimalNum, "2", 32));
octalStr[49] = '\0'; // 假设最大八进制数长度为48位
octalStr[48] = '0'; // 首先加一位'0'
while (decimalNum > 0) {
octalStr++; // 移动指针
octalStr[47] = decimalNum % 8 + '0';
decimalNum /= 8;
}
hexStr[63] = '\0'; // 假设最大十六进制数长度为63位
hexStr[62] = '0'; // 首先加一位'0'
while (decimalNum > 0) {
hexStr++; // 移动指针
if (decimalNum >= 16) {
hexStr[61] = 'F' + decimalNum % 16; // 如果超过'A', 将字母从'a'开始计数
} else {
hexStr[61] = decimalNum + '0';
}
decimalNum /= 16;
}
printf("Binary representation: %s\n", binaryStr);
printf("Octal representation: %s\n", octalStr);
printf("Hexadecimal representation: %s\n", hexStr);
free(binaryStr); // 释放内存
return 0;
}
```
在上述代码中,我们首先通过递归的方式将十进制数转换为其他进制的字符串形式。请注意,实际应用中应考虑边界情况和错误处理,这只是一个基础示例。
阅读全文