//p50.c --- ¦p¤§«e¦U½d¨Ò, ­n¥Î¥ß©e¤uµ{Âà¥]·§©À: ¥t¼gfunction°µ¿é¤J ! // ½Ð®³³o­Ó¥h§ï, ¼g¤J¾Ç¸¹©m¦W, ¨Ã¥Bµù©ú³Ì«á­×§ï®É¶¡ // we wrote a ¥iŪ¤Jlong¾ã¼Æªº¨ç¼Æ(function) long getLong( ); // µM«á¨C¦¸­nŪ¨ú¤@­Ó¾ã¼Æ´N ¡§¥s¡¨ (Call) ¥¦À°¦£°µ ! // ½Ð¬G·N¿é¤J 2 ©Î 38 ¬Ý¬Ý·|«ç¼Ë? /// ¾Ç¸¹: ©m¦W: /// Last modified date and time: /// Original creation date and time: 2010/10/11 16:15 //////////// #include #include #define N_MAX 19 int n; // ª`·N³o n ¬O int, ¥H«e¬O¥Î long, ²{¦b¬G·N§ï¥Î int // (ª`·N) atol( ), atoi( ), ¥H¤Î atof( ) ³£«Å§i¦b long getLong(void); // ¥ý«Å§i(Án©ú)·|¼g¤@­Ó getLong( ) function ƒº void magOdd(int); // for ©_¼Æ¶¥ Magic Square void mag4k(int); // for order = 4k where k = 1, 2, 3, ... void ggyy(int n) { printf("Sorry, can NOT process order n = %d\n", n); printf(" Please try order = 3.. %d\n", N_MAX); } int main( ) { // ¤j¦h¼Æ main program ³£³o¼Ë¶}ÀY for( ;; ) { // (ª`·N) Loop forever printf("Magic Square of order n, Give me n: "); n = (int)getLong( ); // ¼g¦¨¨ç¼Æ(function;¨ç¦¡)¬O«Ü¦nªº²ßºD if(feof(stdin)) n = -1; // force to terminate if EOF if(n == 0) n = 4; // default order = 4 for fun :-) if( n < 0 ) break; // ­Y¬O­t¼Æ´N°± ! ª`·N¥i§ï¥Î§Oªº¤èªk if((n < 3) || (n > N_MAX) ) { // n ¤£²Å¦X³W©w ! ggyy(n); continue; // will goto top of the Loop, §Y for(;;) } if( (n%2) == 1) magOdd(n); // ©_¼Æ¶¥ else if( (n%4) == 0) mag4k(n); // order = 4k where k=1,2,... else { ggyy(n); // ·Q¤@·Q, why ¦¹³B¤£»Ý¥Î continue; ??? } // (ª`·N) ¥i¥H°Ý user ­n¤£­nÄ~Äò? } // while printf("Bye bye!\nHit RETURN key ..."); getchar( ); // ¥ø¹ÏŪ¨ú¤@­Ó char, Åýµ{¦¡°±µÛµ¥ User «ö RETURN Áä return 0; // §iª¾§@·~¨t²Î(OS)ªí¥Ü§Ú­Ì³o¥Dµ{¦¡¥¿±`µ²§ô }// main( long getLong( ) { // ¥H«á­n§ï¿é¤Jªº¤èªk¥u­n§ï³o function ´N¥i :-) static char buf[99]; // a string buffer for input; why "static" ? double ans; 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; } int x[N_MAX][N_MAX]; // ¼g¦b³o ¥Dµ{¦¡ main( ) ¬Ý¤£¨ì :-) int i, j, k; // µ¹¥H¤U functions ¥Î©ó Loop ±±¨îÅÜ¼Æ :-) //.. ·íµM¤]¥i¥H¦b functions ¤º¦Û¤v¥t¥~©w¸qÅÜ¼Æ void magOdd(int n) { // ¥i¥H¥Î¤W­±ªº int x[ ] [ ] printf("Magic square of ORDer = %d\n", n); }// magOdd( /// ///////// void mag4k(int n) { // ¥i¥H¥Î¤W­±ªº int x[ ] [ ] printf("Magic square of order = %d\n", n); }// mag4k( /****** D:\testc>path c:\Dev-Cpp\bin;%path% D:\testc>gcc p50.c D:\testc>a Magic Square of order n, Give me n: 2 Sorry, can NOT process order n = 2 Please try order = 3.. 19 Magic Square of order n, Give me n: 38 Sorry, can NOT process order n = 38 Please try order = 3.. 19 Magic Square of order n, Give me n: 5 Magic square of ORDer = 5 Magic Square of order n, Give me n: 4 Magic square of order = 4 Magic Square of order n, Give me n: -1 Bye bye! Hit RETURN key ... D:\testc> **********************/