//p3f.c --- 這是精簡版 for LAB03 簡單統計題 // 有時候, 我們會覺得事情很簡單, 不必麻煩朋友或他人 ! // 就啥密碗糕都自己來, 就像這個範例, 一切都在 main( ) 內做完 /// 不過, 這種寫法在如 ACM 比賽時是很好 (因為很快寫好), /// 可是, 正常 programming 不太應該這樣寫! /// 所以啊, 這只是讓大家參考, 知道可以有這種懶人寫法 :-) ///// 可是還是要回頭參考前面 p3d.c 和 p3e.c 的方法比較實用! /////////////////////////////////////////////////////////////// #include #include #include // (注意) atol( ), atoi( ), 以及 atof( ) 都宣告在 long n, nBig; // how many data? nBig: how many bigger than average ? long x, a[1234]; // 此題規定至少 999 個元素; x 是暫存用的 double sum, s2, avg, variance, std; // 和, 平方和, 平均, 變異數, 標準差 int main( ) { // 大多數 main program 都這樣開頭 int i, cnt = 0; // count of data >= avg n = nBig = 0; sum = s2 = 0.0; scanf("%ld", &x); // 注意 x 是 long 用 %ld // x = getLong( ); while(x != -1) { // (注意) 規定 -1 是代表結束 if( feof(stdin) ) break; // 若 EOF 也要停 ! (注意) stdin 是鍵盤 // 還有啊, 若已經 EOF 發生, getLong( ) 回傳來的也是錯的 !!! a[n] = x; // 把 x 放入 a[ ], sum += x; // 和 (sum) s2 += x*x; // 平方和 (sum of square) ++n; // 一定要記的這樣把 n 加 1, 不然會變成一直放入 a[0] ??? scanf("%ld", &x); // 注意是小寫 Ld; //x = getLong( ); } // while; 別忘了這是 while Loop 之 Loop body 的尾巴 //Loop 結束會到這裡來 ! printf("Total %d data read.\n", n); avg = sum/n; for(i=0; i < n; ++i) if(a[i] >= avg) ++cnt; /// 只有一句不必{ }夾住 printf("Average 平均 = %.3f ; >= 平均的有 %d 個 out of %d 個\n", avg, cnt, n); // 別忘了要寫這些參數給第一個參數內 %f %d %d 用 /// 直接用公式算 Variance, 然後開根號算 標準差 Standard Deviation variance = s2 - sum*sum / n; //若不懂得請上網查 "變異數公式" variance /= n; // 注意不要除以 (n-1); 因為不是 抽樣(sampling) std = sqrt(variance); printf("變異數 variance = %.3f ; 標準差= %.3f\n", variance, std); getchar( ); // 想辦法暫停一下, 以免可能閃一下就不見 getchar( ); // 有用到scanf( ) 可能會吃掉ENTER, 多寫一次 getchar return 0; // 按照規定, 主程式須回傳 0 告訴系統說正常結束 ! }// main( /************************** D:\testc>path c:\Dev-Cpp\bin;%path% D:\testc> D:\testc>gcc p3f.c D:\memo\Documents\LABs>a 1 2 3 4 5 6 -1 Total 6 data read. Average 平均 = 3.500 ; >= 平均的有 3 個 out of 6 個 變異數 variance = 2.917 ; 標準差= 1.708 D:\testc>a 11 12 13 14 15 16 17 18 -1 Total 8 data read. Average 平均 = 14.500 ; >= 平均的有 4 個 out of 8 個 變異數 variance = 5.250 ; 標準差= 2.291 D:\testc> ************ 做習題應該要多測試幾次 !!**************/