问答题 给定程序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函数,不得增行或删行,也不得更改程序的结构!1 #include<stdio.h>2 long fun(int a,int n)3 { int j;4 /**********found**********/5 long s=0,t=1;6 for(j=0;j<n;j++)7 t=t *10+a;8 s=t;9 for(j=1;j<n;j++){10 /**********found**********/11 t=t%10;12 s=s-t;13 }14 return(s);15 }16 main()17 { int a,n ;18 printf(''\nPlease enter a and n:'');19 scanf(''%d%d'',&a,&n);20 printf(''The value of function is:%id\n'',fun(a,n));21 }
【正确答案】正确答案:(1)lonq 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;”。