编程将一个十进制数转换成二进制数(或八进制数、或十六进制数),通过键盘输入一个十进制数;将此数转换成对应的非十进制数(如二进制数、八进制数或十六进制数)。
时间: 2024-10-24 21:06:09 浏览: 27
要编写一个C程序,将用户的十进制输入转换为二进制、八进制或十六进制,你可以使用C标准库中的`<stdio.h>`来获取输入,以及`<stdlib.h>`中的`atoi()`函数进行十进制到其他进制的转换。以下是一个示例程序,展示了如何实现这个功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Function to convert decimal to binary, octal or hexadecimal
void number_to_base(int num, char base[], int size) {
switch (base[0]) {
case 'b': // Binary
for (int i = size - 1; num > 0; num /= 2, --i)
base[i] = num % 2 + '0';
break;
case 'o': // Octal
for (int i = size - 1; num > 0; num /= 8, --i)
base[i] = num % 8 + '0';
if (num == 0) // Add leading zero if necessary
base[0] = '0';
break;
case 'x': // Hexadecimal
for (int i = size - 1; num > 0; num /= 16, --i) {
base[i] = (num % 16 > 9) ? (char)(num % 16 + 55) : (char)(num % 16 + '0');
}
if (num == 0) // Add leading zero if necessary
base[0] = '0';
break;
default: // Invalid base
printf("Invalid base! Please enter 'b' for binary, 'o' for octal, or 'x' for hexadecimal.\n");
return;
}
base[size] = '\0'; // Null terminate the string
}
int main() {
char input[50];
printf("Enter a decimal number: ");
fgets(input, sizeof(input), stdin); // Read input until newline
input[strcspn(input, "\n")] = '\0'; // Remove newline character
int decimal_num = atoi(input);
char output[50], bases[] = "b", octal_bases[] = "o", hex_bases[] = "x";
int output_size = strlen(bases);
// Convert to each base
number_to_base(decimal_num, output, output_size);
printf("Binary representation: %s\n", output);
number_to_base(decimal_num, output, strlen(octal_bases));
printf("Octal representation: %s\n", output);
number_to_base(decimal_num, output, strlen(hex_bases));
printf("Hexadecimal representation: %s\n", output);
return 0;
}
```
在这个程序中,`number_to_base`函数根据给定的基(binary, octal, 或 hexadecimal)将十进制转换为相应的非十进制形式。`main`函数获取用户输入,调用该函数三次分别处理二进制、八进制和十六进制。
阅读全文