用C语言数组写一个数制转换系统
时间: 2023-12-31 19:05:53 浏览: 88
好的,我可以为您提供一个简单的数制转换系统的代码,使用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语言 实现 利用栈实现数制转换:将十进制数 转换为二进制数输出,其转换方法利用辗转除以2取余数法。 顺序栈初始化栈顶为-1源代码
在C语言中,你可以使用数组作为栈来实现数制转换,这里我会给出一个简单的示例,演示如何将十进制数转换成二进制数。首先,我们需要创建一个栈结构体,然后定义一个函数来执行辗转相除的过程。下面是基本的源代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义栈结构体
typedef struct {
int top; // 栈顶指针
int stack[50]; // 顺序栈,假设最多存储25位二进制数(因为1位对应1个二进制数)
} Stack;
// 初始化栈
void init(Stack* s) {
s->top = -1;
}
// 入栈操作
void push(Stack* s, int value) {
if (s->top < sizeof(s->stack) - 1) {
s->stack[++s->top] = value;
} else {
printf("Stack overflow.\n");
}
}
// 出栈操作
int pop(Stack* s) {
if (s->top >= 0) {
return s->stack[s->top--];
} else {
printf("Stack underflow.\n");
return -1;
}
}
// 将十进制转为二进制并入栈
void decimalToBinary(int num, Stack* s) {
while (num > 0) {
push(s, num % 2);
num /= 2;
}
}
// 打印栈内容(即二进制数)
void printStack(Stack* s) {
int i;
for (i = 0; i <= s->top; ++i) {
printf("%d", pop(s)); // 由于栈是从下往上出栈,所以打印时需要反向
}
printf("\n");
}
int main() {
Stack binaryStack;
init(&binaryStack);
int decimalNum;
printf("Enter a decimal number: ");
scanf("%d", &decimalNum);
decimalToBinary(decimalNum, &binaryStack);
printStack(&binaryStack);
return 0;
}
```
这个程序首先通过`decimalToBinary`函数将输入的十进制数转换成二进制,并依次入栈。最后,`printStack`函数用于打印栈里的二进制数。
c语言用堆栈实现数制转换
下面是用堆栈实现从十进制转换到任意进制的C语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
#define STACK_SIZE 100
typedef struct {
int top;
int data[STACK_SIZE];
} Stack;
// 初始化堆栈
void init(Stack* s) {
s->top = -1;
}
// 判断堆栈是否为空
int is_empty(Stack* s) {
return s->top == -1;
}
// 判断堆栈是否已满
int is_full(Stack* s) {
return s->top == STACK_SIZE - 1;
}
// 压入元素
void push(Stack* s, int x) {
if (is_full(s)) {
printf("Stack overflow.\n");
exit(1);
}
s->data[++s->top] = x;
}
// 弹出元素
int pop(Stack* s) {
if (is_empty(s)) {
printf("Stack underflow.\n");
exit(1);
}
return s->data[s->top--];
}
// 十进制转换为任意进制
void convert(int n, int base) {
Stack s;
init(&s);
while (n > 0) {
int r = n % base;
push(&s, r);
n /= base;
}
while (!is_empty(&s)) {
int r = pop(&s);
if (r < 10) {
printf("%d", r);
} else {
printf("%c", r - 10 + 'A');
}
}
}
int main() {
int n, base;
printf("Enter the number: ");
scanf("%d", &n);
printf("Enter the base: ");
scanf("%d", &base);
printf("%d in base %d is: ", n, base);
convert(n, base);
printf("\n");
return 0;
}
```
该程序首先定义了一个堆栈结构体,其中包含一个整型数组和一个整型变量top,表示栈顶的下标。接着定义了一些堆栈操作函数,包括:初始化堆栈、判断堆栈是否为空、判断堆栈是否已满、压入元素、弹出元素。最后,定义了一个函数convert用于将十进制数n转换为任意进制base,并将结果输出。
在convert函数中,首先创建了一个堆栈s,并将其初始化为空。然后,将n不断除以base,将余数压入堆栈s中,直到商为0。最后,从堆栈s中依次弹出元素并输出,如果弹出的元素小于10,则直接输出,否则输出相应的大写字母。
在main函数中,首先读入要转换的数n和目标进制base,然后调用convert函数进行转换,并将结果输出。
阅读全文