用C语言数组写一个数制转换系统
时间: 2023-12-31 18:05:53 浏览: 38
好的,我可以为您提供一个简单的数制转换系统的代码,使用C语言数组实现。以下是一个将十进制数转换为二进制数的示例:
```c
#include <stdio.h>
int main() {
int decimal, binary[32], i = 0, j;
printf("请输入一个十进制数:");
scanf("%d", &decimal);
while (decimal > 0) {
binary[i] = decimal % 2;
decimal /= 2;
i++;
}
printf("转换为二进制数为:");
for (j = i - 1; j >= 0; j--) {
printf("%d", binary[j]);
}
printf("\n");
return 0;
}
```
这个程序首先要求用户输入一个十进制数,然后使用while循环将其转换为二进制数,并将每个二进制位存储在一个数组中。最后,使用for循环遍历数组并输出二进制数。您可以根据需要修改此代码以转换其他进制数。
相关问题
c语言编写一个能进行数制转换的小程序
好的,下面是一个简单的 C 语言程序,可以将十进制数转换为二进制、八进制和十六进制数:
```c
#include <stdio.h>
void decToBin(int n) {
int binary[1000], i = 0;
while (n > 0) {
binary[i] = n % 2;
n /= 2;
i++;
}
printf("二进制数为:");
for (int j = i - 1; j >= 0; j--)
printf("%d", binary[j]);
}
void decToOct(int n) {
int octal[1000], i = 0;
while (n > 0) {
octal[i] = n % 8;
n /= 8;
i++;
}
printf("八进制数为:");
for (int j = i - 1; j >= 0; j--)
printf("%d", octal[j]);
}
void decToHex(int n) {
char hex[1000];
int i = 0, rem;
while (n > 0) {
rem = n % 16;
if (rem < 10)
hex[i] = rem + 48;
else
hex[i] = rem + 55;
n /= 16;
i++;
}
printf("十六进制数为:");
for (int j = i - 1; j >= 0; j--)
printf("%c", hex[j]);
}
int main() {
int n;
printf("请输入一个十进制数:");
scanf("%d", &n);
decToBin(n);
printf("\n");
decToOct(n);
printf("\n");
decToHex(n);
printf("\n");
return 0;
}
```
在这个程序中,我们定义了三个函数:`decToBin`、`decToOct`和`decToHex`,分别用于将一个十进制数转换为二进制、八进制和十六进制数。在 `main` 函数中,我们首先从用户那里获取一个十进制数,然后调用这三个函数分别进行转换,并将结果打印到屏幕上。
依据栈的基本操作写一个数制转换算法
好的,根据栈的基本操作,可以先将要转换的数不断除以进制数,将余数依次入栈,然后依次出栈,得到的数就是转换后的结果。以下是示例代码:
```
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct {
int *base;
int *top;
int stacksize;
} SqStack;
// 初始化栈
void InitStack(SqStack *s) {
s->base = (int *) malloc(STACK_INIT_SIZE * sizeof(int));
if (!s->base) exit(0);
s->top = s->base;
s->stacksize = STACK_INIT_SIZE;
}
// 入栈
void Push(SqStack *s, int e) {
if (s->top - s->base >= s->stacksize) {
s->base = (int *) realloc(s->base, (s->stacksize + STACKINCREMENT) * sizeof(int));
if (!s->base) exit(0);
s->top = s->base + s->stacksize;
s->stacksize += STACKINCREMENT;
}
*(s->top++) = e; // 先赋值再加一
}
// 出栈
int Pop(SqStack *s) {
if (s->top == s->base) exit(0); // 空栈
return *(--s->top); // 先减一再取值
}
// 十进制转任意进制
void conversion(int num, int base) {
SqStack s;
InitStack(&s);
while (num) {
Push(&s, num % base); // 余数入栈
num /= base; // 商作为下一次的被除数
}
while (s.top != s.base) printf("%d", Pop(&s)); // 逆序输出
}
int main() {
int n, base;
printf("请输入一个十进制正整数:");
scanf("%d", &n);
printf("请输入要转换成的进制(2-16):");
scanf("%d", &base);
if (base < 2 || base > 16) {
printf("进制数只能在2到16之间!\n");
return 0;
}
printf("%d转换成%d进制是:", n, base);
conversion(n, base);
printf("\n");
return 0;
}
```
以上代码为 C 语言实现,可以将一个十进制正整数转换为任意进制(2-16)。