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); 就對了