下列给定程序中, 函数 fun()的功能是: 计算 n 的 5 次方的值(规定 n 的值大于 2 且小于 8), 通过形参指针传回主函数: 并计算该值的个位、 十位、 百位上数字之和作为函数值返回。 例如: 7 的 5 次方是 16807, 其低 3位数的和是 15。
请改正程序指定部位的错误, 使它能得到正确结果。
注意: 不要改动 main()函数, 不得增行或删行, 也不得更改程序的结构。
【试题源程序】
#include<stdio.h>
#include<math.h>
int fun(int n,int *value)
{
int d,s,i;
/**************found************/
d=0;
s=0;
for(i=1;i<=5;i++)d=d*n;
*value=d;
for(i=1;i<=3;i++)
{
s=s+d%10;
/**************found************/
d=d\10;
}
return s;
}
main()
{
int n,sum,v;
do
{
printf("\nEnter n(2<n<8):\n");
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=0;
正确: d=1;
(2) 错误: d=d\10;
正确: d=d/10;
函数的思路是: 先定义两个型变量 d 和 s, 分别用于累乘和累加; 第一个 for 循环用于实现求 n 的 5次方, 用指针返回结果; 第 2 个 for 循环计算个位、 十位和百位数字之和, 用 return 语句返回结果。 实现 fun()函数的功能的关键在于累乘和累加初值的设定及算法的实现。
错误 1: 变量 d 用于保存已经累乘的数并用于下次累乘, 初值不能为 0。 所以 d=0;应改为 d=1;。
错误 2: C 语言中整除的符号是“/” , 不是“\” 。