字符串str由数字字符组成(长度不超过5个字符),可看作任意进制的数,请补充函数fun(),该函数的功能是:把 str字符串转换成任意进制的数,结果保存在数组xx中,由函数返回转换后数组腆的实际长度。其中x表示str原来的进制, y表示要转换成的进制。例如

admin2013-06-12  34

问题 字符串str由数字字符组成(长度不超过5个字符),可看作任意进制的数,请补充函数fun(),该函数的功能是:把 str字符串转换成任意进制的数,结果保存在数组xx中,由函数返回转换后数组腆的实际长度。其中x表示str原来的进制, y表示要转换成的进制。例如,输入str=“1111”,x=2,y=10,结果输出:15。如果输入str=“15”, x=10,Y=2,结果输出: 1111。
   注意:部分源程序给出如下。
   请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
   试题程序:
   #include <stdio.h>
   #include<stdlib.h>
   #include<string.h>
   #define N 8
   int xx[N];
   int fun(char *str,int x,int y)
   {
      int sum;
      int i=0;
      char *p=str;
      for(i=0; i<N; i++)
         xx=0;
      sum=*p-’0’;
      p++;
      while (*p)
      {
          sum=【  】;
          p++;
      }
      i=0;
      while(sum!=0)
      {
         xx=【  】;
         【  】;
         i++;
      }
      return i;
   }
   main ()
   {
      char str[6];
      int i;
      int n;
      int x;
      int y;
      printf("Enter a string made up of ’0’ to
             ’9’ digits character:");
      gets(str);
      if(strlen (str) >5)
      {
         printf("Error:string too longer!,
                please input again!\n\n");
         exit(0);
      }
      for(i=0;str;i++)
         if(str<’0’||str>’9’)
         {
             printf("Error:%c not is ’0’ to
             ’9’ digits character!\n\n",
   str);
             exit(0);
         }
     printf("The original string: ");
     puts(str);
     printf("\nINPUT x= ");
     scanf("%d",&x);
     printf("\nINPUT y= ");
     scanf("%d",&y);
     n=fun(str,x,y);
     printf("\n%s is convered to",str);
     for (i=n-1; i>=0; i--)
         printf("%d",xx);
   }

选项

答案sum*x+*p-’0’ sum%y sum=sum/y

解析 第一空:为了进行数字运算,必须要将字符串中的数字字符转换为数字,用数字字符减去字符’0’的ASCII码,就得到对应的数字。将x进制数转换为十进制数的算法是:以1001为例,对应的十进制数为l*x3+0*x2+O*x+1=x*(x*(x*1+0) +0)+1。第二空:将十进制数转换为y进制数的算法与将y进制数转换为十进制数的算法正好相反,十进制数对y取余,得到y进制数的最低位。第三空:将十进制数整除y后得到的数,再对y取余,则得到y进制数的次低位,如此循环,得到y进制数的各位,转换的结果存于数值xx[N]中。
转载请注明原文地址:https://kaotiyun.com/show/PrJp777K
0

最新回复(0)