给定程序MODll.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

admin2013-04-02  37

问题  给定程序MODll.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
long fun (int a, int n)
{int j ;
/**************found**************/
   long  s=0,  t=0;
   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("\nPlease enter a and n:");
   scanf("%d%d", &a, &n);
   printf("The value of function is: %ld\n", fun (a, n));
}

选项

答案

解析 (1)当进入第一循环,“t=t*10+a;”语句,如果输入的a是3,并且利用题目中给出的初始化值1,计算得出t的值为13,而实际应该是1,由此可知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;”。
转载请注明原文地址:https://kaotiyun.com/show/1xJp777K
0

最新回复(0)