阅读以下说明和C程序代码,将应填入______处的语句写在答题纸的对应栏内。 [说明] 函数MultibaseOutput(long n,int B)的功能是:将一个无符号十进制整数n转换成 B(2≤B≤16)进制数并输出。该函数先将转换过程中

admin2007-03-10  61

问题 阅读以下说明和C程序代码,将应填入______处的语句写在答题纸的对应栏内。
   [说明]
   函数MultibaseOutput(long n,int B)的功能是:将一个无符号十进制整数n转换成 B(2≤B≤16)进制数并输出。该函数先将转换过程中得到的各位数字入栈,转换结束后再把B进制数从栈中输出。有关栈操作的诸函数功能见相应函数中的注释。C代码中的符号常量及栈的类型定义如下:
   # define MAXSIZE 32
   typedef struct{
   int * elem;    /* 栈的存储区 */
   int max;       /* 栈的容量,即栈中最多能存放的元素个数 */
   int top;       /* 栈顶指针 */
   }Stack;
   [C代码]
   int InitStack(Stack * S,int n) / * 创建容量为n的空栈 */
   {   S->elem=(int *)malloc(n * sizeof(int));
       if(S->elem==NULL)return-1;
       S->max=n; (1)=O;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(StackS) {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;StackS;
          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

解析 对于一个栈,首先应对它进行初始化,设置它的容量、栈顶等,一般有2种做法:
   (1)top=0。在这种做法下,如果要进行入栈操作,则先将压人栈的元素值赋给栈顶指针所指向的单元,然后栈顶指针加1;如果要进行出栈操作,则将栈顶指针减1,然后将要出栈的元素弹出栈。
   (2)top=-1。在这种做法下,如果要进行入栈操作,则首先将栈顶指针加1,然后把压人栈的元素值赋给栈顶指针所指向的单元;如果要进行出栈操作,则首先将要出栈的元素弹出栈,然后再将栈顶指针减1。
   显然,在本题中使用的是第一种方法。(1)空填写S->top,使S->top=0。这样将整数item压入栈顶的语句为S->elem[S->top++]=item,即(2)空填写 S->elem[S->top++)。出栈操作是返回S->elem[--S->top)t这是(3)空的答案。
   将十进制数n转换为二进制数时,把n除以2的余数压入栈,而用n除以2的商代替 n,依次类推,直到n等于0为止。这时,再把栈中的值一一弹出,就可得到二进制数据。类似地,把十进制数n转换成B进制数的过程也是如此,一般算法描述为(其中S为栈):
   do{
      n%B入栈;
      n=n/B;
   }while(n);
转载请注明原文地址:https://jikaoti.com/ti/2eW7FFFM
0

最新回复(0)