M016

02-程序修改题 软件154 范金瑞 986浏览

所属年份:2011.9;

下列给定程序中函数fun的功能是:将一个由八进制数字字符组成的字符串转换成十进制整数。规定输入的字符串最多只能包含5位八进制数字字符。
例如,若输入77777,则输出32767。

请改正程序中的错误,使它能得出正确结果。
注意:部分源程序在文件MODI1.C中,不得增行或删行,也不得更改程序的结构。

#include <stdio.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 (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) “0”和”1″是字符串中的数字字符,为了进行数字运算,必须要将数字字符转换为数字,用数字字符减去字符’0’的ASCII码,就得到对应的数字。题中给出的是”o”,不是”0″。
(2) 要在一个八进制数的最后加上一位,原来各个位上的数上升一位,只需将原数乘以8再加上个位数。

【解题宝典】
各种进制之间转换方法需要掌握,二进制数、八进制数、十六进制数转换为十进制数采取按权求和的方法;十进制数转换为二进制数、八进制数、十六进制数采取除2/8/16取余方法来实现。