M071

02-程序修改题 软件154 范金瑞 1604浏览

所属年份:2011.3;

数列中,第一项为3,后一项都比前一项的值增5。下列给定程序中,函数fun的功能是:计算前n(4≤n≤50)项的累计和。在累加过程中把那些被4除后余2的当前累加值放入数组中,符合此条件的累加值的个数作为函数值返回。
例如,当n的值为20时,该数列为3、8、13、18、23、28、…、93、98,符合此条件的累加值应为42、126、366、570、1010。

请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!

#include <stdio.h>
#define    N    20
int  fun(int  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;
    }

    return  j;
}
main()
{
    int  a[N],d,n,i;
    printf("\nEnter  n (4<=n<=50):  ");
    scanf("%d",&n);
    d=fun(n,a);
    printf("\n\nThe result :\n");
    for(i=0; i<d; i++)printf("%6d",a[i]);
    printf("\n\n");
}

【参考答案】

(1)int i,j=0,k,sum;
(2)if(sum%4==2)

【解题思路】
(1)变量j用于控制数组下标,使用前应初始化为0。
(2)这里混淆了”==”与”=”的区别,”==”是比较运算符,”=”是赋值运算符。