问题 填空题

字符串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[i]=0; sum=*p-’0’; p++; while (*p) { sum= 【1】 ; p++; } i=0; while(sum!=0) {xx[i]= 【2】 ; 【3】 ;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];i++)if(str[i]<’0’||str[i]>’9’){ printf("Error:%c not is ’0’ to ’9’ digits character!\n\n", str[i]); 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[i]); }

答案

参考答案:[1] sum*x+*p-’0’ [2] sum%y [3] sum=sum/y

解析: 填空1:为了进行数字运算,必须要将字符串中的数字字符转换为数字,用数字字符减去字符’0’的ASCII码,就得到对应的数字。将x进制数转换为十进制数的算法是:以1001为例,对应的十进制数为l*x3+0*x2+O*x+1=x*(x*(x*1+0)+0)+1。填空2:将十进制数转换为y进制数的算法与将y进制数转换为十进制数的算法正好相反,十进制数对y取余,得到y进制数的最低位。填空3:将十进制数整除y后得到的数,再对y取余,则得到y进制数的次低位,如此循环,得到y进制数的各位,转换的结果存于数值xx[N]中。

单项选择题
单项选择题