数列中,第一项为3,后一项都比前一项的值增5。下列给定程序中,函数fun()的功能是:计算前n(4≤n≤50)项的累计和。在累加过程中把那些被4除后余2的当前累加值放入数组中,符合此条件的累加值的个数作为函数值返回主函数里。如,当n的值为20时,该数列为3

admin2013-06-12  30

问题 数列中,第一项为3,后一项都比前一项的值增5。下列给定程序中,函数fun()的功能是:计算前n(4≤n≤50)项的累计和。在累加过程中把那些被4除后余2的当前累加值放入数组中,符合此条件的累加值的个数作为函数值返回主函数里。如,当n的值为20时,该数列为3,8,13,18,23,28,…, 93,98。符合此条件的累加值应为42,126,366,570,1010。
   请改正程序中的错误,使它能得出正确的结果。
   注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
   试题程序:
   # include <stdio. h>
   # define N 20
   int fun(iht n, int *a)
   /*************found*************/
   { int i, j, k, sum;
    sum=0;
    for(k=3, i=0;i<n; i++, k+=5)
      { sum=sum+ k;
   /************found***************/
        if (sum%4=2)
        a [j++] =sum;
      }
   /*************found**************/
    return j;
   }
   main ( )
   { int a[N],d, n, i;
     printf("\nEnter n(4<=n<=50): ");
      scanf("%d", &n);
    d=fun(n, a);
    printf("\n\n The result :\n ");
    for(i=0;i<d; i++) printf("%6d ",a);
                           printf("\n\n ");
   }

选项

答案(1)错误:int i, j, k, sum; 正确:int i, j=0,k,sum; (2)错误:if(sum%4=2) 正确:if(sum%4=2) (3)错误:return j; 正确:return j++;

解析 按照老办法,我们先看数学思路,该题是一个公差为5的等差数列,简单吧,要是用数学的办法解决也就是一个公式两个符号,迎刃而解,所以这样很有规律的等差数列前n项和用C语言来求的话,也相当简单,关键看细节!  i,k, sum 都分别定义了,那j呢?所以,正确的应该是int i,j=0,k,sum;,再往下看,if(sum%4=2)是在说明题干中“在累加过程中把那些被4除后余2的当前累加值放入数组中,符合此条件的累加值的个数作为函数值返回主函数”,那么“余2”的表示方法呢?不用看就知道应该是if(sum%4==2),后面的返回错误就不提了吧,看看a[j++]=sum;语句,难道还能返回给j吗?
转载请注明原文地址:https://kaotiyun.com/show/crJp777K
0

最新回复(0)