C语言:统计整型变量m中各数字出现的次数,-去掉一个最高分和一个最低分,然后求平均值,(注意最低分和最高分可能有多个数并列)
//统计整型变量m中各数字出现的次数,并存放在数组a中,其中,a[0]存放0出现的次数,a[1]存放1出现的次数。
1 #include <stdio.h> 2 void fun( int m, int a[10]) 3 { int i; 4 for (i=0; i<10; i++) 5 /**********found**********/ 6 a[i] = 0;
7 while (m > 0) 8 { 9 /**********found**********/ 10 i = m%10; 11 a[i]++; 12 /**********found**********/ 13 m = m/10; 14 } 15 } 16 void main() 17 { int m, a[10],i; 18 printf("请输入一个整数 : "); scanf("%d", &m); 19 fun(m, a); 20 for (i=0; i<10; i++) printf("%d,",a[i]); printf("\n"); 21 }
//将一组得分中,去掉一个最高分和一个最低分,然后求平均值,并通过函数返回,函数形参a所指存放得分的数组,形参n存放得分个数。
1 #include <stdio.h> 2 void NONO(); 3 double fun(double a[ ] , int n) 4 { 5 double sum = 0; 6 double min, max; 7 min = max = a[0]; 8 int c=0,b=0; 9 for (int i = 1; i < n; i++) 10 { 11 if (a[i] > max) max = a[i]; 12 if (a[i] < min) min = a[i]; 13 } 14 for (int j = 0; j < n; j++) 15 { 16 if (a[j] == max && c == 0) { c++; continue; }//切记这里,需要设置标志位,因为最大数和最小数有可能有多个并列。 17 if (a[j] == min && b == 0) { b++; continue; } 18 sum += a[j] / (n - 2); 19 } 20 return sum; 21 22 23 } 24 25 void main() 26 { double b[10], r; int i; 27 printf("输入10个分数放入b数组中 : "); 28 for (i=0; i<10; i++) scanf("%lf",&b[i]); 29 printf("输入的10个分数是 : "); 30 for (i=0; i<10; i++) printf("%4.1lf ",b[i]); printf("\n"); 31 r = fun(b, 10); 32 printf("去掉最高分和最低分后的平均分 : %f\n", r ); 33 NONO(); 34 } 35 36 void NONO() 37 {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ 38 FILE *fp, *wf ; 39 int i, j ; 40 double b[10], r ; 41 42 fp = fopen("in.dat","r") ; 43 wf = fopen("out.dat","w") ; 44 for(i = 0 ; i < 10 ; i++) { 45 for(j = 0 ; j < 10 ; j++) { 46 fscanf(fp, "%lf ", &b[j]) ; 47 } 48 r = fun(b, 10) ; 49 fprintf(wf, "%f\n", r) ; 50 } 51 fclose(fp) ; 52 fclose(wf) ; 53 }
//错误解答:
1 double sum = 0; 2 double min, max; 3 min = max = a[0]; 4 for (int i = 1; i < n; i++) 5 { 6 if (a[i] > max) max = a[i]; 7 if (a[i] < min) min = a[i]; 8 } 9 for (int j = 0; j < n; j++) 10 { 11 if (a[j] == max || a[j] == min) continue;//如果最大数最小数有多个时,会出现不准确现象。 12 sum += a[j] / (n - 2); 13 } 14 return sum;
//另一种解答:
1 double sum = 0; 2 double min, max; 3 min = max = a[0]; 4 for (int j = 0; j < n; j++) 5 { 6 if (a[j] > max) max = a[j]; 7 if (a[j] < min) min = a[j]; 8 sum += a[j]; 9 } 10 sum = sum - max - min; 11 return sum/(n-2);