c语言高手进。。。帮我找找错误,,题目是用数组输入10个数字,然后求最大值最小值和平均数

#include <stdio.h>
main()
{
int arr[10],t,e,i;
float ave;

for (i=0;i<10;i++)
{scanf("输入十个数字:",&arr[i]);
if (arr[i]<=arr[i+1])
{t=arr[i+1]
e=arr[i]
else
t=arr[i]
e=arr[i+1];
}
ave=arr[10]/10;
}

print("最大值为%d\n
最小值为%d\n
平均值为%f\n",t,e,ave);
}

这是你的程序:


#include <stdio.h>

main()

{

    int arr[10],t,e,i;

    float ave; 


    for (i=0;i<10;i++)

    {scanf("输入十个数字:",&arr[i]);  //%d是给变量赋值 应该是时scanf("%d",&arr[i]);

    if (arr[i]<=arr[i+1])                         //相邻两数相比没啥意义,你要用当前数跟之前存在的最大

                                                        //的跟最小的数相比,并赋值

    {t=arr[i+1]                                    //少;    

         e=arr[i]                                   //少; 

    else                                            //else意义不明,在{}里面没有if语句么,你是不是想跟外面那

                                                       // 个if对应,那应该是if{}else{}

        t=arr[i]                                    //少;

    e=arr[i+1];

    }                                                //你的逻辑部分没有循环起来,仅仅比了一下i与i+1,并且i也

                                                    //不知道是多少

    ave=arr[10]/10;                    //数组是从0开始算的,10个数就是arr[0]~arr[9],不存在arr[10],

                                                //就算是你这也仅仅只想除最后一个数,跟求均无关啊。

    }

    

print("最大值为%d\n

     最小值为%d\n

     平均值为%f\n",t,e,ave);

}


我稍微在你的基础上改了下

#include <stdio.h>

main()

{

    int arr[10],t,e,i;

    float ave,sum=0;                  //sum表示和,初值0

    printf("输入十个数字:");         

    for (i=0;i<10;i++)                 //使用循环,给数组arr[]赋10个值

    {    

        scanf("%d",&arr[i]);

    }                              

        for(i=0;i<10;i++)              //使用循环,求和

    {

        sum=sum+arr[i];

    }

    ave=sum/10;                    //ave就是平均数

    t=arr[0];                           //假设第一个数就是最大数t也是最小数e

    e=arr[0];

    for(i=0;i<10;i++)              //循环比较10次,遇到大于t的数,将该数给t,遇到小于e的数,将该

                                           //数给e

    {

        if (arr[i]>=t)

            t=arr[i];

        else if (arr[i]<=t)

            e=arr[i];

    }                                     //我写的比较累赘,很多次的for循环都可以写在一起,减少语句的,

                                          //仅仅为了实现功能,细节你可以在优化

    

printf("最大值为%d\n最小值为%d\n平均值为%f\n",t,e,ave);

}

注意书写细节,跟逻辑循环,你要想假如你是电脑,你读你写的程序,你能读懂么?要按照电脑的逻辑来。比如你的 e=arr[i] else语句,少个;电脑还以为你要给e赋值是arr[i] else,肯定有问题。

效果如图

希望能帮到你

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-31

#include <stdio.h>

void main()

{

int arr[10],t,e,i;

float ave=0; 


for (i=0;i<10;i++)

{   scanf("%d",&arr[i]);//1.scanf里面是不显示汉字的,这是printf的活儿2.%d你忘写了

   if (arr[i]<=arr[i+1])//你的for结构根本就没法筛选出最大值最小值。我帮你验证了一下,见下图片

{  t=arr[i+1];

      e=arr[i];

}

else

t=arr[i];

 e=arr[i+1];

}

ave+=arr[i]/10;


}

    printf("%d%d%f",t,e,ave);

}



把筛选最大值最小只的代码换一下就行了

#include <stdio.h>

void main()

{

int arr[10];

float ave=0; 

 printf("输入十个数字:");

for(int i=0;i<10;i++) 

scanf("%d",&arr[i]);

for(int j=0;j<10;++j)//冒泡排序法,按升序排列

{

for(i=0;i<10-j-1;++i)

{

           if(arr[i]>=arr[i+1])

  { int temp;

  temp=arr[i+1];

  arr[i+1]=arr[i]; 

  arr[i]=temp;

  }

}

}  

for(i=0;i<10;++i)

{

    ave+=arr[i]/10;

}

printf("最大值为%d最小值为%d 平均值为%f",arr[9],arr[0],ave);

}

第2个回答  2013-05-31
#include <stdio.h>
main()
{
int arr[10],t=0,e=0,i;
float ave;

printf("输入十个数字:");
    for (i=0;i<10;i++)
{
    scanf("%d",&arr[i]);
    if(arr[i]>t)
        t=arr[i];
        if(arr[i]<e)
            e=arr[i];
}
ave=(t+e)/2.0;

    printf("最大值为%d\n最小值为%d\n平均值为%f\n",t,e,ave);
}

楼主还是要抓牢基础,你的代码无论语法还是算法都有问题。

第3个回答  2013-05-31
1.scanf输入格式%d
2. t、e 跟数组元素比大小,而非数组相邻元素比大小
3.评价数据是数组元素求和后除以个数
4.arr[10] 是错的,最大下标到9

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网