| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 754 人关注过本帖
标题:栈的结构体,实现数制转换
取消只看楼主 加入收藏
zz199200
Rank: 1
等 级:新手上路
帖 子:18
专家分:2
注 册:2011-11-26
结帖率:75%
收藏
 问题点数:0 回复次数:0 
栈的结构体,实现数制转换
//有很多问题,我只想问下栈的函数实现中形参调用怎么总失败,请大家多多帮助,谢谢了


//完成一个非负十进制小数数转换为2、8、16进制
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void conversion(int p,float x);                                //数值转换函数
float Xiao(float x);                                        //取小数

#define OVERFLOW 0                                            //定义栈
#define OK 1
#define ERROR 0

#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
typedef struct{
    float *base;
    float *top;
    int stacksize;
}SqStack;
int InitStack(SqStack &S)                                     //构造空栈
{
    S.base =(float *)malloc(STACK_INIT_SIZE * sizeof(float));
    if(!S.base)
        exit(OVERFLOW);
    S.top = S.base;
    S.stacksize=STACK_INIT_SIZE;
    return OK;
}
int StackEmpty(SqStack &S)                                    //判断栈非空
{
    if(S.top==S.base)
        return error;
}
int Push(SqStack &S,flaot e)                                //插入e为栈顶元素
{
    if(S.top-S.base>=S.stacksize){
        S.base=(float *)realloc(S.base,
            (S.stacksize+STACKINCREMENT)*sizeof(float));
        if(!S.base)
            exit(OVERFLOW);
        S.top=S.base+S.stacksize;
        S.stacksize+=10;
    }
    *S.top++=e;
    return OK;
}
int Pop(SqStack &S,float &e)                                //取出栈顶
{
    if(S.top==S.base)
        return ERROR;
    e=*--S.top;
    return OK;
}

void main()                                                    //主程序
{
    int p;float x;   
    printf("请输入想要转换到的进制:(2、8或16)");            //选择转换到的进制
    scanf("%d",&p);   
    if(p!=2&&p!=8&&p!=16)
        printf("无法进行这种转换!\n");

    printf("请输入想要转换的数据:(大于0的十进制树)");                        //输入要处理的数据
    scanf("%f",&x);
    if(x<0)
        printf("输入数据错误!\n");
    else
        conversion(p,x);
}

float Xiao(float x)                        //取小数
{
    return(x-int(x));
}

void conversion(int p,float x)            //数值转换为p进制,数据为x
{
    int n;float m;
    InitStack(S);InitStack(T);
    n=int(x);m=Xiao(x);
    while(n)                            //整数部分送入栈S
    {
        Push(S,n%p);
        n=n/p;
    }
    while(m)                            //小树部分送入栈T
    {
        Push(T,Zheng(m*p));
        m=Xiao(m*p);
    }
    while(!StackEmpaty(S))                //输出整数部分
    {
        Pop(S,e);
        if(e<10)
            printf("%d",e);
        else
            printf("%c",e+55);            //十六进制输出字母
    }
    printf(".");                        //输出小数点
    for(int i=3;i>0;i--)                //输出小数部分
        {
            Pop(T.e);
            if(e<10)
                printf("%d",e);
            else
                printf("%c",e+55);
        }
    printf("\n");
}
搜索更多相关主题的帖子: conversion 函数 include 结构体 
2013-05-08 12:37
快速回复:栈的结构体,实现数制转换
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012132 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved