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);

 

posted @ 2019-03-13 15:43  小大大小  阅读(2112)  评论(0编辑  收藏  举报