/* 以下程序实现的功能为对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数 */最后main函数里要填什么

/* 以下程序实现的功能为对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数 */
最后main函数里要填什么?

#include
 #include
 #include 
 #include 
 #include 
 #include 
 #include 

 #include /* exit() */
 #define TRUE 1
 #define FALSE 0
 #define OK 1
 #define ERROR 0
 #define INFEASIBLE -1
 #define OVERFLOW -2
 
 typedef int Status; 
 typedef int Boolean; 
 typedef int SElemType; 

/*栈的顺序存储表示 */
 #define STACK_INIT_SIZE 10 
 #define STACKINCREMENT 2
 
 typedef struct
 {
    SElemType *base;
    SElemType *top;
    int stacksize;                //填写语句
    
   
 }SqStack;

Status InitStack(SqStack *S)   //初始化顺序栈 
{
    (*S).base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
    if(!(*S).base) exit(OVERFLOW);
    (*S).top=(*S).base;
    (*S).stacksize=STACK_INIT_SIZE;
    return OK;
}

Status DestroyStack(SqStack *S)
 { 
   free((*S).base);
   (*S).base=NULL;
   (*S).top=NULL;
   (*S).stacksize=0; 
   return OK;
 }

 Status ClearStack(SqStack *S)
 {                     
    S->top = S->base;                   //填写一条语句
    return OK;
 }

 Status StackEmpty(SqStack S)
 { 
   if(S.top==S.base||S.top//括号内补充完整
     return TRUE;
   else
     return FALSE;
 }

 int StackLength(SqStack S)
 { 
   return S.top-S.base;
 }

 Status GetTop(SqStack S,SElemType *e)
 {
   if(S.top>S.base)
   {
     *e=*(S.top-1);
     return OK;
   }
   else
     return ERROR;
 }

 Status Push(SqStack *S,SElemType e)
 {
   if((*S).top-(*S).base >= (*S).stacksize)    //补充完整判断条件表达式
   {
     (*S).base = (SElemType *)realloc ((*S).base,((*S).stacksize + STACKINCREMENT)*sizeof(SElemType));                                                             //填写一条语句
     if(!(*S).base)
       exit(OVERFLOW); 
     (*S).top= (*S).base + (*S).stacksize; 
     (*S).stacksize +=STACKINCREMENT;                                   //填写两条语句
     
   }
   *((*S).top)++=e;
   return OK;
 }

 Status Pop(SqStack *S,SElemType *e)
 { 
    if((*S).top==(*S).base )    //补充完整判断条件表达式
     return ERROR;
   *e=*--(*S).top;
   return OK;
 }
 void conversion() /* 算法3.1 */
 { 
   SqStack s;
   unsigned n;
   SElemType e;
   InitStack(&s);
   printf("n(>=0)=");
   scanf("%u",&n); 
   while(n) 
   {
     Push(&s,n%8);                  //填写一条语句
     n=n/8;
   }
   while(!StackEmpty(s)) 
   {
     Pop(&s,e);                  //填写一条语句
     printf("%d",e); 
   }
   printf("\n");
 }

 main()
 {
                         //填写一条语句
   getch();         
 }


conversion();

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/1057364
  • 除此之外, 这篇博客: 为什么要学习汇编代码一(更加深刻理解芯片的启动流程)中的 __main 函数到底运行了什么东西? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 由于__main 是编译器自带的库函数很难找到源码,如果你懂汇编就能很清楚知道这个问题。我们通过fromelf工具获取到汇编文件,参考日下图的文章进行操作。
    在这里插入图片描述
    这类给一个典型的操作方式,鼓励大家从参考的文档中找到方法,鼓励培养英文的阅读能力。

    在这里插入图片描述
    我们在看看具体的汇编代码:
    在这里插入图片描述
    从大的轮廓能看到__main 函数是完成了,主栈指针的初始化,全局变量的初始化(典型的是把RW变量搬到ram,把ZI段在RAM初始为零),然后跳转的main函数,由于这块内容比较多,我着重解析如几点:
    1、主栈的指针是存放在0地址,为什么软件读取主栈指针不从0地址读取呢?
    在这里插入图片描述
    原因:0地址的内容和软件读取的0x364的内容是一样的,为什么这样做还不知道。

    2、下图是main函数地址,上图第三步跳转的是0xa92d,实际的main函数是0xa92c。
    在这里插入图片描述
    原因:thumb 指令需要最低为1,区分thumb 指令和arm 指令,实际执行的时候减一。
    在这里插入图片描述