(1) 定义1个一维数组:int arr[10],然后从键盘输入10个整数,编程求出其最大值、最小值以及平均值,并在

经过多次改正,结果如下,可是结果仍然不对,求解答,急急急。。。
#include<stdio.h>
void main()
{
int arr[10];
int max=arr[0];
int min=arr[9];
int sum=0;
int i;
float ave;
printf("请输入十个数:\n");
for(i=0;i<=9;i++)
scanf("%d",arr+i);
for(i=0;i<=9;i++)
{
if(max<arr[i])
max=arr[i];
}
for(i=9;i>=0;i--)
{
if(min>arr[i])
min=arr[i];
}
for(i=0;i<=9;i++)
{
sum=sum+arr[i];
ave=sum/10;
}
printf("%d,%d,%f\n",max,min,ave);

}

#include<stdio.h>
void main()
{
int arr[10];
int i,max,min,sum = 0;
float ave;
printf("请输入十个数:\n");
for(i = 0; i < 10; i++)
{
scanf("%d",arr+i);
if(i == 0)max = min = arr[i]; /*输入第一个数时把这个数赋值给最大值和最小值*/
else /*否则比较当前数是否比当前最大数大,是否比最小数小*/
{
max = arr[i] > max ? arr[i] : max;/*比当前最大数还要大,则把当前数复制给最大值*/
min = arr[i] < max ? arr[i] : min;/*比当前最小数还要小,则把当前数复制给最小值*/
}
sum = sum + arr[i];
}
ave = sum / 10.0;
printf("max: %d\nmin: %d\nave: %.2f\n",max,min,ave);
}追问

可是结果为什么总是运行不对呢,很纳闷??

追答

首先,你的max=arr[0]; min=arr[9];放错了地方,怎么可以在对数组赋值之前就用数组成员对max和min赋值呢!!!这样你得到的数据是随机的整形!!!在程序设计里面这样的语句几乎必然会出现逻辑错误!!!
其次,ave的结果不对的原因是语句ave = sum / 10;假设数组为{1,2,3,4,5,6,7,8,9,0},那么sum = 45;是一个整形,除数10也是一个整形,那么sum/10的结果也会是一个整形(4),把4赋值给ave的结果是(4.000000),导致逻辑错误!!! 而改为ave = sum / 10.0;情况就不一样了,sum还是(45),但是现在的除数是10.0(浮点数),系统会把sum转换成浮点型(45.000000)参与运算,得到的结果也是浮点型(4.500000)!!!
还有啊ave = sum / 10.0;只需要执行一次,你放在里面执行了10次,虽然最后结果是没错的,但是很浪费运行时间,其位置应该放在那个for的外面!!!
不要意思,批评一下你啊, 这个程序写的确实不怎么样,一个这样的程序,你用了4个for,大大增大的代码量,加大了运行时间,实在不符合程序设计的理念!!!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-14
int max=arr[0];
int min=arr[9];
这两个赋值语句应该放在
for(i=0;i<=9;i++)
scanf("%d",arr+i);
语句的后面,否则max和min的初值根本不是输入的数值
第2个回答  2012-06-02
平均数求解有问题
原作: for(i=0;i<=9;i++)
{
sum=sum+arr[i];
ave=sum/10;
}
改为
for(i=0;i<=9;i++)
{
sum=sum+arr[i];
}
ave=sum/10;
只有把sum在for循环里求出总和,才能求得ave
相似回答