花火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 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答