首页 > 解决方案 > 程序中的额外输出

问题描述

我一直在尝试创建一个程序,如果后续数字的平均值小于该数字,则该程序会在数组中打印一个数字。

这是我写的代码

            #include <stdio.h>

            int main(void) {
                int a,b[100],i,m,av=0,kk,p=0,q;
                scanf("%d",&a);
                for(i=0;i<a;i++)
                {
                    scanf("%d",&b[i]);
                }
                for(i=0;i<a;i++)
                {
                    kk=b[i];

                    for(m=i+1;m<a;m++)
                    {
                        av=av+b[m];
                        p=p+1;
                    }
                    q=av/p;
                    if(kk>q)
                    {
                        printf("%d\n",kk);
                    }
                }
            }

我的输入是 7 - 元素数

(现在是元素)

23

34

12

21

14

26

33

输出应为 34 和 33,但在输出中也显示 26。我一直在试图找出错误,但遇到了死胡同。帮助表示赞赏。谢谢

标签: c

解决方案


**

你犯了两个错误

**

  1. 当 i 指向最后一个元素时,m 正在检查不存在的第 (i+1) 个元素,因此请循环直到最后一个元素。

  2. 对于检查平均值后的每个元素,将 av 和 p 值设为 0。最后打印始终为真的最后一个元素

           #include<stdio.h>
            int main(void) {
                int a,b[100],i,m,av=0,kk,p=0,q=0;
                scanf("%d",&a);
                for(i=0;i<a;i++)
                {
                    scanf("%d",&b[i]);
                }
                for(i=0;i<a-1;i++)
                {
                    kk=b[i];
                    av=0;
                    p=0;
                    for(m=i+1;m<a;m++)
                    {
                        av +=b[m];
                        p +=1;
                    }
                    q = av/p;
                    if(kk>q)
                    {
                        printf("%d ",kk);
                    }
                }
                if(i==a-1)
                {
                    printf("%d ",b[a-1]);
                }
            }
    

推荐阅读