问答题
给定程序MODI1.C中fun函数的功能是:求
s=aa…aa-…-aaa-aa-a
(此处aa…aa表示n个a,a和n的值在1至9之间)
例如a=3,n=6,则以上表达式为:
s=333333-33333-3333-333-33-3
其值是:296298
a和n是fun函数的形参,表达式的值作为函数值传回main函数。
请改正程序中的错误,使它能计算出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include<stdio.h>
long fun(int a, int n)
{int j;
/**********found**********/
long s=0, t=1;
for(j=0; j<n; j++)
t=t*10+a;
s=t;
for(j=1; j<n; j++) {
/**********found**********/
t=t%10;
s=s-t;
}
return(s);
}
main()
{int a, n;
printf("inPlease enter a and n:");
scanf("%d%d", &a, &n);
printf("The value of function is:%ld/n", fun(a, n));
}
【正确答案】
【答案解析】(1)long s=0, t=0;
(2)t=t/10;
答案考生文件夹 [解析] 函数的功能是求s=aa…aa-…-aaa-aa-a。
(1)当进入第一循环,“t=t*10+a; ”语句,如果输入的a是3,并且利用题目中给出的初始化值1,计算得出t的值为13,而实际应该是3,由此可知t的初值设置不正确,不应该是1。所以将“long s=0, t=1; ”改为“long s=0, t=0; ”。
(2)循环中通过语句“t=t%10; ”来获得每一项,每循环一次,t的值应缩小10倍,这里应该用除以10来实现,而不能用“%”求余数。所以将“t=t%10; ”改为“t=t/10; ”。
[考点] for循环结构。