问答题 下列给定程序中,函数fun的功能是:将一个由八进制数字字符组成的字符串转换成十进制整数。规定输入的字符串最多只能包含S位八进制数字字符。
例如,若输入77777,则输出32767。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int fun(char*p)
{
int n;
/********found********/
n=*p-"o";
p++;
while(*p!=0)
{
/********found********/
n=n*8+*p-"o";
p++;
}
return n;
}
main()
{
char s[6];
int i;
int n;
printf("Enter a string(octal digits):");
gets(s);
if(strlen(s)>5)
{
printf("Error;string too longer!/n/n");
exit(0);
}
for(i=0;s[i];i++)
if(s[i]<"0"||s[i]>"7")
{
printf("Error;%c not is octal digits!/n/n",s[i]);
exit(0);
}
printf("The originl string:");
puts(s);
n=fun(s);
printf("/n%s is convered to intege number:%d/n/n",s,n);
}
【正确答案】
【答案解析】n=*p-"0"; n=n*8*p-"0"; [考点]
本题关键字有:数字和字符转换方法;进制转换方法。各种进制转换为十进制采用按权求和的方法,十进制转换成某进制采用除该进制基数取余的方法。
[解析]
(1)指针D中存放的是数字字符,即数字的ASCII码值,将其减去字符‘0’的ASCII码得到对应的数字,进而完成数字运算。
(2)将八进制数乘以8再加上个位数来完成在一个数后面加上一位的操作。