最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

3

运维笔记admin73浏览0评论

3

3

3-2 数制转换计算器 (100 分)

十进制数N和其他d进制数的转换是计算机实现计算的基本问题。通常我们可以使用短除法进行转换,基本原理为:(其中:div为整除运算,mod为求余运算)。短除法最先计算得出的余数为进制转换后的低位,最后计算得出的余数为进制转换后的高位,计算顺序和输出顺序相反,而栈具有后进先出的固有特性,致使栈成为程序设计中的有用工具我们。请使用栈的链式存储结构,设计一个程序,解决十进制转换成其他进制的问题。 数制转换计算器 (1)输入任意一个非负十进制整数n (2)打印输出与N等值的2进制数。

函数接口定义: 数据类型的定义:#define TRUE 1#define FALSE 0#define Stack_Size 50#define StackElementType int/*顺序栈*/typedef struct{ StackElementType elem[Stack_Size]; /*用来存放栈中元素的一维数组*/ int top; /*用来存放栈顶元素的下标,top为-1表示空栈*/}SeqStack;需要完成的接口:void Conversion(int N); /*对于任意的一个非负十进制数N,打印出与其等值的二进制数*/ 裁判测试程序样例: #include <stdio.h> #define TRUE 1#define FALSE 0#define Stack_Size 50#define StackElementType int/*顺序栈*/typedef struct{ StackElementType elem[Stack_Size]; /*用来存放栈中元素的一维数组*/ int top; /*用来存放栈顶元素的下标,top为-1表示空栈*/}SeqStack;/*初始化*/void InitStack(SeqStack *S);int IsEmpty(SeqStack *S); /*判断栈S为空栈时返回值为真,反之为假*//*判栈满*/int IsFull(SeqStack *S);/*判断栈S为满栈时返回值为真,反之为假*/int Push(SeqStack *S,StackElementType x);int Pop(SeqStack *S,StackElementType *x);/*取栈顶元素。*/int GetTop(SeqStack *S,StackElementType *x);void Conversion(int N); /*对于任意的一个非负十进制数N,打印出与其等值的二进制数*/int main(){ int n; scanf("%d",&n); Conversion(n); return 0;}/*初始化*/void InitStack(SeqStack *S){ /*构造一个空栈S*/ S->top = -1;}/*判栈空*/int IsEmpty(SeqStack *S) /*判断栈S为空栈时返回值为真,反之为假*/{ return(S->top==-1?TRUE:FALSE);}/*判栈满*/int IsFull(SeqStack *S) /*判断栈S为满栈时返回值为真,反之为假*/{ return(S->top==Stack_Size-1?TRUE:FALSE);}int Push(SeqStack *S,StackElementType x){ if(S->top==Stack_Size-1) return(FALSE); /*栈已满*/ S->top++; S->elem[S->top] = x; return(TRUE);}int Pop(SeqStack *S,StackElementType *x){ /* 将栈S的栈顶元素弹出,放到x所指的存储空间中 */ if(S->top == -1) /*栈为空*/ return(FALSE); else { *x = S->elem[S->top]; S->top--; /* 修改栈顶指针 */ return(TRUE); }}/*取栈顶元素。*/int GetTop(SeqStack *S,StackElementType *x){ /* 将栈S的栈顶元素弹出,放到x所指的存储空间中,但栈顶指针保持不变 */ if(S->top == -1) /*栈为空*/ return(FALSE); else { *x = S->elem[S->top]; return(TRUE); } }/* 请在这里填写答案 */void Conversion(int N) //十进制转换{} 输入样例:

在这里给出一组输入。例如:

20 输出样例:

在这里给出相应的输出。例如:

10100  接口实现: void Conversion(int N) /*对于任意的一个非负十进制数N,打印出与其等值的二进制数*/{ SeqStack S; StackElementType x; /*S为顺序栈或链栈*/ InitStack(&S);while(N>0){ x=N%2; Push(&S, x); N=N/2; }while(!IsEmpty(&S)){ Pop(&S,&x); printf("%d",x); }}

 

3-2 数制转换计算器

发布评论

评论列表(0)

  1. 暂无评论