C语言:统计整型变量m中各数字出现的次数,-去掉一个最高分和一个最低分,然后求平均值,(注意最低分和最高分可能有多个数并列)

//统计整型变量m中各数字出现的次数,并存放在数组a中,其中,a[0]存放0出现的次数,a[1]存放1出现的次数。

 #include  <stdio.h>
void fun( int m, int a[])
{ int i;
for (i=; i<; i++)
/**********found**********/
a[i] = ;
while (m > )
{
/**********found**********/
i = m%;
a[i]++;
/**********found**********/
m = m/;
}
}
void main()
{ int m, a[],i;
printf("请输入一个整数 : "); scanf("%d", &m);
fun(m, a);
for (i=; i<; i++) printf("%d,",a[i]); printf("\n");
}

 
 

//将一组得分中,去掉一个最高分和一个最低分,然后求平均值,并通过函数返回,函数形参a所指存放得分的数组,形参n存放得分个数。

 #include  <stdio.h>
void NONO();
double fun(double a[ ] , int n)
{
double sum = ;
double min, max;
min = max = a[];
int c=,b=;
for (int i = ; i < n; i++)
{
if (a[i] > max) max = a[i];
if (a[i] < min) min = a[i];
}
for (int j = ; j < n; j++)
{
if (a[j] == max && c == ) { c++; continue; }//切记这里,需要设置标志位,因为最大数和最小数有可能有多个并列。
if (a[j] == min && b == ) { b++; continue; }
sum += a[j] / (n - );
}
return sum; } void main()
{ double b[], r; int i;
printf("输入10个分数放入b数组中 : ");
for (i=; i<; i++) scanf("%lf",&b[i]);
printf("输入的10个分数是 : ");
for (i=; i<; i++) printf("%4.1lf ",b[i]); printf("\n");
r = fun(b, );
printf("去掉最高分和最低分后的平均分 : %f\n", r );
NONO();
} void NONO()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *fp, *wf ;
int i, j ;
double b[], r ; fp = fopen("in.dat","r") ;
wf = fopen("out.dat","w") ;
for(i = ; i < ; i++) {
for(j = ; j < ; j++) {
fscanf(fp, "%lf ", &b[j]) ;
}
r = fun(b, ) ;
fprintf(wf, "%f\n", r) ;
}
fclose(fp) ;
fclose(wf) ;
}

//错误解答:

     double sum = ;
double min, max;
min = max = a[];
for (int i = ; i < n; i++)
{
if (a[i] > max) max = a[i];
if (a[i] < min) min = a[i];
}
for (int j = ; j < n; j++)
{
if (a[j] == max || a[j] == min) continue;//如果最大数最小数有多个时,会出现不准确现象。
sum += a[j] / (n - );
}
return sum;

//另一种解答:

     double sum = ;
double min, max;
min = max = a[];
for (int j = ; j < n; j++)
{
if (a[j] > max) max = a[j];
if (a[j] < min) min = a[j];
sum += a[j];
}
sum = sum - max - min;
return sum/(n-);
上一篇:Android中获取目标布局文件中的组件


下一篇:从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)