admin管理员组文章数量:1794759
进制转换器——章节实验作业(C语言链栈)
进制转换器——章节实验作业
【问题描述】十进制数N和其他d进制数的转换是计算机实现计算的基本问题。通常我们可以使用短除法进行转换,基本原理为:N=(N div d)*d+N mod d(其中:div为整除运算,mod为求余运算)。短除法最先计算得出的余数为进制转换后的低位,最后计算得出的余数为进制转换后的高位,计算顺序和输出顺序相反,而栈具有后进先出的固有特性,致使栈成为程序设计中的有用工具我们。请使用栈的链式存储结构,设计一个程序,解决十进制转换成其他进制的问题。 【基本要求】数制转换计算器 输入任意一个非负十进制整数N,输入将要转换的进制数d, 打印输出与N等值的d进制数。 用户可实时退出程序。 【测试数据】 输入两个整数:十进制数1348和要转换的进制8 输出:十进制转换成的八进制数为2504 输入两个整数:十进制数1348和要转换的进制16 输出:十进制转换成的八进制数为544 输入两个整数:十进制数1348和要转换的进制2 输出:十进制转换成的二进制数为101 0100 0100
#include<stdio.h> #include<stdlib.h> #include<stdbool.h> #include<windows.h> typedef int ElemType; typedef struct linknode { ElemType data; struct linknode* next; }LinkStNode; void Menu() { printf("\\t数制转换计算器\\n\\n"); printf("\\t1.转换\\t2.退出\\n"); } void InitStack(LinkStNode **s) { *s = (LinkStNode*)malloc(sizeof(LinkStNode)); (*s)->next = NULL; } void Push(LinkStNode* s, ElemType e) { LinkStNode* p; p = (LinkStNode*)malloc(sizeof(LinkStNode)); p->data = e; p->next = s->next; s->next = p; } bool Pop(LinkStNode* s, ElemType* e) { LinkStNode* p; p = s->next; if (p == NULL) return false; *e = p->data; s->next = p->next; free(p); return true; } void Turn_Scale() { int n, temp, j=1, flag=1, i; ElemType e; LinkStNode *s; InitStack(&s); //注意指针传递问题 printf("请输入需要转换进制的数:"); scanf("%d", &e); printf("请输入转换的进制:"); scanf("%d", &n); while (flag != 0) { flag = e / n; temp = e % n; e = flag; Push(s,temp); } printf("转换的%d进制数为:", n); while (s->next!=NULL) { Pop(s, &e); printf("%d", e); } printf("\\n输入0结束打印!\\n"); scanf("%d", &j); if (j == 0) return; } int main() { int n; while (1) { system("cls"); Menu(); printf("\\n请输入相关序号:\\n"); scanf("%d", &n); switch (n) { case 1: Turn_Scale(); break; case 2: system("cls"); exit(0); break; default: printf("输入有误!\\n"); Sleep(2000); break; } } return 0; }版权声明:本文标题:进制转换器——章节实验作业(C语言链栈) 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686576540a83705.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论