M070

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

所属年份:2010.9;2011.3

下列给定程序中,函数fun的功能是:计算n的5次方的值(规定n的值大于2且小于8),通过形参指针传回主函数,并计算该值的个位、十位、百位上数字之和作为函数值返回。例如,7的5次方是16 807,其后3位数的和值是15。

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

#include  <stdio.h>
#include  <math.h>
int fun(int n,int *value)
{
    int d,s,i;
    /*************found**************/
    d=0;
    /*************found**************/
    s=1;
    for(i=1; i<=5; i++)
        d=d*n;
    *value=d;
    for(i=1; i<=3; i++)
    {
        s=s+d%10;
        /*************found**************/
        s=s/10;
    }
    return s;
}

void main()
{
    int  n,sum,v;
    do
    {
        printf("\n Enter n(2<n<8):");
        scanf("%d",&n);
    }
    while(n<=2||n>=8);
    sum=fun(n,&v);
    printf("\n\nThe result: \n value=%d sum=%d\n\n" ,v,sum);
}

【参考答案】

(1)d=1;
(2)s=0;
(3)d=d/10;

【考点分析】
本题考查:变量定义;初始化操作。

【解题思路】
(1)此处属于逻辑错误,假如d=0,则d=d*n就不能计算n的5次方,应将d初始化为1。
(2)在for循环中,如果s=1,就改变了d的个位数的值。
(3)s用来求个位、十位、百位的和,d是n的5次方的值,每循环一次d除以10,用来求十位、百位的值。