A. 大神,在C语言中怎么在数组中删除最大和最小的元素
先找到最大元素和最小元素下标。 然后把后续的依次前移即可。
比如
intdel_max_min(int*a,intn)
{
intmaxi,mini,i,j;
maxi=mini=0;
for(i=1;i<n;i++)
if(a[maxi]<a[i])maxi=i;
elseif(a[mini]>a[i])mini=i;
for(i=j=0;i<n;i++)
if(i!=maxi&&i!=mini)
a[j++]=a[i];
returnj;
}
返回的是删除后 a中元素个数。
B. C语言问题,任意输入十个数,去掉其中最大值和最小值,求剩余数的平均值,求教~
方法实现有多种:
一、最直观的方式:
1、将输入的十个数,存到数组中;
2、遍历数组,找到最大值和最小值;
3、从数组中将最大值和最小值移除;
4、将剩余的8个数值累加,并将和值除以8,得到平均值;
5、输出结果。
二、优化方式:
分析原始算法,需要循环多次,包括输入,查找最值,移除,累加等。针对此,可以进行优化。
1、查找最大值和最小值可以通过一个循环完成;
2、由于只是要计算最终的平均值,所以可以不从数组移除,而是累加10个数的和值,再减去两个最值;
3、输入时可以不保存数组,而是输入一个处理一个,降低空间开销;
4、输入时可以同时执行累加及查找最值操作。
三、经过优化,代码可以书写如下:
#include<stdio.h>
intmain()
{
floataver=0;
inti,n,max,min;
scanf("%d",&max);
aver=min=max;//输入第一个数,当做初始的最大最小值。此时和值也为该值。
for(i=1;i<10;++i)//循环9次。
{
scanf("%d",&n);//输入剩余9个数。
aver+=n;//累加。
if(max<n)max=n;//查找最大值。
elseif(min>n)min=n;//查找最小值。
}
aver-=min+max;//在和值中减去两个最值。
aver/=8;//计算平均值。
printf("%f ",aver);//输出结果。
return0;
}
C. C语言3个数值 去最大值
因为有数值相等的情况,例如 a=5, b=5, c=2, 按 你书写的条件
if(a > b && a > c) // 得假
printf("最大值为:%d\n", a);
else if(b > a && b > c) // 得假
你得到 c 最大,这就错了。
其实: if(a>b&&b>c||a>c&&c>b)printf("%d",a); 也不对。
如果是: if(a >= b && a >= c) printf("最大值为:%d\n", a); 就对了