花火ios 2021-10-16 17:36 采纳率: 100%
浏览 34
已结题

为什么这里不可以用取地址符


/*********************************************************************************
此代码用顺序栈实现非负十进制整数数制转换。
数制转换思路:对十进制的整数 N ,N%2结果放入栈中  N/2结果作为循环判断条件  N==0循环终止

********************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#define MaxSize 30    //栈中元素最大个数  溢出报错

typedef struct {
    int data[MaxSize];
    int top;         //栈顶指针  始终指向栈顶
}SqStack;

//栈的初始化
void InitStack(SqStack &S){
    S.top = -1;
}

//判空
bool EmptyStack(SqStack &S){
    if(S.top == -1)
        return true;
    else
        return false;
}

//判断栈满
bool FallStack(SqStack &S){
    if(S.top == MaxSize-1)
        return true;
    else
        return false;
}

//进栈
void Push(SqStack &S, int x){
    //if(S.top = MaxSize-1)
    //    return false;
    S.top = S.top + 1;
    S.data[S.top] = x;
    //return true;
}

//出栈
void Pop(SqStack &S,int &x){
    //if(S.top == -1)
    //    return false;
    x = S.data[S.top];
    S.top = S.top - 1;
    //return true;
}

//十进制转二进制
void TenConvertTwo(int N){
    SqStack S;
    InitStack(S);
    int e;
    int flag=0;            //栈满标志位 为1说明栈满

    while(N){                    //当N不为0时
        if(FallStack(S)){        //注意 先判断栈满不满  再执行Push操作
            N=0;flag=1;          //栈满  强制停止  置标志位为1
            printf("栈满,无法求出二进制,请输入合法数据\n");
        }
        Push(S,N%2);       //除2所得余数按逆序排列便是二进制
        N=N/2;
    }
    if(flag == 0){
        printf("输入数据的二进制是:");
        while(!EmptyStack(S)){
            Pop(S,e);
            printf("%d",e);
        }
        printf("\n");
    }
}

//十进制转八进制
void TenConvertEight(int N){
    SqStack S;
    InitStack(S);
    int e;
    int flag=0;

    while(N){
        if(FallStack(S)){
            N=0;flag=1;
            printf("栈满,无法求出八进制,请输入合法数据\n");
        }
        Push(S,N%8);       //除8所得余数按逆序排列便是八进制
        N=N/8;
    }
    if(flag == 0){
        printf("输入数据的八进制是:");
        while(!EmptyStack(S)){
            Pop(S,e);
            printf("%d",e);
        }
        printf("\n");
    }
}

//十进制转十六进制
void TenConvertSixteen(int N){
    SqStack S;
    InitStack(S);
    int e;
    int flag=0;

    while(N){
        if(FallStack(S)){
            N=0;flag=1;
            printf("栈满,无法求出十六进制,请输入合法数据\n");
        }
        if(N%16<=9)
            Push(S,N%16);
        else
        switch(N%16){
            case 10:Push(S,'A');break;
            case 11:Push(S,'B');break;
            case 12:Push(S,'C');break;
            case 13:Push(S,'D');break;
            case 14:Push(S,'E');break;
            case 15:Push(S,'F');break;
        }
        N=N/16;
    }
    if(flag == 0){
        printf("输入数据的十六进制是:");
        while(!EmptyStack(S)){
            Pop(S,e);
            if(e>64&&e<71)
                 printf("%c",e);
            else printf("%d",e);
        }
        printf("\n");
    }
}

int main(){
    int e=0;    //输入的值
    printf("请输入一个十进制非负整数:");
    scanf("%d",&e);
    TenConvertTwo(e);
    TenConvertEight(e);
    TenConvertSixteen(e);   //事实上可以用%x直接打印出一个数的十六进制
}

img

  • 写回答

1条回答 默认 最新

  • Linux猿 Linux领域优质创作者 2021-10-16 18:30
    关注

    函数参数那需要是变量,&替换成*,如果传的是地址的话

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月30日
  • 已采纳回答 10月22日
  • 创建了问题 10月16日

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器