问答题
给定函数MODI1.C中函数fun的功能是:将一个由八进制数字字符组成的字符串转换为与其面值相等的十进制整数。规定输入的字符串最多只能包含5位八进制数字字符。
例如,若输入:77777,则输出将是:32767。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
in fun(char *p)
{ int n;
/**********found**********/
n=*p-"o";
p++;
while(*p!=0) {
/**********found**********/
n=n*8+*p-"0";
p++;
}
return n;
}
main()
{ char s[6]; int i; int n;
printf("Enter a string(Ocatal 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 ocatal digits!/n/n", s[i]); exit(0);}
printf("The original string:"); puts(s);
n=fun(s);
printf("/n%s is convered to integer number:%d/n/n", s, n);
}
【正确答案】
【答案解析】(1)n=*p-"0"; (2)n=n*8+*p-"0";
答案考生文件夹 [解析] 函数功能是实现八进制到十进制的转换。
(1)第一个标识下面:语句“n=*p-"o"; ”中的"o"不是数字零,而是字母"o",根据前面的分析因此改为:“n=*p-"0"; ”。
(2)第二个标识下面:语句“n=n*8+*p-"o"”,首先进行同(1)相同的修改,变量p没有定义,根据题意要求这里应该是“*p-"0"”,所以此句改为:“n=n*8+*p-"0"; ”。
[考点] while循环控制、数据类型和常量、变量。