阅读以下说明和C代码,将应填入(n)处的字句写在对应栏内。 【说明】 函数MultibaseOutput(long n,int B)的功能是:将一个无符号十进制整数n转换成 B(2≤B≤16)进制数并输出。该函数先将转换过程中得到的各位数字入栈,转换

admin2009-02-15  26

问题 阅读以下说明和C代码,将应填入(n)处的字句写在对应栏内。
【说明】
   函数MultibaseOutput(long n,int B)的功能是:将一个无符号十进制整数n转换成 B(2≤B≤16)进制数并输出。该函数先将转换过程中得到的各位数字入栈,转换结束后再把B进制数从栈中输出。有关栈操作的诸函数功能见相应函数中的注释。C代码中的符号常量及栈的类型定义如下:
   #define MAXSIZE 32
   typedef struct {
       int * elem;      /*栈的存储区*/
       int max;         /*栈的容量,即栈中最多能存放的元素个数*/
       int top;         /*栈顶指针*/
   }Stack;
   【代码】
   int InitStack(Stack * S,int n)     /*创建容量为n的空栈*/
   {  S -> elem = (int*) malloc(n*sizeof(int));
      if(S -> elem == NULL) return-1
      S->max=n;(1)=0;return 0;
   }
   int Push (Stack * s,int item)      /*将整数item压入栈顶*/
   {  if(S->top==S->max){printf("Stack is full! \n");return-1;}
       (2)= item; return 0
   }
   int StackEmpty(Stack S) { return(! S. top)? 1:0; }/*判断栈是否为空*/
   int Pop(Stack * S)          /*栈顶元素出栈*/
   {  if(! S->top) { printf("Pop an empty stack! \n") ;return -1;}
      return  (3);
   }
   void MultibaseOutput(long n,int B)
   {  int m;Stack S
      if (InitStack(&S, MAXSIZE)) {printf ("Failure! \n"); return;}
      do {
          if( Push( &S,(4))){printf("Failure! \n"); return;}
          n=(5);
      }while(n!=0);
      while(!StackEmpty(S)){       /*输出B进制的数*/
           m = Pop(& S);
          if(m<10) printf("%d",m) ;/*小于10,输出数字*/
          else printf("%c",m+55);  /*大于或等于10,输出相应的字符*/
      }
      printf( "\n") ;
   }

选项

答案(1)S->top (2)S->elem[S->top++] (3)S->elem[--S->top] (4)n%B (5)n/B

解析 (1)此处初始化栈顶指针,即S->top=0。(2)此处语句是入栈操作,即先将入栈元素放入栈顶,然后修改栈顶指针。(3)此处语句是出栈操作,即修改栈顶指针,然后弹出栈顶元素。(4)此处语句求得将要入栈的数字,即用n%B得到B进制下第一位数字。(5)此处语句修改n的大小以继续求得更高位的数字。
转载请注明原文地址:https://kaotiyun.com/show/sojZ777K
0

最新回复(0)