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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM