给定程序MODI1.C中fun函数的功能是:求 s=aa…aa-…-aaa-aa-a (0c处aa…aa表示n个a,a和n的值在1至9之间) 例如a=3,n=6,则以上表达式为: s=333333-33333-3333-333-3

admin2018-09-27  30

问题 给定程序MODI1.C中fun函数的功能是:求
   s=aa…aa-…-aaa-aa-a
   (0c处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:%1d\n’’,fun(a,n));
21  }

选项

答案(1)long s=0, t=0; (2)t=t/10;

解析 函数的功能是求s=aa…aa-…-aaa-a-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;”。
转载请注明原文地址:https://kaotiyun.com/show/b8xp777K
0

最新回复(0)