2

所以这应该是非常基本的,我几乎可以肯定我错过了一些东西,因为我设法编写了更复杂的代码......

代码应该采用正整数并将每个数字与其邻居的平均值写入,用户给出的整数至少为 2 个整数。

所以如果用户给出 a1 a2 a3 a4 输出将是“(a1+a2)/2, (a1+a2+a3)/3,(a2+a3+a4)/3,(a3+a4)/2"但它不限于4个数字,它可以更少或更多。

问题是,当我只有 a1 a2 时,输出是 (a1 +a2)/2, (a1 + a2)/2 代码应该知道是否有 a3,然后决定如何计算第二个? 我确定我在这里遗漏了一些东西,我不知道......我不应该使用比基本更多的东西,我写了一些计算 a1 和 a2 的东西,以防只有输入(a1,a2 ) 但这显然是错误的,因为代码不适用于 a1、a2、a3 等等......

我正在输入代码,尽管它并不接近解决方案,并且即使它的作用也没有被完善:

 #include <stdio.h>
int main()
{
    float num=0.0,num2=-1, nextnum=-1,nextnext=-1, after=0.0,after2=0.0;
    do {
        scanf("%f", &num);
        if (num2==-1)
        {
            scanf("%f", &num2);

        after=num+num2  ;   

        nextnum=num2;
        printf("%4g" , (after/2) );
        }


        after=num+nextnum   ;   


        nextnum=num;


    printf("%4g" , (after/2));

    }           
    while (num>0);
    return 0;

}

任何形式的帮助/建议/指导都会很高兴地被接受..

4

1 回答 1

0

首先,我建议您在每次迭代后编写一个变量表及其值。我做了 3 次迭代,它只计算每 2 个数字的平均值。我不知道这是您的原始代码还是只是其中的一部分,因为您甚至没有使用nextnextafter2变量。但是要解决您最初的问题,您应该else为您的 . 添加一个块if,并向 if 部分添加任何必要的说明。一个可能的解决方案可能是:

do {
    scanf("%f", &num);
    if (num2==-1)
    {
        scanf("%f", &num2);

    after=num+num2  ;   

    nextnum=num;
    nextnext = num2;
    printf("%4g" , (after/2) );
    }
    else {

    after=num+nextnum+nextnext   ;   

    nextnext=nextnum;
    nextnum=num;


    printf("%4g" , (after/2));
    }

}           
while (num>0);

这应该是最后 3 个数字的平均值,您可以在 cicle 之后添加最后 2 个数字的部分,其中while应该包含 cicle 之后的最后 2 个输入数字nextnumnextnext

于 2012-11-18T17:16:46.200 回答