//p3e.c --- - ¥Î¤F¥ß©e¤uµ{Âà¥]·§©À: ¥t¼gfunction°µ¿é¤J ! // §Ú©î§Ú©î§Ú©î©î©î -- ¤u§@³£©î¶} ==> ¼g¦¨¨ç¼Æ (function; ¨ç¦¡) // ª`·N³op3e.c ¥Î¼Æ¾Ç¤½¦¡ª½±µºâ²Î­p­È: Åܲ§¼Æ, ¼Ð·Ç®t; /// ½Ð»P p3d.c ¤ñ¸û°µªk, ¤½¦¡ªº³¡¤À­Y¤£À´¥i¥H½Ð±Ð¼Æ¾Ç¨tªº©Î¤Wºô¬d¸ß /// ¨âºØ°µªkµª®×¬Û¦P, ¦ý³o p3e.c ªº°µªk¨ä¹ê¥i¥H¦bŪ¨ú¸ê®Æ®É"¶¶«K"ºâ¥X ///// ªü´N¬O»¡¥i¥H¤£¥²¥Î¨ì array, ///// ¥i¬O¦]¬°²ßÃD³W©w­n­pºâ¦h¤Ö­Ó¤j©óµ¥©ó¥­§¡, ³o´N«D¥Î array ¤£¥iÅo!!! ////// ª`·N sqrt( )»Ý­n // ¦pªG§A¹ï©óÅܲ§¼Æ(variance)©M¼Ð·Ç®t(Standard Deviation)ÁÙ¤£¤ÓÁA¸Ñ, // ¦ý¬O«Ü·QÁA¸Ñ, «ØÄ³¥Î gogle.com ¬d¸ß "normal distribution" ¬Ý¬Ý! «Ü¦³½ì! // ¤]¥i¥H¬d "¤¤¥¡·¥­­©w²z" ¬Ý¬Ý, ©Î¬d"Åܲ§¼Æ" ¤]¥i¬Ý¨ì¬ÛÃö¸ê®Æ! /////////////////////////////////////////////////////////////// // Try to write a function(¨ç¼Æ) long getLong( ); to read a Long int // µM«á¨C¦¸­nŪ¨ú¤@­Ó¾ã¼Æ´N ¡§¥s¡¨ (Call) ¥¦À°¦£°µ ! #include #include #include // (ª`·N) atol( ), atoi( ), ¥H¤Î atof( ) ³£«Å§i¦b long n, nBig; // how many data? nBig: how many bigger than average ? long getLong(void); // ¥ý«Å§i(Án©ú)·|¼g¤@­Ó getLong( ) function ƒº void statistics(void); // Án©ú·|¼g¤@­Ó¨S¦³°Ñ¼Æªºfunction ¥s°µ statistics long x, a[1234]; // ¦¹ÃD³W©w¦Ü¤Ö 999 ­Ó¤¸¯À; x ¬O¼È¦s¥Îªº double sum, s2, avg, variance, std; // ©M, ¥­¤è©M, ¥­§¡, Åܲ§¼Æ, ¼Ð·Ç®t // §âÅܼÆ(Variable)³£¼g¦b©Ò¦³function¥~ªí¥Ü©Ò¦³ function³£¥i¥H¥Î, // ªü´N¬O§Úªº´N¬O§Aªº, ¥s°µ Global variable ¾ãÅéÅÜ¼Æ ©Î ¥þ°ìÅÜ¼Æ // ³o¼Ë´N¤£¥Î³z¹L°Ñ¼Æ¶Ç¨Ó¶Ç¥h! ¤è«K, ¤£¹L±aµÛ¤@¨Ç¦MÀI (talk this later) int main( ) { // ¤j¦h¼Æ main program ³£³o¼Ë¶}ÀY n = nBig = 0; sum = s2 = 0.0; x = getLong( ); // ³z¹L getLong( ) Ū¨ú¾ã¼Æ¨ì x while(x != -1) { // (ª`·N) ³W©w -1 ¬O¥Nªíµ²§ô if( feof(stdin) ) break; // ­Y EOF ¤]­n°± ! (ª`·N) stdin ¬OÁä½L // ÁÙ¦³°Ú, ­Y¤w¸g EOF µo¥Í, getLong( ) ¦^¶Ç¨Óªº¤]¬O¿ùªº !!! a[n] = x; // §â x ©ñ¤J a[ ], ++n; // ¤@©w­n°Oªº³o¼Ë§â n ¥[ 1, ¤£µM·|Åܦ¨¤@ª½©ñ¤J a[0] ??? x = getLong( ); // ³z¹L getLong( ) Ū¨ú¤U¤@­Ó¾ã¼Æ¨ì x } // while; §O§Ñ¤F³o¬O while Loop ¤§ Loop body ªº§À¤Ú //Loop µ²§ô·|¨ì³o¸Ì¨Ó ! printf("Total %d data read.\n", n); statistics( ); // ²Î­pªº¨Æ´N¥æµ¹¥¦ getchar( ); // ·Q¿ìªk¼È°±¤@¤U, ¥H§K¥i¯à°{¤@¤U´N¤£¨£ return 0; // «ö·Ó³W©w, ¥Dµ{¦¡¶·¦^¶Ç 0 §i¶D¨t²Î»¡¥¿±`µ²§ô ! }// main( long getLong( ) { // ¥H«á­n§ï¿é¤Jªº¤èªk¥u­n§ï³o function ´N¥i :-) static char buf[99]; // a string buffer for input; why "static" ? long ans; // ª`·N­Y¥Î atof ­n§ï double; ¨ç¼ÆÀY³¡¤]­n§ï fgets(buf, sizeof(buf), stdin); // stdin ´N¬OÁä½L, ­n°O±o§t¤J ans = atol(buf); // ±q¦r¦ê¤¤Åª¥X long ¾ã¼Æ (long); ////// ­Y¬O¹ê¼Æ´N§â atol §ï¬° atof ³o¤]¬O§O¤H¼g¦nªº¨ç¼Æ(¨ç¦¡) return ans; } void statistics(void) { // ¥i¥H¬Ý¨ì©Ò¦³ Global ¾ãÅéÅܼÆ(¥þ°ìÅܼÆ) // ¥Î Loop ºâ¥XÃD¥Ø³W©wªº¦UºØ²Î­p¸ê®Æ // ÁÙ¤£·|ªº¥ý½m²ß¦L¥X©Ò¦³ 1 ¨ì n ªº©_¼Æ (Hint: k%2 !=0 «h k ´N¬O©_¼Æ) int i, cnt=0; sum = 0; // Global variable s2 = 0; // ¥Î¨Óºâ"¥­¤è©M" (sum of square) for(i=0; i < n; ++i) { sum += a[i]; s2 += a[i] * a[i]; // ­Y¤£À´±o½Ð¤Wºô¬d "Åܲ§¼Æ¤½¦¡" } avg = sum / n; // ª`·N sum »P avg ³£¬O real number ¹ê¼Æ double for(i=0; i < n; ++i) if(a[i] >= avg) ++cnt; // ¥²­n®É§â cnt ¥[ 1 printf("Average ¥­§¡ = %.3f ; >= ¥­§¡ªº¦³ %d ­Ó out of %d ­Ó\n", avg, cnt, n); // §O§Ñ¤F­n¼g³o¨Ç°Ñ¼Æµ¹²Ä¤@­Ó°Ñ¼Æ¤º %f %d %d ¥Î /// variance = s2 - sum*sum / n; //­Y¤£À´±o½Ð¤Wºô¬d "Åܲ§¼Æ¤½¦¡" variance /= n; // ª`·N¤£­n°£¥H (n-1); ¦]¬°¤£¬O ©â¼Ë(sampling) std = sqrt(variance); printf("Åܲ§¼Æ variance = %.3f ; ¼Ð·Ç®t= %.3f\n", variance, std); // ¹J¨ì function §À¤Ú·|¦Û°Ê return; ¦¹¨ç¼Æ¬O void ¨ç¼Æ, ¥i¥H¤£¼greturn; } // statistics( // ¦pªG§A¦³ K&R ½Ò¥», ¥i¬ã¨s½Ò¥»¤º°Q½× atoi »P atof ¨ç¼Æ¬O¦p¦ó¼gªº, // ¥i¥HÅý§A¼W¥[¥\¤O³á ! /************************** D:\testc>path c:\Dev-Cpp\bin;%path% D:\testc> D:\testc>gcc p3e.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 ; ¼Ð·Ç®t= 1.708 D:\testc> D:\testc>gcc p3d.c D:\testc>a 1 2 3 4 5 6 -1 Total 6 data read. Average ¥­§¡ = 3.500 ; >= ¥­§¡ªº¦³ 3 ­Ó out of 6 ­Ó Åܲ§¼Æ variance = 2.917 ; ¼Ð·Ç®t= 1.708 D:\testc> ************ °µ²ßÃDÀ³¸Ó­n¦h´ú¸Õ´X¦¸ !!**************/