用C语言,运用数组设计一个具有进制转换功能的计算器,可将输入的一个十进制、二进制、八进制或十六进制的整数转换为其他3种进制的整数后输出。思考:如何实现实数的进制转换?
时间: 2024-12-29 15:34:51 浏览: 66
在C语言中,我们可以创建一个程序来实现整数的进制转换,包括十进制转二进制、八进制和十六进制。这里我们不会处理浮点数的转换,因为C标准库函数`itoa()`可以方便地完成整数到字符串的转换,但我们可以通过手动解析和计算来实现基本的整数转换。
首先,我们需要一些辅助函数来帮助转换:
```c
#include <stdio.h>
#include <string.h>
// 十进制转二进制
void dec_to_bin(int num, char bin[32]) {
int i = 0;
while (num > 0) {
bin[i++] = num % 2 + '0';
num /= 2;
}
// 将前导零补全
if (bin[0] == '0') {
bin[0] = '1'; // 如果只有一个0,则表示0,所以改为1
}
bin[i] = '\0'; // 添加终止符
printf("Binary: %s\n", bin);
}
// 其他进制转换函数类似,只是除数不同
void oct_to_dec(const char* octal, int* dec) {
int base = 8;
long result = 0;
for (int i = strlen(octal) - 1; i >= 0; --i) {
result += base * (octal[i] - '0');
}
*dec = result;
}
void hex_to_dec(const char* hex, int* dec) {
int base = 16;
long result = 0;
for (int i = 0; i < strlen(hex); ++i) {
if (hex[i] >= '0' && hex[i] <= '9') {
result += base * (hex[i] - '0');
} else if (hex[i] >= 'A' && hex[i] <= 'F') {
result += base * ((hex[i] - 'A') + 10);
} else if (hex[i] >= 'a' && hex[i] <= 'f') {
result += base * ((hex[i] - 'a') + 10);
}
}
*dec = result;
}
```
然后,在主函数里接受用户输入并选择相应的进制:
```c
int main() {
int input_num;
char choice;
printf("Enter a number and its base (1 for decimal, 2 for binary, 8 for octal, 16 for hexadecimal): ");
scanf("%d %c", &input_num, &choice);
switch (choice) {
case '1':
printf("Decimal: %d\n", input_num);
break;
case '2':
char bin[32];
dec_to_bin(input_num, bin);
break;
case '8':
int octal;
oct_to_dec(dec_to_string(input_num), &octal);
printf("Octal: %o\n", octal);
break;
case '16':
int hex;
hex_to_dec(dec_to_string(input_num), &hex);
printf("Hexadecimal: %x\n", hex);
break;
default:
printf("Invalid choice.\n");
}
return 0;
}
```
注意这里的`dec_to_string()`是一个虚构的函数,用于将十进制整数转换成字符串,实际实现可能会利用标准库中的`sprintf()`或自定义算法。这个示例仅作为基础演示,实际项目中可能需要更完善的错误检查和边界条件处理。
阅读全文
相关推荐


















