¹ÝÖáÑæÞãå ¼. ÁãèçæãáÞßïàÖå
°§ø™™z ¶ƒ °ƒzªªz ™ª À
ȁĮµȓĮ 2000
I
ȆǼȇǿǼȋȅȂǼȃǹ 1. 2.
3.
4.
5.
6.
7.
ǼǿȈǹīȍīǾ ................................................................................................................... 1 ȉǹ īǼȃǿȀǹ ȋǹȇǹȀȉǾȇǿȈȉǿȀǹ ȉǾȈ C ....................................................................... 3 2.1 ǺǾȂǹȉǹ īȇǹĭǾȈ Ȁǹǿ ǼȀȉǼȁǼȈǾȈ ȆȇȅīȇǹȂȂǹȉȅȈ ............................... 3 2.2 ǻȅȂǾ ȆȇȅīȇǹȂȂǹȉȅȈ ȉǾȈ C .................................................................... 6 2.3 ȊȁȅȆȅǿǾȈǾ ǹȆȁȍȃ ȆȇȅīȇǹȂȂǹȉȍȃ ....................................................... 7 ǺǹȈǿȀǹ ȈȉȅǿȋǼǿǹ .................................................................................................... 11 3.1 ȉȅ ǹȁĭǹǺǾȉȅ .............................................................................................. 11 3.2 ȅǿ ȁǼȄǼǿȈ....................................................................................................... 12 3.3 ȉǹ ǻǼǻȅȂǼȃǹ .............................................................................................. 13 3.3.1 ȂǼȉǹǺȁǾȉǼȈ ................................................................................... 14 3.3.2 ȈȉǹĬǼȇǼȈ......................................................................................... 14 3.4 Ȉȋȅȁǿǹ ........................................................................................................... 17 ȉȊȆȅǿ - ȂǼȉǹǺȁǾȉǼȈ - ȉǼȁǼȈȉǼȈ ...................................................................... 19 4.1 ȉȊȆȅǿ ǻǼǻȅȂǼȃȍȃ ..................................................................................... 19 4.1.1 ǺǹȈǿȀȅǿ ȉȊȆȅǿ ǻǼǻȅȂǼȃȍȃ......................................................... 19 4.1.2 ȉȇȅȆȅȆȅǿǾȉǼȈ ȉȊȆȍȃ ................................................................. 20 4.2 ǻǾȁȍȈǼǿȈ ȂǼȉǹǺȁǾȉȍȃ ............................................................................ 21 4.3 ȉǼȁǼȈȉǼȈ ...................................................................................................... 22 4.3.1 ǹȇǿĬȂǾȉǿȀȅǿ ȉǼȁǼȈȉǼȈ ................................................................ 22 4.3.2 ȈȊȈȋǼȉǿȈȉǿȀȅǿ Ȁǹǿ ȁȅīǿȀȅǿ ȉǼȁǼȈȉǼȈ ....................................... 24 4.3.3 ȉǼȁǼȈȉǼȈ BIT (BITWISE) ................................................................ 25 4.3.4 ȉǼȁǼȈȉǼȈ ǹȆȅǻȅȈǾȈ ȉǿȂǾȈ (ȀǹȉǹȋȍȇǾȈǾȈ).......................... 26 4.4 ȆǹȇǹȈȉǹȈǼǿȈ ................................................................................................ 27 4.5 ȂǼȉǹȉȇȅȆǼȈ ȉȊȆȍȃ .................................................................................. 27 4.5.1 ǹȊȉȅȂǹȉǼȈ ȂǼȉǹȉȇȅȆǼȈ............................................................ 27 4.5.2 ȇǾȉǼȈ ȂǼȉǹȉȇȅȆǼȈ (CAST) ......................................................... 28 4.6 ȆȇȅȉǼȇǹǿȅȉǾȉǹ ȉǼȁǼȈȉȍȃ...................................................................... 29 4.7 ȆǹȇǹǻǼǿīȂǹȉǹ............................................................................................. 30 4.8 ǹȈȀǾȈǼǿȈ ....................................................................................................... 32 ǼǿȈȅǻȅȈ - ǼȄȅǻȅȈ................................................................................................. 35 5.1 ǼǿȈȅǻȅȈ Ȁǹǿ ǼȄȅǻȅȈ ȋǹȇǹȀȉǾȇȍȃ ........................................................ 35 5.2 ǼǿȈȅǻȅȈ Ȁǹǿ ǼȄȅǻȅȈ ǹȁĭǹȇǿĬȂǾȉǿȀȍȃ................................................ 36 5.3 ȂȅȇĭȅȆȅǿǾȂǼȃǾ ǼǿȈȅǻȅȈ Ȁǹǿ ǼȄȅǻȅȈ ............................................... 37 5.3.1 Ǿ ȈȊȃǹȇȉǾȈǾ printf() ............................................................... 37 5.3.2 Ǿ ȈȊȃǹȇȉǾȈǾ scanf() ................................................................. 39 5.4 ǹȈȀǾȈǼǿȈ ....................................................................................................... 41 ǼȃȉȅȁǼȈ ǼȆǿȁȅīǾȈ Ȁǹǿ ǼȆǹȃǹȁǾȌǾȈ ............................................................. 43 6.1 Ǿ ȈȊȃĬǼȉǾ ǼȃȉȅȁǾ ................................................................................... 44 6.2 Ǿ ǼȃȉȅȁǾ ǼȆǿȁȅīǾȈ if-else .................................................................. 44 6.2.1 ǼȃĬǼȉǼȈ ǼȃȉȅȁǼȈ if ................................................................... 46 6.2.2 ȅ ȉǼȁǼȈȉǾȈ ȈȊȃĬǾȀǾȈ ?:........................................................... 47 6.3 H ǼȃȉȅȁǾ ǼȆǿȁȅīǾȈ switch..................................................................... 47 6.4 Ǿ ǼȃȉȅȁǾ ǼȆǹȃǹȁǾȌǾȈ while ............................................................... 50 6.5 Ǿ ǼȃȉȅȁǾ ǼȆǹȃǹȁǾȌǾȈ do-while ......................................................... 52 6.6 Ǿ ǼȃȉȅȁǾ ǼȆǹȃǹȁǾȌǾȈ for.................................................................... 53 6.6.1 ȅ ȉǼȁǼȈȉǾȈ comma ......................................................................... 55 6.7 ȆǹȇǹǻǼǿīȂǹȉǹ............................................................................................. 56 6.8 ǹȈȀǾȈǼǿȈ ....................................................................................................... 60 ȈȊȃǹȇȉǾȈǼǿȈ .......................................................................................................... 63 7.1 ȅȇǿȈȂȅȈ ȈȊȃǹȇȉǾȈǾȈ ............................................................................... 64 7.1.1 ȆȇȅȉȊȆȅȆȅǿǾȈǾ ȈȊȃǹȇȉǾȈǾȈ................................................... 64 7.1.2 ǹȆȁǼȈ ȈȊȃǹȇȉǾȈǼǿȈ...................................................................... 65 7.2 Ǿ ǼȃȉȅȁǾ return........................................................................................ 66 7.3 ȀȁǾȈǾ ȈȊȃǹȇȉǾȈǾȈ "Ȁǹȉ'ǹȄǿǹ" (by value)............................................... 67 7.3.1 ȈȊȃǹȇȉǾȈǾ ȍȈ ȆǹȇǹȂǼȉȇȅȈ ȈȊȃǹȇȉǾȈǾȈ ............................. 69 7.4 ȉȅȆǿȀǼȈ Ȁǹǿ ȀǹĬȅȁǿȀǼȈ ȂǼȉǹǺȁǾȉǼȈ................................................... 70 7.5 ȀǹĬȅȇǿȈȉǼȈ ȀǹȉǾīȅȇǿǹȈ ǹȆȅĬǾȀǼȊȈǾȈ ............................................. 73 7.6 ȆȇȅȈǻǿȅȇǿȈȉǼȈ ȉȊȆȍȃ .............................................................................. 76
II 7.7 ǻǾȁȍȈǼǿȈ ȂǼȉǹǺȁǾȉȍȃ ............................................................................ 77 7.8 ǹȃǹǻȇȅȂǾ.................................................................................................... 77 7.9 ȂǹĬǾȂǹȉǿȀǼȈ ȈȊȃǹȇȉǾȈǼǿȈ ǺǿǺȁǿȅĬǾȀǾȈ .......................................... 81 7.10 ȆǹȇǹǻǼǿīȂǹȉǹ............................................................................................. 81 7.11 ǹȈȀǾȈǼǿȈ ....................................................................................................... 88 8. ȆǿȃǹȀǼȈ Ȁǹǿ ǹȁĭǹȇǿĬȂǾȉǿȀǹ ............................................................................. 89 8.1 ȆǿȃǹȀǼȈ......................................................................................................... 89 8.1.1 ǻǾȁȍȈǾ ȆǿȃǹȀǹ .............................................................................. 89 8.1.2 ǹȃǹĭȅȇǹ Ȉȉǹ ȈȉȅǿȋǼǿǹ ǼȃȅȈ ȆǿȃǹȀǹ....................................... 89 8.1.3 ȆǿȃǹȀǼȈ Ȇȅȁȁȍȃ ǻǿǹȈȉǹȈǼȍȃ.................................................... 90 8.1.4 ǹȆȅǻȅȈǾ ǹȇȋǿȀȍȃ ȉǿȂȍȃ ȈǼ ȆǿȃǹȀǼȈ...................................... 92 8.1.5 ȆǿȃǹȀǼȈ ȍȈ ȆǹȇǹȂǼȉȇȅǿ ȈǼ ȈȊȃǹȇȉǾȈǼǿȈ.............................. 93 8.1.6 ȉǹȄǿȃȅȂǾȈǾ ȆǿȃǹȀǹ ..................................................................... 96 8.2 ǹȁĭǹȇǿĬȂǾȉǿȀǹ .......................................................................................... 97 8.2.1 ȈȊȃǹȇȉǾȈǼǿȈ ǺǿǺȁǿȅĬǾȀǾȈ īǿǹ ǹȁĭǹȇǿĬȂǾȉǿȀǹ.................... 97 8.3 ȆǹȇǹǻǼǿīȂǹȉǹ........................................................................................... 100 8.4 ǹȈȀǾȈǼǿȈ ..................................................................................................... 106 9. ǹȆǹȇǿĬȂǾȈǼǿȈ, ǻȅȂǼȈ Ȁǹǿ ǼȃȍȈǼǿȈ ............................................................... 109 9.1 ǹȆǹȇǿĬȂǾȈǼǿȈ ........................................................................................... 109 9.2 ǻȅȂǼȈ.......................................................................................................... 111 9.2.1 ǻǾȁȍȈǾ ǻȅȂǾȈ ............................................................................ 112 9.2.2 ǹȃǹĭȅȇǹ Ȉȉǹ ȂǼȁǾ ȂǿǹȈ ǻȅȂǾȈ............................................. 113 9.2.3 ǼȃĬǼȉǼȈ ǻȅȂǼȈ........................................................................... 114 9.2.4 ǹȆȅǻȅȈǾ ǹȇȋǿȀȍȃ ȉǿȂȍȃ ȈǼ ǻȅȂǼȈ....................................... 115 9.2.5 ǻȅȂǼȈ ȍȈ ȆǹȇǹȂǼȉȇȅǿ ȈǼ ȈȊȃǹȇȉǾȈǼǿȈ............................... 115 9.2.6 ȆǿȃǹȀǼȈ ǻȅȂȍȃ ........................................................................... 117 9.3 ǼȃȍȈǼǿȈ ....................................................................................................... 118 9.4 Ǿ ǻǾȁȍȈǾ typedef.................................................................................... 119 9.5 ȆǹȇǹǻǼǿīȂǹȉǹ........................................................................................... 120 9.6 ǹȈȀǾȈǼǿȈ ..................................................................................................... 125 10. ǻǼǿȀȉǼȈ.................................................................................................................. 127 10.1 ǻǾȁȍȈǾ ȂǼȉǹǺȁǾȉǾȈ ǻǼǿȀȉǾ................................................................ 127 10.2 ȉǼȁǼȈȉǼȈ ǻǼǿȀȉȍȃ ................................................................................... 128 10.3 ȆǹȇǹȈȉǹȈǼǿȈ - ǻǼǿȀȉǼȈ............................................................................ 129 10.3.1 ǹȆȅǻȅȈǾ ȉǿȂȍȃ ȈǼ ǻǼǿȀȉǼȈ ..................................................... 129 10.3.2 ǹȇǿĬȂǾȉǿȀǾ ǻǼǿȀȉȍȃ .................................................................. 130 10.3.3 ȈȊīȀȇǿȈǾ ǻǼǿȀȉȍȃ........................................................................ 131 10.4 ǻǼǿȀȉǼȈ Ȁǹǿ ȈȊȃǹȇȉǾȈǼǿȈ....................................................................... 132 10.5 ǻǼǿȀȉǼȈ Ȁǹǿ ȆǿȃǹȀǼȈ ................................................................................ 133 10.6 ǻǼǿȀȉǼȈ Ȁǹǿ ǹȁĭǹȇǿĬȂǾȉǿȀǹ.................................................................. 134 10.7 ȆǿȃǹȀǼȈ ǻǼǿȀȉȍȃ Ȁǹǿ ǻǼǿȀȉǼȈ ȈǼ ǻǼǿȀȉǼȈ ......................................... 136 10.8 ȅȇǿȈȂǹȉǹ īȇǹȂȂǾȈ ǻǿǹȉǹīȍȃ .............................................................. 140 10.9 ǻǼǿȀȉǼȈ Ȁǹǿ ǻȅȂǼȈ................................................................................... 141 10.10 ȆǹȇǹǻǼǿīȂǹȉǹ........................................................................................... 142 10.11 ǹȈȀǾȈǼǿȈ ..................................................................................................... 145 11. ǹȇȋǼǿǹ.................................................................................................................... 147 11.1 ǹȃȅǿīȂǹ Ȁǹǿ ȀȁǼǿȈǿȂȅ ǹȇȋǼǿȅȊ ............................................................ 147 11.2 ȆȇȅȈȆǼȁǹȈǾ ǹȇȋǼǿȅȊ............................................................................. 149 11.2.1 ǼǿȈȅǻȅȈ Ȁǹǿ ǼȄȅǻȅȈ ȋǹȇǹȀȉǾȇȍȃ ......................................... 149 11.2.2 ǼǿȈȅǻȅȈ Ȁǹǿ ǼȄȅǻȅȈ ǹȁĭǹȇǿĬȂǾȉǿȀȍȃ................................. 151 11.2.3 ȂȅȇĭȅȆȅǿǾȂǼȃǾ ǼǿȈȅǻȅȈ Ȁǹǿ ǼȄȅǻȅȈ ................................ 152 11.2.4 ǼǿȈȅǻȅȈ Ȁǹǿ ǼȄȅǻȅȈ ǻȅȂȍȃ ǻǼǻȅȂǼȃȍȃ............................ 154 11.3 ǹȁȁǼȈ ȈȊȃǹȇȉǾȈǼǿȈ ȋǼǿȇǿȈȂȅȊ ǹȇȋǼǿȍȃ ........................................... 156 11.4 ȆǹȇǹǻǼǿīȂǹȉǹ........................................................................................... 157 11.5 ǹȈȀǾȈǼǿȈ ..................................................................................................... 165 12. ȅ ȆȇȅǼȆǼȄǼȇīǹȈȉǾȈ......................................................................................... 167 12.1 #define țĮȚ #undef.................................................................................... 167 12.2 #include ..................................................................................................... 169 12.3 #if, #else, #endif, #elif, #ifdef țĮȚ #ifndef ........................... 170 12.4 ǹȈȀǾȈǼǿȈ ..................................................................................................... 173 ȆǹȇǹȇȉǾȂǹ ǹ': ȉȅ ȈȊȃȅȁȅ ȋǹȇǹȀȉǾȇȍȃ ASCII .................................................. 175 ǺǿǺȁǿȅīȇǹĭǿǹ ............................................................................................................... 179
1
ȀǼĭǹȁǹǿȅ 1
ǼǿȈǹīȍīǾ Ǿ C İȓȞĮȚ µȓĮ ȖȜȫııĮ ʌȡȠȖȡĮµµĮIJȚıµȠȪ, ʌȠȣ ıȤİįȚȐıIJȘțİ țĮȚ ȣȜȠʌȠȚȒșȘțİ ȖȚĮ ʌȡȫIJȘ ijȠȡȐ Įʌȩ IJȠȞ Dennis Ritchie, ı'ȑȞĮȞ ȣʌȠȜȠȖȚıIJȒ DEC PDP-11, ıIJĮ İȡȖĮıIJȒȡȚĮ IJȘȢ Bell ıIJȠ New Jersey IJȦȞ Ǿ.Ȇ.ǹ. H C ıȤİįȚȐıIJȘțİ ĮȡȤȚțȐ ȖȚĮ IJȠ ȜİȚIJȠȣȡȖȚțȩ ıȪıIJȘµĮ UNIX țĮȚ İijĮȡµȩıIJȘțİ ı'ĮȣIJȩ. ȅ ʌȣȡȒȞĮȢ IJȠȣ UNIX, Ƞ µİIJĮȖȜȦIJIJȚıIJȒȢ IJȘȢ C țĮȚ ıȤİįȩȞ ȩȜĮ IJĮ ȕȠȘșȘIJȚțȐ ʌȡȠȖȡȐµµĮIJĮ IJȠȣ UNIX, İȓȞĮȚ ȖȡĮµµȑȞĮ ıİ C. Ǿ ȖȜȫııĮ C İȓȞĮȚ IJȠ ĮʌȠIJȑȜİıµĮ µȚĮȢ İȡȖĮıȓĮȢ ʌȠȣ ȟİțȓȞȘıİ Įʌȩ µȚĮ ʌĮȜĮȚȩIJİȡȘ ȖȜȫııĮ ʌȠȣ ȠȞȠµĮȗȩIJĮȞ BCL, Ș ȠʌȠȓĮ ıȤİįȚȐıIJȘțİ Įʌȩ IJȠȞ Martin Richards ıIJȘ įİțĮİIJȓĮ IJȠȣ 60. H BCL İʌȘȡȑĮıİ µȚĮ ȐȜȜȘ ȖȜȫııĮ ʌȠȣ ȠȞȠµȐıIJȘțİ Ǻ țĮȚ ıȤİįȚȐıIJȘțİ Įʌȩ IJȠȞ Ken Thompson (ıȣȞİȡȖȐIJȘ IJȠȣ Ritchie) IJȠ 1970 ȖȚĮ IJȠ ʌȡȫIJȠ ıȪıIJȘµĮ UNIX, ıİ ȑȞĮȞ ȣʌȠȜȠȖȚıIJȒ DEC PDP-7. Ǿ ȖȜȫııĮ Ǻ ıIJȘ ıȣȞȑȤİȚĮ, ȠįȒȖȘıİ ıIJȘȞ ĮȞȐʌIJȣȟȘ IJȘȢ C, ȖȪȡȦ ıIJȠ 1972. ǹʌȩ IJĮ µȑıĮ IJȘȢ įİțĮİIJȓĮȢ IJȠȣ 1970, IJȠ UNIX ȤȡȘıȚµȠʌȠȚİȓIJĮȚ İțIJİIJĮµȑȞĮ ıIJĮ İȡȖĮıIJȒȡȚĮ IJȘȢ Bell țĮȚ ĮȡȖȩIJİȡĮ İʌİțIJİȓȞİIJĮȚ Ș ȤȡȒıȘ IJȠȣ ıİ įȚȐijȠȡĮ ȆĮȞİʌȚıIJȒµȚĮ. DzIJıȚ, Ș C ȐȡȤȚıİ ıȚȖȐ-ıȚȖȐ ȞĮ ĮȞIJȚțĮșȚıIJȐ IJȚȢ ȐȜȜİȢ įȚĮșȑıȚµİȢ ȖȜȫııİȢ ıIJȠ UNIX. īȚĮ ʌȠȜȜȐ ȤȡȩȞȚĮ, IJȠ de facto ʌȡȩIJȣʌȠ IJȘȢ ȖȜȫııĮȢ C ȒIJĮȞ Ș ʌĮȡİȤȩµİȞȘ ȑțįȠıȒ IJȘȢ µİ IJȘȞ ȑțįȠıȘ 5 IJȠȣ UNIX țĮȚ ʌİȡȚȖȡĮijȩIJĮȞ ıIJȘȞ ʌȡȫIJȘ ȑțįȠıȘ IJȠȣ İȖȤİȚȡȚįȓȠȣ ĮȞĮijȠȡȐȢ "The C Programming Language" IJȦȞ Brian Kernighan țĮȚ Dennis Ritchie (ıȣȤȞȐ ĮȞĮijȑȡİIJĮȚ ȦȢ "ʌȡȩIJȣʌȠ K&R"). Ȃİ IJȘ ȡĮȖįĮȓĮ ĮȞȐʌIJȣȟȘ IJȦȞ µȚțȡȠȨʌȠȜȠȖȚıIJȫȞ, įȘµȚȠȣȡȖȒșȘțİ ȑȞĮȢ µİȖȐȜȠȢ ĮȡȚșµȩȢ ȣȜȠʌȠȚȒıİȦȞ IJȘȢ C, ȠȚ ȠʌȠȓİȢ ʌĮȡȠȣıȓĮȗĮȞ ĮʌȠțȜȓıİȚȢ µİIJĮȟȪ IJȠȣȢ. DzIJıȚ IJȠ 1983, IJȠ ǹµİȡȚțĮȞȚțȩ ǼșȞȚțȩ ǿȞıIJȚIJȠȪIJȠ ȆȡȠIJȪʌȦȞ (American National Standards Institute - ANSI) ıȪıIJȘıİ µȚĮ İʌȚIJȡȠʌȒ ȖȚĮ ȞĮ įȫıİȚ ȑȞĮȞ ʌȜȒȡȘ țĮȚ ıȪȖȤȡȠȞȠ ȠȡȚıµȩ IJȘȢ C. ȅ ȠȡȚıµȩȢ ʌȠȣ ʌȡȠȑțȣȥİ, IJȠ ʌȡȩIJȣʌȠ ANSI Ȓ "ANSI C", İȖțȡȓșȘțİ IJȠ 1988. ȉȠ ʌȡȩIJȣʌȠ ĮȣIJȩ ȕĮıȓȗİIJĮȚ ıIJȠ ĮȡȤȚțȩ İȖȤİȚȡȓįȚȠ ĮȞĮijȠȡȐȢ. DzIJıȚ ȠȚ įȚȐijȠȡİȢ ȣȜȠʌȠȚȒıİȚȢ IJȘȢ C ʌȡȑʌİȚ ȞĮ țĮȜȪʌIJȠȣȞ IJȠ ʌȡȩIJȣʌȠ ANSI. ȆȡȐȖµĮIJȚ įȚȐijȠȡİȢ İIJĮȚȡȓİȢ țȣțȜȠijȩȡȘıĮȞ IJȠȣȢ įȚțȠȪȢ IJȠȣȢ µİIJĮȖȜȦIJIJȚıIJȑȢ ȖȚĮ IJȘȞ C, ȠȚ ȠʌȠȓȠȚ, ʌȡȠijĮȞȫȢ, ȚțĮȞȠʌȠȚȠȪȞ IJȠ ʌȡȩIJȣʌȠ ANSI. ȅȚ ʌİȡȚııȩIJİȡȠȚ ȩµȦȢ µİIJĮȖȜȦIJIJȚıIJȑȢ, ȣʌİȡțĮȜȪʌIJȠȣȞ IJȠ ʌȡȩIJȣʌȠ ĮȣIJȩ. īȚĮ IJȠ ȜȩȖȠ ĮȣIJȩ, ĮȞ șȑȜȠȣµİ IJĮ ʌȡȠȖȡȐµµĮIJĮ ʌȠȣ ȖȡȐijȠȣµİ ȞĮ µʌȠȡȠȪȞ ȞĮ µİIJĮijİȡșȠȪȞ ıİ įȚȐijȠȡȠȣȢ ȘȜİțIJȡȠȞȚțȠȪȢ ȣʌȠȜȠȖȚıIJȑȢ (Ǿ/Ȋ) µİ įȚĮijȠȡİIJȚțȠȪȢ µİIJĮȖȜȦIJIJȚıIJȑȢ, IJȩIJİ șĮ ʌȡȑʌİȚ ȞĮ ȤȡȘıȚµȠʌȠȚȠȪµİ µȩȞȠ IJȚȢ įȣȞĮIJȩIJȘIJİȢ ʌȠȣ ȠȡȓȗȠȞIJĮȚ ıIJȠ ʌȡȩIJȣʌȠ ANSI. DzIJıȚ șĮ İȓȞĮȚ İȖȖȣȘµȑȞȠ ȩIJȚ IJĮ ʌȡȠȖȡȐµµĮIJȐ µĮȢ µʌȠȡȠȪȞ ȞĮ ʌİȡȐıȠȣȞ Įʌȩ ȠʌȠȚȠȞįȒʌȠIJİ µİIJĮȖȜȦIJIJȚıIJȒ ʌȠȣ ȚțĮȞȠʌȠȚİȓ IJȠ ʌȡȩIJȣʌȠ ANSI. ȈIJȚȢ ıȘµİȚȫıİȚȢ ĮȣIJȑȢ, ȩȜĮ IJĮ ʌȡȠȖȡȐµµĮIJĮ ıȣµijȦȞȠȪȞ µİ IJȠ ʌȡȩIJȣʌȠ ANSI. Ǿ C İȓȞĮȚ ȖȜȫııĮ ȖİȞȚțȠȪ ıțȠʌȠȪ țĮȚ ıȤİIJȚțȐ µȑıȠȣ İʌȚʌȑįȠȣ. ȅ ȤĮȡĮțIJȘȡȚıµȩȢ ĮȣIJȩȢ įİȞ İȓȞĮȚ ȣʌȠIJȚµȘIJȚțȩȢ, ĮʌȜȫȢ ıȘµĮȓȞİȚ ȩIJȚ Ș C ʌĮȡȑȤİȚ ıIJȠȞ ʌȡȠȖȡĮµµĮIJȚıIJȒ įȣȞĮIJȩIJȘIJİȢ ȖȚĮ ʌȡȠȖȡĮµµĮIJȚıµȩ ıİ ȤĮµȘȜȩ (low level) ĮȜȜȐ țĮȚ ıİ ȣȥȘȜȩ (high level) İʌȓʌİįȠ. ȅ ʌȡȠȖȡĮµµĮIJȚıµȩȢ ıİ ȤĮµȘȜȩ İʌȓʌİįȠ,
2
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
İʌȚIJȡȑʌİȚ ıIJȠȞ ʌȡȠȖȡĮµµĮIJȚıIJȒ ȐµİıȘ ʌȡȩıȕĮıȘ ıIJȠ ȣȜȚțȩ (hardware) IJȠȣ Ǿ/Ȋ țĮȚ ıIJȚȢ ıIJȠȚȤİȚȫįİȚȢ ȜİȚIJȠȣȡȖȓİȢ IJȠȣ. DzIJıȚ Ș įȚĮȤİȓȡȚıȘ bits, bytes țĮȚ įȚİȣșȪȞıİȦȞ µȞȒµȘȢ, ȖȓȞİIJĮȚ µİ µİȖȐȜȘ İȣțȠȜȓĮ. ǹȣIJȑȢ ȠȚ įȣȞĮIJȩIJȘIJİȢ țȐȞȠȣȞ IJȘ C țĮIJȐȜȜȘȜȘ ȖȚĮ ʌȡȠȖȡĮµµĮIJȚıµȩ ıİ İʌȓʌİįȠ ıȣıIJȒµĮIJȠȢ. ǹʌȩ IJȘȞ ȐȜȜȘ, Ƞ ʌȡȠȖȡĮµµĮIJȚıµȩȢ ıİ ȣȥȘȜȩ İʌȓʌİįȠ, "ĮʌȠțȡȪʌIJİȚ" Įʌȩ IJȠȞ ʌȡȠȖȡĮµµĮIJȚıIJȒ IJȚȢ ȜİʌIJȠµȑȡİȚİȢ IJȠȣ ȣȜȚțȠȪ, țȐȞȠȞIJĮȢ ȑIJıȚ IJȠȞ țȫįȚțĮ ʌȠȣ ʌĮȡȐȖİIJĮȚ Įʌȩ IJȘ C ıİ µİȖȐȜȠ ȕĮșµȩ ijȠȡȘIJȩ. ǹȣIJȩ ıȘµĮȓȞİȚ ȩIJȚ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ ȑȤİȚ ȖȡĮijIJİȓ ȖȚĮ țȐʌȠȚȠȞ IJȪʌȠ Ǿ/Ȋ, µʌȠȡİȓ ȞĮ ȤȡȘıȚµȠʌȠȚȘșİȓ țĮȚ ıİ Ǿ/Ȋ ȐȜȜȠȣ IJȪʌȠȣ. Ǿ ȖȜȫııĮ C İȓȞĮȚ İʌȓıȘȢ ȖȞȦıIJȒ ȖȚĮ IJȘȞ İȜİȣșİȡȓĮ ʌȠȣ ʌȡȠıijȑȡİȚ ıIJȠȞ ȤȡȒıIJȘ. ȆȡȠijĮȞȫȢ, țĮIJȐȤȡȘıȘ ĮȣIJȒȢ IJȘȢ İȜİȣșİȡȓĮȢ įȘµȚȠȣȡȖİȓ ʌȡȠȕȜȒµĮIJĮ ıIJĮ ʌȡȠȖȡȐµµĮIJĮ. ȍȢ ıȣȞȑʌİȚĮ ĮȣIJȒȢ IJȘȢ İȜİȣșİȡȓĮȢ, ȠȚ ĮȞĮțȡȚȕİȓȢ ȤȡȒıIJİȢ IJȘȢ C ıȪȞIJȠµĮ șĮ ĮȞĮțĮȜȪȥȠȣȞ ȩIJȚ İȓȞĮȚ ʌȠȜȪ İȪțȠȜȠ ȞĮ ȖȡȐȥȠȣȞ ʌȡȠȖȡȐµµĮIJĮ ʌȠȣ İțIJİȜȠȪȞ İȞȑȡȖİȚİȢ įȚĮijȠȡİIJȚțȑȢ Įʌȩ ĮȣIJȑȢ ʌȠȣ șĮ ȒșİȜĮȞ. Ȉİ ĮȞIJȓșİıȘ µİ IJȚȢ ȐȜȜİȢ ȖȜȫııİȢ, țĮȚ ĮȣIJȩ İȓȞĮȚ ʌȠȣ İțʌȜȒııİȚ IJȠȣȢ ȐʌİȚȡȠȣȢ ȤȡȒıIJİȢ, ıȣȤȞȐ IJȑIJȠȚĮ ʌȡȠȖȡȐµµĮIJĮ İȓȞĮȚ ıȣȞIJĮțIJȚțȐ ıȦıIJȐ. DzIJıȚ Ƞ µİIJĮȖȜȦIJIJȚıIJȒȢ įİ șĮ ĮȞȚȤȞİȪıİȚ ȜȐșȠȢ, ȩµȦȢ IJĮ ĮʌȠIJİȜȑıµĮIJĮ ʌȠȣ șĮ ʌȐȡȠȣµİ įİ șĮ İȓȞĮȚ IJĮ ĮȞĮµİȞȩµİȞĮ. īȚĮ ʌĮȡȐįİȚȖµĮ, ĮȞ Įʌȩ ȜȐșȠȢ ȖȡȐȥȠȣµİ ȑȞĮ ıȘµİȓȠ ȚıȩIJȘIJĮȢ (=, IJİȜİıIJȒȢ țĮIJĮȤȫȡȘıȘȢ) İțİȓ ʌȠȣ țĮȞȠȞȚțȐ ȑʌȡİʌİ ȞĮ ȖȡȐȥȠȣµİ įȪȠ (==, IJİȜİıIJȒȢ ıȪȖțȡȚıȘȢ), µʌȠȡİȓ ȞĮ İȓȞĮȚ ʌȠȜȪ įȪıțȠȜȠ ȞĮ ȕȡȠȪµİ ȖȚĮIJȓ ʌĮȓȡȞȠȣµİ ȜȐșȠȢ ĮʌȠIJİȜȑıµĮIJĮ. ǹȣIJȩ įİȞ İȓȞĮȚ ıȠȕĮȡȩ µİȚȠȞȑțIJȘµĮ IJȘȢ ȖȜȫııĮȢ. ȈIJȠȞ ʌȡȠȖȡĮµµĮIJȚıµȩ ʌȡȑʌİȚ ȞĮ İȓµĮıIJİ ʌȡȠıİțIJȚțȠȓ țĮȚ İȓȞĮȚ ȜȠȖȚțȩ, ȜȐșȠȢ İȞIJȠȜȑȢ ȞĮ ȠįȘȖȠȪȞ ıİ ȜȐșȠȢ ĮʌȠIJİȜȑıµĮIJĮ. ȂȚĮ Įʌȩ IJȚȢ ʌȚȠ įȘµȠijȚȜİȓȢ ȣȜȠʌȠȚȒıİȚȢ IJȘȢ C ıIJȠ ȤȫȡȠ IJȦȞ µȚțȡȠȨʌȠȜȠȖȚıIJȫȞ, İȓȞĮȚ Ș Turbo C (TC). H TC İȓȞĮȚ ʌȡȠȧȩȞ (țĮȚ ıȒµĮ țĮIJĮIJİșȑȞ) IJȘȢ İIJĮȚȡİȓĮȢ Borland International Inc. Ǿ TC įİȞ İȓȞĮȚ ĮʌȜȫȢ ȑȞĮȢ µİIJĮȖȜȦIJIJȚıIJȒȢ IJȘȢ C, İȓȞĮȚ ȑȞĮ ȠȜȠțȜȘȡȦµȑȞȠ ʌİȡȚȕȐȜȜȠȞ ĮȞȐʌIJȣȟȘȢ ʌȡȠȖȡĮµµȐIJȦȞ ıİ C.
3
ȀǼĭǹȁǹǿȅ 2
ȉǹ īǼȃǿȀǹ ȋǹȇǹȀȉǾȇǿȈȉǿȀǹ ȉǾȈ C 2.1 ǺǾȂǹȉǹ īȇǹĭǾȈ Ȁǹǿ ǼȀȉǼȁǼȈǾȈ ȆȇȅīȇǹȂȂǹȉȅȈ ȉĮ ʌȡȠȖȡȐµµĮIJĮ ʌȠȣ ȖȡȐijȠȞIJĮȚ ıİ C İȓȞĮȚ µȚĮ ıİȚȡȐ Įʌȩ İȞIJȠȜȑȢ IJĮ ȠȞȩµĮIJĮ IJȦȞ ȠʌȠȓȦȞ İȓȞĮȚ, ıȣȞȒșȦȢ, ȑIJıȚ įȚĮȜİȖµȑȞĮ ȫıIJİ ȞĮ ijĮȞİȡȫȞȠȣȞ IJȘȞ İȞȑȡȖİȚĮ IJȘȢ țȐșİ µȚĮȢ. īȚĮ ȞĮ ȖȡȐȥȠȣµİ IJĮ ʌȡȠȖȡȐµµĮIJȐ µĮȢ, ȤȡȘıȚµȠʌȠȚȠȪµİ țȐʌȠȚȠ ıȣȞIJȐțIJȘ țİȚµȑȞȠȣ (editor), ȑIJıȚ ʌĮȡȐȖȠȣµİ ȑȞĮ ʌȡȩȖȡĮµµĮ ıİ µȠȡijȒ țİȚµȑȞȠȣ ĮȞĮȖȞȦȡȓıȚµȘ țĮȚ țĮIJĮȞȠȘIJȒ Įʌȩ IJȠȞ ȐȞșȡȦʌȠ. Ȉ'ĮȣIJȒ IJȘ µȠȡijȒ IJȠȣ, IJȠ ʌȡȩȖȡĮµµĮ ȜȑȖİIJĮȚ ʌȘȖĮȓȠ ʌȡȩȖȡĮµµĮ (source program). ǹʌȩ IJȘȞ ȐȜȜȘ, Ș țİȞIJȡȚțȒ µȠȞȐįĮ İʌİȟİȡȖĮıȓĮȢ IJȠȣ Ǿ/Ȋ µʌȠȡİȓ ȞĮ İțIJİȜȑıİȚ İȞIJȠȜȑȢ ıİ įȣĮįȚțȒ µȠȡijȒ (ȖȜȫııĮ µȘȤĮȞȒȢ). ǹȣIJȩ ıȘµĮȓȞİȚ ȩIJȚ ȑȞĮ ʌȡȩȖȡĮµµĮ ȖȡĮµµȑȞȠ ıİ C, ȤȡİȚȐȗİIJĮȚ ȞĮ µİIJĮijȡĮıIJİȓ Įʌȩ IJȘ µȠȡijȒ țİȚµȑȞȠȣ ʌȠȣ IJȠ ıȣȞIJȐııİȚ Ƞ ʌȡȠȖȡĮµµĮIJȚıIJȒȢ, ıİ ȖȜȫııĮ µȘȤĮȞȒȢ. ȉȘȞ İȡȖĮıȓĮ ĮȣIJȒ țȐȞİȚ țĮIJȐȜȜȘȜȠ µİIJĮijȡĮıIJȚțȩ ʌȡȩȖȡĮµµĮ ʌȠȣ ȜȑȖİIJĮȚ µİIJĮȖȜȦIJIJȚıIJȒȢ IJȘȢ C (C compiler). O µİIJĮȖȜȦIJIJȚıIJȒȢ ȜȠȚʌȩȞ İȓȞĮȚ ȑȞĮ µİIJĮijȡĮıIJȚțȩ ʌȡȩȖȡĮµµĮ Ș İȓıȠįȠȢ IJȠȣ ȠʌȠȓȠȣ İȓȞĮȚ IJȠ ĮȡȤİȓȠ ʌȘȖĮȓȠȣ ʌȡȠȖȡȐµµĮIJȠȢ IJȘȢ C, IJȠ ȩȞȠµĮ IJȠȣ ȠʌȠȓȠȣ ʌȡȑʌİȚ ȞĮ ȑȤİȚ ʌȡȠȑțIJĮıȘ ".C", țĮșȫȢ țĮȚ ʌȚșĮȞȐ ĮȡȤİȓĮ-İʌȚțİijĮȜȓįĮȢ (header files). ȉĮ ĮȡȤİȓĮ-İʌȚțİijĮȜȓįĮȢ (ȜȑȖȠȞIJĮȚ İʌȓıȘȢ țĮȚ ĮȡȤİȓĮ ıȣµʌİȡȓȜȘȥȘȢ: include files) İȓȞĮȚ ĮȡȤİȓĮ țİȚµȑȞȠȣ. ȂʌȠȡȠȪȞ ȞĮ ıȣȞįȣĮıIJȠȪȞ µİ IJȠ ʌȘȖĮȓȠ ĮȡȤİȓȠ ʌȡȚȞ ĮȡȤȓıİȚ Ș µİIJĮȖȜȫIJIJȚıȘ ĮȣIJȠȪ. ȉȘ įȚĮįȚțĮıȓĮ ĮȣIJȒ IJȘȞ İʌȚIJİȜİȓ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ ȜȑȖİIJĮȚ ʌȡȠİʌİȟİȡȖĮıIJȒȢ IJȘȢ C (C preprocessor), ȕȜȑʌİ ȀİijȐȜĮȚȠ 12. Ǿ ȑȟȠįȠȢ IJȠȣ µİIJĮȖȜȦIJIJȚıIJȒ İȓȞĮȚ ȑȞĮ ĮȡȤİȓȠ ʌȠȣ ȑȤİȚ IJȠ ȓįȚȠ ȩȞȠµĮ µİ IJȠ ĮȡȤİȓȠ IJȠȣ ʌȘȖĮȓȠȣ ʌȡȠȖȡȐµµĮIJȠȢ, ʌȡȠȑțIJĮıȘ ".OBJ" țĮȚ ȜȑȖİIJĮȚ ĮȞIJȚțİȓµİȞȠ ʌȡȩȖȡĮµµĮ (object program). ǹȣIJȩ ʌȡȑʌİȚ ȞĮ įȚĮıȣȞįİșİȓ (linking) µİ įȚȐijȠȡĮ ĮȡȤİȓĮ ȕȚȕȜȚȠșȒțȘȢ IJȘȢ ȖȜȫııĮȢ țĮȚ ʌȚșĮȞȫȢ µİ ȐȜȜĮ ĮȞIJȚțİȓµİȞĮ ʌȡȠȖȡȐµµĮIJĮ. ȉȘ įȚĮįȚțĮıȓĮ IJȘȢ įȚĮıȪȞįİıȘȢ IJȘȞ ĮȞĮȜĮµȕȐȞİȚ țĮIJȐȜȜȘȜȠ ʌȡȩȖȡĮµµĮ ʌȠȣ ȜȑȖİIJĮȚ įȚĮıȣȞįİIJȒȢ (linker). Ǿ ȑȟȠįȠȢ IJȠȣ įȚĮıȣȞįİIJȒ İȓȞĮȚ ȑȞĮ ĮȡȤİȓȠ µİ ȩȞȠµĮ ȓįȚȠ µİ ĮȣIJȩ IJȠȣ ʌȘȖĮȓȠȣ ʌȡȠȖȡȐµµĮIJȠȢ țĮȚ ʌȡȠȑțIJĮıȘ ".EXE" ʌȠȣ ıȘµĮȓȞİȚ ȩIJȚ İȓȞĮȚ ȑȞĮ İțIJİȜȑıȚµȠ ʌȡȩȖȡĮµµĮ (executable program). ȉĮ ĮȡȤİȓĮ ȕȚȕȜȚȠșȒțȘȢ İȓȞĮȚ ȠµȐįİȢ Įʌȩ ʌȡȠ-µİIJĮȖȜȦIJIJȚıµȑȞİȢ ȡȠȣIJȓȞİȢ ȖȚĮ IJȘȞ İțIJȑȜİıȘ ıȣȖțİțȡȚµȑȞȦȞ İȡȖĮıȚȫȞ. īȚĮ ʌĮȡȐįİȚȖµĮ, ĮȞ ȤȡȘıȚµȠʌȠȚȒıȠȣµİ ıIJȠ ʌȡȩȖȡĮµµȐ µĮȢ µȚĮ ıȣȞȐȡIJȘıȘ ıĮȞ IJȘȞ printf() (IJȘȞ ȠʌȠȓĮ șĮ ʌİȡȚȖȡȐȥȠȣµİ ĮȡȖȩIJİȡĮ) ȖȚĮ ȞĮ IJȣʌȫıȠȣµİ țȐIJȚ ıIJȘȞ ȠșȩȞȘ, Ƞ țȫįȚțĮȢ ȖȚ'ĮȣIJȒ IJȘ ıȣȞȐȡIJȘıȘ ʌİȡȚȜĮµȕȐȞİIJĮȚ ı'ȑȞĮ ĮȡȤİȓȠ ȕȚȕȜȚȠșȒțȘȢ. ȀȐșİ ĮȡȤİȓȠ ȕȚȕȜȚȠșȒțȘȢ ȑȤİȚ ȑȞĮ ȕĮıȚțȩ ȤĮȡĮțIJȘȡȚıIJȚțȩ: µȩȞȠ IJĮ țȠµµȐIJȚĮ IJȠȣ ĮȣIJȐ ʌȠȣ İȓȞĮȚ ĮʌĮȡĮȓIJȘIJĮ șĮ ıȣȞįİșȠȪȞ µİ IJȘȞ İțIJİȜȑıȚµȘ ȑțįȠıȘ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ, ȩȤȚ ȠȜȩțȜȘȡȠ IJȠ ĮȡȤİȓȠ.
4
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ȉȠ ȈȤȒµĮ 2.1 įİȓȤȞİȚ IJĮ ȕȒµĮIJĮ ʌȠȣ ʌȡȑʌİȚ ȞĮ ȖȓȞȠȣȞ țĮȚ IJȚȢ ijȐıİȚȢ Įʌȩ IJȚȢ ȠʌȠȓİȢ ʌİȡȞȐİȚ ȑȞĮ ĮȡȤİȓȠ ʌȘȖĮȓȠȣ ʌȡȠȖȡȐµµĮIJȠȢ ȑȦȢ ȩIJȠȣ ʌĮȡĮȤșİȓ IJȠ ĮȞIJȓıIJȠȚȤȠ ĮȡȤİȓȠ İțIJİȜȑıȚµȠȣ ʌȡȠȖȡȐµµĮIJȠȢ.
—ÈË·Ì‹ ¡Ò˜Âfl·¢ðÈ͈·Îfl‰·Ú .H
—Á„·flÔ —Ò¸„Ò·ÏÏ· .C
—ÒÔÂðÂÓÂÒ„·ÛÙfiÚ
ÃÂÙ·„΢ÙÙÈÛÙfiÚ
¡Ò˜Âfl· ¬È‚ÎÈÔËfiÍÁÚ
¡ÌÙÈÍÂflÏÂÌÔ —Ò¸„Ò·ÏÏ·
.LIB
.OBJ
—ÈË·Ì‹ ‹Îη ¡ÌÙÈÍÂflÏÂÌ· —ÒÔ„Ò‹ÏÏ·Ù·
ƒÈ·Ûı̉ÂÙfiÚ
¢ÍÙÂΛÛÈÏÔ —Ò¸„Ò·ÏÏ· .EXE
ȈȤȒµĮ 2.1: īȡĮijȒ - ȂİIJĮȖȜȫIJIJȚıȘ - ǻȚĮıȪȞįİıȘ ʌȡȠȖȡȐµµĮIJȠȢ
ȀĮIJȐ IJȘ įȚȐȡțİȚĮ IJȘȢ µİIJĮȖȜȫIJIJȚıȘȢ Ƞ µİIJĮȖȜȦIJIJȚıIJȒȢ İȜȑȖȤİȚ (ȜİțIJȚțȐ, ıȣȞIJĮțIJȚțȐ țĮȚ ıȘµĮıȚȠȜȠȖȚțȐ) IJȠ ʌȘȖĮȓȠ ʌȡȩȖȡĮµµĮ ȖȚĮ ʌȚșĮȞȐ ȜȐșȘ. ǹȣIJȐ IJĮ ȜȐșȘ ȜȑȖȠȞIJĮȚ ȜȐșȘ țĮIJȐ IJȠ ȤȡȩȞȠ IJȘȢ µİIJĮȖȜȫIJIJȚıȘȢ (compile-time errors) țĮȚ İȓȞĮȚ ĮʌȠIJȑȜİıµĮ ʌĮȡĮȕȚȐıİȦȞ IJȠȣ ıȣȞIJĮțIJȚțȠȪ IJȘȢ ȖȜȫııĮȢ. īȚĮ țȐșİ ȜȐșȠȢ ʌȠȣ ĮȞȚȤȞİȪİIJĮȚ, Ƞ µİIJĮȖȜȦIJIJȚıIJȒȢ ʌĮȡȐȖİȚ țĮIJȐȜȜȘȜȠ įȚĮȖȞȦıIJȚțȩ µȒȞȣµĮ ȜȐșȠȣȢ. ǼʌȓıȘȢ ĮȞIJȓıIJȠȚȤĮ µȘȞȪµĮIJĮ ȜȐșȠȣȢ ʌĮȡȐȖȠȞIJĮȚ Įʌȩ IJȠ įȚĮıȣȞįİIJȒ ıIJȘȞ ʌİȡȓʌIJȦıȘ ʌȠȣ ıȣµȕİȓ ȜȐșȠȢ țĮIJȐ IJȘ įȚĮıȪȞįİıȘ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ µİ țȐʌȠȚȠ Įʌȩ IJĮ ĮȡȤİȓĮ ȕȚȕȜȚȠșȒțȘȢ. ȉȠ İʌȩµİȞȠ ȕȒµĮ µİIJȐ IJȘȞ İʌȚIJȣȤȘµȑȞȘ µİIJĮȖȜȫIJIJȚıȘ țĮȚ įȚĮıȪȞįİıȘ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ, İȓȞĮȚ Ș İțIJȑȜİıȘ Ȓ IJȡȑȟȚµȠ IJȠȣ İțIJİȜȑıȚµȠȣ ʌȡȠȖȡȐµµĮIJȠȢ. ȀĮIJȐ IJȘ įȚȐȡțİȚĮ İțIJȑȜİıȘȢ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ İȓȞĮȚ ʌȚșĮȞȩ IJȠ ȜİȚIJȠȣȡȖȚțȩ ıȪıIJȘµĮ IJȠȣ Ǿ/Ȋ ȞĮ ĮȞȚȤȞİȪıİȚ ȜȐșȘ. ǹȣIJȐ ȜȑȖȠȞIJĮȚ ȜȐșȘ țĮIJȐ IJȠ ȤȡȩȞȠ İțIJȑȜİıȘȢ (run-
ȉĮ īİȞȚțȐ ȋĮȡĮțIJȘȡȚıIJȚțȐ IJȘȢ C
5
time errors). ȆȚșĮȞȐ IJȑIJȠȚĮ ȜȐșȘ İȓȞĮȚ Ș įȚĮȓȡİıȘ İȞȩȢ ĮȡȚșµȠȪ µİ IJȠ µȘįȑȞ, Ș ĮʌȩʌİȚȡĮ İȪȡİıȘȢ IJȘȢ IJİIJȡĮȖȦȞȚțȒȢ ȡȓȗĮȢ İȞȩȢ ĮȡȞȘIJȚțȠȪ ĮȡȚșµȠȪ ț.Ȝ.ʌ. ”˜Â‰fl·ÛÁ ðÒÔ„Ò‹ÏÏ·ÙÔÚ
”˝ÌÙ·ÓÁ ðÒÔ„Ò‹ÏÏ·ÙÔÚ
ÃÂÙ·„βÙÙÈÛÁ Í·È ‰È·Û˝Ì‰ÂÛÁ
À‹ËÁ Í·Ù‹ ÙÔ ˜Ò¸ÌÔ ÏÂÙ·„βÙÙÈÛÁÚ fi ‰È·Û˝Ì‰ÂÛÁÚ
Õ¡…
¢ÍÙ›ÎÂÛÁ ÙÔı ðÒÔ„Ò‹ÏÏ·ÙÔÚ
À‹ËÁ Í·Ù‹ ÙÔ ˜Ò¸ÌÔ ÂÍÙ›ÎÂÛÁÚ
Õ¡…
¢Î„˜ÔÚ ÙÔı ðÒÔ„Ò‹ÏÏ·ÙÔÚ
ÀÔ„ÈÍ‹ ΋ËÁ
Õ¡…
¢—…‘’´…¡ !
ȈȤȒµĮ 2.2: ǻȚȐȖȡĮµµĮ ȡȠȒȢ IJȦȞ įȚĮįȚțĮıȚȫȞ ĮȞȐʌIJȣȟȘȢ İȞȩȢ ʌȡȠȖȡȐµµĮIJȠȢ
ȉȠ ʌȡȩȖȡĮµµĮ ȩµȦȢ, µʌȠȡİȓ ȞĮ µȘȞ ʌĮȡȠȣıȚȐȗİȚ ȜȐșȘ țĮIJȐ IJȠ ȤȡȩȞȠ µİIJĮȖȜȫIJIJȚıȘȢ ȠȪIJİ țĮIJȐ IJȠ ȤȡȩȞȠ İțIJȑȜİıȘȢ, ĮȜȜȐ ʌĮȡ'ȩȜĮ ĮȣIJȐ ȞĮ µȘ įȓȞİȚ IJĮ ĮȞĮµİȞȩµİȞĮ ĮʌȠIJİȜȑıµĮIJĮ, Ș ȞĮ µȘ ıȣµʌİȡȚijȑȡİIJĮȚ ȩʌȦȢ ĮȞĮµİȞȩIJĮȞ İȟĮȚIJȓĮȢ ȜȐșȠȣȢ ıIJȠȞ İʌȚȜİȖµȑȞȠ ĮȜȖȩȡȚșµȠ Ȓ ıIJȘȞ ȑțijȡĮıȒ IJȠȣ ıIJȘ ȖȜȫııĮ ʌȡȠȖȡĮµµĮIJȚıµȠȪ. ǹȣIJȑȢ ȠȚ ĮʌȠțȜȓıİȚȢ Įʌȩ IJĮ ĮȞĮµİȞȩµİȞĮ, ȜȑȖȠȞIJĮȚ ȜȠȖȚțȐ
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
6
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ȜȐșȘ (logical errors) țĮȚ İȓȞĮȚ İȣșȪȞȘ IJȠȣ ʌȡȠȖȡĮµµĮIJȚıIJȒ ȞĮ ȕȡİȚ țĮȚ ȞĮ įȚȠȡșȫıİȚ ĮȣIJȐ IJĮ ȜȐșȘ. ȀȐșİ ijȠȡȐ ʌȠȣ ĮȞȚȤȞİȪİIJĮȚ țȐʌȠȚȠ ȜȐșȠȢ (ȠʌȠȚȠįȒʌȠIJİ Įʌȩ IJĮ ʌȡȠĮȞĮijİȡșȑȞIJĮ) ʌȡȑʌİȚ IJȠ ʌȘȖĮȓȠ ʌȡȩȖȡĮµµĮ ȞĮ įȚȠȡșȦșİȓ. Ǿ įȚȩȡșȦıȘ ȖȓȞİIJĮȚ ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ IJȠ ıȣȞIJȐțIJȘ țİȚµȑȞȠȣ ʌȠȣ ȤȡȘıȚµȠʌȠȚİȓIJĮȚ țĮȚ ȖȚĮ IJȘ ȖȡĮijȒ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ. ȉȠ ȈȤȒµĮ 2.2 įİȓȤȞİȚ ıİ µȠȡijȒ įȚĮȖȡȐµµĮIJȠȢ ȡȠȒȢ IJȚȢ įȚĮįȚțĮıȓİȢ: IJȠȣ ȖȡĮȥȓµĮIJȠȢ IJȠȣ ʌȘȖĮȓȠȣ ʌȡȠȖȡȐµµĮIJȠȢ (ıȤİįȓĮıȘ IJȘȢ µİșȩįȠȣ İʌȓȜȣıȘȢ, ıȪȞIJĮȟȘ ʌȡȠȖȡȐµµĮIJȠȢ), IJȘȢ µİIJĮȖȜȫIJIJȚıȘȢ țĮȚ IJȘȢ İțIJȑȜİıȘȢ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ. ȆĮȡĮIJȘȡȠȪµİ ȩIJȚ ȠȚ ʌĮȡĮʌȐȞȦ įȚĮįȚțĮıȓİȢ İȓȞĮȚ įȣȞĮIJȩ ȞĮ ȖȓȞȠȣȞ ʌİȡȚııȩIJİȡİȢ IJȘȢ µȓĮȢ ijȠȡȑȢ ı'ȑȞĮ ʌȡȩȖȡĮµµĮ, İȟĮȚIJȓĮȢ įȚĮijȩȡȦȞ İȚįȫȞ ȜĮșȫȞ.
2.2 ǻȅȂǾ ȆȇȅīȇǹȂȂǹȉȅȈ ȉǾȈ C ȀȐșİ ʌȡȩȖȡĮµµĮ IJȘȢ C ĮʌȠIJİȜİȓIJĮȚ Įʌȩ µȓĮ Ȓ ʌİȡȚııȩIJİȡİȢ ıȣȞĮȡIJȒıİȚȢ (functions). ȂȓĮ ıȣȞȐȡIJȘıȘ IJȘȢ C İȓȞĮȚ ĮȞIJȓıIJȠȚȤȘ IJȘȢ ȣʌȠȡȠȣIJȓȞĮȢ IJȘȢ BASIC Ȓ IJȘȢ ıȣȞȐȡIJȘıȘȢ IJȘȢ Pascal, İȓȞĮȚ įȘȜĮįȒ µȓĮ ȠµȐįĮ İȞIJȠȜȫȞ ʌȠȣ İʌȚIJİȜİȓ ıȣȖțİțȡȚµȑȞȘ ȜİȚIJȠȣȡȖȓĮ. ĬĮ įȠȪµİ ʌİȡȚııȩIJİȡĮ ȖȚĮ IJȚȢ ıȣȞĮȡIJȒıİȚȢ ıIJȠ ȀİijȐȜĮȚȠ 7. ȀȐșİ ʌȡȩȖȡĮµµĮ ʌİȡȚȑȤİȚ ĮʌĮȡĮȚIJȒIJȦȢ µȓĮ țĮȚ µȩȞȠ µȓĮ ıȣȞȐȡIJȘıȘ ʌȠȣ țĮȜİȓIJĮȚ
main(). ǹıȤȑIJȦȢ µİ IJȠ ʌȩıİȢ ıȣȞĮȡIJȒıİȚȢ ȣʌȐȡȤȠȣȞ ı'ȑȞĮ ʌȡȩȖȡĮµµĮ, Ș main() İȓȞĮȚ İțİȓȞȘ ıIJȘȞ ȠʌȠȓĮ ʌİȡȞȐİȚ Ƞ ȑȜİȖȤȠȢ Įʌȩ IJȠ ȜİȚIJȠȣȡȖȚțȩ ıȪıIJȘµĮ
ȩIJĮȞ İțIJİȜİȓIJĮȚ IJȠ ʌȡȩȖȡĮµµĮ, µ'ȐȜȜĮ ȜȩȖȚĮ İȓȞĮȚ Ș ʌȡȫIJȘ ıȣȞȐȡIJȘıȘ ʌȠȣ İțIJİȜİȓIJĮȚ, ȠʌȠȣįȒʌȠIJİ țȚ ĮȞ ȕȡȓıțİIJĮȚ İȞIJȩȢ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ. Ǿ main() µʌȠȡİȓ ȞĮ țĮȜİȓ ȐȜȜȘ ıȣȞȐȡIJȘıȘ Ș ȠʌȠȓĮ µʌȠȡİȓ ȞĮ țĮȜİȓ țȐʌȠȚĮ ȐȜȜȘ ț.Ƞ.ț. Ǿ µȠȡijȒ İȞȩȢ ʌȡȠȖȡȐµµĮIJȠȢ ʌȠȣ ʌİȡȚȑȤİȚ µȩȞȠ µȓĮ ıȣȞȐȡIJȘıȘ, ʌȠȣ ʌȡȠijĮȞȫȢ șĮ ȠȞȠµȐȗİIJĮȚ main(), İȓȞĮȚ:
main()
m ȩȞȠµĮ ıȣȞȐȡIJȘıȘȢ (ȠȚ ʌĮȡİȞșȑıİȚȢ șĮ µʌȠȡȠȪıĮȞ ȞĮ ȑȤȠȣȞ ʌĮȡĮµȑIJȡȠȣȢ)
{
m ȠȡȚȠșȑIJȘȢ
İȞIJȠȜȒ1 İȞIJȠȜȒ2 m ıȫµĮ IJȘȢ ıȣȞȐȡIJȘıȘȢ ... İȞIJȠȜȒn }
m ȠȡȚȠșȑIJȘȢ
ȅȚ ʌĮȡİȞșȑıİȚȢ µİIJȐ IJȠ ȩȞȠµĮ IJȘȢ ıȣȞȐȡIJȘıȘȢ İȓȞĮȚ ĮʌĮȡĮȓIJȘIJİȢ, ȑıIJȦ țȚ ĮȞ įİȞ ʌİȡȚȑȤȠȣȞ ȠȡȓıµĮIJĮ, ȖȚĮ ȜȩȖȠȣȢ ʌȠȣ șĮ ȖȓȞȠȣȞ țĮIJĮȞȠȘIJȠȓ ʌĮȡĮțȐIJȦ. ȉȠȞ țĮșȠȡȚıµȩ IJȘȢ ıȣȞȐȡIJȘıȘȢ ĮțȠȜȠȣșȠȪȞ IJĮ ȐȖțȚıIJȡĮ ʌȠȣ ȠȡȚȠșİIJȠȪȞ IJȘȞ ĮȡȤȒ țĮȚ IJȠ IJȑȜȠȢ IJȠȣ ıȫµĮIJȠȢ IJȘȢ ıȣȞȐȡIJȘıȘȢ. ȉȠ ȐȖțȚıIJȡȠ ĮȞȠȓȖµĮIJȠȢ ({ ) įİȓȤȞİȚ ȩIJȚ ȑȞĮ țȠµµȐIJȚ țȫįȚțĮ ʌȠȣ ĮʌȠIJİȜİȓ µȚĮ țĮșȠȡȚıµȑȞȘ ȠµȐįĮ, ʌȡȩțİȚIJĮȚ ȞĮ ȟİțȚȞȒıİȚ. ȉȠ ȐȖțȚıIJȡȠ țȜİȚıȓµĮIJȠȢ ( }) IJİȡµĮIJȓȗİȚ ȑȞĮ țȠµµȐIJȚ IJȠȣ țȫįȚțĮ. ȉĮ ȐȖțȚıIJȡĮ ıIJȘ C İʌȚIJİȜȠȪȞ µȓĮ ʌĮȡȩµȠȚĮ ȜİȚIJȠȣȡȖȓĮ µİ IJȚȢ İȞIJȠȜȑȢ Begin țĮȚ End IJȘȢ Pascal.
ȉĮ īİȞȚțȐ ȋĮȡĮțIJȘȡȚıIJȚțȐ IJȘȢ C
7
ȀȐșİ İȞIJȠȜȒ IJȘȢ C IJİȡµĮIJȓȗİIJĮȚ µİ ȑȞĮ İȜȜȘȞȚțȩ İȡȦIJȘµĮIJȚțȩ (;). ǹȢ ıȘµİȚȦșİȓ İįȫ, ȩIJȚ IJȠ İȜȜȘȞȚțȩ İȡȦIJȘµĮIJȚțȩ ıIJȘȞ C įİ įȚĮȤȦȡȓȗİȚ İȞIJȠȜȑȢ, ȩʌȦȢ ıIJȘȞ Pascal, ĮȜȜȐ IJİȡµĮIJȓȗİȚ İȞIJȠȜȑȢ. Ȃİ ȐȜȜĮ ȜȩȖȚĮ IJȠ İȜȜȘȞȚțȩ İȡȦIJȘµĮIJȚțȩ ĮʌȠIJİȜİȓ µȑȡȠȢ IJȘȢ İȞIJȠȜȒȢ. ȂȓĮ ĮțȩµĮ ʌĮȡĮIJȒȡȘıȘ ʌȠȣ ʌȡȑʌİȚ ȞĮ ȖȓȞİȚ İįȫ İȓȞĮȚ ȩIJȚ Ș C țȐȞİȚ įȚȐțȡȚıȘ µİIJĮȟȪ țİijĮȜĮȓȦȞ țĮȚ ʌİȗȫȞ ȖȡĮµµȐIJȦȞ. ȂȓĮ ıȪµȕĮıȘ ʌȠȣ șĮ ĮțȠȜȠȣșȒıȠȣµİ İȓȞĮȚ ȩIJȚ șĮ ȖȡȐijȠȣµİ IJĮ ʌȐȞIJĮ µİ ʌİȗȠȪȢ ȤĮȡĮțIJȒȡİȢ (İțIJȩȢ Įʌȩ IJȚȢ ıIJĮșİȡȑȢ ȩʌȦȢ șĮ įȠȪµİ ĮȡȖȩIJİȡĮ), ȖȚĮ İȣțȠȜȓĮ ıIJȘȞ ʌȜȘțIJȡȠȜȩȖȘıȘ.
2.3 ȊȁȅȆȅǿǾȈǾ ǹȆȁȍȃ ȆȇȅīȇǹȂȂǹȉȍȃ īȚĮ ȞĮ µʌȠȡȠȪµİ ȞĮ ȖȡȐijȠȣµİ ĮʌȜȐ ʌȡȠȖȡȐµµĮIJĮ ıİ C, șĮ įȠȪµİ ı'ĮȣIJȒ IJȘȞ ʌĮȡȐȖȡĮijȠ µİȡȚțȐ ʌĮȡĮįİȓȖµĮIJĮ, ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ țȐʌȠȚİȢ Įʌȩ IJȚȢ ıȣȞĮȡIJȒıİȚȢ ȕȚȕȜȚȠșȒțȘȢ IJȘȢ ȖȜȫııĮȢ ȩʌȦȢ Ș printf() (ȖȚĮ İțIJȪʌȦıȘ IJȚµȫȞ ıIJȘȞ ȠșȩȞȘ) țĮȚ Ș scanf() (ȖȚĮ įȚȐȕĮıµĮ įİįȠµȑȞȦȞ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ). ĬĮ įȠȪµİ µİ ʌİȡȚııȩIJİȡİȢ ȜİʌIJȠµȑȡİȚİȢ IJȠȣȢ ȕĮıȚțȠȪȢ IJȡȩʌȠȣȢ İȚıȩįȠȣ-İȟȩįȠȣ ıIJȠ ȀİijȐȜĮȚȠ 5. ǹȢ ȖȡȐȥȠȣµİ ȜȠȚʌȩȞ IJȠ ʌȡȫIJȠ µĮȢ ʌȡȩȖȡĮµµĮ ıİ C: main() { printf("Good morning World !"); } ǼțIJİȜȫȞIJĮȢ ĮȣIJȩ IJȠ ʌȡȩȖȡĮµµĮ șĮ ʌȐȡȠȣµİ ıIJȘȞ ȠșȩȞȘ: Good morning World ! ǹȣIJȩ İȓȞĮȚ IJȠ ĮʌȠIJȑȜİıµĮ IJȘȢ µȠȞĮįȚțȒȢ İȞIJȠȜȒȢ IJȠȣ ʌȡȠȖȡȐµµĮIJȩȢ µĮȢ. Ǿ ȜȑȟȘ "printf" İȓȞĮȚ ȩȞȠµĮ ıȣȞȐȡIJȘıȘȢ ȩʌȦȢ țĮȚ Ș ȜȑȟȘ "main". ȂȚĮȢ țĮȚ Ș "printf" İȓȞĮȚ ıȣȞȐȡIJȘıȘ ĮțȠȜȠȣșİȓIJĮȚ Įʌȩ ʌĮȡİȞșȑıİȚȢ. Ȉ'ĮȣIJȒ IJȘȞ ʌİȡȓʌIJȦıȘ, ȠȚ ʌĮȡİȞșȑıİȚȢ ʌİȡȚȑȤȠȣȞ IJȘȞ ʌȡȠȢ İțIJȪʌȦıȘ ijȡȐıȘ, Ș ȠʌȠȓĮ ʌİȡȚțȜİȓİIJĮȚ Įʌȩ įȚʌȜȐ İȚıĮȖȦȖȚțȐ (" "). ǹȣIJȒ Ș ijȡȐıȘ İȓȞĮȚ ȑȞĮ ȩȡȚıµĮ ıȣȞȐȡIJȘıȘȢ. ȆİȡȚııȩIJİȡĮ ȖȚĮ IJĮ ȠȡȓıµĮIJĮ șĮ įȠȪµİ ıIJȠ ȀİijȐȜĮȚȠ 7. Ǿ ijȡȐıȘ "Good morning World !" İȓȞĮȚ ȑȞĮ ʌĮȡȐįİȚȖµĮ ĮȜijĮȡȚșµȘIJȚțȠȪ. ȈIJȘȞ C, ȠȚ ıIJĮșİȡȑȢ ĮȜijĮȡȚșµȘIJȚțȠȪ, ȩʌȦȢ ĮȣIJȩ, ʌİȡȚțȜİȓȠȞIJĮȚ Įʌȩ įȚʌȜȐ İȚıĮȖȦȖȚțȐ. ȋȡȘıȚµȠʌȠȚȒıĮµİ IJȘ ıȣȞȐȡIJȘıȘ printf() ȤȦȡȓȢ ȞĮ ȣʌȐȡȤİȚ Ƞ țȫįȚțĮȢ ĮȣIJȒȢ IJȘȢ ıȣȞȐȡIJȘıȘȢ ıIJȠ ʌȡȩȖȡĮµµȐ µĮȢ. ȅ țȫįȚțĮȢ ȖȚ'ĮȣIJȒ IJȘ ıȣȞȐȡIJȘıȘ ȣʌȐȡȤİȚ ıIJȠ ĮȡȤİȓȠ ȕȚȕȜȚȠșȒțȘȢ IJȘȢ ȖȜȫııĮȢ. ǵIJĮȞ µİIJĮȖȜȦIJIJȓȗİIJĮȚ IJȠ ʌȡȩȖȡĮµµĮ, Ƞ µİIJĮȖȜȦIJIJȚıIJȒȢ ĮȞIJȚȜĮµȕȐȞİIJĮȚ ȩIJȚ Ș printf() įİȞ İȓȞĮȚ µȚĮ ıȣȞȐȡIJȘıȘ ʌȠȣ ʌİȡȚȜĮµȕȐȞİIJĮȚ ıIJȠ ʌȘȖĮȓȠ ʌȡȩȖȡĮµµĮ țĮȚ ȑIJıȚ ĮijȒȞİȚ ȑȞĮ µȒȞȣµĮ ıIJȠ įȚĮıȣȞįİIJȒ ȖȚ'ĮȣIJȩ IJȠ ȖİȖȠȞȩȢ. ȅ įȚĮıȣȞįİIJȒȢ ȥȐȤȞİȚ ıIJȠ ĮȡȤİȓȠ ȕȚȕȜȚȠșȒțȘȢ IJȘȢ ȖȜȫııĮȢ, ȕȡȓıțİȚ IJȠ țȠµµȐIJȚ ĮȣIJȠȪ IJȠȣ ĮȡȤİȓȠȣ ʌȠȣ ʌİȡȚȜĮµȕȐȞİȚ IJȘȞ printf() țĮȚ ʌȡȠțĮȜİȓ IJȘ įȚĮıȪȞįİıȘ ĮȣIJȠȪ IJȠȣ țȠµµĮIJȚȠȪ µİ IJȠ ʌȘȖĮȓȠ ʌȡȩȖȡĮµµĮ. ȆĮȡȩµȠȚĮ įȚĮįȚțĮıȓĮ ĮțȠȜȠȣșİȓIJĮȚ ȖȚĮ ȩȜİȢ IJȚȢ ıȣȞĮȡIJȒıİȚȢ ȕȚȕȜȚȠșȒțȘȢ IJȘȢ C. Ǿ ıȣȞȐȡIJȘıȘ printf() µʌȠȡİȓ ȞĮ ȤȡȘıȚµȠʌȠȚȘșİȓ ȖȚĮ IJȘȞ İțIJȪʌȦıȘ ıIJȘȞ ȠșȩȞȘ µİ țĮșȠȡȚıµȑȞȘ µȠȡijȒ IJȩıȠ ıIJĮșİȡȫȞ ȩıȠ țĮȚ µİIJĮȕȜȘIJȫȞ. īȚĮ ʌĮȡȐįİȚȖµĮ ĮȢ įȠȪµİ IJȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ:
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
8
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
main() { printf("ǹȣIJȩȢ İȓȞĮȚ Ƞ ĮȡȚșµȩȢ %d",2); } ǼțIJİȜȫȞIJĮȢ ĮȣIJȩ IJȠ ʌȡȩȖȡĮµµĮ șĮ ʌȐȡȠȣµİ ıIJȘȞ ȠșȩȞȘ: ǹȣIJȩȢ İȓȞĮȚ Ƞ ĮȡȚșµȩȢ 2 ǹȢ įȠȪµİ IJȫȡĮ ȖȚĮIJȓ IJȣʌȫșȘțİ Ƞ ĮȡȚșµȩȢ 2 țĮȚ IJȚ ʌȡȠțĮȜİȓ IJȠ %d. ȈIJȘȞ ıȣȞȐȡIJȘıȘ printf() µʌȠȡȠȪȞ ȞĮ įȠșȠȪȞ ʌĮȡĮʌȐȞȦ Įʌȩ ȑȞĮ ȠȡȓıµĮIJĮ. ȈIJȠ ʌȡȠȘȖȠȪµİȞȠ ʌĮȡȐįİȚȖµĮ IJȘȢ įȫıĮµİ µȩȞȠ ȑȞĮ: IJȠ ĮȜijĮȡȚșµȘIJȚțȩ "Good morning World !". ȉȫȡĮ IJȘȢ įȫıĮµİ įȪȠ: ȑȞĮ ĮȜijĮȡȚșµȘIJȚțȩ ("ǹȣIJȩȢ İȓȞĮȚ Ƞ ĮȡȚșµȩȢ %d") ıIJĮ ĮȡȚıIJİȡȐ țĮȚ µȓĮ IJȚµȒ (IJȠȞ ĮțȑȡĮȚȠ ĮȡȚșµȩ 2) ıIJĮ įİȟȚȐ. ǹȣIJȐ IJĮ įȪȠ ȠȡȓıµĮIJĮ ȤȦȡȓȗȠȞIJĮȚ µİ țȩµµĮ. Ǿ ıȣȞȐȡIJȘıȘ printf() ʌĮȓȡȞİȚ IJȘȞ IJȚµȒ įİȟȚȐ Įʌȩ IJȠ țȩµµĮ țĮȚ IJȘȞ IJȠʌȠșİIJİȓ ıIJȠ ĮȜijĮȡȚșµȘIJȚțȩ ĮȡȚıIJİȡȐ. Ǿ șȑıȘ IJȠȣ ĮȜijĮȡȚșµȘIJȚțȠȪ ȩʌȠȣ IJȠʌȠșİIJİȓIJĮȚ Ș IJȚµȒ, İȓȞĮȚ İțİȓȞȘ ıIJȘȞ ȠʌȠȓĮ ȣʌȐȡȤİȚ ȑȞĮȢ țĮșȠȡȚıIJȒȢ µȠȡijȒȢ (format specifier). ȅ țĮșȠȡȚıIJȒȢ µȠȡijȒȢ ȣʌȠįİȚțȞȪİȚ ıIJȘȞ printf() ʌȠȪ ȞĮ IJȠʌȠșİIJȒıİȚ IJȘȞ IJȚµȒ ıIJȠ ĮȜijĮȡȚșµȘIJȚțȩ țĮȚ IJȓ µȠȡijȒ ȞĮ ȤȡȘıȚµȠʌȠȚȒıİȚ ȖȚĮ ȞĮ İțIJȣʌȫıİȚ IJȘȞ IJȚµȒ. ȈIJȠ ʌĮȡĮʌȐȞȦ ʌĮȡȐįİȚȖµĮ, IJȠ %d ȣʌȠįİȚțȞȪİȚ ıIJȘȞ printf() ȞĮ IJȣʌȫıİȚ IJȘȞ IJȚµȒ 2 ıĮȞ įİțĮįȚțȩ ĮțȑȡĮȚȠ (ıIJȠ įİțĮįȚțȩ ıȪıIJȘµĮ ĮȡȓșµȘıȘȢ). ȂʌȠȡȠȪµİ ȞĮ ȤȡȘıȚµȠʌȠȚȒıȠȣµİ țĮȚ ȐȜȜȠȣȢ țĮșȠȡȚıIJȑȢ ȖȚĮ IJȘȞ İțIJȪʌȦıȘ IJȠȣ ĮȡȚșµȠȪ 2. īȚĮ ʌĮȡȐįİȚȖµĮ IJȠ %f șĮ ȑțĮȞİ IJȠ 2 ȞĮ IJȣʌȦșİȓ ıĮȞ ĮȡȚșµȩȢ țȚȞȘIJȒȢ ȣʌȠįȚĮıIJȠȜȒȢ țĮȚ IJȠ %x șĮ IJȠ IJȪʌȦȞİ ıĮȞ įİțĮİȟĮįȚțȩ ĮțȑȡĮȚȠ (ıIJȠ įİțĮİȟĮįȚțȩ ıȪıIJȘµĮ ĮȡȓșµȘıȘȢ). ȋȡȘıȚµȠʌȠȚȫȞIJĮȢ țĮșȠȡȚıIJȑȢ µȠȡijȒȢ µʌȠȡȠȪµİ ȞĮ İțIJȣʌȫıȠȣµİ IJȠ ȓįȚȠ țĮȜȐ ĮȜijĮȡȚșµȘIJȚțȐ ȩʌȦȢ țĮȚ ĮȡȚșµȠȪȢ. īȚĮ ʌĮȡȐįİȚȖµĮ ıIJȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ, ȑȞĮ ĮȜijĮȡȚșµȘIJȚțȩ țĮȚ ȑȞĮȢ ĮȡȚșµȩȢ IJȣʌȫȞȠȞIJĮȚ µĮȗȓ: main() { printf("ȅ %s İȓȞĮȚ %d İIJȫȞ","ȃȓțȠȢ",30); } ǼțIJİȜȫȞIJĮȢ ĮȣIJȩ IJȠ ʌȡȩȖȡĮµµĮ șĮ ʌȐȡȠȣµİ ıIJȘȞ ȠșȩȞȘ: ȅ ȃȓțȠȢ İȓȞĮȚ 30 İIJȫȞ ȋȡȘıȚµȠʌȠȚȒıĮµİ IJȠȞ țĮșȠȡȚıIJȒ µȠȡijȒȢ %s ȖȚĮ ȞĮ IJȣʌȫıȠȣµİ ĮȜijĮȡȚșµȘIJȚțȒ ıIJĮșİȡȐ "ȃȓțȠȢ" țĮȚ IJȠ %d ȖȚĮ IJȘȞ ĮțȑȡĮȚĮ ıIJĮșİȡȐ 30.
IJȘȞ
ȅ IJİȜİȣIJĮȓȠȢ țĮșȠȡȚıIJȒȢ µȠȡijȒȢ ʌȠȣ șĮ įȠȪµİ İįȫ İȓȞĮȚ Ƞ %c ʌȠȣ ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ȩIJĮȞ șȑȜȠȣµİ ȞĮ İțIJȣʌȫıȠȣµİ ȤĮȡĮțIJȒȡİȢ. ȆİȡȚııȩIJİȡĮ ȖȚĮ IJȠȣȢ țĮșȠȡȚıIJȑȢ µȠȡijȒȢ șĮ įȠȪµİ ıIJȠ ȀİijȐȜĮȚȠ 5, ȩʌȠȣ șĮ İȟİIJȐıȠȣµİ µİ ʌİȡȚııȩIJİȡȘ ȜİʌIJȠµȑȡİȚĮ IJȚȢ ıȣȞĮȡIJȒıİȚȢ printf() țĮȚ scanf(). ǹȢ șİȦȡȒıȠȣµİ IJȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ: main() { printf("ȉȠ ȖȡȐµµĮ %c İȓȞĮȚ",'Į'); printf(" IJȠ ĮȡȤȚțȩ IJȘȢ ȜȑȟȘȢ %s","ȐȜijĮ"); } Ǿ ȑȟȠįȠȢ ĮȣIJȠȪ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ İȓȞĮȚ:
ȉĮ īİȞȚțȐ ȋĮȡĮțIJȘȡȚıIJȚțȐ IJȘȢ C
9
ȉȠ ȖȡȐµµĮ Į İȓȞĮȚ IJȠ ĮȡȤȚțȩ IJȘȢ ȜȑȟȘȢ ȐȜijĮ Ȉ'ĮȣIJȩ IJȠ ʌȡȩȖȡĮµµĮ IJȠ 'Į' İȓȞĮȚ ȤĮȡĮțIJȒȡĮȢ țĮȚ IJȠ "ȐȜijĮ" ĮȜijĮȡȚșµȘIJȚțȩ. ǹȢ ʌȡȠıȑȟȠȣµİ ȩIJȚ Ƞ ȤĮȡĮțIJȒȡĮȢ ʌİȡȚțȜİȓİIJĮȚ Įʌȩ µȠȞȐ İȚıĮȖȦȖȚțȐ, İȞȫ IJȠ ĮȜijĮȡȚșµȘIJȚțȩ Įʌȩ įȚʌȜȐ. ȆĮȡĮIJȘȡȠȪµİ İʌȓıȘȢ ȩIJȚ ʌĮȡȩȜȠ ʌȠȣ IJȠ ĮʌȠIJȑȜİıµĮ İțIJȣʌȫȞİIJĮȚ Įʌȩ įȪȠ ȟİȤȦȡȚıIJȑȢ İȞIJȠȜȑȢ, ıIJȘȞ ȠșȩȞȘ ʌĮȓȡȞȠȣµİ µȓĮ ȖȡĮµµȒ țİȚµȑȞȠȣ. ǹȣIJȩ ȖȓȞİIJĮȚ ȖȚĮIJȓ Ș printf() įİȞ İțIJȣʌȫȞİȚ ĮȣIJȩµĮIJĮ ȤĮȡĮțIJȒȡĮ țĮȚȞȠȪȡȖȚĮȢ ȖȡĮµµȒȢ.
ĬĮ ȖȞȦȡȓıȠȣµİ IJȫȡĮ µİ ıȣȞIJȠµȓĮ IJȘ ıȣȞȐȡIJȘıȘ scanf() ʌȠȣ ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ȖȚĮ İȓıȠįȠ įİįȠµȑȞȦȞ ıIJȠ ʌȡȩȖȡĮµµĮ, Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ. Ǿ µȠȡijȒ IJȘȢ, ʌȠȣ șĮ ʌİȡȚȖȡĮijİȓ ĮȞĮȜȣIJȚțȐ ıIJȠ ȀİijȐȜĮȚȠ 5, İȓȞĮȚ ʌĮȡȩµȠȚĮ µİ ĮȣIJȒ IJȘȢ printf(). ȋȡȘıȚµȠʌȠȚİȓ IJȠȣȢ ȓįȚȠȣȢ țĮșȠȡȚıIJȑȢ µȠȡijȒȢ, ȖȚĮ IJȘȞ ĮȞȐȖȞȦıȘ IJȚµȫȞ, µİ ĮȣIJȠȪȢ IJȘȢ printf(). ȈIJȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ ijĮȓȞİIJĮȚ µȚĮ IJȣʌȚțȒ ȤȡȒıȘ IJȘȢ scanf(). main() { int i;
}
printf("ǻȫıİ IJȘȞ ȘȜȚțȓĮ ıȠȣ ıİ ȤȡȩȞȚĮ: "); scanf("%d",&i); printf("ǼȓıĮȚ %d İIJȫȞ",i);
ȈIJȘȞ IJȡȓIJȘ ȖȡĮµµȒ IJȠȣ ʌĮȡĮʌȐȞȦ ʌȡȠȖȡȐµµĮIJȠȢ, ȖȓȞİIJĮȚ ȠȡȚıµȩȢ µȚĮȢ µİIJĮȕȜȘIJȒȢ ĮțİȡĮȓȠȣ IJȪʌȠȣ, µİ ȩȞȠµĮ i, ʌȠȣ șĮ ȤȡȘıȚµȠʌȠȚȘșİȓ ıIJȠ ʌȡȩȖȡĮµµĮ. ĬĮ İȟİIJȐıȠȣµİ ĮȞĮȜȣIJȚțȐ IJȠȣȢ įȣȞĮIJȠȪȢ IJȪʌȠȣȢ IJȦȞ µİIJĮȕȜȘIJȫȞ țĮȚ IJȚȢ įȘȜȫıİȚȢ IJȠȣȢ, ıIJȠ ȀİijȐȜĮȚȠ 4. ǹȢ ʌĮȡĮIJȘȡȒıȠȣµİ IJȠ ıȪµȕȠȜȠ & ʌȠȣ ȣʌȐȡȤİȚ ʌȡȚȞ Įʌȩ IJȠ ȩȞȠµĮ IJȘȢ µİIJĮȕȜȘIJȒȢ ıIJȘȞ ıȣȞȐȡIJȘıȘ scanf(), șĮ įȠȪµİ IJȘ ȤȡȘıȚµȩIJȘIJĮ ĮȣIJȠȪ IJȠȣ IJİȜİıIJȒ ĮȡȖȩIJİȡĮ, ıIJȠ ȀİijȐȜĮȚȠ 10, ʌȡȠȢ IJȠ ʌĮȡȩȞ ĮȢ ıȘµİȚȫıȠȣµİ ȩIJȚ Ș scanf() ĮʌĮȚIJİȓ IJȘ ȤȡȒıȘ IJȠȣ & ʌȡȚȞ IJȠ ȩȞȠµĮ IJȘȢ µİIJĮȕȜȘIJȒȢ. ȀĮIJȐ IJĮ ȐȜȜĮ, ȑȞĮ įİȓȖµĮ İʌȚțȠȚȞȦȞȓĮȢ µİ IJȠ ʌȡȩȖȡĮµµĮ İȓȞĮȚ: ǻȫıİ IJȘȞ ȘȜȚțȓĮ ıȠȣ ıİ ȤȡȩȞȚĮ: 30 ǼȓıĮȚ 30 İIJȫȞ Ǿ ıȣȞȐȡIJȘıȘ scanf() µʌȠȡİȓ ȞĮ įİȤIJİȓ µȠȞȠµȚȐȢ įİįȠµȑȞĮ ıİ įȚȐijȠȡİȢ µİIJĮȕȜȘIJȑȢ, ȩʌȦȢ ĮțȡȚȕȫȢ țĮȚ Ș printf() µʌȠȡİȓ ȞĮ İțIJȣʌȫıİȚ IJȚȢ IJȚµȑȢ ʌİȡȚııȠIJȑȡȦȞ IJȠȣ İȞȩȢ ȠȡȚıµȐIJȦȞ IJȘȢ. Ȇ.Ȥ: scanf("%c %s %d", &set, &game, &time); Ȉ'ĮȣIJȒ IJȘȞ ʌİȡȓʌIJȦıȘ Ș scanf() įȑȤİIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ IJȚµȑȢ ȖȚĮ IJȡİȚȢ µİIJĮȕȜȘIJȑȢ (Ș ʌȡȫIJȘ IJȪʌȠȣ ȤĮȡĮțIJȒȡĮ, Ș įİȪIJİȡȘ ĮȜijĮȡȚșµȘIJȚțȠȪ țĮȚ Ș IJȡȓIJȘ ĮțİȡĮȓȠȣ IJȪʌȠȣ). ǵʌȦȢ ȑȤİȚ ıȣȞIJĮȤșİȓ Ș scanf(), ȠȚ IJȚµȑȢ ʌȡȑʌİȚ (țĮIJȐ IJȘȞ İȚıĮȖȦȖȒ IJȠȣȢ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ) ȞĮ ȤȦȡȓȗȠȞIJĮȚ µİ ȑȞĮ Ȓ ʌİȡȚııȩIJİȡĮ țİȞȐ
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
10
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
įȚĮıIJȒµĮIJĮ. ǹȣIJȩ ıȣµȕĮȓȞİȚ įȚȩIJȚ ȑȤȠȣµİ ȤȦȡȓıİȚ µİ țİȞȐ IJȠȣȢ țĮșȠȡȚıIJȑȢ µȠȡijȒȢ ıIJȘȞ scanf(). ȈIJȘȞ ȠȣıȓĮ µʌȠȡȠȪµİ ȞĮ ȤȡȘıȚµȠʌȠȚȒıȠȣµİ ȖȚĮ IJȠ įȚĮȤȦȡȚıµȩ IJȦȞ IJȚµȫȞ, ȠʌȠȚȠįȒʌȠIJİ Ȝİȣțȩ ȤĮȡĮțIJȒȡĮ (țİȞȩ, țĮȚȞȠȪȡȖȚĮ ȖȡĮµµȒ Ȓ tab). ǹȞ ȩµȦȢ șȑȜĮµİ țĮIJȐ IJȘȞ İȚıĮȖȦȖȒ ȞĮ ȤȦȡȓȗȠȣµİ IJȚȢ IJȚµȑȢ µİ ȐȜȜȠȞ ȤĮȡĮțIJȒȡĮ, (ʌ.Ȥ. țȩµµĮ) șĮ ȑʌȡİʌİ ȞĮ ıȣµʌİȡȚȜȐȕȠȣµİ ĮȣIJȩȞ IJȠ ȤĮȡĮțIJȒȡĮ µİIJĮȟȪ IJȦȞ țĮșȠȡȚıIJȫȞ µȠȡijȒȢ: scanf("%c,%s,%d", &set, &game, &time);
11
ȀǼĭǹȁǹǿȅ 3
ǺǹȈǿȀǹ ȈȉȅǿȋǼǿǹ 3.1 ȉȅ ǹȁĭǹǺǾȉȅ ǵȜİȢ ȠȚ ȖȜȫııİȢ, IJȩıȠ ȠȚ ijȣıȚțȑȢ ȩıȠ țĮȚ ȠȚ ȖȜȫııİȢ ʌȡȠȖȡĮµµĮIJȚıµȠȪ, țȐȞȠȣȞ ȤȡȒıȘ İȞȩȢ ĮȜijĮȕȒIJȠȣ. ȀȐȞȠȞIJĮȢ ȤȡȒıȘ IJȠȣ ĮȜijĮȕȒIJȠȣ, µʌȠȡȠȪµİ ȞĮ įȘµȚȠȣȡȖȒıȠȣµİ IJȚȢ ȜȑȟİȚȢ, IJȚȢ ʌĮȡĮıIJȐıİȚȢ (Ȓ İțijȡȐıİȚȢ) țĮȚ IJȚȢ İȞIJȠȜȑȢ (Ȓ ʌȡȠIJȐıİȚȢ) IJȘȢ ȖȜȫııĮȢ, ȣʌĮțȠȪȠȞIJĮȢ ıIJȠȣȢ ȖȡĮµµĮIJȚțȠȪȢ țĮȚ ıȣȞIJĮțIJȚțȠȪȢ țĮȞȩȞİȢ IJȘȢ. ȉȠ ĮȜijȐȕȘIJȠ IJȘȢ C ĮʌȠIJİȜİȓIJĮȚ Įʌȩ IJȠȣȢ ʌĮȡĮțȐIJȦ ȤĮȡĮțIJȒȡİȢ: (i)
ȉĮ ȖȡȐµµĮIJĮ IJȠȣ ȜĮIJȚȞȚțȠȪ ĮȜijĮȕȒIJȠȣ, țİijĮȜĮȓĮ țĮȚ ʌİȗȐ: A..Z, a..z.
(ii) ȉĮ ȥȘijȓĮ 0..9. ȈIJȘȞ ʌİȡȓʌIJȦıȘ ʌȠȣ șȑȜȠȣµİ ȞĮ ʌĮȡĮıIJȒıȠȣµİ ĮȡȚșµȠȪȢ ıIJȠ įİțĮİȟĮįȚțȩ ıȪıIJȘµĮ ĮȡȓșµȘıȘȢ, ȥȘijȓĮ șİȦȡȠȪȞIJĮȚ țĮȚ IJĮ ȖȡȐµµĮIJĮ A ȑȦȢ F (Ȓ ȚıȠįȪȞĮµĮ a ȑȦȢ f). (iii) ȉȠȣȢ įȚȐijȠȡȠȣȢ IJİȜİıIJȑȢ. Ǿ C įȚĮșȑIJİȚ ȑȞĮ ʌȠȜȪ ʌȜȠȪıȚȠ ıȪȞȠȜȠ IJİȜİıIJȫȞ. DzȞĮȢ IJİȜİıIJȒȢ (operator) İȓȞĮȚ ȑȞĮ ıȪµȕȠȜȠ, IJȠȣ ȠʌȠȓȠȣ Ș ıȘµĮıȓĮ İȓȞĮȚ țĮșȠȡȚıµȑȞȘ ȖȚĮ IJȠ µİIJĮȖȜȦIJIJȚıIJȒ. ȅȚ IJİȜİıIJȑȢ ʌȠȣ įȚĮșȑIJİȚ Ș C µʌȠȡȠȪȞ ȞĮ țĮIJĮIJĮȤșȠȪȞ ıIJȚȢ İʌȩµİȞİȢ țĮIJȘȖȠȡȓİȢ: IJȠȣȢ ĮȡȚșµȘIJȚțȠȪȢ (arithmetic), IJȠȣȢ ıȣıȤİIJȚıIJȚțȠȪȢ (relational), IJȠȣȢ ȜȠȖȚțȠȪȢ (logical) IJȠȣȢ IJİȜİıIJȑȢ bit (bitwise), IJȠȣȢ IJİȜİıIJȑȢ įİȚțIJȫȞ, IJȠȣȢ IJİȜİıIJȑȢ ĮʌȩįȠıȘȢ IJȚµȒȢ țĮȚ İȚįȚțȠȪȢ IJİȜİıIJȑȢ ȖȚĮ İȚįȚțȑȢ ȜİȚIJȠȣȡȖȓİȢ. ȈIJȠȞ ȆȓȞĮțĮ 3.1 ijĮȓȞȠȞIJĮȚ ĮʌȜȫȢ ȠȚ IJİȜİıIJȑȢ țȐșİ țĮIJȘȖȠȡȓĮȢ. ĬĮ įȠȪµİ țĮșȑȞĮȞ Įʌȩ ĮȣIJȠȪȢ, ĮȞĮȜȣIJȚțȐ ıİ İʌȩµİȞĮ țİijȐȜĮȚĮ. (iv) ȉĮ įȚȐijȠȡĮ İȚįȚțȐ ıȪµȕȠȜĮ. Ǿ C įȚĮșȑIJİȚ İʌȓıȘȢ ȑȞĮȞ ĮȡȚșµȩ İȚįȚțȫȞ ıȣµȕȩȜȦȞ, ʌȠȣ ȤȡȘıȚµȠʌȠȚȠȪȞIJĮȚ ȖȚĮ įȚȐijȠȡȠȣȢ ıțȠʌȠȪȢ, ȩʌȦȢ ʌ.Ȥ. ȖȚĮ ȚİȡȐȡȤȘıȘ IJȦȞ ʌȡȐȟİȦȞ ıİ ĮȡȚșµȘIJȚțȑȢ ʌĮȡĮıIJȐıİȚȢ, ȠȡȚȠșȑIJȘıȘ ĮȡȤȒȢ țĮȚ IJȑȜȠȣȢ İȞȩȢ țȠµµĮIJȚȠȪ țȫįȚțĮ (İȓįĮµİ ĮȣIJȐ IJĮ ıȪµȕȠȜĮ ıIJȘȞ § 2.2), IJİȡµĮIJȚıµȩ İȞIJȠȜȫȞ ț.Ȝ.ʌ. ȈIJȠȞ ȆȓȞĮțĮ 3.1 ijĮȓȞȠȞIJĮȚ ĮȣIJȐ IJĮ İȚįȚțȐ ıȪµȕȠȜĮ. Ǿ İȟȒȖȘıȘ IJȘȢ ȜİȚIJȠȣȡȖȓĮȢ țĮșİȞȩȢ ıȣµȕȩȜȠȣ șĮ ȖȓȞİIJĮȚ ȩIJĮȞ ĮȣIJȩ ıȣȞĮȞIJȐIJĮȚ ȖȚĮ ʌȡȫIJȘ ijȠȡȐ (ȩʌȦȢ ȑȖȚȞİ ȖȚĮ IJĮ { } ıIJȘȞ § 2.2 țĮȚ IJĮ " " ıIJȘȞ § 2.3). (v) ȉȠȣȢ įȚȐijȠȡȠȣȢ ȤĮȡĮțIJȒȡİȢ İȚįȚțȫȞ ȜİȚIJȠȣȡȖȚȫȞ Ȓ ĮțȠȜȠȣșȓİȢ įȚĮijȣȖȒȢ Ȓ ıIJĮșİȡȑȢ ĮȞȐıIJȡȠijȘȢ țĮșȑIJȠȣ. ǹȣIJȠȓ İȓIJİ İȓȞĮȚ ȤĮȡĮțIJȒȡİȢ µȘ-İțIJȣʌȫıȚµȠȚ İȓIJİ ȤĮȡĮțIJȒȡİȢ İȜȑȖȤȠȣ İȓIJİ ȤĮȡĮțIJȒȡİȢ ʌȠȣ ȤȡȘıȚµȠʌȠȚȠȪȞIJĮȚ ȖȚĮ İȚįȚțȑȢ ȜİȚIJȠȣȡȖȓİȢ. ȀĮșȑȞĮȢ Įʌ'ĮȣIJȠȪȢ ıȣȞȓıIJĮIJĮȚ Įʌȩ µȓĮ ĮȞȐıIJȡȠijȘ țȐșİIJȠ (\) ĮțȠȜȠȣșȠȪµİȞȘ Įʌȩ ȑȞĮȞ Ȓ ʌİȡȚııȩIJİȡȠȣȢ ȐȜȜȠȣȢ ȤĮȡĮțIJȒȡİȢ. ǹȣIJȑȢ IJȚȢ ĮțȠȜȠȣșȓİȢ Ƞ µİIJĮȖȜȦIJIJȚıIJȒȢ IJȚȢ ĮȞIJȚȜĮµȕȐȞİIJĮȚ ȦȢ ȑȞĮ ȤĮȡĮțIJȒȡĮ ıIJȠȞ ȠʌȠȓȠȞ țĮȚ ĮʌȠįȓįİȚ IJȘȞ țĮIJȐȜȜȘȜȘ ıȘµĮıȓĮ. ȅȚ ȤĮȡĮțIJȒȡİȢ ĮȣIJȠȓ ĮȞĮijȑȡȠȞIJĮȚ ıIJȘȞ § 3.3.2 (ȈIJĮșİȡȑȢ ȋĮȡĮțIJȒȡĮ).
12
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ȀĮIJȘȖȠȡȓĮ
ȉİȜİıIJȑȢ - + * / % -- ++ > >= < <= == != && || ! & | ^ ~ >> << * & = += -= *= /= %= &= ?: , -> .
ǹȡȚșµȘIJȚțȠȓ IJİȜİıIJȑȢ ȈȣıȤİIJȚıIJȚțȠȓ IJİȜİıIJȑȢ ȁȠȖȚțȠȓ IJİȜİıIJȑȢ ȉİȜİıIJȑȢ bit ȉİȜİıIJȑȢ įİȚțIJȫȞ ȉİȜİıIJȑȢ ĮʌȩįȠıȘȢ IJȚµȒȢ ǻȚȐijȠȡȠȚ IJİȜİıIJȑȢ
( )
ȉĮ İȚįȚțȐ ȈȪµȕȠȜĮ IJȘȢ C [ ] /* */ { } ; "
^=
'
|=
<<=
>>=
\
ȆȓȞĮțĮȢ 3.1: ȅȚ IJİȜİıIJȑȢ țĮȚ IJĮ İȚįȚțȐ ıȪµȕȠȜĮ IJȘȢ C
3.2 ȅǿ ȁǼȄǼǿȈ ȅȚ ȜȑȟİȚȢ IJȘȢ C, ȤȦȡȓȗȠȞIJĮȚ ıİ įȪȠ țĮIJȘȖȠȡȓİȢ: ıIJȚȢ įİıµİȣµȑȞİȢ ȜȑȟİȚȢ țĮȚ ıIJĮ ĮȞĮȖȞȦȡȚıIJȚțȐ IJȠȣ ʌȡȠȖȡĮµµĮIJȚıIJȒ. ǻİıµİȣµȑȞİȢ ȜȑȟİȚȢ (Ȓ ȜȑȟİȚȢ-țȜİȚįȚȐ, keywords) İȓȞĮȚ İțİȓȞİȢ ȠȚ ȜȑȟİȚȢ IJȦȞ ȠʌȠȓȦȞ Ș ıȘµĮıȓĮ İȓȞĮȚ İȚįȚțȒ țĮȚ ĮµİIJȐȕȜȘIJȘ ȖȚĮ IJȠ µİIJĮȖȜȦIJIJȚıIJȒ. ǻİȞ İʌȚIJȡȑʌİIJĮȚ ȞĮ ȖȓȞİIJĮȚ ȤȡȒıȘ µȚĮȢ įİıµİȣµȑȞȘȢ ȜȑȟȘȢ ȖȚĮ ȐȜȜȠ ıțȠʌȩ ı'ȑȞĮ ʌȡȩȖȡĮµµĮ. ȅ ĮȡȚșµȩȢ IJȦȞ įİıµİȣµȑȞȦȞ ȜȑȟİȦȞ ʌȠȣ ȤȡȘıȚµȠʌȠȚİȓ Ș C, İȓȞĮȚ ıȤİIJȚțȐ µȚțȡȩȢ, ıȣȖțȡȚȞȩµİȞȠȢ µİ IJȠȞ ĮȞIJȓıIJȠȚȤȠ ĮȡȚșµȩ ȐȜȜȦȞ ȖȜȦııȫȞ ʌȡȠȖȡĮµµĮIJȚıµȠȪ. ȈIJȠȞ ȆȓȞĮțĮ 3.2 ijĮȓȞȠȞIJĮȚ ȠȚ 32 įİıµİȣµȑȞİȢ ȜȑȟİȚȢ IJȘȢ C, ȩʌȦȢ ȠȡȓȗİIJĮȚ Įʌȩ IJȠ ʌȡȩIJȣʌȠ ANSI. ǻȚȐijȠȡİȢ ȣȜȠʌȠȚȒıİȚȢ IJȘȢ C ȑȤȠȣȞ țȐʌȠȚİȢ İʌȚʌȜȑȠȞ įİıµİȣµȑȞİȢ ȜȑȟİȚȢ. īȚĮ ʌĮȡȐįİȚȖµĮ, ıIJȘȞ Turbo C ȑȤȠȣȞ ʌȡȠıIJİșİȓ țȐʌȠȚİȢ įİıµİȣµȑȞİȢ ȜȑȟİȚȢ ȖȚĮ țĮȜȪIJİȡȘ įȚĮȤİȓȡȚıȘ IJȘȢ µȞȒµȘȢ, țĮșȫȢ țĮȚ ȖȚĮ ȣʌȠıIJȒȡȚȟȘ įȚĮȖȜȦııȚțȠȪ ʌȡȠȖȡĮµµĮIJȚıµȠȪ țĮȚ įȚĮțȠʌȫȞ (interrupts). ȈIJȠȞ ȆȓȞĮțĮ 3.3 ijĮȓȞİIJĮȚ IJȠ ıȪȞȠȜȠ IJȦȞ İʌİțIJĮµȑȞȦȞ įİıµİȣµȑȞȦȞ ȜȑȟİȦȞ IJȘȢ Turbo C. ȆȡȠıȠȤȒ: ȩȜİȢ ȠȚ įİıµİȣµȑȞİȢ ȜȑȟİȚȢ IJȘȢ C ȖȡȐijȠȞIJĮȚ µİ ʌİȗȐ ȖȡȐµµĮIJĮ. ǵʌȦȢ İȓȞĮȚ ȖȞȦıIJȩ, Ș C įȚĮțȡȓȞİȚ IJĮ ʌİȗȐ Įʌȩ IJĮ țİijĮȜĮȓĮ ȖȡȐµµĮIJĮ. DzIJıȚ ʌ.Ȥ. IJȠ while İȓȞĮȚ įİıµİȣµȑȞȘ ȜȑȟȘ, İȞȫ IJȠ WHILE Ȓ IJȠ While įİȞ İȓȞĮȚ. auto break case char const continue default do
double else enum extern float for goto if
int long register return short signed sizeof static
struct switch typedef union unsigned void volatile while
ȆȓȞĮțĮȢ 3.2: ȅȚ 32 įİıµİȣµȑȞİȢ ȜȑȟİȚȢ IJȘȢ C, ȩʌȦȢ ȠȡȓȗȠȞIJĮȚ Įʌȩ IJȠ ʌȡȩIJȣʌȠ ANSI
ǺĮıȚțȐ ȈIJȠȚȤİȓĮ
asm _ss interrupt
_cs cdecl near
_ds far pascal
13
_es huge
ȆȓȞĮțĮȢ 3.3: ȉȠ ıȪȞȠȜȠ IJȦȞ İʌİțIJĮµȑȞȦȞ įİıµİȣµȑȞȦȞ ȜȑȟİȦȞ IJȘȢ Turbo C
ǹȞĮȖȞȦȡȚıIJȚțȐ (identifiers) İȓȞĮȚ IJĮ ıȣµȕȠȜȚțȐ ȠȞȩµĮIJĮ ʌȠȣ įȓȞȠȞIJĮȚ Įʌȩ IJȠȞ ʌȡȠȖȡĮµµĮIJȚıIJȒ ıIJȚȢ µİIJĮȕȜȘIJȑȢ, IJȚȢ ıIJĮșİȡȑȢ, IJȚȢ ıȣȞĮȡIJȒıİȚȢ țĮȚ ıİ įȚȐijȠȡĮ ȐȜȜĮ ĮȞIJȚțİȓµİȞĮ İȞȩȢ ʌȡȠȖȡȐµµĮIJȠȢ. īȚĮ IJȠ ıȤȘµĮIJȚıµȩ IJȦȞ ĮȞĮȖȞȦȡȚıIJȚțȫȞ ʌȡȑʌİȚ ȞĮ ĮțȠȜȠȣșȠȪȞIJĮȚ ȠȚ ʌĮȡĮțȐIJȦ țĮȞȩȞİȢ: 1.
ȅ ʌȡȫIJȠȢ ȤĮȡĮțIJȒȡĮȢ İȞȩȢ ĮȞĮȖȞȦȡȚıIJȚțȠȪ ʌȡȑʌİȚ ȞĮ İȓȞĮȚ ȖȡȐµµĮ IJȠȣ ȜĮIJȚȞȚțȠȪ ĮȜijĮȕȒIJȠȣ Ȓ Ƞ ȤĮȡĮțIJȒȡĮȢ IJȘȢ ȣʌȠȖȡȐµµȚıȘȢ (_).
2.
ȅȚ ȣʌȩȜȠȚʌȠȚ ȤĮȡĮțIJȒȡİȢ µʌȠȡȠȪȞ ȞĮ İȓȞĮȚ ȖȡȐµµĮIJĮ IJȠȣ ȜĮIJȚȞȚțȠȪ ĮȜijĮȕȒIJȠȣ, ȥȘijȓĮ, Ȓ Ƞ ȤĮȡĮțIJȒȡĮȢ IJȘȢ ȣʌȠȖȡȐµµȚıȘȢ.
3.
ȉȠ µȑȖȚıIJȠ µȒțȠȢ İȞȩȢ ĮȞĮȖȞȦȡȚıIJȚțȠȪ İȟĮȡIJȐIJĮȚ Įʌȩ IJȘȞ ȣȜȠʌȠȓȘıȘ IJȘȢ C. ȉȠ ʌȡȩIJȣʌȠ ANSI C ȠȡȓȗİȚ ȩIJȚ ȜĮµȕȐȞȠȞIJĮȚ ȣʌȩȥȘ Įʌȩ IJȠ µİIJĮȖȜȦIJIJȚıIJȒ ȠȚ 31 ʌȡȫIJȠȚ ȤĮȡĮțIJȒȡİȢ İȞȩȢ ĮȞĮȖȞȦȡȚıIJȚțȠȪ. ǹȣIJȩ ıȘµĮȓȞİȚ ȩIJȚ ĮȞ įȪȠ ĮȞĮȖȞȦȡȚıIJȚțȐ ȑȤȠȣȞ IJȠȣȢ 31 ʌȡȫIJȠȣȢ ȤĮȡĮțIJȒȡİȢ IJȠȣȢ ȓįȚȠȣȢ țĮȚ įȚĮijȑȡȠȣȞ Įʌȩ IJȠȞ IJȡȚĮțȠıIJȩ įİȪIJİȡȠ țĮȚ µİIJȐ, Ƞ µİIJĮȖȜȦIJIJȚıIJȒȢ IJȘȢ C įİ șĮ µʌȠȡİȓ ȞĮ IJĮ ȟİȤȦȡȓıİȚ.
4.
DzȞĮ ĮȞĮȖȞȦȡȚıIJȚțȩ įİ µʌȠȡİȓ ȞĮ İȓȞĮȚ ȓįȚȠ µİ µȚĮ įİıµİȣµȑȞȘ ȜȑȟȘ IJȘȢ C.
Ȃİ ȕȐıȘ IJȠȣȢ ʌĮȡĮʌȐȞȦ țĮȞȩȞİȢ, IJĮ ʌĮȡĮțȐIJȦ ĮȞĮȖȞȦȡȚıIJȚțȐ İȓȞĮȚ ıȦıIJȐ:
maxnumber volts test1 Sep_96 ǼȞȫ IJĮ ʌĮȡĮțȐIJȦ İȓȞĮȚ ȜȐșȠȢ: version1.1 ʌİȡȚȑȤİȚ IJİȜİȓĮ Km/h ʌİȡȚȑȤİȚ / 25_Jun_94 ĮȡȤȓȗİȚ µİ ĮȡȚșµȩ $100 ĮȡȤȓȗİȚ µİ $ case İȓȞĮȚ įİıµİȣµȑȞȘ ȜȑȟȘ ȆȡȠıȠȤȒ: țĮșȩıȠȞ Ș C įȚĮțȡȓȞİȚ IJĮ țİijĮȜĮȓĮ Įʌȩ IJĮ ʌİȗȐ ȖȡȐµµĮIJĮ, IJĮ number, Number țĮȚ NUMBER, İȓȞĮȚ IJȡȓĮ įȚĮijȠȡİIJȚțȐ ĮȞĮȖȞȦȡȚıIJȚțȐ.
3.3 ȉǹ ǻǼǻȅȂǼȃǹ ȉĮ įİįȠµȑȞĮ İȓȞĮȚ ʌȠıȩIJȘIJİȢ ʌȠȣ țĮIJĮȜĮµȕȐȞȠȣȞ țȐʌȠȚĮ Ȓ țȐʌȠȚİȢ șȑıİȚȢ µȞȒµȘȢ (ĮȞȐȜȠȖĮ µİ IJȠȞ IJȪʌȠ IJȠȣȢ) țĮȚ ĮʌȠIJİȜȠȪȞ IJȠ ʌȜȘȡȠijȠȡȚĮțȩ ȣȜȚțȩ IJȠ ȠʌȠȓȠ İʌİȟİȡȖȐȗİIJĮȚ IJȠ ʌȡȩȖȡĮµµĮ. ǹȞȐȜȠȖĮ µİ IJȠȞ ĮȞ İȓȞĮȚ įȣȞĮIJȒ Ȓ ȩȤȚ Ș
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
14
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ĮȜȜĮȖȒ IJȘȢ IJȚµȒȢ İȞȩȢ įİįȠµȑȞȠȣ țĮIJȐ IJȘ įȚȐȡțİȚĮ IJȘȢ İțIJȑȜİıȘȢ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ, IJĮ įİįȠµȑȞĮ įȚĮțȡȓȞȠȞIJĮȚ ıİ µİIJĮȕȜȘIJȑȢ țĮȚ ıIJĮșİȡȑȢ.
3.3.1 ȂǼȉǹǺȁǾȉǼȈ ȂİIJĮȕȜȘIJȒ İȓȞĮȚ µȓĮ ȠȞȠµĮıµȑȞȘ ʌİȡȚȠȤȒ ıIJȘ µȞȒµȘ IJȠȣ Ǿ/Ȋ ʌȠȣ țĮIJĮțȡĮIJİȓIJĮȚ ȖȚĮ ıȣȖțİțȡȚµȑȞȠȣ IJȪʌȠȣ įİįȠµȑȞȠ țĮȚ IJĮ ʌİȡȚİȤȩµİȞȐ IJȘȢ įȪȞĮȞIJĮȚ ȞĮ ĮȜȜȐȗȠȣȞ țĮIJȐ IJȘ įȚȐȡțİȚĮ İțIJȑȜİıȘȢ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ. ȈIJȘȞ ʌİȡȚȠȤȒ ĮȣIJȒ IJȘȢ µȞȒµȘȢ ĮʌȠįȓįİIJĮȚ, Įʌȩ IJȠȞ ʌȡȠȖȡĮµµĮIJȚıIJȒ, ȑȞĮ ĮȞĮȖȞȦȡȚıIJȚțȩ ȖȚĮ İȪțȠȜȘ ĮȞĮijȠȡȐ ı'ĮȣIJȒȞ. ǵȜİȢ ȠȚ µİIJĮȕȜȘIJȑȢ ʌȠȣ ȣʌİȚıȑȡȤȠȞIJĮȚ ıIJȠ ʌȡȩȖȡĮµµĮ ʌȡȑʌİȚ ȞĮ įȘȜȦșȠȪȞ (declared) Ȓ ȠȡȚıIJȠȪȞ (defined), ȩıȠȞ ĮijȠȡȐ IJȠ ĮȞĮȖȞȦȡȚıIJȚțȩ IJȠȣȢ țĮȚ IJȠȞ IJȪʌȠ IJȦȞ IJȚµȫȞ ʌȠȣ ȜĮµȕȐȞȠȣȞ, ȖȚĮ ȞĮ ȖȞȦȡȓȗİȚ Ƞ µİIJĮȖȜȦIJIJȚıIJȒȢ ʌȩıȠ ȤȫȡȠ µȞȒµȘȢ șĮ įİıµİȪıİȚ ȖȚĮ țĮșݵȚȐ Įʌ'ĮȣIJȑȢ. ȅȚ įȣȞĮIJȠȓ IJȪʌȠȚ IJȚµȫȞ ʌȠȣ µʌȠȡȠȪȞ ȞĮ ȑȤȠȣȞ ȠȚ µİIJĮȕȜȘIJȑȢ, Ƞ ȤȫȡȠȢ µȞȒµȘȢ ʌȠȣ ĮʌĮȚIJİȓ Ƞ țĮșȑȞĮȢ Įʌ'ĮȣIJȠȪȢ țĮȚ IJȠ ʌȫȢ ȖȓȞİIJĮȚ Ș įȒȜȦıȘ IJȦȞ µİIJĮȕȜȘIJȫȞ, șĮ țĮȜȣijșȠȪȞ ıIJȠ ȀİijȐȜĮȚȠ 4.
3.3.2 ȈȉǹĬǼȇǼȈ ȈIJĮșİȡȐ İȓȞĮȚ µȓĮ IJȚµȒ ʌȠȣ įİ įȪȞĮIJĮȚ ȞĮ IJȡȠʌȠʌȠȚȘșİȓ Įʌȩ IJȠ ʌȡȩȖȡĮµµĮ. ȂȓĮ IJȣʌȚțȒ ıIJĮșİȡȐ İȓȞĮȚ ʌ.Ȥ. Ș IJȚµȒ IJȠȣ ʌ (3.14159). ȂȓĮ ıIJĮșİȡȐ µʌȠȡİȓ ȞĮ İȓȞĮȚ ĮȡȚșµȩȢ (ĮțȑȡĮȚȠȢ Ȓ ʌȡĮȖµĮIJȚțȩȢ, ıIJȠ įİțĮįȚțȩ, ȠțIJĮįȚțȩ Ȓ įİțĮİȟĮįȚțȩ ıȪıIJȘµĮ), ȑȞĮȢ ȤĮȡĮțIJȒȡĮȢ Ȓ ȑȞĮ ĮȜijĮȡȚșµȘIJȚțȩ. ȂȓĮ ıIJĮșİȡȐ µʌȠȡİȓ ȞĮ ȤȡȘıȚµȠʌȠȚȘșİȓ Įʌ'İȣșİȓĮȢ µİ IJȘȞ IJȚµȒ IJȘȢ µȑıĮ ıİ µȓĮ İȞIJȠȜȒ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ (ȠʌȩIJİ ȜȑȖİIJĮȚ țȣȡȚȠȜİțIJȚțȒ ıIJĮșİȡȐ - literal constant), Ȓ ȞĮ IJȘȢ ĮʌȠįȠșİȓ țȐʌȠȚȠ ĮȞĮȖȞȦȡȚıIJȚțȩ (ȠʌȩIJİ ȜȑȖİIJĮȚ ȠȞȠµĮıµȑȞȘ ıIJĮșİȡȐ named constant). ǹțȑȡĮȚİȢ ȈIJĮșİȡȑȢ ȅȚ ĮțȑȡĮȚİȢ įİțĮįȚțȑȢ (ıIJȠ įİțĮįȚțȩ ıȪıIJȘµĮ) ıIJĮșİȡȑȢ ȖȡȐijȠȞIJĮȚ ȦȢ µȓĮ ıİȚȡȐ Įʌȩ ȥȘijȓĮ ʌ.Ȥ. 1 Ȓ 255 Ȓ 32767. ȅȚ įİțĮİȟĮįȚțȑȢ ıIJĮșİȡȑȢ ȟİțȚȞȠȪȞ µİ 0x Ȓ 0X (ȑȞĮ µȘįİȞȚțȩ ĮțȠȜȠȣșȠȪµİȞȠ Įʌȩ x Ȓ X), ı'ĮȣIJȒ IJȘȞ ʌİȡȓʌIJȦıȘ ȦȢ ȥȘijȓĮ µʌȠȡȠȪȞ ȞĮ ȤȡȘıȚµȠʌȠȚȘșȠȪȞ IJĮ ȖȡȐµµĮIJĮ ǹ ȑȦȢ F (Ȓ ȚıȠįȪȞĮµĮ a ȑȦȢ f) ȖȚĮ IJȚȢ IJȚµȑȢ ʌȠȣ İȓȞĮȚ µİȖĮȜȪIJİȡİȢ IJȠȣ 9. īȚĮ ʌĮȡȐįİȚȖµĮ Ƞ įİțĮįȚțȩȢ 255 ȖȡȐijİIJĮȚ 0XFF ȦȢ įİțĮİȟĮįȚțȩȢ. ȅȚ ȠțIJĮįȚțȑȢ ıIJĮșİȡȑȢ ȟİțȚȞȠȪȞ µİ ȑȞĮ µȘįİȞȚțȩ, ȑIJıȚ Ƞ įİțĮįȚțȩȢ 255 ȖȡȐijİIJĮȚ 0377 ȦȢ ȠțIJĮįȚțȩȢ. ȀȐșİ ĮțȑȡĮȚĮ ıIJĮșİȡȐ µʌȠȡİȓ ȞĮ ȑȤİȚ ȦȢ İʌȓșݵĮ (țĮIJȐȜȘȟȘ) ȑȞĮ Ȓ țĮȚ IJĮ įȪȠ Įʌȩ IJĮ ʌĮȡĮțȐIJȦ ȖȡȐµµĮIJĮ, IJĮ ȠʌȠȓĮ țĮșȠȡȓȗȠȣȞ IJȠȞ IJȪʌȠ İȞȩȢ ĮțİȡĮȓȠȣ (įİȢ § 4.1.2): (i)
ȉȠ ȖȡȐµµĮ U (Ȓ u), IJȠ ȠʌȠȓȠ țĮșȠȡȓȗİȚ ȩIJȚ Ƞ ĮțȑȡĮȚȠȢ İȓȞĮȚ ĮʌȡȩıȘµȠȢ (unsigned).
(ii) ȉȠ ȖȡȐµµĮ L (Ȓ l), IJȠ ȠʌȠȓȠ țĮșȠȡȓȗİȚ ȩIJȚ ʌȡȩțİȚIJĮȚ ȖȚĮ µİȖȐȜȠ (long) ĮțȑȡĮȚȠ. ǹȣIJȠȓ ȠȚ IJȪʌȠȚ įȚĮijȑȡȠȣȞ IJȩıȠ ıIJȠ İȪȡȠȢ IJȦȞ IJȚµȫȞ ʌȠȣ µʌȠȡȠȪȞ ȞĮ ȜȐȕȠȣȞ ȩıȠ țĮȚ ıIJȠ ʌȜȒșȠȢ IJȦȞ bit ʌȠȣ țĮIJĮȜĮµȕȐȞȠȣȞ ıIJȘ µȞȒµȘ (ȩʌȦȢ ijĮȓȞİIJĮȚ ıIJȠ ȆȓȞĮțĮ 4.1). īȚĮ ʌĮȡȐįİȚȖµĮ Ș ıIJĮșİȡȐ 32768L İȓȞĮȚ IJȪʌȠȣ long int țĮȚ țĮIJĮȜĮµȕȐȞİȚ 32 bit, ĮȜȜȐ Ș 32768U İȓȞĮȚ unsigned int țĮȚ țĮIJĮȜĮµȕȐȞİȚ 16 bit.
ǺĮıȚțȐ ȈIJȠȚȤİȓĮ
15
ȈIJĮșİȡȑȢ ȀȚȞȘIJȒȢ ȊʌȠįȚĮıIJȠȜȒȢ ȅ IJȪʌȠȢ IJȦȞ ıIJĮșİȡȫȞ țȚȞȘIJȒȢ ȣʌȠįȚĮıIJȠȜȒȢ İȓȞĮȚ double (įİȢ § 4.1) İțIJȩȢ țĮȚ ĮȞ ȤȡȘıȚµȠʌȠȚȘșİȓ țȐʌȠȚȠ țĮIJȐȜȜȘȜȠ İʌȓșݵĮ ȖȚĮ ȞĮ ĮȜȜȐȟİȚ IJȠ İȪȡȠȢ IJȚµȫȞ țĮȚ IJȘȞ ĮțȡȓȕİȚȐ IJȠȣȢ. ȂʌȠȡİȓ ȞĮ ȤȡȘıȚµȠʌȠȚȘșİȓ ȑȞĮ Įʌȩ IJĮ ʌĮȡĮțȐIJȦ įȪȠ İʌȚșȑµĮIJĮ: (i)
ȉȠ ȖȡȐµµĮ F (Ȓ f), IJȠ ȠʌȠȓȠ țȐȞİȚ IJȘ ıIJĮșİȡȐ IJȪʌȠȣ float.
(ii) ȉȠ ȖȡȐµµĮ L (Ȓ l), IJȠ ȠʌȠȓȠ țȐȞİȚ IJȘ ıIJĮșİȡȐ IJȪʌȠȣ long double. ȊʌȐȡȤȠȣȞ įȪȠ µȠȡijȑȢ µİ IJȚȢ ȠʌȠȓİȢ µʌȠȡİȓ ȞĮ ȖȡĮijİȓ µȓĮ ıIJĮșİȡȐ țȚȞȘIJȒȢ ȣʌȠįȚĮıIJȠȜȒȢ: (a) ȉȣʌȠʌȠȚȘµȑȞȘ µȠȡijȒ: ǹțȑȡĮȚȠ µȑȡȠȢ, įİțĮįȚțȩ ıȘµİȓȠ, țȜĮıµĮIJȚțȩ µȑȡȠȢ, µİ IJȘ įȣȞĮIJȩIJȘIJĮ ȞĮ ʌĮȡĮȜİȚijșİȓ ȑȞĮ Įʌȩ IJĮ įȪȠ µȑȡȘ. īȚĮ ʌĮȡȐįİȚȖµĮ: 0.99
1.0
Ȓ ȚıȠįȪȞĮµĮ
.99
1.
(b) ǼțșİIJȚțȒ µȠȡijȒ: ǵʌȦȢ ʌĮȡĮʌȐȞȦ, ĮȜȜȐ µİ IJȘȞ ĮțȠȜȠȣșȓĮ İȞȩȢ Ǽ (Ȓ e) IJȠ ȠʌȠȓȠ įȘȜȫȞİȚ įȪȞĮµȘ IJȠȣ 10, țĮȚ İȞȩȢ ĮțȑȡĮȚȠȣ ĮȡȚșµȠȪ ʌȠȣ İȓȞĮȚ Ƞ İțșȑIJȘȢ. īȚĮ ʌĮȡȐįİȚȖµĮ: 7.65Ǽ-12 İȓȞĮȚ 7.65 . 10-12 1.5Ǽ1
1.5e1
15E0
.15E2
150E-1
İȓȞĮȚ ȩȜĮ IJȠ ȓįȚȠ: 15
ȈIJĮșİȡȑȢ ȋĮȡĮțIJȒȡĮ ȂȓĮ ıIJĮșİȡȐ ȤĮȡĮțIJȒȡĮ İȓȞĮȚ ȑȞĮȢ ȤĮȡĮțIJȒȡĮȢ ʌȠȣ ʌİȡȚțȜİȓİIJĮȚ Įʌȩ µȠȞȐ İȚıĮȖȦȖȚțȐ (') ʌ.Ȥ. 'a'. Ǿ IJȚµȒ µȓĮȢ ıIJĮșİȡȐȢ ȤĮȡĮțIJȒȡĮ İȓȞĮȚ Ș ĮȡȚșµȘIJȚțȒ IJȚµȒ IJȠȣ ȤĮȡĮțIJȒȡĮ ıIJȠ ıȪȞȠȜȠ ȤĮȡĮțIJȒȡȦȞ ASCII. Ǿ ȤȡȒıȘ µȠȞȫȞ İȚıĮȖȦȖȚțȫȞ ıİ ȩȜİȢ IJȚȢ ıIJĮșİȡȑȢ ȤĮȡĮțIJȒȡĮ İȓȞĮȚ ĮȡțİIJȒ ȖȚĮ IJȠȣȢ ʌİȡȚııȩIJİȡȠȣȢ ȤĮȡĮțIJȒȡİȢ, ĮȜȜȐ ȠȡȚıµȑȞȠȚ İȚįȚțȠȓ ȤĮȡĮțIJȒȡİȢ, ȩʌȦȢ Ș ĮȜȜĮȖȒ ıİȜȓįĮȢ (form feed), İȓȞĮȚ ĮįȪȞĮIJȠ ȞĮ įȠșȠȪȞ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ. īȚĮ IJȠ ȜȩȖȠ ĮȣIJȩ Ș C ʌĮȡȑȤİȚ IJȚȢ ĮțȠȜȠȣșȓİȢ įȚĮijȣȖȒȢ (escape sequences) Ȓ ıIJĮșİȡȑȢ ĮȞȐıIJȡȠijȘȢ țĮșȑIJȠȣ, ʌȠȣ ijĮȓȞȠȞIJĮȚ ʌĮȡĮțȐIJȦ:
\a \b \f \n \r \t \v \\ \' \" \? \ooo \xhh
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
ĮțȠȣıIJȚțȒ İȚįȠʌȠȓȘıȘ
BELL
ȠʌȚıșȠįȡȩµȘıȘ
BS (backspace)
ĮȜȜĮȖȒ ıİȜȓįĮȢ
FF (form feed)
ȞȑĮ ȖȡĮµµȒ
NL(LF) (new line-line feed)
İʌĮȞĮijȠȡȐ țİijĮȜȒȢ
CR (carriage return)
ȠȡȚȗȩȞIJȚȠȢ ıIJȘȜȠȖȞȫµȠȞĮȢ (tab)
HT (horizontal tab)
țĮIJĮțȩȡȣijȠȢ ıIJȘȜȠȖȞȫµȠȞĮȢ
VT (vertical tab)
ĮȞȐıIJȡȠijȘ țȐșİIJȠȢ
\ ' " ?
µȠȞȐ İȚıĮȖȦȖȚțȐ įȚʌȜȐ İȚıĮȖȦȖȚțȐ ȜĮIJȚȞȚțȩ İȡȦIJȘµĮIJȚțȩ
țȦįȚțȩȢ ASCII ıİ ȠțIJĮįȚțȒ µȠȡijȒ (țȐșİ 'Ƞ' ĮȞIJȚʌȡȠıȦʌİȪİȚ ȑȞĮ ȥȘijȓȠ) țȦįȚțȩȢ ASCII ıİ įİțĮİȟĮįȚțȒ µȠȡijȒ (țȐșİ 'h' ĮȞIJȚʌȡȠıȦʌİȪİȚ ȑȞĮ ȥȘijȓȠ)
16
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
Ǿ ĮțȠȜȠȣșȓĮ įȚĮijȣȖȒȢ '\ȠȠȠ' ĮʌȠIJİȜİȓIJĮȚ Įʌȩ µȓĮ ĮȞȐıIJȡȠijȘ țȐșİIJȠ ĮțȠȜȠȣșȠȪµİȞȘ Įʌȩ 1, 2 Ȓ 3 ȠțIJĮįȚțȐ ȥȘijȓĮ ʌȠȣ țĮșȠȡȓȗȠȣȞ IJȘȞ IJȚµȒ IJȠȣ İʌȚșȣµȘIJȠȪ ȤĮȡĮțIJȒȡĮ ıIJȠ ıȪȞȠȜȠ ȤĮȡĮțIJȒȡȦȞ ASCII. ȈȣȞȘșȚıµȑȞȠ ʌĮȡȐįİȚȖµĮ İȓȞĮȚ IJȠ '\0' ʌȠȣ İȓȞĮȚ Ƞ ĮȞȪʌĮȡțIJȠȢ ȤĮȡĮțIJȒȡĮȢ (NULL) țĮȚ ʌȠȣ ʌȡȑʌİȚ ȞĮ ȟİȤȦȡȓȗİIJĮȚ Įʌȩ IJȠ ȤĮȡĮțIJȒȡĮ 0 (µȘįȑȞ) țĮȚ Įʌȩ IJȠ ȤĮȡĮțIJȒȡĮ țİȞȩ (space). Ǿ ĮțȠȜȠȣșȓĮ įȚĮijȣȖȒȢ '\xhh' ĮʌȠIJİȜİȓIJĮȚ µİ IJȘ ıİȚȡȐ IJȘȢ Įʌȩ µȓĮ ĮȞȐıIJȡȠijȘ țȐșİIJȠ, ȑȞĮ x țĮȚ įİțĮİȟĮįȚțȐ ȥȘijȓĮ ʌȠȣ țĮșȠȡȓȗȠȣȞ IJȘȞ IJȚµȒ IJȠȣ İʌȚșȣµȘIJȠȪ ȤĮȡĮțIJȒȡĮ. ȂȓĮ ĮțȩµĮ İijĮȡµȠȖȒ IJȦȞ įȪȠ IJİȜİȣIJĮȓȦȞ ĮțȠȜȠȣșȚȫȞ įȚĮijȣȖȒȢ, İȓȞĮȚ ȖȚĮ IJȣʌȫȞȠȣµİ ıIJȘȞ ȠșȩȞȘ ȤĮȡĮțIJȒȡİȢ ȖȡĮijȚțȫȞ (ȩʌȦȢ ȖȦȞȓİȢ, įȚʌȜȑȢ ȖȡĮµµȑȢ ț.Ȝ.ʌ.) ȖȚĮ IJȠȣȢ ȠʌȠȓȠȣȢ įİȞ ȣʌȐȡȤİȚ ĮȞIJȓıIJȠȚȤȠ ʌȜȒțIJȡȠ ıIJȠ ʌȜȘțIJȡȠȜȩȖȚȠ. ǵµȦȢ, ȩʌȦȢ ȖȞȦȡȓȗȠȣµİ, ıİ țȐșİ ȤĮȡĮțIJȒȡĮ ĮȞIJȚıIJȠȚȤİȓ ȑȞĮȢ ĮțȑȡĮȚȠȢ ĮȡȚșµȩȢ (țȦįȚțȩȢ), ıȪµijȦȞĮ µİ IJȠ ıȪȞȠȜȠ ȤĮȡĮțIJȒȡȦȞ ASCII. DzIJıȚ ȖȚĮ ȞĮ IJȣʌȫıȠȣµİ ĮȣIJȠȪȢ IJȠȣȢ ȤĮȡĮțIJȒȡİȢ, µʌȠȡȠȪµİ ȞĮ ȤȡȘıȚµȠʌȠȚȒıȠȣµİ ıIJȘȞ printf() IJȠȣȢ țȦįȚțȠȪȢ IJȠȣȢ ıİ ȠțIJĮįȚțȒ Ȓ įİțĮİȟĮįȚțȒ µȠȡijȒ. īȚĮ ʌĮȡȐįİȚȖµĮ, ıȣµȕȠȣȜİȣȩµİȞȠȚ IJȠȞ ʌȓȞĮțĮ ʌȠȣ įİȓȤȞİȚ IJȠ ıȪȞȠȜȠ ȤĮȡĮțIJȒȡȦȞ ASCII (ȆĮȡȐȡIJȘµĮ ǹ), µʌȠȡȠȪµİ ȞĮ ȖȡȐȥȠȣµİ IJȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ: main() { printf("\XC9\XCD\XBB\n"); printf("\XC8\XCD\XBC\n"); } IJȠ ȠʌȠȓȠ, ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ įȪȠ printf()țĮȚ IJȠȣȢ țȦįȚțȠȪȢ IJȦȞ ȤĮȡĮțIJȒȡȦȞ ıIJȘȞ įİțĮİȟĮįȚțȒ µȠȡijȒ, ݵijĮȞȓȗİȚ ıIJȘȞ ȠșȩȞȘ ȑȞĮ ʌȜĮȓıȚȠ µİ įȚʌȜȩ ʌİȡȓȖȡĮµµĮ: C9
CD
BB
C8
CD
BC
ǹȜijĮȡȚșµȘIJȚțȑȢ ȈIJĮșİȡȑȢ ȂȓĮ ĮȜijĮȡȚșµȘIJȚțȒ ıIJĮșİȡȐ (ȜȑȖİIJĮȚ țĮȚ țȣȡȚȠȜİțIJȚțȩ ĮȜijĮȡȚșµȘIJȚțȩ) İȓȞĮȚ µȓĮ ĮțȠȜȠȣșȓĮ ȤĮȡĮțIJȒȡȦȞ ASCII, ʌȠȣ ʌİȡȚțȜİȓȠȞIJĮȚ Įʌȩ įȚʌȜȐ İȚıĮȖȦȖȚțȐ ("). ȆȐȜȚ Ș ĮȞȐıIJȡȠijȘ țȐșİIJȠȢ µʌȠȡİȓ ȞĮ ȤȡȘıȚµȠʌȠȚȘșİȓ ȖȚĮ İȚįȚțȠȪȢ ȤĮȡĮțIJȒȡİȢ ʌȠȣ įȚĮijȠȡİIJȚțȐ șĮ µĮȢ įȘµȚȠȣȡȖȠȪıĮȞ ʌȡȩȕȜȘµĮ. ȆĮȡĮįİȓȖµĮIJĮ ıIJĮșİȡȫȞ ĮȜijĮȡȚșµȘIJȚțȫȞ İȓȞĮȚ:
"ABC" "A" "%d\n\n" "ȂȑıȘ \"ȉĮȤȪIJȘIJĮ\": 50Km\\h" ȉȠ IJİȜİȣIJĮȓȠ ʌĮȡȐįİȚȖµĮ įȘȜȫȞİȚ IJȘȞ ĮțȠȜȠȣșȓĮ 23 ȤĮȡĮțIJȒȡȦȞ:
ȂȑıȘ "ȉĮȤȪIJȘIJĮ": 50Km/h
ǺĮıȚțȐ ȈIJȠȚȤİȓĮ
17
ǼıȦIJİȡȚțȐ, Ƞ ĮȞȪʌĮȡțIJȠȢ ȤĮȡĮțIJȒȡĮȢ (NULL) ʌȡȠıIJȓșİIJĮȚ ĮµȑıȦȢ µİIJȐ IJȠȞ IJİȜİȣIJĮȓȠ ȤĮȡĮțIJȒȡĮ İȞȩȢ ĮȜijĮȡȚșµȘIJȚțȠȪ. īȚĮ ʌĮȡȐįİȚȖµĮ Ș ĮȜijĮȡȚșµȘIJȚțȒ ıIJĮșİȡȐ "ABC" ĮʌȠșȘțİȪİIJĮȚ ıIJȘ µȞȒµȘ IJȠȣ Ǿ/Ȋ ıİ IJȑııİȡĮ bytes, ȩʌȠȣ IJȠ IJȑIJĮȡIJȠ ʌİȡȚȑȤİȚ IJȠ ȤĮȡĮțIJȒȡĮ '\0'. ȆİȡȚııȩIJİȡĮ ȖȚĮ IJĮ ĮȜijĮȡȚșµȘIJȚțȐ, șĮ įȠȪµİ ıIJȠ ȀİijȐȜĮȚȠ 8. ȂȓĮ ĮȜijĮȡȚșµȘIJȚțȒ ıIJĮșİȡȐ ʌȠȣ ʌİȡȚȑȤİȚ µȩȞȠ ȑȞĮ ȤĮȡĮțIJȒȡĮ, ȩʌȦȢ Ș "ǹ", įİȞ ʌȡȑʌİȚ ȞĮ ıȣȖȤȑİIJĮȚ µİ IJȘȞ ĮȞIJȓıIJȠȚȤȘ ıIJĮșİȡȐ ȤĮȡĮțIJȒȡĮ 'ǹ'. ȅȞȠµĮıµȑȞİȢ ȈIJĮșİȡȑȢ ȂʌȠȡȠȪµİ ȞĮ įȫıȠȣµİ ĮȞĮȖȞȦȡȚıIJȚțȐ ıİ ıIJĮșİȡȑȢ ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ IJȘȞ ȠįȘȖȓĮ ʌȡȠȢ IJȠȞ ʌȡȠİʌİȟİȡȖĮıIJȒ (preprocessor directive) #define, ȦȢ İȟȒȢ:
#define
ĮȞĮȖȞȦȡȚıIJȚțȩ
IJȚµȒ_ıIJĮșİȡȐȢ
ǻȓȞȠȞIJĮȢ ĮȞĮȖȞȦȡȚıIJȚțȐ ıİ ıIJĮșİȡȑȢ, IJĮ ʌȡȠȖȡȐµµĮIJĮ ȖȓȞȠȞIJĮȚ İȣțȠȜȩIJİȡĮ țĮIJĮȞȠȘIJȐ țĮȚ µʌȠȡȠȪȞ ȞĮ ĮȜȜĮȤșȠȪȞ İȣțȠȜȩIJİȡĮ. ǻȓȞȠȞIJĮȢ ʌ.Ȥ. IJȠ ĮȞĮȖȞȦȡȚıIJȚțȩ PI ıIJȘ ıIJĮșİȡȐ 3.14 ȦȢ İȟȒȢ:
#define PI 3.14 ıIJȘ ıȣȞȑȤİȚĮ ȠʌȠȣįȒʌȠIJİ ıIJȠȞ țȫįȚțĮ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ ʌȡȑʌİȚ ȞĮ ȖȡȐȥȠȣµİ 3.14 ȖȡȐijȠȣµİ ĮʌȜȫȢ PI. ǹȞ șİȜȒıȠȣµİ ȞĮ ĮȜȜȐȟȠȣµİ IJȘȞ IJȚµȒ IJȠȣ ʌ țĮȚ ȞĮ IJȘȞ țȐȞȠȣµİ 3.14159 Įȡțİȓ ȞĮ ĮȜȜȐȟȠȣµİ IJȘȞ ȠįȘȖȓĮ #define:
#define PI 3.14159 DzIJıȚ ĮȞ IJȠ ʌ ݵijĮȞȓȗİIJĮȚ ıİ ʌȠȜȜȐ ıȘµİȓĮ µȑıĮ ıIJȠ ʌȡȩȖȡĮµµȐ µĮȢ, įİ ȤȡİȚȐȗİIJĮȚ ȞĮ ĮȞIJȚțĮIJĮıIJȒıȠȣµİ IJȘȞ țĮȚȞȠȪȡȖȚĮ IJȚµȒ IJȠȣ ʌĮȡȐ µȩȞȠ ıİ ȑȞĮ ıȘµİȓȠ, ıIJȘȞ ȠįȘȖȓĮ #define. ȆĮȡĮțȐIJȦ ijĮȓȞȠȞIJĮȚ µİȡȚțȑȢ ĮʌȜȑȢ ĮʌȠįȩıİȚȢ ĮȞĮȖȞȦȡȚıIJȚțȫȞ ıİ ıIJĮșİȡȑȢ:
#define #define #define #define #define #define #define #define
LINE 81 MASK 0X7F RWMODE 0666 PI 3.14159265358979323846 HELP '?' PAGE "ȈİȜȓįĮ" MINSINDAY 24*60 EPSILON 1E-5
ĬĮ ĮțȠȜȠȣșȒıȠȣµİ IJȘ ıȪµȕĮıȘ ȞĮ ȖȡȐijȠȣµİ IJĮ ĮȞĮȖȞȦȡȚıIJȚțȐ IJȦȞ ıIJĮșİȡȫȞ µİ țİijĮȜĮȓĮ ȖȡȐµµĮIJĮ țĮȚ ĮȣIJȐ IJȦȞ µİIJĮȕȜȘIJȫȞ µİ ʌİȗȐ, ȖȚĮ ȞĮ ȟİȤȦȡȓȗȠȣȞ İȪțȠȜĮ (µİ ȑȞĮ ĮʌȜȩ țȠȓIJĮȖµĮ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ) ȠȚ ıIJĮșİȡȑȢ Įʌȩ IJȚȢ µİIJĮȕȜȘIJȑȢ.
3.4 Ȉȋȅȁǿǹ ȈȤȩȜȚĮ (comments) İȓȞĮȚ IJĮ µȑȡȘ İțİȓȞĮ IJȠȣ ʌȘȖĮȓȠȣ ʌȡȠȖȡȐµµĮIJȠȢ IJĮ ȠʌȠȓĮ ĮȖȞȠȠȪȞIJĮȚ Įʌȩ IJȠ µİIJĮȖȜȦIJIJȚıIJȒ. ȋȡȘıȚµȠʌȠȚȠȪȞIJĮȚ ȖȚĮ ȞĮ țȐȞȠȣȞ IJȠ ʌȡȩȖȡĮµµĮ ʌȚȠ İȣțȠȜȠȞȩȘIJȠ ıIJȠȞ ĮȞĮȖȞȫıIJȘ.
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
18
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ȉĮ ıȤȩȜȚĮ µʌȠȡȠȪȞ ȞĮ ݵijĮȞȓȗȠȞIJĮȚ ʌĮȞIJȠȪ ȩʌȠȣ µʌȠȡİȓ ȞĮ ݵijĮȞȚıIJİȓ ȑȞĮ țİȞȩ įȚȐıIJȘµĮ Ȓ ȑȞĮȢ ȤĮȡĮțIJȒȡĮȢ ıIJȘȜȠȖȞȫµȠȞĮ Ȓ ȞȑĮȢ ȖȡĮµµȒȢ. ȉĮ ıȤȩȜȚĮ ĮȡȤȓȗȠȣȞ µİ IJȠ İȚįȚțȩ ıȪµȕȠȜȠ /* țĮȚ IJİȜİȚȫȞȠȣȞ µİ IJȠ */ țĮȚ µʌȠȡȠȪȞ ȞĮ ʌİȡȚȑȤȠȣȞ ȠʌȠȚȠȣıįȒʌȠIJİ ȤĮȡĮțIJȒȡİȢ ASCII. ȈIJȘ C IJĮ ıȤȩȜȚĮ įİ µʌȠȡȠȪȞ ȞĮ İȓȞĮȚ ȑȞșİIJĮ ıİ ȐȜȜĮ ıȤȩȜȚĮ. ǻȘȜĮįȒ įİ µʌȠȡȠȪµİ ȞĮ ȑȤȠȣµİ:
/* ȈȤȩȜȚȠ1
/* ȈȤȩȜȚȠ2 */
ıȣȞȑȤİȚĮ ıȤȠȜȓȠȣ1 */
ȈIJȠ İȟȒȢ ıIJĮ ʌȡȠȖȡȐµµĮIJȐ µĮȢ, șĮ IJȠʌȠșİIJȠȪµİ ıȤȩȜȚĮ IJȠȣȜȐȤȚıIJȠȞ ıIJȘȞ ĮȡȤȒ IJȠȣȢ, ʌȠȣ șĮ ĮȞĮijȑȡȠȣȞ IJȠ ȩȞȠµĮ IJȠȣ ĮȡȤİȓȠȣ ʌȘȖĮȓȠȣ țȫįȚțĮ țĮȚ IJȘ ȜİȚIJȠȣȡȖȓĮ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ.
19
ȀǼĭǹȁǹǿȅ 4
ȉȊȆȅǿ - ȂǼȉǹǺȁǾȉǼȈ - ȉǼȁǼȈȉǼȈ 4.1 ȉȊȆȅǿ ǻǼǻȅȂǼȃȍȃ ȉȠ ȈȤȒµĮ 4.1 įİȓȤȞİȚ IJȠȣȢ IJȪʌȠȣȢ įİįȠµȑȞȦȞ ʌȠȣ ȤȡȘıȚµȠʌȠȚİȓ Ș C. Ȉ'ĮȣIJȩ IJȠ ȀİijȐȜĮȚȠ șĮ ĮıȤȠȜȘșȠȪµİ µȩȞȠ µİ IJȠȣȢ ȕĮıȚțȠȪȢ IJȪʌȠȣȢ įİįȠµȑȞȦȞ. ȅȚ ȐȜȜȠȚ IJȪʌȠȚ įİįȠµȑȞȦȞ ĮʌȠIJİȜȠȪȞ ĮȞIJȚțİȓµİȞȠ ȐȜȜȦȞ ȀİijĮȜĮȓȦȞ. ‘˝ðÔÈ ƒÂ‰ÔÏ›Ì˘Ì
¬·ÛÈÍÔfl ‘˝ðÔÈ
´·Ò·ÍÙfiÒ·Ú char
¡Í›Ò·ÈÔÚ int
§ÈÌÁÙfiÚ ıðԉȷÛÙÔÎfiÚ float
§ÈÌÁÙfiÚ ıðԉȷÛÙÔÎfiÚ ‰ÈðÎfiÚ ·ÍÒfl‚ÂÈ·Ú double
ƒÂflÍÙÂÚ
ƒÔÏÁÏ›ÌÔÈ ‘˝ðÔÈ
´˘ÒflÚ ÙÈÏfi
—flÌ·Í·Ú
ƒÔÏfi
¢Ì˘ÛÁ
void
array
struct
union
ȈȤȒµĮ 4.1: ȅȚ IJȪʌȠȚ įİįȠµȑȞȦȞ IJȘȢ C
4.1.1 ǺǹȈǿȀȅǿ ȉȊȆȅǿ ǻǼǻȅȂǼȃȍȃ ǵʌȦȢ İȓįĮµİ ıIJȘȞ § 3.3.1, ȩȜİȢ ȠȚ µİIJĮȕȜȘIJȑȢ ıIJȘ C ʌȡȑʌİȚ ȞĮ įȘȜȫȞȠȞIJĮȚ ʌȡȚȞ ȤȡȘıȚµȠʌȠȚȘșȠȪȞ, ȖȚĮ ȞĮ ȖȞȦȡȓȗİȚ Ƞ µİIJĮȖȜȦIJIJȚıIJȒȢ ʌȩıȠ ȤȫȡȠ µȞȒµȘȢ șĮ įİıµİȪıİȚ. ȈIJȘ C ȣʌȐȡȤȠȣȞ ʌȑȞIJİ ȕĮıȚțȠȓ IJȪʌȠȚ įİįȠµȑȞȦȞ: ȤĮȡĮțIJȒȡĮȢ, ĮțȑȡĮȚȠȢ, ʌȡĮȖµĮIJȚțȩȢ țȚȞȘIJȒȢ ȣʌȠįȚĮıIJȠȜȒȢ, ʌȡĮȖµĮIJȚțȩȢ țȚȞȘIJȒȢ ȣʌȠįȚĮıIJȠȜȒȢ įȚʌȜȒȢ ĮțȡȓȕİȚĮȢ țĮȚ ȤȦȡȓȢ IJȚµȒ. ȅȚ įİıµİȣµȑȞİȢ ȜȑȟİȚȢ ʌȠȣ ȤȡȘıȚµȠʌȠȚȠȪȞIJĮȚ, ȖȚĮ ȞĮ įȘȜȫȞȠȣȞ µİIJĮȕȜȘIJȑȢ ĮȣIJȫȞ IJȦȞ IJȪʌȦȞ İȓȞĮȚ ȠȚ char, int, float, double țĮȚ void ĮȞIJȓıIJȠȚȤĮ țĮȚ ȜȑȖȠȞIJĮȚ țĮșȠȡȚıIJȑȢ IJȪʌȠȣ (type specifiers). ȅȚ µİIJĮȕȜȘIJȑȢ IJȪʌȠȣ char ȤȡȘıȚµȠʌȠȚȠȪȞIJĮȚ ȖȚĮ ȞĮ ĮʌȠșȘțİȪȠȣȞ 8-µʌȚIJȠȣȢ ȤĮȡĮțIJȒȡİȢ ASCII, Ȓ ȠʌȠȚĮįȒʌȠIJİ ȐȜȜȘ 8-µʌȚIJȘ ʌȠıȩIJȘIJĮ (µȚțȡȠȪȢ ĮțİȡĮȓȠȣȢ). ȅȚ µİIJĮȕȜȘIJȑȢ IJȪʌȠȣ int µʌȠȡȠȪȞ ȞĮ ʌİȡȚȑȤȠȣȞ ĮțȑȡĮȚİȢ ʌȠıȩIJȘIJİȢ țĮȚ µʌȠȡȠȪȞ ȞĮ ȤȡȘıȚµȠʌȠȚȠȪȞIJĮȚ ȖȚĮ ȞĮ İȜȑȖȤȠȣȞ ȕȡȩȤȠȣȢ țĮȚ İȞIJȠȜȑȢ µİ ıȣȞșȒțȘ. ȅȚ µİIJĮȕȜȘIJȑȢ IJȪʌȠȣ float țĮȚ double ȤȡȘıȚµȠʌȠȚȠȪȞIJĮȚ ıIJĮ ʌȡȠȖȡȐµµĮIJĮ İȓIJİ ȩIJĮȞ ĮʌĮȚIJȠȪȞIJĮȚ țȜĮıµĮIJȚțȠȓ ĮȡȚșµȠȓ İȓIJİ ȩIJĮȞ Ș İijĮȡµȠȖȒ ȤȡİȚȐȗİIJĮȚ ʌȠȜȪ
20
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
µİȖȐȜȠȣȢ ĮȡȚșµȠȪȢ. Ǿ įȚĮijȠȡȐ ĮȞȐµİıĮ ıİ µȓĮ µİIJĮȕȜȘIJȒ float țĮȚ ıİ µȓĮ µİIJĮȕȜȘIJȒ double ȕȡȓıțİIJĮȚ ıIJȠ µȑȖİșȠȢ IJȠȣ µİȖĮȜȪIJİȡȠȣ (țĮȚ IJȠȣ µȚțȡȩIJİȡȠȣ) ĮȡȚșµȠȪ ʌȠȣ µʌȠȡȠȪȞ ȞĮ țȡĮIJȐȞİ (įİȢ ȆȓȞĮțĮ 4.1). ȅ IJȪʌȠȢ void țĮșȠȡȓȗİȚ ȑȞĮ țİȞȩ ıȪȞȠȜȠ IJȚµȫȞ. ȋȡȘıȚµȠʌȠȚİȓIJĮȚ ıĮȞ IJȪʌȠȢ ʌȠȣ İʌȚıIJȡȑijȠȣȞ ȠȚ ıȣȞĮȡIJȒıİȚȢ ʌȠȣ įİȞ ʌĮȡȐȖȠȣȞ IJȚµȒ (įİȢ ȀİijȐȜĮȚȠ 7 ȩʌȠȣ șĮ ȖȓȞİȚ țĮIJĮȞȠȘIJȩȢ Ƞ IJȪʌȠȢ void).
4.1.2 ȉȇȅȆȅȆȅǿǾȉǼȈ ȉȊȆȍȃ ǼțIJȩȢ IJȠȣ IJȪʌȠȣ void , ıIJȠȣȢ ȕĮıȚțȠȪȢ IJȪʌȠȣȢ įİįȠµȑȞȦȞ µʌȠȡȠȪȞ ȞĮ İijĮȡµȠıIJȠȪȞ įȚȐijȠȡȠȚ IJȡȠʌȠʌȠȚȘIJȑȢ IJȪʌȦȞ (type modifiers). ȈțȠʌȩȢ IJȦȞ IJȡȠʌȠʌȠȚȘIJȫȞ İȓȞĮȚ ȞĮ IJȡȠʌȠʌȠȚȠȪȞ IJȠȣȢ ȕĮıȚțȠȪȢ IJȪʌȠȣȢ ȫıIJİ ȞĮ ȚțĮȞȠʌȠȚȠȪȞIJĮȚ țĮȜȪIJİȡĮ ȠȚ ĮȞȐȖțİȢ įȚĮijȩȡȦȞ ʌȡȠȖȡĮµµȐIJȦȞ. ȅȚ IJȡȠʌȠʌȠȚȘIJȑȢ İȓȞĮȚ: signed (ʌȡȠıȘµĮıµȑȞȠȢ) unsigned (ĮʌȡȩıȘµȠȢ) long (µİȖȐȜȠȢ) short (µȚțȡȩȢ) ȅȚ IJȡȠʌȠʌȠȚȘIJȑȢ signed, unsigned, long țĮȚ short µʌȠȡȠȪȞ ȞĮ İijĮȡµȠıIJȠȪȞ ıIJȠȣȢ ȕĮıȚțȠȪȢ IJȪʌȠȣȢ char țĮȚ int. ȅ IJȡȠʌȠʌȠȚȘIJȒȢ long µʌȠȡİȓ ȞĮ İijĮȡµȠıIJİȓ ıIJȠȞ ȕĮıȚțȩ IJȪʌȠ double. ȅ ȆȓȞĮțĮȢ 4.1 ʌĮȡȠȣıȚȐȗİȚ ȩȜȠȣȢ IJȠȣȢ İʌȚIJȡİʌȩµİȞȠȣȢ ıȣȞįȣĮıµȠȪȢ IJȦȞ ȕĮıȚțȫȞ IJȪʌȦȞ µİ IJȠȣȢ IJȡȠʌȠʌȠȚȘIJȑȢ IJȪʌȦȞ. ȆĮȡȩȜȠ ʌȠȣ İʌȚIJȡȑʌİIJĮȚ, Ș ȤȡȒıȘ IJȠȣ signed ıIJȠȣȢ ĮțȑȡĮȚȠȣȢ țĮȚ IJȠȣȢ ȤĮȡĮțIJȒȡİȢ İȓȞĮȚ ʌİȡȚIJIJȒ, ȖȚĮIJȓ İȟ'ȠȡȚıµȠȪ Ș įȒȜȦıȘ İȞȩȢ ĮțȑȡĮȚȠȣ Ȓ ȤĮȡĮțIJȒȡĮ ĮijȠȡȐ ȑȞĮȞ ʌȡȠıȘµĮıµȑȞȠ ĮȡȚșµȩ. ȉȪʌȠȢ char unsigned char signed char int unsigned int signed int short int unsigned short int signed short int long int signed long int unsigned long int float double long double
ǼȪȡȠȢ ıİ bytes
ǼȪȡȠȢ IJȚµȫȞ
1
-128
ȑȦȢ
127
1
0
ȑȦȢ
255
1
-128
ȑȦȢ
127
2
-32768
ȑȦȢ
32767
2
0
ȑȦȢ
65535
2
-32768
ȑȦȢ
32767
2
-32768
ȑȦȢ
32767
2
0
ȑȦȢ
65535
2
-32768
ȑȦȢ
32767
4
-2147483648
ȑȦȢ
2147483647
4
-2147483648
ȑȦȢ
2147483647
4
0
ȑȦȢ
4294967295
4
3.4E-38
ȑȦȢ
3.4Ǽ+38
8
1.7E-308
ȑȦȢ
1.7Ǽ+308
10
3.4E-4932
ȑȦȢ
1.1Ǽ+4932
ȆȓȞĮțĮȢ 4.1: ȅȚ įȣȞĮIJȠȓ ıȣȞįȣĮıµȠȓ ȕĮıȚțȫȞ IJȪʌȦȞ țĮȚ IJȡȠʌȠʌȠȚȘIJȫȞ IJȘȢ C
ȉȪʌȠȚ - ȂİIJĮȕȜȘIJȑȢ - ȉİȜİıIJȑȢ
21
4.2 ǻǾȁȍȈǼǿȈ ȂǼȉǹǺȁǾȉȍȃ ǵȜİȢ ȠȚ µİIJĮȕȜȘIJȑȢ ʌȡȑʌİȚ ȞĮ įȘȜȫȞȠȞIJĮȚ ʌȡȚȞ ȤȡȘıȚµȠʌȠȚȘșȠȪȞ. ȂȓĮ įȒȜȦıȘ țĮșȠȡȓȗİȚ IJȠȞ IJȪʌȠ țĮȚ ʌİȡȚȑȤİȚ µȓĮ ȜȓıIJĮ µİIJĮȕȜȘIJȫȞ ĮȣIJȠȪ IJȠȣ IJȪʌȠȣ, ȩʌȦȢ ijĮȓȞİIJĮȚ ʌĮȡĮțȐIJȦ:
IJȪʌȠȢ
ȜȓıIJĮ_µİIJĮȕȜȘIJȫȞ;
ȩʌȠȣ IJȪʌȠȢ ʌȡȑʌİȚ ȞĮ İȓȞĮȚ ȑȞĮȢ ĮʌȠįİțIJȩȢ IJȪʌȠȢ įİįȠµȑȞȠȣ IJȘȢ C, İȞȫ Ș ȜȓıIJĮ µİIJĮȕȜȘIJȫȞ µʌȠȡİȓ ȞĮ ĮʌȠIJİȜİȓIJĮȚ Įʌȩ ȑȞĮ Ȓ ʌİȡȚııȩIJİȡĮ ĮȞĮȖȞȦȡȚıIJȚțȐ ȤȦȡȚıµȑȞĮ µİ țȩµµĮ. ȆĮȡĮįİȓȖµĮIJĮ įȘȜȫıİȦȞ µİIJĮȕȜȘIJȫȞ İȓȞĮȚ:
int i,j,k; char ch; short int si; unsigned long int ui; double lower,upper; Ǿ șȑıȘ ȩʌȠȣ įȘȜȫȞİIJĮȚ µȓĮ µİIJĮȕȜȘIJȒ İʌȘȡİȐȗİȚ ıİ µİȖȐȜȠ ȕĮșµȩ IJȠȞ IJȡȩʌȠ µİ IJȠȞ ȠʌȠȓȠ µʌȠȡȠȪȞ ȞĮ ȤȡȘıȚµȠʌȠȚȒıȠȣȞ IJȘ µİIJĮȕȜȘIJȒ IJĮ ȣʌȩȜȠȚʌĮ IJµȒµĮIJĮ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ. ȅȚ țĮȞȩȞİȢ ʌȠȣ țĮșȠȡȓȗȠȣȞ IJȘȞ ȠȡĮIJȩIJȘIJĮ µȓĮȢ µİIJĮȕȜȘIJȒȢ µİ ȕȐıȘ IJȘ șȑıȘ ȩʌȠȣ įȘȜȫșȘțİ ĮȣIJȒ, ȜȑȖȠȞIJĮȚ țĮȞȩȞİȢ ݵȕȑȜİȚĮȢ. ĬĮ įȠȪµİ ĮȞĮȜȣIJȚțȐ ĮȣIJȠȪȢ IJȠȣȢ țĮȞȩȞİȢ ıIJȠ ȀİijȐȜĮȚȠ 7. Ǽįȫ ĮʌȜȫȢ șĮ ĮȞĮijȑȡȠȣµİ IJĮ ȕĮıȚțȐ ıIJȠȚȤİȓĮ ĮȣIJȫȞ IJȦȞ țĮȞȩȞȦȞ: ȊʌȐȡȤȠȣȞ IJȡİȚȢ șȑıİȚȢ ıİ ȑȞĮ ʌȡȩȖȡĮµµĮ IJȘȢ C ȩʌȠȣ µʌȠȡȠȪȞ ȞĮ įȘȜȦșȠȪȞ µİIJĮȕȜȘIJȑȢ. Ǿ ʌȡȫIJȘ șȑıȘ İȓȞĮȚ ȑȟȦ Įʌȩ ȩȜİȢ IJȚȢ ıȣȞĮȡIJȒıİȚȢ, ıȣµʌİȡȚȜĮµȕĮȞȠµȑȞȘȢ IJȘȢ ıȣȞȐȡIJȘıȘȢ main(). ȅȚ µİIJĮȕȜȘIJȑȢ ʌȠȣ įȘȜȫȞȠȞIJĮȚ țĮIJ'ĮȣIJȩȞ IJȠȞ IJȡȩʌȠ țĮȜȠȪȞIJĮȚ İȟȦIJİȡȚțȑȢ (external) țĮȚ ȑȤȠȣȞ țĮșȠȜȚțȒ (global) ݵȕȑȜİȚĮ. DzIJıȚ µʌȠȡȠȪȞ ȞĮ ȤȡȘıȚµȠʌȠȚȠȪȞIJĮȚ Įʌȩ ȠʌȠȚȠįȒʌȠIJİ IJµȒµĮ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ. Ǿ įİȪIJİȡȘ șȑıȘ ȩʌȠȣ µʌȠȡȠȪȞ ȞĮ įȘȜȦșȠȪȞ µİIJĮȕȜȘIJȑȢ İȓȞĮȚ µȑıĮ ıİ µȓĮ ıȣȞȐȡIJȘıȘ. ȅȚ µİIJĮȕȜȘIJȑȢ ʌȠȣ įȘȜȫȞȠȞIJĮȚ țĮIJ'ĮȣIJȩȞ IJȠȞ IJȡȩʌȠ ȑȤȠȣȞ IJȠʌȚțȒ (local) ݵȕȑȜİȚĮ țĮȚ µʌȠȡȠȪȞ ȞĮ ȤȡȘıȚµȠʌȠȚȠȪȞIJĮȚ µȩȞȠ Įʌȩ ĮȣIJȒ IJȘ ıȣȞȐȡIJȘıȘ. Ǿ IJİȜİȣIJĮȓĮ șȑıȘ ȩʌȠȣ µʌȠȡȠȪȞ ȞĮ įȘȜȦșȠȪȞ µİIJĮȕȜȘIJȑȢ İȓȞĮȚ ıIJȘ įȒȜȦıȘ IJȦȞ IJȣʌȚțȫȞ ʌĮȡĮµȑIJȡȦȞ µȓĮȢ ıȣȞȐȡIJȘıȘȢ. ǼțIJȩȢ IJȠȣ ȩIJȚ įȚĮȕȚȕȐȗȠȣȞ IJȚµȑȢ ıIJȘ ıȣȞȐȡIJȘıȘ, ĮȣIJȑȢ ȠȚ ʌĮȡȐµİIJȡȠȚ İȞİȡȖȠȪȞ ȩʌȦȢ ȠȚ ȣʌȩȜȠȚʌİȢ IJȠʌȚțȑȢ µİIJĮȕȜȘIJȑȢ. ȂȓĮ µİIJĮȕȜȘIJȒ µʌȠȡİȓ ȞĮ ȜȐȕİȚ ĮȡȤȚțȒ IJȚµȒ țĮIJȐ IJȘ įȒȜȦıȒ IJȘȢ, ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ IJȠ ıȪµȕȠȜȠ = țĮȚ µȓĮ ıIJĮșİȡȐ µİIJȐ IJȠ ȩȞȠµĮ IJȘȢ µİIJĮȕȜȘIJȒȢ. Ǿ ȖİȞȚțȒ µȠȡijȒ IJȘȢ ĮʌȩįȠıȘȢ ĮȡȤȚțȒȢ IJȚµȒȢ țĮIJȐ IJȘ įȒȜȦıȘ, İȓȞĮȚ:
IJȪʌȠȢ
ĮȞĮȖȞȦȡȚıIJȚțȩ_µİIJĮȕȜȘIJȒȢ = ıIJĮșİȡȐ;
ȂİȡȚțȐ ʌĮȡĮįİȓȖµĮIJĮ ijĮȓȞȠȞIJĮȚ ʌĮȡĮțȐIJȦ:
char ch='C'; int i=0; float eps=1.0E-5; ȅȚ İȟȦIJİȡȚțȑȢ µİIJĮȕȜȘIJȑȢ µʌȠȡȠȪȞ ȞĮ ʌĮȓȡȞȠȣȞ ĮȡȤȚțȒ IJȚµȒ µȩȞȠ ıIJȘȞ ĮȡȤȒ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ. ǹȞ įİȞ IJȠȣȢ įȠșİȓ țȐʌȠȚĮ ĮȡȤȚțȒ IJȚµȒ, IJȩIJİ ʌĮȓȡȞȠȣȞ ĮȣIJȩµĮIJĮ ĮȡȤȚțȒ IJȚµȒ µȘįȑȞ. ȅȚ IJȠʌȚțȑȢ µİIJĮȕȜȘIJȑȢ ȩµȦȢ, ʌĮȓȡȞȠȣȞ ĮȡȤȚțȒ IJȚµȒ țȐșİ ijȠȡȐ ʌȠȣ ȤȡȘıȚµȠʌȠȚİȓIJĮȚ Ș ıȣȞȐȡIJȘıȘ ıIJȘȞ ȠʌȠȓĮ İȓȞĮȚ įȘȜȦµȑȞİȢ. ǹȞ ıIJȚȢ IJȠʌȚțȑȢ µİIJĮȕȜȘIJȑȢ įİ įȫıȠȣµİ ĮȡȤȚțȒ IJȚµȒ, ȑȤȠȣȞ ĮʌȡȠıįȚȩȡȚıIJȘ IJȚµȒ (ıțȠȣʌȓįȚĮ).
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
22
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ȈIJȘ įȒȜȦıȘ ȠʌȠȚĮıįȒʌȠIJİ µİIJĮȕȜȘIJȒȢ µİ ĮȡȤȚțȒ IJȚµȒ, µʌȠȡİȓ ȞĮ İijĮȡµȩȗİIJĮȚ Ƞ ʌȡȠıįȚȠȡȚıIJȒȢ IJȪʌȠȣ (type qualifier) const ʌȠȣ İȟĮıijĮȜȓȗİȚ ȩIJȚ Ș IJȚµȒ IJȘȢ įİ șĮ ĮȜȜȐȗİȚ țĮIJȐ IJȘ įȚȐȡțİȚĮ İțIJȑȜİıȘȢ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ, ijȑȡȠȞIJĮȢ ȑIJıȚ IJȠ ȓįȚȠ ıȤİįȩȞ ĮʌȠIJȑȜİıµĮ µİ IJȘȞ #define. Ȇ.Ȥ:
const double e=2.71828182845905; ǹȞ ȖȓȞİȚ ĮʌȩʌİȚȡĮ ĮȜȜĮȖȒȢ µȓĮȢ const, Ƞ µİIJĮȖȜȦIJIJȚıIJȒȢ įȓȞİȚ µȒȞȣµĮ ȜȐșȠȣȢ. ȆİȡȚııȩIJİȡĮ ȖȚĮ IJȚȢ įȘȜȫıİȚȢ µİIJĮȕȜȘIJȫȞ, șĮ įȠȪµİ ıIJȠ ȀİijȐȜĮȚȠ 7. ȆĮȡĮIJȘȡȒıİȚȢ: 1.
ǵʌȦȢ ȖȓȞİIJĮȚ ijĮȞİȡȩ Įʌȩ IJĮ ʌĮȡĮʌȐȞȦ, Ș C įİ įȚĮșȑIJİȚ IJȠ ȜȠȖȚțȩ IJȪʌȠ (boolean). ǹȞIJȓ ĮȣIJȠȪ, ȤȡȘıȚµȠʌȠȚİȓ IJȠȞ IJȪʌȠ int țĮȚ İȡµȘȞİȪİȚ IJȘȞ IJȚµȒ 0 ȦȢ false țĮȚ ȠʌȠȚĮįȒʌȠIJİ µȘ-µȘįİȞȚțȒ IJȚµȒ ȦȢ true.
2.
ȂȓĮ µİIJĮȕȜȘIJȒ IJȪʌȠȣ ĮȜijĮȡȚșµȘIJȚțȠȪ (string), ȠȡȓȗİIJĮȚ ȦȢ ʌȓȞĮțĮȢ ȤĮȡĮțIJȒȡȦȞ, ʌ.Ȥ:
char str[20]; /* ǹȜijĮȡȚșµȘIJȚțȩ µİ ȩȞȠµĮ str țĮȚ µȒțȠȢ 20 */ ȆİȡȚııȩIJİȡĮ ȖȚĮ IJĮ ĮȜijĮȡȚșµȘIJȚțȐ șĮ įȠȪµİ ıIJȠ ȀİijȐȜĮȚȠ 8.
4.3 ȉǼȁǼȈȉǼȈ ǵʌȦȢ İȓįĮµİ ıIJȘȞ § 3.1, Ș C ȑȤİȚ ȑȞĮ ʌȠȜȪ ʌȜȠȪıȚȠ ıȪȞȠȜȠ IJİȜİıIJȫȞ IJȠȣȢ ȠʌȠȓȠȣȢ ʌĮȡĮșȑıĮµİ ıIJȠȞ ȆȓȞĮțĮ 3.1. Ȉİ IJȠȪIJȘ IJȘȞ ʌĮȡȐȖȡĮijȠ șĮ țĮȜȪȥȠȣµİ ȠȡȚıµȑȞİȢ Įʌȩ IJȚȢ țĮIJȘȖȠȡȓİȢ IJȦȞ IJİȜİıIJȫȞ, ȟİțȚȞȫȞIJĮȢ Įʌȩ IJȠȣȢ ĮȡȚșµȘIJȚțȠȪȢ IJİȜİıIJȑȢ.
4.3.1 ǹȇǿĬȂǾȉǿȀȅǿ ȉǼȁǼȈȉǼȈ ȈIJȠȞ ȆȓȞĮțĮ 4.2 ʌĮȡȠȣıȚȐȗȠȞIJĮȚ ȠȚ İʌIJȐ ĮȡȚșµȘIJȚțȠȓ IJİȜİıIJȑȢ IJȘȢ C. ǹȡȚșµȘIJȚțȩȢ ȉİȜİıIJȒȢ + * / % -++
ȆȡȐȟȘ ǹijĮȓȡİıȘ, µȠȞĮįȚțȩ ʌȜȘȞ ȆȡȩıșİıȘ ȆȠȜȜĮʌȜĮıȚĮıµȩȢ ǻȚĮȓȡİıȘ ȊʌȩȜȠȚʌȠ įȚĮȓȡİıȘȢ ĮțİȡĮȓȦȞ ȂȠȞĮįȚĮȓĮ µİȓȦıȘ ȂȠȞĮįȚĮȓĮ ĮȪȟȘıȘ
ȆȓȞĮțĮȢ 4.2: ȅȚ ĮȡȚșµȘIJȚțȠȓ IJİȜİıIJȑȢ IJȘȢ C
ȅȚ ĮȡȚșµȘIJȚțȠȓ IJİȜİıIJȑȢ µİ įȪȠ IJİȜİıIJȑȠȣȢ (įȣĮįȚțȠȓ) +, -, * țĮȚ / ȜİȚIJȠȣȡȖȠȪȞ ıIJȘ C µİ IJȠȞ ȓįȚȠ IJȡȩʌȠ ʌȠȣ ȜİȚIJȠȣȡȖȠȪȞ țĮȚ ıIJȚȢ ȐȜȜİȢ ȖȜȫııİȢ ʌȡȠȖȡĮµµĮIJȚıµȠȪ.
ȉȪʌȠȚ - ȂİIJĮȕȜȘIJȑȢ - ȉİȜİıIJȑȢ
23
ȅ IJİȜİıIJȒȢ / IJȘȢ įȚĮȓȡİıȘȢ ȤȡİȚȐȗİIJĮȚ İȚįȚțȒ ʌȡȠıȠȤȒ. ȈIJȘȞ ʌȡĮȖµĮIJȚțȩIJȘIJĮ ȣʌȐȡȤȠȣȞ įȪȠ įȚĮijȠȡİIJȚțȑȢ ʌȡȐȟİȚȢ įȚĮȓȡİıȘȢ țĮȚ Ș țȐșİIJȠȢ (/) ȤȡȘıȚµȠʌȠȚİȓIJĮȚ țĮȚ ȖȚĮ IJȚȢ įȪȠ. ǹȞ įȚĮȚȡȑıȠȣµİ įȪȠ ĮțİȡĮȓȠȣȢ, ʌĮȓȡȞȠȣµİ IJȠ ĮțȑȡĮȚȠ ʌȘȜȓțȠ IJȘȢ įȚĮȓȡİıȘȢ, ʌ.Ȥ:
10/3=3 ǹȞ ıIJȘ įȚĮȓȡİıȘ x/y IJȠȣȜȐȤȚıIJȠȞ ȑȞĮȢ Įʌȩ IJȠȣȢ IJİȜİıIJȑȠȣȢ İȓȞĮȚ IJȪʌȠȣ țȚȞȘIJȒȢ ȣʌȠįȚĮıIJȠȜȒȢ, IJȠ ĮʌȠIJȑȜİıµĮ șĮ İȓȞĮȚ IJȪʌȠȣ țȚȞȘIJȒȢ ȣʌȠįȚĮıIJȠȜȒȢ. ǹȣIJȩ ȚıȤȪİȚ İʌȓıȘȢ ıIJȘȞ ʌȡȩıșİıȘ, ĮijĮȓȡİıȘ țĮȚ ʌȠȜȜĮʌȜĮıȚĮıµȩ. ǹȜȜȐ ȖȚ'ĮȣIJȑȢ IJȚȢ ʌȡȐȟİȚȢ Ș IJȚµȒ IJȠȣ ĮʌȠIJİȜȑıµĮIJȠȢ įİȞ İʌȘȡİȐȗİIJĮȚ ıȣȞȒșȦȢ ıȠȕĮȡȐ Įʌȩ IJȠȞ IJȪʌȠ IJȦȞ IJİȜİıIJȑȦȞ. īȚĮ ʌĮȡȐįİȚȖµĮ: 4+3=7 (ĮțȑȡĮȚȠȢ) 4.0+3=7.0 (țȚȞȘIJȒȢ ȣʌȠįȚĮıIJȠȜȒȢ) Ȃİ IJȠ / ȩµȦȢ, ȠȚ IJȪʌȠȚ įİįȠµȑȞȦȞ IJȦȞ IJİȜİıIJȑȦȞ ȑȤȠȣȞ įȡĮıIJȚțȒ İʌȓįȡĮıȘ ıIJȠ ĮʌȠIJȑȜİıµĮ: 4/3=1 (ĮțȑȡĮȚȠȢ) 4.0/3=1.333333... (țȚȞȘIJȒȢ ȣʌȠįȚĮıIJȠȜȒȢ) ȅ IJİȜİıIJȒȢ ȣʌȠȜȠȓʌȠȣ % ʌĮȡȐȖİȚ IJȠ ȣʌȩȜȠȚʌȠ µȓĮȢ įȚĮȓȡİıȘȢ ĮțİȡĮȓȦȞ. ǻİ µʌȠȡȠȪµİ ȞĮ ȤȡȘıȚµȠʌȠȚȒıȠȣµİ IJȠ % µİ IJȠȣȢ IJȪʌȠȣȢ float Ȓ double. DzIJıȚ ȖȚĮ ʌĮȡȐįİȚȖµĮ: 39%5=4 (İijȩıȠȞ 39=7*5+4) ȅ µȠȞĮįȚțȩȢ (unary) IJİȜİıIJȒȢ - ʌȠȜȜĮʌȜĮıȚȐȗİȚ IJȠȞ IJİȜİıIJȑȠ IJȠȣ µİ -1. DzIJıȚ ĮȞ IJȠʌȠșİIJȘșİȓ IJȠ ıȪµȕȠȜȠ ʌȜȘȞ µʌȡȠıIJȐ Įʌȩ țȐʌȠȚȠȞ ĮȡȚșµȩ, șĮ ʌȡȠțȜȘșİȓ ĮȜȜĮȖȒ IJȠȣ ʌȡȠıȒµȠȣ IJȠȣ. Ǿ C įȚĮșȑIJİȚ įȪȠ ĮıȣȞȒșȚıIJȠȣȢ IJİȜİıIJȑȢ ȖȚĮ IJȘȞ ĮȪȟȘıȘ țĮȚ µİȓȦıȘ IJȦȞ IJȚµȫȞ IJȦȞ µİIJĮȕȜȘIJȫȞ țĮIJȐ 1. ȅ IJİȜİıIJȒȢ µȠȞĮįȚĮȓĮȢ ĮȪȟȘıȘȢ ++ ʌȡȠıșȑIJİȚ 1 ıIJȠȞ IJİȜİıIJȑȠ IJȠȣ, İȞȫ Ƞ IJİȜİıIJȒȢ µȠȞĮįȚĮȓĮȢ µİȓȦıȘȢ -- ĮijĮȚȡİȓ 1. DzIJıȚ ȠȚ ʌȡȐȟİȚȢ:
x++ x-İȓȞĮȚ ȓįȚİȢ µİ IJȚȢ:
x=x+1 x=x-1 ȉȠ ĮıȣȞȒșȚıIJȠ İȓȞĮȚ ȩIJȚ ȠȚ ++ țĮȚ -- µʌȠȡȠȪȞ ȞĮ ȤȡȘıȚµȠʌȠȚȠȪȞIJĮȚ İȓIJİ ıĮȞ ʌȡȠșݵĮIJȚțȠȓ IJİȜİıIJȑȢ (ʌȡȚȞ Įʌȩ IJȘ µİIJĮȕȜȘIJȒ, ȩʌȦȢ ++x) İȓIJİ ıĮȞ µİIJĮșݵĮIJȚțȠȓ (µİIJȐ IJȘ µİIJĮȕȜȘIJȒ, ȩʌȦȢ x++). ȀĮȚ ıIJȚȢ įȪȠ ʌİȡȚʌIJȫıİȚȢ IJȠ ĮʌȠIJȑȜİıµĮ İȓȞĮȚ Ș µȠȞĮįȚĮȓĮ ĮȪȟȘıȘ IJȠȣ IJİȜİıIJȑȠȣ. ǹȜȜȐ Ș ʌȡȠșݵĮIJȚțȒ ʌĮȡȐıIJĮıȘ ĮȣȟȐȞİȚ IJȘȞ IJȚµȒ IJȠȣ IJİȜİıIJȑȠȣ ʌȡȚȞ ȤȡȘıȚµȠʌȠȚȘșİȓ Ș IJȚµȒ IJȠȣ, İȞȫ Ș µİIJĮșݵĮIJȚțȒ ʌĮȡȐıIJĮıȘ ĮȣȟȐȞİȚ IJȘȞ IJȚµȒ IJȠȣ IJİȜİıIJȑȠȣ ĮijȠȪ ȑȤİȚ ȤȡȘıȚµȠʌȠȚȘșİȓ Ș IJȚµȒ IJȠȣ. ǹȣIJȩ ıȘµĮȓȞİȚ ȩIJȚ ıIJȚȢ ʌİȡȚʌIJȫıİȚȢ ʌȠȣ ȤȡȘıȚµȠʌȠȚİȓIJĮȚ Ș IJȚµȒ țĮȚ ȩȤȚ ĮʌȜȫȢ IJȠ ĮʌȠIJȑȜİıµĮ, ȠȚ x++ țĮȚ ++x İȓȞĮȚ įȚĮijȠȡİIJȚțȑȢ. ǹȞ ȖȚĮ ʌĮȡȐįİȚȖµĮ IJȠ x İȓȞĮȚ 5, IJȩIJİ Ș ʌĮȡȐıIJĮıȘ:
y=x++ įȓȞİȚ ıIJȠ y IJȚµȒ 5, İȞȫ Ș ʌĮȡȐıIJĮıȘ:
y=++x
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
24
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
IJȠȣ įȓȞİȚ IJȚµȒ 6. ȀĮȚ ıIJȚȢ įȪȠ ʌİȡȚʌIJȫıİȚȢ, IJȠ x ȖȓȞİIJĮȚ 6.
4.3.2 ȈȊȈȋǼȉǿȈȉǿȀȅǿ Ȁǹǿ ȁȅīǿȀȅǿ ȉǼȁǼȈȉǼȈ ȈIJȠȣȢ ȩȡȠȣȢ ıȣıȤİIJȚıIJȚțȩȢ IJİȜİıIJȒȢ țĮȚ ȜȠȖȚțȩȢ IJİȜİıIJȒȢ, Ș ȜȑȟȘ ıȣıȤİIJȚıIJȚțȩȢ ĮȞĮijȑȡİIJĮȚ ıIJȚȢ ıȤȑıİȚȢ ʌȠȣ µʌȠȡȠȪȞ ȞĮ ȑȤȠȣȞ ȠȚ IJİȜİıIJȑȠȚ, İȞȫ Ș ȜȑȟȘ ȜȠȖȚțȩȢ ĮȞĮijȑȡİIJĮȚ ıIJȠȣȢ IJȡȩʌȠȣȢ µİ IJȠȣȢ ȠʌȠȓȠȣȢ µʌȠȡȠȪȞ ȞĮ ıȣȞįİșȠȪȞ µİIJĮȟȪ IJȠȣȢ ĮȣIJȑȢ ȠȚ ıȤȑıİȚȢ. ȉȠ țȜİȚįȓ ıIJȚȢ ȑȞȞȠȚİȢ IJȦȞ ıȣıȤİIJȚıIJȚțȫȞ țĮȚ ȜȠȖȚțȫȞ IJİȜİıIJȫȞ, İȓȞĮȚ ȠȚ ȚįȑİȢ IJȘȢ ĮȜȒșİȚĮȢ (true) țĮȚ IJȠȣ ȥİȪįȠȣȢ (false). ȈIJȘ C, ĮȜȘșȒȢ İȓȞĮȚ ȠʌȠȚĮįȒʌȠIJİ ʌĮȡȐıIJĮıȘ ʌȠȣ ȑȤİȚ IJȚµȒ įȚȐijȠȡȘ IJȠȣ µȘįİȞȩȢ, İȞȫ ȥİȣįȒȢ ȠʌȠȚĮįȒʌȠIJİ ʌĮȡȐıIJĮıȘ ʌȠȣ ȑȤİȚ IJȚµȒ ȓıȘ µİ µȘįȑȞ. ȅȚ ʌĮȡĮıIJȐıİȚȢ ʌȠȣ ȤȡȘıȚµȠʌȠȚȠȪȞ ıȣıȤİIJȚıIJȚțȠȪȢ Ȓ ȜȠȖȚțȠȪȢ IJİȜİıIJȑȢ İʌȚıIJȡȑijȠȣȞ IJȠ µȘįȑȞ ıĮȞ ȥİȣįȒ IJȚµȒ țĮȚ IJȠ ȑȞĮ ıĮȞ ĮȜȘșȒ IJȚµȒ. ȈIJȠȞ ȆȓȞĮțĮ 4.3 ʌĮȡȠȣıȚȐȗȠȞIJĮȚ ȠȚ ıȣıȤİIJȚıIJȚțȠȓ țĮȚ ȜȠȖȚțȠȓ IJİȜİıIJȑȢ. ȅȚ ıȣıȤİIJȚıIJȚțȠȓ IJİȜİıIJȑȢ ȤȡȘıȚµȠʌȠȚȠȪȞIJĮȚ ȖȚĮ ȞĮ țĮșȠȡȓȗȠȣȞ IJȘ ıȤȑıȘ IJȘȢ µȓĮȢ ʌĮȡȐıIJĮıȘȢ µİ IJȘȞ ȐȜȜȘ. ǼʌȚıIJȡȑijȠȣȞ ʌȐȞIJȠIJİ 1 Ȓ 0, ĮȞȐȜȠȖĮ µİ IJȠ ĮʌȠIJȑȜİıµĮ IJȠȣ İȜȑȖȤȠȣ. ȉȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ įİȓȤȞİȚ IJȠ ĮʌȠIJȑȜİıµĮ țȐșİ ʌȡȐȟȘȢ ݵijĮȞȓȗȠȞIJȐȢ IJȠ µİ 0 Ȓ 1: /* relation.c */ /* ȋȡȒıȘ IJȦȞ ıȣıȤİIJȚıIJȚțȫȞ IJİȜİıIJȫȞ */ main() { int i,j; printf("ǻȫıİ įȪȠ ĮțȑȡĮȚȠȣȢ ĮȡȚșµȠȪȢ: "); scanf("%d %d",&i,&j); printf("Ǿ ıȤȑıȘ %d==%d İȓȞĮȚ %d\n",i,j,i==j); printf("Ǿ ıȤȑıȘ %d!=%d İȓȞĮȚ %d\n",i,j,i!=j); printf("Ǿ ıȤȑıȘ %d<=%d İȓȞĮȚ %d\n",i,j,i<=j); printf("Ǿ ıȤȑıȘ %d>=%d İȓȞĮȚ %d\n",i,j,i>=j); printf("Ǿ ıȤȑıȘ %d<%d İȓȞĮȚ %d\n",i,j,i<j); printf("Ǿ ıȤȑıȘ %d>%d İȓȞĮȚ %d\n",i,j,i>j);
} ȉȠ ʌĮȡĮʌȐȞȦ ʌȡȩȖȡĮµµĮ ʌİȡȚȜĮµȕȐȞİȚ IJȠ ıȪµȕȠȜȠ, IJȠ '\n' IJȠ ȠʌȠȓȠ, ȩʌȦȢ ȑȤȠȣµİ įİȚ ıIJȘȞ § 3.3.2, İȓȞĮȚ ȑȞĮȢ µȩȞȠ ȤĮȡĮțIJȒȡĮȢ ʌȠȣ, ȩIJĮȞ ʌĮȡݵȕȐȜȜİIJĮȚ ıİ ȑȞĮ ĮȜijĮȡȚșµȘIJȚțȩ, ʌȡȠțĮȜİȓ µȓĮ ĮȜȜĮȖȒ ȖȡĮµµȒȢ, įȘȜĮįȒ µİIJȐ IJȠ ȤĮȡĮțIJȒȡĮ '\n' Ș İțIJȪʌȦıȘ ĮȡȤȓȗİȚ Įʌ'IJȘȞ ĮȡȤȒ µȓĮȢ ȞȑĮȢ ȖȡĮµµȒȢ. ȅȚ ȜȠȖȚțȠȓ IJİȜİıIJȑȢ ȤȡȘıȚµȠʌȠȚȠȪȞIJĮȚ ȖȚĮ ȞĮ ȣʌȠıIJȘȡȓȗȠȣȞ IJȚȢ ȕĮıȚțȑȢ ȜȠȖȚțȑȢ ʌȡȐȟİȚȢ Ȁǹǿ (AND), H (OR), țĮȚ ȅȋǿ (NOT) µİ ȕȐıȘ IJȠȞ ʌȓȞĮțĮ ĮȜȒșİȚĮȢ ʌȠȣ ĮțȠȜȠȣșİȓ, Ƞ ȠʌȠȓȠȢ ȤȡȘıȚµȠʌȠȚİȓ IJȠ 1 ȖȚĮ IJȠ ĮȜȘșȑȢ țĮȚ IJȠ 0 ȖȚĮ IJȠ ȥİȣįȑȢ: p 0 0 1 1
q 0 1 1 0
p AND q 0 0 1 0
p OR q 0 1 1 1
NOT p 1 1 0 0
ȉȪʌȠȚ - ȂİIJĮȕȜȘIJȑȢ - ȉİȜİıIJȑȢ
ȈȣıȤİIJȚıIJȚțȩȢ ȉİȜİıIJȒȢ > >= < <= == !=
ȈȘµĮıȓĮ ȂİȖĮȜȪIJİȡȠ ȂİȖĮȜȪIJİȡȠ Ȓ ȓıȠ ȂȚțȡȩIJİȡȠ
ȁȠȖȚțȩȢ ȉİȜİıIJȒȢ && || !
25
ȆȡȐȟȘ AND (ȜȠȖȚțȒ ıȪȗİȣȟȘ) OR (ȜȠȖȚțȒ įȚȐȗİȣȟȘ) NOT (ȜȠȖȚțȒ ȐȡȞȘıȘ)
ȂȚțȡȩIJİȡȠ Ȓ ȓıȠ ǴıȠ ǻȚȐijȠȡȠ
ȆȓȞĮțĮȢ 4.3: ȅȚ ıȣıȤİIJȚıIJȚțȠȓ țĮȚ ȠȚ ȜȠȖȚțȠȓ IJİȜİıIJȑȢ IJȘȢ C
ȉȩıȠ ȠȚ ıȣıȤİIJȚıIJȚțȠȓ ȩıȠ țĮȚ ȠȚ ȜȠȖȚțȠȓ IJİȜİıIJȑȢ, ȑȤȠȣȞ ȤĮµȘȜȩIJİȡȘ ʌȡȠIJİȡĮȚȩIJȘIJĮ Įʌȩ IJȠȣȢ ĮȡȚșµȘIJȚțȠȪȢ IJİȜİıIJȑȢ. ǹȣIJȩ ıȘµĮȓȞİȚ ȩIJȚ Ș ʌĮȡȐıIJĮıȘ:
15>1+20 șĮ ȣʌȠȜȠȖȚıIJİȓ ıĮȞ ȞĮ ȒIJĮȞ ȖȡĮµµȑȞȘ:
15>(1+20) ȉȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ įİȓȤȞİȚ ʌȫȢ ȜİȚIJȠȣȡȖȠȪȞ ȠȚ ȜȠȖȚțȠȓ IJİȜİıIJȑȢ: /* logical.c */ /* ȋȡȒıȘ ȜȠȖȚțȫȞ IJİȜİıIJȫȞ */ main() { int i,j;
}
printf("ǻȫıİ įȪȠ ĮȡȚșµȠȪȢ (Ƞ țĮșȑȞĮȢ ȞĮ İȓȞĮȚ 0 Ȓ 1): "); scanf("%d %d",&i,&j); printf("%d AND %d µĮȢ țȐȞİȚ %d\n",i,j,i&&j); printf("%d OR %d µĮȢ țȐȞİȚ %d\n",i,j,i||j); printf("NOT %d µĮȢ țȐȞİȚ %d\n",i,!i);
4.3.3 ȉǼȁǼȈȉǼȈ BIT (BITWISE) Ǿ C įȚĮșȑIJİȚ ȑȟȚ IJİȜİıIJȑȢ ȖȚĮ ȤİȚȡȚıµȩ bit (bitwise). ǹȣIJȠȓ µʌȠȡȠȪȞ ȞĮ İijĮȡµȩȗȠȞIJĮȚ µȩȞȠ ıİ ĮțȑȡĮȚȠȣȢ IJİȜİıIJȑȠȣȢ, įȘȜĮįȒ ıİ char, short, int țĮȚ long, ʌȡȠıȘµĮıµȑȞȠȣȢ Ȓ ĮʌȡȩıȘµȠȣȢ țĮȚ įȡȠȣȞ ʌȐȞȦ ıIJĮ bits IJȦȞ ĮțİȡĮȓȦȞ. ȈIJȠȞ ȆȓȞĮțĮ 4.4 ʌĮȡȠȣıȚȐȗȠȞIJĮȚ ȠȚ IJİȜİıIJȑȢ bit. īȚĮ ʌĮȡȐįİȚȖµĮ, Ș IJȚµȒ IJȠȣ 23&26 İȓȞĮȚ 18. īȚĮ ȞĮ IJȠ țĮIJĮȜȐȕȠȣµİ ĮȣIJȩ ʌȡȑʌİȚ ȞĮ İȓµĮıIJİ İȟȠȚțİȚȦµȑȞȠȚ µİ IJȠ įȣĮįȚțȩ ıȪıIJȘµĮ ĮȡȚșµȫȞ, ȩʌȠȣ ȠȚ ĮȡȚșµȠȓ ȖȡȐijȠȞIJĮȚ ȦȢ ĮțȠȜȠȣșȓİȢ įȣĮįȚțȫȞ ȥȘijȓȦȞ, ıIJȘ ıȣȞȑȤİȚĮ Ș ʌȡȐȟȘ AND İijĮȡµȩȗİIJĮȚ ȖȚĮ IJĮ ĮȞIJȓıIJȠȚȤĮ bits IJȦȞ IJİȜİıIJȑȦȞ: 23 = 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 26 = 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 18 = 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
&
26
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ȉİȜİıIJȒȢ bit & | ^ ~ >> <<
ȆȡȐȟȘ AND (ıȪȗİȣȟȘ) OR (įȚȐȗİȣȟȘ) XOR (ĮʌȠțȜİȚıIJȚțȒ įȚȐȗİȣȟȘ) ȈȣµʌȜȒȡȦµĮ ȦȢ ʌȡȠȢ ȑȞĮ ȅȜȓıșȘıȘ įİȟȚȐ ȅȜȓıșȘıȘ ĮȡȚıIJİȡȐ
ȆȓȞĮțĮȢ 4.4: ȅȚ IJİȜİıIJȑȢ bit IJȘȢ C
Ǿ ȖİȞȚțȒ µȠȡijȒ µȓĮȢ ʌĮȡȐıIJĮıȘȢ ȠȜȓıșȘıȘȢ İȓȞĮȚ:
µİIJĮȕȜȘIJȒ >> (Ȓ <<) ĮȡȚșµȩȢ_șȑıİȦȞ ȈȘµİȚȫıIJİ ȩIJȚ ȠȜȓıșȘıȘ İȞȩȢ ĮțİȡĮȓȠȣ țĮIJȐ µȓĮ șȑıȘ įİȟȚȐ ȚıȠįȣȞĮµİȓ µİ įȚĮȓȡİıȒ IJȠȣ µİ IJȠ 2, İȞȫ ȠȜȓıșȘıȘ țĮIJȐ µȓĮ șȑıȘ ĮȡȚıIJİȡȐ ȚıȠįȣȞĮµİȓ µİ ʌȠȜȜĮʌȜĮıȚĮıµȩ IJȠȣ µİ IJȠ 2. īȚĮ ʌĮȡȐįİȚȖµĮ ȑıIJȦ:
x=18
(=0000000000010010) IJȩIJİ µİ įİȟȚȐ ȠȜȓıșȘıȘ țĮIJȐ ȑȞĮ bit (x>>1) ʌȡȠțȪʌIJİȚ: 0000000000001001 (=9) İȞȫ µİ ĮȡȚıIJİȡȒ ȠȜȓıșȘıȘ țĮIJȐ ȑȞĮ bit (x<<1) ʌȡȠțȪʌIJİȚ: 0000000000100100 (=36) ǼȓȞĮȚ ʌȡȠijĮȞȑȢ ȩIJȚ ȠȜȓıșȘıȘ țĮIJȐ ʌİȡȚııȩIJİȡİȢ IJȘȢ µȓĮȢ șȑıȘȢ įİȟȚȐ Ȓ ĮȡȚıIJİȡȐ, ȚıȠįȣȞĮµİȓ µİ įȚĮįȠȤȚțȑȢ įȚĮȚȡȑıİȚȢ Ȓ ʌȠȜ/µȠȪȢ IJȠȣ ĮȡȚșµȠȪ µİ IJȠ 2.
4.3.4 ȉǼȁǼȈȉǼȈ ǹȆȅǻȅȈǾȈ ȉǿȂǾȈ (ȀǹȉǹȋȍȇǾȈǾȈ) ȈIJȘ C, Ƞ IJİȜİıIJȒȢ ĮʌȩįȠıȘȢ IJȚµȒȢ (Ȓ IJİȜİıIJȒȢ țĮIJĮȤȫȡȘıȘȢ) İȓȞĮȚ IJȠ ıȘµİȓȠ ȓıȠȞ (=). ȍıIJȩıȠ, Ș C İʌȚIJȡȑʌİȚ µȓĮ ʌȠȜȪ ȕȠȜȚțȒ ıIJİȞȠȖȡĮijȚțȒ µȠȡijȒ ȖȚĮ ĮʌȠįȩıİȚȢ IJȚµȫȞ IJȠȣ ȖİȞȚțȠȪ IJȪʌȠȣ:
µİIJĮȕȜȘIJȒ = µİIJĮȕȜȘIJȒ
IJİȜİıIJȒȢ
ʌĮȡȐıIJĮıȘ
ȦȢ İȟȒȢ:
µİIJĮȕȜȘIJȒ DzIJıȚ ʌ.Ȥ. ȠȚ ʌĮȡĮıIJȐıİȚȢ:
x=x+10 y=y/2 µʌȠȡȠȪȞ ȞĮ ȖȡĮijȠȪȞ:
x+=10 y/=2
IJİȜİıIJȒȢ = ʌĮȡȐıIJĮıȘ
ȉȪʌȠȚ - ȂİIJĮȕȜȘIJȑȢ - ȉİȜİıIJȑȢ
27
4.4 ȆǹȇǹȈȉǹȈǼǿȈ ȅȚ IJİȜİıIJȑȢ, ȠȚ ıIJĮșİȡȑȢ țĮȚ ȠȚ µİIJĮȕȜȘIJȑȢ İȓȞĮȚ IJĮ ıȣıIJĮIJȚțȐ IJȦȞ ʌĮȡĮıIJȐıİȦȞ. ȂȓĮ ʌĮȡȐıIJĮıȘ ıIJȘ C İȓȞĮȚ ȠʌȠȚȠıįȒʌȠIJİ ȑȖțȣȡȠȢ ıȣȞįȣĮıµȩȢ ĮȣIJȫȞ IJȦȞ ıIJȠȚȤİȓȦȞ. DzȞĮ ʌĮȡȐįİȚȖµĮ ʌĮȡȐıIJĮıȘȢ İȓȞĮȚ:
x=a+b ʌȠȣ İȓȞĮȚ µȓĮ ʌĮȡȐıIJĮıȘ ĮʌȩįȠıȘȢ IJȚµȒȢ Ș ȠʌȠȓĮ țĮIJĮȤȦȡİȓ IJȠ ȐșȡȠȚıµĮ IJȦȞ a țĮȚ b ıIJȠ x. Ȉİ ĮȞIJȓșİıȘ µİ ȐȜȜİȢ ȖȜȫııİȢ ʌȡȠȖȡĮµµĮIJȚıµȠȪ, Ș C µĮȢ İʌȚIJȡȑʌİȚ ȞĮ ȤȡȘıȚµȠʌȠȚȠȪµİ IJȠȣȢ IJİȜİıIJȑȢ ĮʌȩįȠıȘȢ IJȚµȒȢ ıİ ʌĮȡĮıIJȐıİȚȢ ʌȠȣ ʌİȡȚȑȤȠȣȞ țĮȚ ȐȜȜȠȣȢ IJİȜİıIJȑȢ ĮʌȩįȠıȘȢ IJȚµȒȢ. ǹȣIJȩ įȚȩIJȚ Ƞ IJİȜİıIJȒȢ ĮʌȩįȠıȘȢ IJȚµȒȢ țȐȞİȚ įȪȠ ʌȡȐȖµĮIJĮ: ȆȡȫIJȠȞ ĮʌȠįȓįİȚ IJȘȞ IJȚµȒ IJȘȢ įİȟȚȐȢ ʌȜİȣȡȐȢ ıIJȘ µİIJĮȕȜȘIJȒ IJȘȢ ĮȡȚıIJİȡȒȢ ʌȜİȣȡȐȢ țĮȚ įİȪIJİȡȠȞ Ș ȩȜȘ ʌĮȡȐıIJĮıȘ ʌĮȓȡȞİȚ ĮȣIJȒ IJȘȞ IJȚµȒ. DzIJıȚ, ȖȚĮ ʌĮȡȐįİȚȖµĮ, Ș ʌĮȡĮțȐIJȦ ʌĮȡȐıIJĮıȘ İȓȞĮȚ ıȦıIJȒ:
y=3*(x=5+(u=7))+1 µİIJȐ IJȘȞ İțIJȑȜİıȘ IJȘȢ ʌĮȡĮʌȐȞȦ ʌĮȡȐıIJĮıȘȢ șĮ ȑȤȠȣµİ u=7, x=12, y=37 țĮȚ Ș ıȣȞȠȜȚțȒ IJȚµȒ IJȘȢ ʌĮȡȐıIJĮıȘȢ șĮ İȓȞĮȚ 37. DzıIJȦ İʌȓıȘȢ Ș ʌĮȡȐıIJĮıȘ:
r=(p=x*y)<0 ıIJȘȞ ĮȡȤȒ ȣʌȠȜȠȖȓȗİIJĮȚ IJȠ ȖȚȞȩµİȞȠ x*y țĮȚ Ș IJȚµȒ IJȠȣ ĮʌȠįȓįİIJĮȚ ıIJȠ p. ȈIJȘ ıȣȞȑȤİȚĮ İȜȑȖȤİIJĮȚ Ș IJȚµȒ IJȘȢ ʌĮȡȐıIJĮıȘȢ ʌȠȣ ȑȤİȚ IJȠʌȠșİIJȘșİȓ ıIJȚȢ ʌĮȡİȞșȑıİȚȢ, ıİ ıȤȑıȘ µİ IJȠ µȘįȑȞ. ǹȞ İȓȞĮȚ µȚțȡȩIJİȡȘ IJȠȣ µȘįİȞȩȢ IJȩIJİ ıIJȠ r ĮʌȠįȓįİIJĮȚ Ș IJȚµȒ 1 įȚĮijȠȡİIJȚțȐ ĮʌȠįȓįİIJĮȚ Ș IJȚµȒ 0. DzIJıȚ ĮȞ x=1 țĮȚ y=3 IJȩIJİ IJȠ r ʌĮȓȡȞİȚ IJȚµȒ 0. ǹȞ șȑıȠȣµİ IJȠ ıȘµİȓȠ ; (İȜȜȘȞȚțȩ İȡȦIJȘµĮIJȚțȩ, ʌȠȣ ȜȑȖİIJĮȚ țĮȚ semicolon) ıIJȠ IJȑȜȠȢ µȓĮȢ ʌĮȡȐıIJĮıȘȢ, IJȠ ĮʌȠIJȑȜİıµĮ İȓȞĮȚ µȓĮ İȞIJȠȜȒ. DzIJıȚ:
t=5 İȓȞĮȚ ʌĮȡȐıIJĮıȘ ĮʌȩįȠıȘȢ IJȚµȒȢ t=5; İȓȞĮȚ İȞIJȠȜȒ ĮʌȩįȠıȘȢ IJȚµȒȢ
4.5 ȂǼȉǹȉȇȅȆǼȈ ȉȊȆȍȃ 4.5.1 ǹȊȉȅȂǹȉǼȈ ȂǼȉǹȉȇȅȆǼȈ ǵIJĮȞ ȑȞĮȢ IJİȜİıIJȒȢ įȡĮ ıİ IJİȜİıIJȑȠȣȢ įȚĮijȠȡİIJȚțȫȞ IJȪʌȦȞ, ĮȣIJȠȓ ʌȡȚȞ ȖȓȞİȚ Ș ʌȡȐȟȘ, µİIJĮIJȡȑʌȠȞIJĮȚ ĮȣIJȩµĮIJĮ ıİ İȞȚĮȓȠ IJȪʌȠ µİ ȕȐıȘ µİȡȚțȠȪȢ țĮȞȩȞİȢ. īİȞȚțȐ ȠȚ µȩȞİȢ ĮȣIJȩµĮIJİȢ µİIJĮIJȡȠʌȑȢ İȓȞĮȚ ĮȣIJȑȢ ʌȠȣ µİIJĮIJȡȑʌȠȣȞ ȑȞĮȞ IJİȜİıIJȑȠ "țĮIJȫIJİȡȠȣ" IJȪʌȠȣ ıİ ȑȞĮȞ IJİȜİıIJȑȠ "ĮȞȫIJİȡȠȣ" IJȪʌȠȣ. ȉȠ ĮʌȠIJȑȜİıµĮ IJȘȢ ʌȡȐȟȘȢ, ijȣıȚțȐ ĮȞȒțİȚ ıIJȠȞ ĮȞȫIJİȡȠ IJȪʌȠ. Ǿ įȚĮȕȐșµȚıȘ IJȦȞ IJȪʌȦȞ ĮȞIJȚıIJȠȚȤİȓ ıIJȠȞ ĮȡȚșµȩ IJȦȞ bytes ʌȠȣ țĮIJĮȜĮµȕȐȞİȚ ĮȣIJȩȢ Ƞ IJȪʌȠȢ ıIJȘ µȞȒµȘ. ȅȚ țĮȞȩȞİȢ µİIJĮIJȡȠʌȒȢ İȓȞĮȚ ȠȚ ʌĮȡĮțȐIJȦ: 1.
ǵȜȠȚ ȠȚ IJȪʌȠȚ char țĮȚ short int µİIJĮIJȡȑʌȠȞIJĮȚ ıİ int. ǵȜȠȚ ȠȚ float µİIJĮIJȡȑʌȠȞIJĮȚ ıİ double.
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
28
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
2.
īȚĮ ȩȜĮ IJĮ ȗİȪȖȘ IJİȜİıIJȑȦȞ, Ș ıİȚȡȐ µİIJĮIJȡȠʌȒȢ İȓȞĮȚ Ș ʌĮȡĮțȐIJȦ. ǹȞ Ƞ ȑȞĮȢ IJİȜİıIJȑȠȢ İȓȞĮȚ long double țĮȚ Ƞ ȐȜȜȠȢ IJİȜİıIJȑȠȢ µİIJĮIJȡȑʌİIJĮȚ ıİ long double. ǹȞ Ƞ ȑȞĮȢ Įʌȩ IJȠȣȢ IJİȜİıIJȑȠȣȢ İȓȞĮȚ double țĮȚ Ƞ ȐȜȜȠȢ µİIJĮIJȡȑʌİIJĮȚ ıİ double. ǹȞ Ƞ ȑȞĮȢ IJİȜİıIJȑȠȢ İȓȞĮȚ long țĮȚ Ƞ ȐȜȜȠȢ µİIJĮIJȡȑʌİIJĮȚ ıİ long. ǹȞ Ƞ ȑȞĮȢ İȓȞĮȚ unsigned țĮȚ Ƞ ȐȜȜȠȢ µİIJĮIJȡȑʌİIJĮȚ ıİ unsigned.
ǹijȠȪ Ƞ µİIJĮȖȜȦIJIJȚıIJȒȢ İijĮȡµȩıİȚ ĮȣIJȠȪȢ IJȠȣȢ țĮȞȩȞİȢ µİIJĮIJȡȠʌȒȢ, IJȠ țȐșİ ȗİȣȖȐȡȚ IJİȜİıIJȑȦȞ șĮ ȖȓȞİȚ IJȠȣ ĮȣIJȠȪ IJȪʌȠȣ, ȠʌȩIJİ IJȠ ĮʌȠIJȑȜİıµĮ IJȘȢ țȐșİ ʌȡȐȟȘȢ șĮ İȓȞĮȚ IJȠȣ ȓįȚȠȣ IJȪʌȠȣ µİ IJȠȞ IJȪʌȠ IJȦȞ IJİȜİıIJȑȦȞ. ȈȘµİȚȫȞȠȣµİ ȩIJȚ Ƞ įİȪIJİȡȠȢ țĮȞȩȞĮȢ ȑȤİȚ ĮȡțİIJȑȢ ıȣȞșȒțİȢ ʌȠȣ ʌȡȑʌİȚ ȞĮ İijĮȡµȠıIJȠȪȞ įȚĮįȠȤȚțȐ. ȅȚ ʌĮȡĮʌȐȞȦ țĮȞȩȞİȢ ȚıȤȪȠȣȞ ʌȡȠijĮȞȫȢ ȖȚĮ IJȠ ĮʌȠIJȑȜİıµĮ IJȠȣ įİȟȚȠȪ µȑȡȠȣȢ µȓĮȢ ʌĮȡȐıIJĮıȘȢ țĮIJĮȤȫȡȘıȘȢ. ȈIJȘ ıȣȞȑȤİȚĮ, IJȠ ĮʌȠIJȑȜİıµĮ ĮȣIJȩ țĮIJĮȤȦȡȠȪµİȞȠ ıIJȘ µİIJĮȕȜȘIJȒ IJȠȣ ĮȡȚıIJİȡȠȪ µȑȡȠȣȢ, µİIJĮIJȡȑʌİIJĮȚ ıIJȠȞ IJȪʌȠ IJȘȢ µİIJĮȕȜȘIJȒȢ ĮȣIJȒȢ. DzIJıȚ ȤȡİȚȐȗİIJĮȚ ʌȡȠıȠȤȒ ıİ ʌĮȡĮıIJȐıİȚȢ ʌȠȣ ʌİȡȚȑȤȠȣȞ įİįȠµȑȞĮ įȚĮijȩȡȦȞ IJȪʌȦȞ!. īȚĮ ʌĮȡȐįİȚȖµĮ, ĮȢ įȠȪµİ IJȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ: /* type_con.c */ /* ȂİIJĮIJȡȠʌȑȢ IJȪʌȦȞ */ main() { int i=16; char ch='C'; printf("%d\n",ch); i=i+(2*ch); printf("%d",i);
} ǹȣIJȩ IJȠ ʌȡȩȖȡĮµµĮ IJȣʌȫȞİȚ ıIJȘȞ ȠșȩȞȘ: 67 150 ȅ ʌȡȫIJȠȢ ĮȡȚșµȩȢ (67) İȓȞĮȚ IJȠ ĮʌȠIJȑȜİıµĮ IJȘȢ ʌȡȫIJȘȢ printf(), ıIJȘȞ ȠʌȠȓĮ ȗȘIJȐµİ ȞĮ IJȣʌȫıȠȣµİ IJȘ µİIJĮȕȜȘIJȒ ch IJȪʌȠȣ ȤĮȡĮțIJȒȡĮ ȦȢ ĮțȑȡĮȚȠ. DzIJıȚ IJȣʌȫȞİIJĮȚ Ƞ țȦįȚțȩȢ ASCII IJȠȣ C, ʌȠȣ İȓȞĮȚ 67. ȈIJȘ ıȣȞȑȤİȚĮ ȤȡȘıȚµȠʌȠȚȠȪµİ IJȘ µİIJĮȕȜȘIJȒ ch ıIJȘȞ ʌȡȐȟȘ i+(2*ch) IJȠ ĮʌȠIJȑȜİıµĮ IJȘȢ ȠʌȠȓĮȢ (150) țĮIJĮȤȦȡİȓIJĮȚ ıIJȘ µİIJĮȕȜȘIJȒ i Ș ȠʌȠȓĮ țĮȚ IJȣʌȫȞİIJĮȚ.
4.5.2 ȇǾȉǼȈ ȂǼȉǹȉȇȅȆǼȈ (CAST) Ȉİ ȠʌȠȚĮįȒʌȠIJİ ʌĮȡȐıIJĮıȘ µʌȠȡȠȪȞ ȞĮ İʌȚȕȜȘșȠȪȞ ȡȘIJȑȢ µİIJĮIJȡȠʌȑȢ IJȪʌȠȣ, µİ ȑȞĮ µȠȞĮįȚțȩ IJİȜİıIJȒ ʌȠȣ ȜȑȖİIJĮȚ ʌȡȠıĮȡµȠȖȒ (cast). Ǿ ȖİȞȚțȒ µȠȡijȒ IJȘȢ įȠµȒȢ ʌȡȠıĮȡµȠȖȒȢ İȓȞĮȚ:
(IJȪʌȠȢ) ʌĮȡȐıIJĮıȘ ȩʌȠȣ IJȪʌȠȢ İȓȞĮȚ ȑȞĮȢ Įʌȩ IJȠȣȢ țĮșȚİȡȦµȑȞȠȣȢ IJȪʌȠȣȢ IJȘȢ C țĮȚ Ș IJȚµȒ IJȘȢ ʌĮȡȐıIJĮıȘȢ µİIJĮIJȡȑʌİIJĮȚ ıIJȠȞ țĮIJȠȞȠµĮȗȩµİȞȠ IJȪʌȠ. ǹȢ ʌȡȠıȑȟȠȣµİ ȩIJȚ Ș ʌȡȠıĮȡµȠȖȒ ʌĮȡȐȖİȚ µȓĮ țĮIJȐȜȜȘȜȠȣ IJȪʌȠȣ IJȚµȒ IJȘȢ ʌĮȡȐıIJĮıȘȢ, Ș ȓįȚĮ ȩµȦȢ Ș ʌĮȡȐıIJĮıȘ įİȞ ĮȜȜȐȗİȚ.
ȉȪʌȠȚ - ȂİIJĮȕȜȘIJȑȢ - ȉİȜİıIJȑȢ
29
īȚĮ ʌĮȡȐįİȚȖµĮ, ĮȞ Ƞ x İȓȞĮȚ IJȪʌȠȣ int (µİ IJȚµȒ 7) țĮȚ Ƞ y IJȪʌȠȣ float, Ș ʌĮȡĮțȐIJȦ ʌĮȡȐıIJĮıȘ:
y=(float)x/2 įȓȞİȚ ıIJȠ y IJȘȞ IJȚµȒ 3.50000. Ǽįȫ Ș ʌȡȠıĮȡµȠȖȒ (float) ıȣȞįȣȐȗİIJĮȚ µİ IJȠ x, ʌȡȐȖµĮ ʌȠȣ țȐȞİȚ IJȘȞ IJȚµȒ IJȠȣ ȞĮ µİIJĮIJȡĮʌİȓ ıİ float ȠʌȩIJİ țĮȚ IJȠ ĮʌȠIJȑȜİıµĮ șĮ İȓȞĮȚ IJȪʌȠȣ float. ȆȡȠıȠȤȒ, ĮȞ ȖȡȐȥȠȣµİ IJȘȞ ʌĮȡȐıIJĮıȘ µİ IJȠȞ IJȡȩʌȠ:
y=(float)(x/2) IJȠ y șĮ ʌȐȡİȚ IJȘȞ IJȚµȒ 3.000000. ǹȣIJȩ ıȣµȕĮȓȞİȚ įȚȩIJȚ ʌȡȫIJĮ İțIJİȜİȓIJĮȚ µȓĮ ĮțȑȡĮȚĮ įȚĮȓȡİıȘ țĮȚ IJȠ ĮʌȠIJȑȜİıµĮ (ʌȠȣ İȓȞĮȚ IJȠ ĮțȑȡĮȚȠ ʌȘȜȓțȠ) µİIJĮIJȡȑʌİIJĮȚ ıİ float.
4.6 ȆȇȅȉǼȇǹǿȅȉǾȉǹ ȉǼȁǼȈȉȍȃ ȅ ȆȓȞĮțĮȢ 4.5 ıȣȞȠȥȓȗİȚ IJȠȣȢ țĮȞȩȞİȢ ʌȡȠIJİȡĮȚȩIJȘIJĮȢ țĮȚ ʌȡȠıİIJĮȚȡȚıIJȚțȩIJȘIJĮȢ ȖȚĮ ȩȜȠȣȢ IJȠȣȢ IJİȜİıIJȑȢ, ıȣµʌİȡȚȜĮµȕĮȞȠµȑȞȦȞ țĮȚ ĮȣIJȫȞ ʌȠȣ įİȞ ȑȤȠȣµİ ĮțȩµĮ İȟİIJȐıİȚ. ȅȚ IJİȜİıIJȑȢ ʌȠȣ İȓȞĮȚ ıIJȘȞ ȓįȚĮ ȖȡĮµµȒ IJȠȣ ʌȓȞĮțĮ ȑȤȠȣȞ IJȘȞ ȓįȚĮ ʌȡȠIJİȡĮȚȩIJȘIJĮ, İȞȫ ȠȚ ȖȡĮµµȑȢ İȓȞĮȚ µİ ĮȪȟȠȣıĮ ıİȚȡȐ ʌȡȠIJİȡĮȚȩIJȘIJĮȢ. ǹȞ șȑȜȠȣµİ ȞĮ ĮȜȜȐȟȠȣµİ IJȘ ıİȚȡȐ IJȦȞ ʌȡȐȟİȦȞ ȤȡȘıȚµȠʌȠȚȠȪµİ ʌĮȡİȞșȑıİȚȢ. ǵIJĮȞ Ȝȑµİ ʌȡȠıİIJĮȚȡȚıIJȚțȩIJȘIJĮ İȞȞȠȠȪµİ IJȘ ijȠȡȐ ȣʌȠȜȠȖȚıµȠȪ. ȅȚ ʌİȡȚııȩIJİȡȠȚ IJİȜİıIJȑȢ ʌȡȠıİIJĮȚȡȓȗȠȣȞ Įʌȩ ĮȡȚıIJİȡȐ ʌȡȠȢ IJĮ įİȟȚȐ. ǹȣIJȩ ıȘµĮȓȞİȚ ȩIJȚ, ȖȚĮ ʌĮȡȐįİȚȖµĮ, Ș ʌĮȡȐıIJĮıȘ:
100-20-1+3 ʌȡȑʌİȚ ȞĮ İȡµȘȞİȣșİȓ ȦȢ:
((100-20)-1)+3 ǹȞ Ƞ ȣʌȠȜȠȖȚıµȩȢ ȖȚȞȩIJĮȞ ıĮȞ
100-(20-(1+3)) (ʌȠȣ įİ ıȣµȕĮȓȞİȚ !) șĮ ȜȑȖĮµİ ȩIJȚ ȠȚ IJİȜİıIJȑȢ ʌȡȠıİIJĮȚȡȓȗȠȣȞ Įʌȩ įİȟȚȐ ʌȡȠȢ IJĮ ĮȡȚıIJİȡȐ. DzIJıȚ, ıȪµijȦȞĮ µİ IJĮ ʌİȡȚİȤȩµİȞĮ IJȠȣ ȆȓȞĮțĮ 4.5, Ș ʌĮȡȐıIJĮıȘ:
x
c (a b) k2 (d e) (f g)
țȦįȚțȠʌȠȚİȓIJĮȚ ıIJȘȞ C, ȦȢ İȟȒȢ:
x=((-c*(a+b))/((d+e)*(f+g)))*k*k
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
30
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ȉİȜİıIJȑȢ () ! *
~ (4)
+ <
. --
o -
(1)
*
(2)
&
(3)
(IJȪʌȠȢ)
sizeof
m
%
o
(5)
o
>> <=
==
-> ++
/ -
<<
&
[]
ȆȡȠıİIJĮȚȡȚıIJȚțȩIJȘIJĮ
o >
>=
o
!=
o
(6)
o
^
o
|
o
&&
o
||
o
?:
m
=
+=
-=
*=
/=
%=
,
&=
^=
|=
<<=
>>=
m o ȊʌȩµȞȘµĮ
(1) ȂȠȞĮįȚțȩ ʌȜȘȞ (2) ȆİȡȚİȤȩµİȞȠ įȚİȪșȣȞıȘȢ µȞȒµȘȢ (3) ǻȚİȪșȣȞıȘ µȞȒµȘȢ µİIJĮȕȜȘIJȒȢ (4) ȆȠȜȜĮʌȜĮıȚĮıµȩȢ (5) ǹijĮȓȡİıȘ (6) Bitwise AND ȆȓȞĮțĮȢ 4.5: ȆȡȠIJİȡĮȚȩIJȘIJĮ țĮȚ ʌȡȠıİIJĮȚȡȚıIJȚțȩIJȘIJĮ IJİȜİıIJȫȞ
4.7 ȆǹȇǹǻǼǿīȂǹȉǹ 1. ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ ݵijĮȞȓȗİȚ ıIJȘȞ ȠșȩȞȘ IJȠ ȩȞȠµȐ ıĮȢ µȑıĮ ıİ įȚʌȜȩ ʌİȡȓȖȡĮµµĮ. /* name.c */ /* ǼțIJȪʌȦıȘ ȠȞȩµĮIJȠȢ µȑıĮ ıİ įȚʌȜȩ ʌİȡȓȖȡĮµµĮ */ #define DOUBLE_LINE "\xCD\xCD\xCD\xCD\xCD\xCD\xCD" main() { printf("\n\xC9\%s\xBB",DOUBLE_LINE); printf("\n\xBA ȅȃȅȂǹ \xBA"); printf("\n\xC8\%s\xBC",DOUBLE_LINE); } 2. ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ IJȠ ȠʌȠȓȠ ȞĮ įȑȤİIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ ȑȞĮ ȤĮȡĮțIJȒȡĮ țĮȚ ȞĮ IJȣʌȫȞİȚ IJȠȞ țȦįȚțȩ ASCII ĮȣIJȠȪ.
ȉȪʌȠȚ - ȂİIJĮȕȜȘIJȑȢ - ȉİȜİıIJȑȢ
31
/* ascii.c */ /* ǼȪȡİıȘ IJȠȣ țȦįȚțȠȪ ASCII İȞȩȢ ȤĮȡĮțIJȒȡĮ */ main() { char ch;
}
printf("\nǻȫıİ ȑȞĮ ȤĮȡĮțIJȒȡĮ: "); scanf("%c",&ch); printf("\nȅ țȦįȚțȩȢ ASCII IJȠȣ ȤĮȡĮțIJȒȡĮ \"%c\" İȓȞĮȚ %d\n",ch,ch);
3. ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ IJȠ ȠʌȠȓȠ ȞĮ įȑȤİIJĮȚ ȑȞĮȞ ĮțȑȡĮȚȠ ĮȡȚșµȩ țĮȚ ȞĮ ȕȡȓıțİȚ ĮȞ ĮȣIJȩȢ İȓȞĮȚ ȐȡIJȚȠȢ (ȗȣȖȩȢ), ĮȞ İȓȞĮȚ ȐȡIJȚȠȢ ȞĮ ݵijĮȞȓȗİȚ ıIJȘȞ ȠșȩȞȘ IJȠ µȒȞȣµĮ: "ǹȡIJȚȠȢ=1", İȞȫ ĮȞ įİȞ İȓȞĮȚ ȐȡIJȚȠȢ ȞĮ ݵijĮȞȓȗİȚ "ǹȡIJȚȠȢ=0". ȊʌİȞșȣµȓȗİIJĮȚ ȩIJȚ ȑȞĮȢ ĮțȑȡĮȚȠȢ İȓȞĮȚ ȐȡIJȚȠȢ ȩIJĮȞ IJȠ ȣʌȩȜȠȚʌȠ IJȘȢ įȚĮȓȡİıȒȢ IJȠȣ µİ IJȠ 2 İȓȞĮȚ 0. /* even.c */ /* ǼȜİȖȤȠȢ ĮȡIJȚȩIJȘIJĮȢ ĮțİȡĮȓȠȣ */ main() { int i,x;
}
printf("ǻȫıİ ȑȞĮȞ ĮțȑȡĮȚȠ: "); scanf("%d",&i); x=!(i%2); printf("DZȡIJȚȠȢ=%d",x);
4. ȃĮ ȖȡȐȥİIJİ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ IJȠ µȚıșȩ İȞȩȢ ȣʌĮȜȜȒȜȠȣ (ıİ ĮțȑȡĮȚȠ ĮȡȚșµȩ įȡĮȤµȫȞ ȑȦȢ IJȠȣ ʌȠıȠȪ 32767) țĮȚ ȞĮ IJȣʌȫȞİȚ ıIJȘȞ ȠșȩȞȘ IJȠȞ İȜȐȤȚıIJȠ ĮȡȚșµȩ ȤĮȡIJȠȞȠµȚıµȐIJȦȞ țĮȚ țİȡµȐIJȦȞ ʌȠȣ ȤȡİȚȐȗȠȞIJĮȚ ȖȚĮ ȞĮ ʌȜȘȡȦșİȓ. ǻȘȜĮįȒ ȞĮ IJȣʌȫȞİȚ ʌȩıĮ įİțĮȤȓȜȚĮȡĮ, ʌİȞIJȠȤȓȜȚĮȡĮ, ȤȚȜȚȐȡȚțĮ, ʌİȞIJĮțȠıȐȡȚțĮ, ț.Ȝ.ʌ. ʌȡȑʌİȚ ȞĮ įȠșȠȪȞ ıIJȠȞ ȣʌȐȜȜȘȜȠ ȫıIJİ ĮȣIJȐ ȞĮ İȓȞĮȚ İȜȐȤȚıIJĮ ıIJȠȞ ĮȡȚșµȩ. /* salary.c */ /* ȂİIJĮIJȡȠʌȒ µȚıșȠȪ ıİ ȤĮȡIJȠȞȠµȓıµĮIJĮ țĮȚ țȑȡµĮIJĮ */ main() { int salary; printf("ǻȫıİ µȚıșȩ (µȑȤȡȚ 32767): "); scanf("%d",&salary); printf("\nǻİțĮȤȓȜȚĮȡĮ : %d",salary/10000); salary%=10000; printf("\nȆİȞIJȠȤȓȜȚĮȡĮ : %d",salary/5000); salary%=5000; printf("\nȋȚȜȚȐȡȚțĮ : %d",salary/1000); salary%=1000; printf("\nȆİȞIJĮțȠıȐȡȚțĮ: %d",salary/500); salary%=500; printf("\nǻȚĮțȠıȐįȡĮȤµĮ: %d",salary/200); salary%=200; printf("\nȀĮIJȠıIJȐȡȚțĮ : %d",salary/100);
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
32
}
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
salary%=100; printf("\nȆİȞȘȞIJȐȡȚțĮ salary%=50; printf("\nǼȚțȠıȐȡȚțĮ salary%=20; printf("\nǻİțȐȡȚțĮ salary%=10; printf("\nȉȐȜȘȡĮ salary%=5; printf("\nǻȓįȡĮȤµĮ salary%=2; printf("\nǻȡĮȤµȑȢ
: %d",salary/50); : %d",salary/20); : %d",salary/10); : %d",salary/5); : %d",salary/2); : %d",salary);
5. ǹȢ ȣʌȠșȑıȠȣµİ ȩIJȚ Ƞ µȚıșȩȢ İȞȩȢ İȡȖĮȗȠµȑȞȠȣ ȣʌȠȜȠȖȓȗİIJĮȚ ȦȢ İȟȒȢ: ȖȚĮ țȐșİ ȤȡȩȞȠ ȣʌȘȡİıȓĮȢ ʌȡȠıĮȣȟȐȞİIJĮȚ țĮIJȐ 4% İʌȓ IJȠȣ ĮȡȤȚțȠȪ µȚıșȠȪ țĮȚ ȖȚĮ țȐșİ ʌĮȚįȓ ʌȡȠıĮȣȟȐȞİIJĮȚ țĮIJȐ 5000 įȡȤ. īȡȐȥIJİ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ IJȠȞ ĮȡȤȚțȩ µȚıșȩ (ȑȦȢ 32767), IJĮ ȤȡȩȞȚĮ ȣʌȘȡİıȓĮȢ țĮȚ IJȠȞ ĮȡȚșµȩ IJȦȞ ʌĮȚįȚȫȞ İȞȩȢ ȣʌĮȜȜȒȜȠȣ țĮȚ ȞĮ ȣʌȠȜȠȖȓȗİȚ țĮȚ IJȣʌȫȞİȚ IJȠ ıȣȞȠȜȚțȩ µȚıșȩ IJȠȣ. /* saqlary1.c */ /* ȊʌȠȜȠȖȚıµȩȢ µȚıșȠȪ ȣʌĮȜȜȒȜȠȣ */ main() { int salary,years,childs; float total;
}
printf("ǻȫıİ ĮȡȤȚțȩ µȚıșȩ (ȑȦȢ 32767) ȑIJȘ ȣʌȘȡ. Įȡ. ʌĮȚįȚȫȞ: "); scanf("%d %d %d",&salary,&years,&childs); total=salary+salary*0.04*years+5000*childs; printf("ȈȣȞȠȜȚțȩȢ µȚıșȩȢ: %f ǻȡȤ.",total);
4.8 ǹȈȀǾȈǼǿȈ 1.
ȃĮ ȣʌȠȜȠȖȚıIJİȓ Ș IJȚµȒ IJȘȢ ʌĮȡȐıIJĮıȘȢ:
x=i*j>k&&i+j<k ıIJȚȢ İȟȒȢ ʌİȡȚʌIJȫıİȚȢ: Į) i=2, j=8, k=12 2.
ȕ) i=2, j=8, k=10
Ȗ) i=3, j=1, k=7
ĬİȦȡȒıIJİ ȖȞȦıIJȩ ȩIJȚ Ș ıȣȞȐȡIJȘıȘ sqrt() İʌȚıIJȡȑijİȚ IJȘȞ IJİIJȡĮȖȦȞȚțȒ ȡȓȗĮ IJȠȣ ȠȡȓıµĮIJȩȢ IJȘȢ. ȀȦįȚțȠʌȠȚȒıIJİ ıIJȘȞ C IJȚȢ ʌĮȡĮțȐIJȦ ĮȡȚșµȘIJȚțȑȢ ʌĮȡĮıIJȐıİȚȢ: Į) 2S į)
m D
ȕ) K
Q 1 1 ( 2 2) 4SHH0 r1 r2
İ)
X K E 360
Ȗ) K0(1 r)2 (1
S r1 r2 R 4 ıIJ) 8r L
b
r n ) 360 b2 4ac 2a
ȉȪʌȠȚ - ȂİIJĮȕȜȘIJȑȢ - ȉİȜİıIJȑȢ
3.
33
ǹȞ a=4, b=1, țĮȚ c=7, ȞĮ ȣʌȠȜȠȖȚıIJİȓ Ș IJȚµȒ ȖȚĮ țĮșݵȚȐ Įʌȩ IJȚȢ İʌȩµİȞİȢ ʌĮȡĮıIJȐıİȚȢ: Į) x=a<b && b<c ȕ) x=b<c && (a<b || a>c) Ȗ) x=(b>c || a>c) || c>a į) x=! (a>b && (! b>c)) İ) x=b>c || (a<c || b<c) && a<b
4.
ȃĮ țȦįȚțȠʌȠȚȘșȠȪȞ ıIJȘ ȖȜȫııĮ C ȠȚ ʌĮȡĮțȐIJȦ ʌȡȠIJȐıİȚȢ: Į) ȉȠ x µȚțȡȩIJİȡȠ IJȠȣ µȘįİȞȩȢ țĮȚ µİȖĮȜȪIJİȡȠ IJȠȣ y Ȓ IJȠ x µȚțȡȩIJİȡȠ IJȠȣ µȘįİȞȩȢ țĮȚ IJȠ z ȓıȠ µİ IJȠ r. ȕ) ȉȠ ȕȐȡȠȢ ȞĮ µȘȞ İȓȞĮȚ µȚțȡȩIJİȡȠ IJȦȞ 50 Kgr țĮȚ IJȠ ȪȥȠȢ ȞĮ µȘȞ İȓȞĮȚ µİȖĮȜȪIJİȡȠ IJȦȞ 1,90 m. Ȗ) ȅ x İȓȞĮȚ șİIJȚțȩȢ ĮțȑȡĮȚȠȢ µȚțȡȩIJİȡȠȢ IJȠȣ 152. į) Ǿ ȘȜȚțȓĮ ȞĮ İȓȞĮȚ µİIJĮȟȪ 20 țĮȚ 40 İIJȫȞ.
5.
īȡȐȥIJİ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ IJȠ µȒțȠȢ țĮȚ IJȠ ʌȜȐIJȠȢ İȞȩȢ ȠȡșȠȖȦȞȓȠȣ țĮȚ ȞĮ IJȣʌȫȞİȚ ıIJȘȞ ȠșȩȞȘ IJȠ ݵȕĮįȩȞ țĮȚ IJȘȞ ʌİȡȓµİIJȡȠ ĮȣIJȠȪ.
6.
īȡȐȥIJİ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ IJȠ µȒțȠȢ , IJȠ ʌȜȐIJȠȢ, IJȠ ȪȥȠȢ țĮȚ IJȘ µȐȗĮ İȞȩȢ IJȠȪȕȜȠȣ țĮȚ ȞĮ IJȣʌȫȞİȚ ıIJȘȞ ȠșȩȞȘ IJȠȞ ȩȖțȠ IJȠȣ țĮȚ IJȘȞ ʌȣțȞȩIJȘIJȐ IJȠȣ.
7.
ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ IJȘȞ ȘȜȚțȓĮ İȞȩȢ ĮIJȩµȠȣ ıİ ȑIJȘ țĮȚ ȞĮ IJȘ µİIJĮIJȡȑʌİȚ ıİ ȘµȑȡİȢ, ȫȡİȢ țĮȚ ȜİʌIJȐ.
8.
īȡȐȥIJİ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ IJȘ șİȡµȠțȡĮıȓĮ ıİ ȕĮșµȠȪȢ Fahrenheit țĮȚ ȞĮ IJȘ µİIJĮIJȡȑʌİȚ ıİ ȕĮșµȠȪȢ Celsius. ȅ IJȪʌȠȢ µİIJĮIJȡȠʌȒȢ İȓȞĮȚ:
C 9.
(F 32)
5 9
ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ IJȚµȑȢ ȖȚĮ įȪȠ ĮțȑȡĮȚİȢ µİIJĮȕȜȘIJȑȢ x țĮȚ y, ıIJȘ ıȣȞȑȤİȚĮ ȞĮ İȞĮȜȜȐııİȚ IJȚȢ IJȚµȑȢ IJȦȞ įȪȠ µİIJĮȕȜȘIJȫȞ țĮȚ ȞĮ IJȣʌȫȞİȚ ıIJȘȞ ȠșȩȞȘ IJȚȢ IJȚµȑȢ IJȦȞ x țĮȚ y µİIJȐ IJȘȞ İȞĮȜȜĮȖȒ.
10. ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ IJȚµȑȢ ȖȚĮ IJȡİȚȢ ĮțȑȡĮȚİȢ µİIJĮȕȜȘIJȑȢ x, y țĮȚ z țĮȚ ȞĮ İȞĮȜȜȐııİȚ țȣțȜȚțȐ IJȚȢ IJȚµȑȢ IJȠȣȢ. ȉİȜȚțȐ ȞĮ IJȣʌȫȞİȚ ıIJȘȞ ȠșȩȞȘ IJȚȢ IJȚµȑȢ IJȦȞ x ,y țĮȚ z µİIJȐ IJȘȞ İȞĮȜȜĮȖȒ. 11. ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ IJȘȞ ĮțIJȓȞĮ İȞȩȢ țȪțȜȠȣ țĮȚ ȞĮ İțIJȣʌȫȞİȚ ıIJȘȞ ȠșȩȞȘ IJȠ ݵȕĮįȩȞ IJȠȣ țȪțȜȠȣ țĮșȫȢ țĮȚ IJȠ ݵȕĮįȩȞ IJȠȣ IJİIJȡĮȖȫȞȠȣ ʌȠȣ İȓȞĮȚ ʌİȡȚȖİȖȡĮµµȑȞȠ ıIJȠȞ țȪțȜȠ. 12. īȡȐȥIJİ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ ʌȑȞIJİ ĮțȑȡĮȚİȢ IJȚµȑȢ țĮȚ ȞĮ ȣʌȠȜȠȖȓȗİȚ țĮȚ IJȣʌȫȞİȚ IJȘ µȑıȘ IJȚµȒ IJȠȣȢ. 13. ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ ȑȞĮȞ ĮțȑȡĮȚȠ ĮȡȚșµȩ țĮȚ ȞĮ ȕȡȓıțİȚ ĮȞ İȓȞĮȚ įȚĮȚȡİIJȩȢ µİ IJȠ įȪȠ IJȠ IJȡȓĮ țĮȚ IJȠ IJȑııİȡĮ IJĮȣIJȩȤȡȠȞĮ. 14. īȡȐȥIJİ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ IJȘȞ IJȚµȒ țȐʌȠȚȠȣ ĮȞIJȚțİȚµȑȞȠȣ, ȤȦȡȓȢ ĭȆǹ țĮȚ IJȠ ıȣȞIJİȜİıIJȒ ĭȆǹ. ȀĮIJȩʌȚȞ ȞĮ ȣʌȠȜȠȖȓȗİȚ țĮȚ IJȣʌȫȞİȚ IJȘȞ IJȚµȒ µİ ĭȆǹ.
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
34
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
15. ǹȢ ȣʌȠșȑıȠȣµİ ȩIJȚ Ș ǻǼǾ ȤȡİȫȞİȚ 17.15 įȡȤ/kWh ȖȚĮ IJȠ ȘµİȡȒıȚȠ ȡİȪµĮ țĮȚ 10.61 įȡȤ/kWh ȖȚĮ IJȠ ȞȣȤIJİȡȚȞȩ țĮȚ 2605 įȡȤ ʌȐȖȚȠ. ȆȐȞȦ ıIJȠ ıȪȞȠȜȠ IJȦȞ ʌĮȡĮʌȐȞȦ Ƞ țĮIJĮȞĮȜȦIJȒȢ ʌȜȘȡȫȞİȚ ĭȆǹ 18%. īȡȐȥIJİ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ IJȘȞ ȘµİȡȒıȚĮ țĮȚ IJȘ ȞȣțIJİȡȚȞȒ țĮIJĮȞȐȜȦıȘ ȡİȪµĮIJȠȢ ıİ kWh țĮȚ ȞĮ ȕȖȐȗİȚ IJȠ ȜȠȖĮȡȚĮıµȩ. 16. ǹȞ ıȣȞįȑıȠȣµİ įȪȠ ĮȞIJȚıIJȐıİȚȢ R1 țĮȚ R2 ıİ ıİȚȡȐ, Ș ıȣȞȠȜȚțȒ ĮȞIJȓıIJĮıȘ İȓȞĮȚ:
R
R1 R 2
īȡȐȥIJİ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ IJȚȢ IJȚµȑȢ IJȦȞ R1 țĮȚ R2 țĮȚ ȞĮ ȣʌȠȜȠȖȓȗİȚ țĮȚ IJȣʌȫȞİȚ IJȘȞ R. 17. ǹȞ ıȣȞįȑıȠȣµİ įȪȠ ĮȞIJȚıIJȐıİȚȢ R1 țĮȚ R2 ʌĮȡȐȜȜȘȜĮ, Ș ıȣȞȠȜȚțȒ ĮȞIJȓıIJĮıȘ İȓȞĮȚ:
R
R1 R2 R1 R2
īȡȐȥIJİ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ IJȚȢ IJȚµȑȢ IJȦȞ R1 țĮȚ R2 țĮȚ ȞĮ ȣʌȠȜȠȖȓȗİȚ țĮȚ IJȣʌȫȞİȚ IJȘȞ R.
35
ȀǼĭǹȁǹǿȅ 5
ǼǿȈȅǻȅȈ - ǼȄȅǻȅȈ Ǿ ȖȜȫııĮ C įȚĮșȑIJİȚ ĮȡțİIJȑȢ ıȣȞĮȡIJȒıİȚȢ ȖȚĮ įȚȐȕĮıµĮ țĮȚ ȖȡȐȥȚµȠ įİįȠµȑȞȦȞ Įʌȩ IJȠ ʌȡȩȖȡĮµµĮ. Ǽįȫ ʌȡȑʌİȚ ȞĮ ȟİțĮșĮȡȓıȠȣµİ ȑȞĮ ʌȡȐȖµĮ: ǵIJĮȞ Ȝȑµİ ȩIJȚ IJȠ ʌȡȩȖȡĮµµĮ įȚĮȕȐȗİȚ İȞȞȠȠȪµİ ʌȐȞIJĮ ȩIJȚ įȑȤİIJĮȚ įİįȠµȑȞĮ Įʌȩ țȐʌȠȚĮ ʌİȡȚijİȡİȚĮțȒ µȠȞȐįĮ İȚıȩįȠȣ (ʌȜȘțIJȡȠȜȩȖȚȠ, ʌȠȞIJȓțȚ, įȓıțȠ) țĮȚ IJĮ ĮʌȠșȘțİȪİȚ ıIJȘȞ țİȞIJȡȚțȒ µȞȒµȘ (RAM) IJȠȣ Ǿ/Ȋ. ǵIJĮȞ Ȝȑµİ ȩIJȚ IJȠ ʌȡȩȖȡĮµµĮ ȖȡȐijİȚ İȞȞȠȠȪµİ ȩIJȚ ıIJȑȜȞİȚ įİįȠµȑȞĮ Įʌȩ IJȘȞ țİȞIJȡȚțȒ µȞȒµȘ ʌȡȠȢ țȐʌȠȚĮ ʌİȡȚijİȡİȚĮțȒ µȠȞȐįĮ İȟȩįȠȣ (ȠșȩȞȘ, İțIJȣʌȦIJȒ, įȓıțȠ). Ǿ İʌȚțȠȚȞȦȞȓĮ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ µİ IJȚȢ ʌİȡȚijİȡİȚĮțȑȢ ıȣıțİȣȑȢ, ȖȓȞİIJĮȚ µİ IJȘ ȤȡȒıȘ țĮȞĮȜȚȫȞ ȡȠȒȢ (Ȓ ȡİȣµȐIJȦȞ-streams) IJĮ ȠʌȠȓĮ ʌȡȑʌİȚ ȞĮ ĮȞȠȓȟȠȣȞ ʌȡȚȞ IJȘȞ İʌȚțȠȚȞȦȞȓĮ țĮȚ ȞĮ țȜİȓıȠȣȞ µİIJȐ Įʌȩ ĮȣIJȒ. ǼʌİȚįȒ ȑȞĮ µİȖȐȜȠ ʌȠıȠıIJȩ İʌȚțȠȚȞȦȞȓĮȢ IJȦȞ ʌȡȠȖȡĮµµȐIJȦȞ ȖȓȞİIJĮȚ µİ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ țĮȚ IJȘȞ ȠșȩȞȘ, Ș C µİ IJȘȞ ȑȞĮȡȟȘ IJȘȢ İțIJȑȜİıȘȢ ȠʌȠȚȠȣįȒʌȠIJİ ʌȡȠȖȡȐµµĮIJȠȢ ĮȞȠȓȖİȚ ĮȣIJȩµĮIJĮ IJĮ įȪȠ țĮȞȐȜȚĮ: ʌȡȠȢ IJȘȞ standard ȑȟȠįȠ (standard output Ȓ stdout) įȘȜĮįȒ IJȘȞ ȠșȩȞȘ țĮȚ IJȘȞ standard İȓıȠįȠ (standard input Ȓ stdin) įȘȜĮįȒ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ. ȉĮ įȪȠ ĮȣIJȐ țĮȞȐȜȚĮ țȜİȓȞȠȣȞ İʌȓıȘȢ ĮȣIJȩµĮIJĮ µİ IJȘȞ ȑȟȠįȠ Įʌȩ IJȠ ʌȡȩȖȡĮµµĮ. Ȉ'ĮȣIJȩ IJȠ ȀİijȐȜĮȚȠ șĮ İȟİIJȐıȠȣµİ IJȚȢ ıȣȞĮȡIJȒıİȚȢ İȚıȩįȠȣ įİįȠµȑȞȦȞ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ țĮȚ İȟȩįȠȣ ʌȡȠȢ IJȘȞ ȠșȩȞȘ. Ǿ İʌȚțȠȚȞȦȞȓĮ µİ IJȠ įȓıțȠ (ĮȡȤİȓĮ) șĮ İȟİIJĮıIJİȓ ıIJȠ ȀİijȐȜĮȚȠ 11. ȅȚ țȪȡȚİȢ ıȣȞĮȡIJȒıİȚȢ İȚıȩįȠȣ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ țĮȚ İȟȩįȠȣ ıIJȘȞ ȠșȩȞȘ İȓȞĮȚ: getchar() (getche,getch) țĮȚ putchar() gets() țĮȚ puts() scanf() țĮȚ printf() ȉȠ ʌȡȫIJȠ ȗİȣȖȐȡȚ ȤȡȘıȚµİȪİȚ ȖȚĮ İȓıȠįȠ țĮȚ ȑȟȠįȠ ȤĮȡĮțIJȒȡȦȞ, IJȠ įİȪIJİȡȠ ȖȚĮ ĮȜijĮȡȚșµȘIJȚțȐ țĮȚ IJȠ IJȡȓIJȠ ȖȚĮ µȠȡijȠʌȠȚȘµȑȞȘ (formatted) İȓıȠįȠ țĮȚ ȑȟȠįȠ.
5.1 ǼǿȈȅǻȅȈ Ȁǹǿ ǼȄȅǻȅȈ ȋǹȇǹȀȉǾȇȍȃ Ǿ ıȣȞȐȡIJȘıȘ getchar() įİȞ ʌĮȓȡȞİȚ țĮµȓĮ ʌĮȡȐµİIJȡȠ țĮȚ İʌȚıIJȡȑijİȚ µȓĮ ĮțȑȡĮȚĮ IJȚµȒ ʌȠȣ İȓȞĮȚ Ƞ țȦįȚțȩȢ ASCII IJȠȣ ȤĮȡĮțIJȒȡĮ ʌȠȣ įȚĮȕȐȗİȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ. ȂİIJȐ IJȘȞ İțIJȑȜİıȘ IJȘȢ İȞIJȠȜȒȢ:
c=getchar(); Ș µİIJĮȕȜȘIJȒ șĮ c ʌİȡȚȑȤİȚ IJȠ ȤĮȡĮțIJȒȡĮ ʌȠȣ șĮ ʌȜȘțIJȡȠȜȠȖȒıȠȣµİ. Ǿ ıȣȞȐȡIJȘıȘ putchar() ݵijĮȞȓȗİȚ ıIJȘȞ ȠșȩȞȘ IJȠ ȤĮȡĮțIJȒȡĮ ʌȠȣ ȑȤİȚ ȦȢ ȩȡȚıµĮ. DzIJıȚ µİIJȐ IJȘȞ İțIJȑȜİıȘ IJȘȢ İȞIJȠȜȒȢ:
putchar(c); șĮ IJȣʌȦșİȓ ıIJȘȞ ȠșȩȞȘ Ș IJȚµȒ IJȘȢ µİIJĮȕȜȘIJȒȢ ȤĮȡĮțIJȒȡĮ c.
36
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ȈȪµijȦȞĮ µİ IJĮ ʌȡȠĮȞĮijİȡșȑȞIJĮ, IJȠ ʌĮȡĮțȐIJȦ µȚțȡȩ ʌȡȩȖȡĮµµĮ, įȚĮȕȐȗİȚ ȑȞĮ ȤĮȡĮțIJȒȡĮ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ țĮȚ ıIJȘ ıȣȞȑȤİȚĮ IJȠȞ ݵijĮȞȓȗİȚ ıIJȘȞ ȠșȩȞȘ: #include <stdio.h> main() { char c; c=getchar(); putchar(c);
} īȚĮ ȞĮ įȚĮȕȐıİȚ ȑȞĮ ȤĮȡĮțIJȒȡĮ Ș getchar() ʌȡȑʌİȚ µİIJȐ IJȠ ȤĮȡĮțIJȒȡĮ ȞĮ įȫıȠȣµİ µȓĮ İʌĮȞĮijȠȡȐ țİijĮȜȒȢ (ENTER). ǹȣIJȩ ʌȠȜȜȑȢ ijȠȡȑȢ İȓȞĮȚ İȞȠȤȜȘIJȚțȩ. DzIJıȚ µʌȠȡȠȪµİ ȞĮ ȤȡȘıȚµȠʌȠȚȒıȠȣµİ IJȘ ıȣȞȐȡIJȘıȘ getche() Ș ȠʌȠȓĮ įȚĮȕȐȗİȚ ȑȞĮ ȤĮȡĮțIJȒȡĮ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ ȤȦȡȓȢ ȞĮ ȤȡİȚȐȗİIJĮȚ ȞĮ įȫıȠȣµİ İʌĮȞĮijȠȡȐ țİijĮȜȒȢ. ȅ ȤĮȡĮțIJȒȡĮȢ ʌȠȣ įȚĮȕȐȗİIJĮȚ Įʌȩ IJȘȞ getche() ݵijĮȞȓȗİIJĮȚ (ĮȞIJȘȤİȓIJĮȚ) ıIJȘȞ ȠșȩȞȘ. ǹȞ șȑȜȠȣµİ Ƞ ȤĮȡĮțIJȒȡĮȢ ʌȠȣ įȚĮȕȐȗİIJĮȚ ȞĮ µȘȞ ݵijĮȞȓȗİIJĮȚ ıIJȘȞ ȠșȩȞȘ, șĮ ʌȡȑʌİȚ ȞĮ ȤȡȘıȚµȠʌȠȚȒıȠȣµİ IJȘ ıȣȞȐȡIJȘıȘ getch() Ș ȠʌȠȓĮ ȜİȚIJȠȣȡȖİȓ ȩʌȦȢ ĮțȡȚȕȫȢ țĮȚ Ș getche() µİ IJȘ įȚĮijȠȡȐ ȩIJȚ įİȞ ݵijĮȞȓȗİIJĮȚ ıIJȘȞ ȠșȩȞȘ Ƞ ȤĮȡĮțIJȒȡĮȢ ʌȠȣ ʌȜȘțIJȡȠȜȠȖȠȪµİ.
5.2 ǼǿȈȅǻȅȈ Ȁǹǿ ǼȄȅǻȅȈ ǹȁĭǹȇǿĬȂǾȉǿȀȍȃ Ǿ ıȣȞȐȡIJȘıȘ gets() įȚĮȕȐȗİȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ ȑȞĮ ĮȜijĮȡȚșµȘIJȚțȩ țĮȚ IJȠ IJȠʌȠșİIJİȓ ıIJȘ µİIJĮȕȜȘIJȒ ʌȠȣ įȑȤİIJĮȚ ȦȢ ȩȡȚıµĮ. ȉȠ ȩȡȚıµĮ IJȘȢ ıȣȞȐȡIJȘıȘȢ ʌȡȑʌİȚ ȞĮ İȓȞĮȚ IJȪʌȠȣ ʌȓȞĮțĮ ȤĮȡĮțIJȒȡȦȞ. Ȇ.Ȥ. µİIJȐ IJȘȞ İțIJȑȜİıȘ IJȘȢ İȞIJȠȜȒȢ:
gets(str); Ș µİIJĮȕȜȘIJȒ str șĮ ʌİȡȚȑȤİȚ IJȠ ĮȜijĮȡȚșµȘIJȚțȩ ʌȠȣ șĮ ʌȜȘțIJȡȠȜȠȖȒıȠȣµİ. Ǿ ıȣȞȐȡIJȘıȘ puts() ȖȡȐijİȚ ıIJȘȞ ȠșȩȞȘ IJȠ ĮȜijĮȡȚșµȘIJȚțȩ ʌȠȣ ȑȤİȚ ȦȢ ȩȡȚıµȐ IJȘȢ țĮȚ ıIJȘ ıȣȞȑȤİȚĮ ĮȜȜȐȗİȚ ȖȡĮµµȒ. DzIJıȚ ʌ.Ȥ. Ș İȞIJȠȜȒ:
puts("ȀĮȜȘµȑȡĮ"); ȖȡȐijİȚ ıIJȘȞ ȠșȩȞȘ IJȘ ȜȑȟȘ "ȀĮȜȘµȑȡĮ" țĮȚ ıIJȘ ıȣȞȑȤİȚĮ ĮȜȜȐȗİȚ ȖȡĮµµȒ. ȈȪµijȦȞĮ µİ IJĮ ʌȡȠĮȞĮijİȡșȑȞIJĮ, IJȠ ʌĮȡĮțȐIJȦ µȚțȡȩ ʌȡȩȖȡĮµµĮ, įȚĮȕȐȗİȚ ȑȞĮ ĮȜijĮȡȚșµȘIJȚțȩ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ țĮȚ ıIJȘ ıȣȞȑȤİȚĮ IJȠ ݵijĮȞȓȗİȚ ıIJȘȞ ȠșȩȞȘ: main() { char str[80]; gets(str); puts(str); }
ǼȓıȠįȠȢ - DzȟȠįȠȢ
37
5.3 ȂȅȇĭȅȆȅǿǾȂǼȃǾ ǼǿȈȅǻȅȈ Ȁǹǿ ǼȄȅǻȅȈ ǼțIJȩȢ Įʌȩ IJȚȢ ĮʌȜȑȢ ıȣȞĮȡIJȒıİȚȢ İȚıȩįȠȣ-İȟȩįȠȣ ʌȠȣ ʌİȡȚȖȡȐijȘțĮȞ ʌȡȠȘȖȠȣµȑȞȦȢ, Ș țĮșȚİȡȦµȑȞȘ ȕȚȕȜȚȠșȒțȘ IJȘȢ C ʌİȡȚȜĮµȕȐȞİȚ įȪȠ ıȣȞĮȡIJȒıİȚȢ ʌȠȣ ʌȡĮȖµĮIJȠʌȠȚȠȪȞ µȠȡijȠʌȠȚȘµȑȞȘ İȓıȠįȠ țĮȚ ȑȟȠįȠ IJȦȞ ȕĮıȚțȫȞ IJȪʌȦȞ įİįȠµȑȞȦȞ. ȅ ȩȡȠȢ µȠȡijȠʌȠȚȘµȑȞȘ ĮȞĮijȑȡİIJĮȚ ıIJȠ ȖİȖȠȞȩȢ ȩIJȚ ĮȣIJȑȢ ȠȚ ıȣȞĮȡIJȒıİȚȢ µʌȠȡȠȪȞ ȞĮ įȚĮȕȐȗȠȣȞ țĮȚ ȞĮ ȖȡȐijȠȣȞ įİįȠµȑȞĮ ıİ įȚȐijȠȡİȢ µȠȡijȑȢ IJȚȢ ȠʌȠȓİȢ µʌȠȡȠȪµİ ݵİȓȢ ȞĮ țĮșȠȡȓȗȠȣµİ.
5.3.1 Ǿ ȈȊȃǹȇȉǾȈǾ printf() H ıȣȞȐȡIJȘıȘ printf() µİIJĮIJȡȑʌİȚ IJȚȢ IJȚµȑȢ IJȦȞ µİIJĮȕȜȘIJȫȞ ıİ ȤĮȡĮțIJȒȡİȢ țĮȚ IJȠȣȢ IJȣʌȫȞİȚ ıIJȘ ȠșȩȞȘ. Ǿ ȖİȞȚțȒ µȠȡijȒ IJȘȢ İȓȞĮȚ:
printf(ĮȜijĮȡȚșµȘIJȚțȩ_İȜȑȖȤȠȣ , ȜȓıIJĮ_ȠȡȚıµȐIJȦȞ) ȉȠ ĮȜijĮȡȚșµȘIJȚțȩ İȜȑȖȤȠȣ ĮʌȠIJİȜİȓIJĮȚ Įʌȩ ıIJȠȚȤİȓĮ įȪȠ IJȪʌȦȞ: (Į) ȀĮȞȠȞȚțȠȪȢ ȤĮȡĮțIJȒȡİȢ ȠȚ ȠʌȠȓȠȚ șĮ IJȣʌȦșȠȪȞ Įʌȩ IJȘ ıȣȞȐȡIJȘıȘ ıIJȘȞ ȠșȩȞȘ. (ȕ) ȀĮșȠȡȚıIJȑȢ µȠȡijȒȢ (format specifiers) ʌȠȣ țĮșȠȡȓȗȠȣȞ IJȘ µȠȡijȒ µİ IJȘȞ ȠʌȠȓĮ șĮ ݵijĮȞȚıIJȠȪȞ ȠȚ IJȚµȑȢ IJȦȞ ȠȡȚıµȐIJȦȞ ıIJȘȞ ȠșȩȞȘ. ȀȐșİ țĮșȠȡȚıIJȒȢ µȠȡijȒȢ ĮȡȤȓȗİȚ µİ IJȠ ıȪµȕȠȜȠ % țĮȚ ıIJȘ ıȣȞȑȤİȚĮ ʌİȡȚȑȤİȚ ȑȞĮ ȤĮȡĮțIJȒȡĮ Ƞ ȠʌȠȓȠȢ țĮșȠȡȓȗİȚ µİ ʌȠȚĮ µȠȡijȒ șĮ IJȣʌȦșİȓ ıIJȘȞ ȠșȩȞȘ Ș IJȚµȒ IJȠȣ ȠȡȓıµĮIJȠȢ ʌȠȣ ĮȞIJȚıIJȠȚȤİȓ ı'ĮȣIJȩȞ IJȠȞ țĮșȠȡȚıIJȒ µȠȡijȒȢ. ȈIJȠȞ ȆȓȞĮțĮ 5.1 ijĮȓȞȠȞIJĮȚ ȠȚ țĮșȠȡȚıIJȑȢ µȠȡijȒȢ IJȘȢ printf(). ȅ ĮȡȚșµȩȢ IJȦȞ ȠȡȚıµȐIJȦȞ ʌȡȑʌİȚ ȞĮ İȓȞĮȚ ȓıȠȢ µİ IJȠȞ ĮȡȚșµȩ IJȦȞ țĮșȠȡȚıIJȫȞ µȠȡijȒȢ țĮȚ µȐȜȚıIJĮ ʌȡȑʌİȚ ȞĮ ȑȤȠȣȞ IJȘȞ ȓįȚĮ ıİȚȡȐ. īȚĮ ʌĮȡȐįİȚȖµĮ IJȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ: /* printf1.c */ /* ȆĮȡȐįİȚȖµĮ ȤȡȒıȘȢ IJȘȢ ıȣȞȐȡIJȘıȘȢ printf() */ main() { int set=3; char game='A'; float time=27.25; printf("ȉȠ %do ıİIJ IJȠȣ %c ĮȖȫȞĮ ", set,game); printf("įȚȒȡțİıİ %f ȜİʌIJȐ\n",time);
} șĮ įȫıİȚ ĮʌȠIJȑȜİıµĮ:
ȉȠ 3Ƞ ıİIJ IJȠȣ ǹ ĮȖȫȞĮ įȚȒȡțİıİ 27.250000 ȜİʌIJȐ ȈIJȠ ʌĮȡĮʌȐȞȦ ʌȡȩȖȡĮµµĮ ʌĮȡĮIJȘȡȠȪµİ ȩIJȚ ıIJȘȞ ȠșȩȞȘ IJȣʌȫșȘțİ Ƞ ĮȡȚșµȩȢ 27.250000 µİ ȑȟȚ ȥȘijȓĮ ıIJĮ įİȟȚȐ IJȘȢ ȣʌȠįȚĮıIJȠȜȒȢ, ĮȞ țĮȚ µȩȞȠ įȪȠ Įʌ'ĮȣIJȐ İȓȞĮȚ ıȘµĮȞIJȚțȐ. ȆȡȠȕȜȒµĮIJĮ ıĮȞ IJȠ ʌȡȠȘȖȠȪµİȞȠ ȜȪȞȠȞIJĮȚ, µȚĮȢ țĮȚ µİ IJȠȣȢ țĮșȠȡȚıIJȑȢ µȠȡijȒȢ IJȘȢ printf() µʌȠȡȠȪµİ ȞĮ țĮșȠȡȓıȠȣµİ IJȠ İȪȡȠȢ IJȠȣ ʌİįȓȠȣ ʌȠȣ șĮ țĮIJĮȜȐȕİȚ ȑȞĮ İțIJȣʌȠȪµİȞȠ ĮʌȠIJȑȜİıµĮ, IJȠȞ ĮȡȚșµȩ IJȦȞ țȜĮıµĮIJȚțȫȞ ȥȘijȓȦȞ IJȠȣ ĮʌȠIJİȜȑıµĮIJȠȢ țĮșȫȢ țĮȚ IJȠ ĮȞ IJȠ ĮʌȠIJȑȜİıµĮ șĮ İȓȞĮȚ ıIJȠȚȤȚıµȑȞȠ įİȟȚȐ Ȓ ĮȡȚıIJİȡȐ µȑıĮ ıIJȠ ʌİįȓȠ.
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
38
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ȉȠ İȜȐȤȚıIJȠ İȪȡȠȢ IJȠȣ ʌİįȓȠȣ İțIJȪʌȦıȘȢ İȞȩȢ ĮʌȠIJİȜȑıµĮIJȠȢ țĮșȠȡȓȗİIJĮȚ Įʌȩ IJȠ țĮșȠȡȚıIJȚțȩ İȜȐȤȚıIJȠȣ İȪȡȠȣȢ ʌȠȣ İȓȞĮȚ ȑȞĮȢ ĮțȑȡĮȚȠȢ ʌȠȣ IJȠʌȠșİIJİȓIJĮȚ µİIJĮȟȪ IJȠȣ ıȣµȕȩȜȠȣ % țĮȚ IJȠȣ ȤĮȡĮțIJȒȡĮ IJȠȣ țĮșȠȡȚıIJȒ µȠȡijȒȢ. ǹȞ IJȠ İțIJȣʌȠȪµİȞȠ ĮʌȠIJȑȜİıµĮ İȓȞĮȚ µİȖĮȜȪIJİȡȠ Įʌȩ IJȠ İȜȐȤȚıIJȠ İȪȡȠȢ ʌİįȓȠȣ, IJȩIJİ IJȠ ĮʌȠIJȑȜİıµĮ șĮ IJȣʌȦșİȓ ȠȜȩțȜȘȡȠ ĮȖȞȠȫȞIJĮȢ IJȠ İȜȐȤȚıIJȠ İȪȡȠȢ ʌİįȓȠȣ, İȞȫ ĮȞ İȓȞĮȚ µȚțȡȩIJİȡȠ șĮ ȤȡȘıȚµȠʌȠȚȘșȠȪȞ țİȞȐ įȚĮıIJȒµĮIJĮ ȖȚĮ ȞĮ ıȣµʌȜȘȡȦșİȓ. ǹȞ șȑȜȠȣµİ ĮȞIJȓ ȖȚĮ țİȞȐ ȞĮ IJȣʌȦșȠȪȞ µȘįİȞȚțȐ, ʌȡȑʌİȚ ȞĮ IJȠʌȠșİIJȒıȠȣµİ IJȠ 0 (µȘįȑȞ) ʌȡȚȞ Įʌȩ IJȠ țĮșȠȡȚıIJȚțȩ İȜȐȤȚıIJȠȣ İȪȡȠȣȢ. īȚĮ ȞĮ țĮșȠȡȓıȠȣµİ IJȠȞ ĮȡȚșµȩ IJȦȞ țȜĮıµĮIJȚțȫȞ ȥȘijȓȦȞ ʌȠȣ șȑȜȠȣµİ ȞĮ ݵijĮȞȓȗȠȞIJĮȚ ıİ ȑȞĮȞ ĮȡȚșµȩ țȚȞȘIJȒȢ ȣʌȠįȚĮıIJȠȜȒȢ, IJȠʌȠșİIJȠȪµİ µȚĮȞ ȣʌȠįȚĮıIJȠȜȒ (IJİȜİȓĮ) µİIJȐ IJȠ țĮșȠȡȚıIJȚțȩ İȜȐȤȚıIJȠȣ İȪȡȠȣȢ IJȠȣ ʌİįȓȠȣ țĮȚ ıIJȘ ıȣȞȑȤİȚĮ ȑȞĮȞ ĮțȑȡĮȚȠ ʌȠȣ İțijȡȐȗİȚ IJȠȞ ĮȡȚșµȩ IJȦȞ țȜĮıµĮIJȚțȫȞ ȥȘijȓȦȞ ʌȠȣ șȑȜȠȣµİ ȞĮ ݵijĮȞȓȗȠȞIJĮȚ. īȚĮ ʌĮȡȐįİȚȖµĮ IJȠ %10.4f șĮ ݵijĮȞȓıİȚ ȑȞĮȞ ĮȡȚșµȩ țȚȞȘIJȒȢ ȣʌȠįȚĮıIJȠȜȒȢ ʌȜȐIJȠȣȢ IJȠȣȜȐȤȚıIJȠȞ 10 ȤĮȡĮțIJȒȡȦȞ µİ IJȑııİȡĮ țȜĮıµĮIJȚțȐ ȥȘijȓĮ. ǵIJĮȞ İijĮȡµȩȗȠȣµİ µȓĮ µȠȡijȒ ıĮȞ IJȘȞ ʌĮȡĮʌȐȞȦ ıİ ĮȜijĮȡȚșµȘIJȚțȐ, Ƞ ĮȡȚșµȩȢ ʌȠȣ ĮțȠȜȠȣșİȓ IJȘȞ IJİȜİȓĮ țĮșȠȡȓȗİȚ IJȠ µȑȖȚıIJȠ µȒțȠȢ IJȠȣ ʌİįȓȠȣ. īȚĮ ʌĮȡȐįİȚȖµĮ, IJȠ %5.7s șĮ ݵijĮȞȓıİȚ ȑȞĮ ĮȜijĮȡȚșµȘIJȚțȩ µȒțȠȣȢ IJȠȣȜȐȤȚıIJȠȞ ʌȑȞIJİ ȤĮȡĮțIJȒȡȦȞ țĮȚ ȩȤȚ µİȖĮȜȪIJİȡȠ IJȦȞ 7 ȤĮȡĮțIJȒȡȦȞ. ǹȞ IJȠ ĮȜijĮȡȚșµȘIJȚțȩ İȓȞĮȚ µİȖĮȜȪIJİȡȠ Įʌȩ IJȠ µȑȖȚıIJȠ µȒțȠȢ ʌİįȓȠȣ, șĮ ĮʌȠțȠʌȠȪȞ ıIJȘȞ İțIJȪʌȦıȘ ȠȚ İʌȚʌȜȑȠȞ ȤĮȡĮțIJȒȡİȢ ʌȠȣ ȕȡȓıțȠȞIJĮȚ ıIJȠ IJȑȜȠȢ IJȠȣ. ȆȡȠijĮȞȫȢ ȖȚĮ IJȘȞ İțIJȪʌȦıȘ ĮțİȡĮȓȦȞ ĮȡȚșµȫȞ, įİȞ ȑȤİȚ ȞȩȘµĮ Ƞ ĮȡȚșµȩȢ ʌȠȣ țĮșȠȡȓȗİȚ IJĮ țȜĮıµĮIJȚțȐ ȥȘijȓĮ țĮȚ ȦȢ İț IJȠȪIJȠȣ ĮȖȞȠİȓIJĮȚ. Ǽȟ ȠȡȚıµȠȪ, Ș ȑȟȠįȠȢ İȓȞĮȚ İȣșȣȖȡĮµµȚıµȑȞȘ įİȟȚȐ µȑıĮ ıIJȠ ʌİįȓȠ. ȂʌȠȡȠȪµİ ȞĮ ıIJȠȚȤȓıȠȣµİ IJȘȞ ȑȟȠįȠ ĮȡȚıIJİȡȐ IJȠʌȠșİIJȫȞIJĮȢ IJȠ ıȪµȕȠȜȠ ʌȜȘȞ (-) µİIJȐ IJȠ %. īȚĮ ʌĮȡȐįİȚȖµĮ, IJȠ %-10.2f șĮ ıIJȠȚȤȓıİȚ ıIJĮ ĮȡȚıIJİȡȐ ȑȞĮȞ ĮȡȚșµȩ țȚȞȘIJȒȢ ȣʌȠįȚĮıIJȠȜȒȢ µİ įȪȠ țȜĮıµĮIJȚțȐ ȥȘijȓĮ ı'ȑȞĮ ʌİįȓȠ įȑțĮ ȤĮȡĮțIJȒȡȦȞ. īȚĮ İijĮȡµȠȖȒ IJȦȞ ʌĮȡĮʌȐȞȦ ĮȢ įȠȪµİ IJȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ: /* printf2.c */ /* ǼțIJȪʌȦıȘ țȜĮıµĮIJȚțȫȞ ĮȡȚșµȫȞ µİ ȤȡȒıȘ IJȘȢ printf() */ main() { float a,b,c,d,e,f; a=3.0; b=12.5; c=523.3; d=300.0; e=1200.5; f=5300.3;
}
printf("|%.1f|%.1f|%.1f|\n",a,b,c); printf("|%.1f|%.1f|%.1f|\n\n",d,e,f); printf("|%8.1f|%8.1f|%8.1f|\n",a,b,c); printf("|%8.1f|%8.1f|%8.1f|\n\n",d,e,f); printf("|%-8.1f|%-8.1f|%-8.1f|\n",a,b,c); printf("|%-8.1f|%-8.1f|%-8.1f|\n\n",d,e,f);
ǼȓıȠįȠȢ - DzȟȠįȠȢ
39
ȉȠ ĮʌȠIJȑȜİıµĮ ʌȠȣ ʌĮȓȡȞȠȣµİ ĮȞ IJȡȑȟȠȣµİ IJȠ ʌĮȡĮʌȐȞȦ ʌȡȩȖȡĮµµĮ İȓȞĮȚ ĮȣIJȩ ʌȠȣ ijĮȓȞİIJĮȚ ʌĮȡĮțȐIJȦ. ȆȡȠıʌĮșȒıIJİ ȞĮ İȡµȘȞİȪıİIJİ ĮȣIJȩ IJȠ ĮʌȠIJȑȜİıµĮ. |3.0|12.5|523.3| |300.0|1200.5|5300.3| | |
3.0| 300.0|
|3.0 |300.0
12.5| 1200.5|
|12.5 |1200.5
523.3| 5300.3|
|523.3 |5300.3
| |
5.3.2 Ǿ ȈȊȃǹȇȉǾȈǾ scanf() Ǿ ıȣȞȐȡIJȘıȘ scanf() ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ȖȚĮ ȞĮ įȚĮȕȐȗİȚ IJȠȣȢ ȤĮȡĮțIJȒȡİȢ ʌȠȣ ʌȜȘțIJȡȠȜȠȖİȓ Ƞ ȤȡȒıIJȘȢ. ȈIJȘ ıȣȞȑȤİȚĮ IJȠȣȢ İȡµȘȞİȪİȚ țĮIJȐȜȜȘȜĮ țĮȚ IJȠȣȢ țĮIJĮȤȦȡİȓ ȦȢ IJȚµȑȢ ıIJȚȢ µİIJĮȕȜȘIJȑȢ. Ǿ ȖİȞȚțȒ µȠȡijȒ IJȘȢ İȓȞĮȚ:
scanf(ĮȜijĮȡȚșµȘIJȚțȩ_İȜȑȖȤȠȣ , ȜȓıIJĮ_ȠȡȚıµȐIJȦȞ) ȉȠ ĮȜijĮȡȚșµȘIJȚțȩ İȜȑȖȤȠȣ ıIJȘ scanf() ĮʌȠIJİȜİȓIJĮȚ Įʌȩ ıIJȠȚȤİȓĮ IJȡȚȫȞ IJȪʌȦȞ: (Į) ȀĮșȠȡȚıIJȑȢ µȠȡijȒȢ. (ȕ) ȋĮȡĮțIJȒȡİȢ țİȞȫȞ. (Ȗ) ȋĮȡĮțIJȒȡİȢ µȘ-țİȞȫȞ. ȀȐșİ țĮșȠȡȚıIJȒȢ µȠȡijȒȢ ĮȡȤȓȗİȚ µİ IJȠ ıȪµȕȠȜȠ % țĮȚ ıIJȘ ıȣȞȑȤİȚĮ ʌİȡȚȑȤİȚ ȑȞĮ ȤĮȡĮțIJȒȡĮ Ƞ ȠʌȠȓȠȢ ʌȜȘȡȠijȠȡİȓ IJȘ scanf() ȖȚĮ IJȠȞ IJȪʌȠ ıIJȠȞ ȠʌȠȓȠ șĮ µİIJĮIJȡȑȥİȚ IJĮ įİįȠµȑȞĮ ʌȠȣ șĮ įȚĮȕȐıİȚ. ȅȚ țĮșȠȡȚıIJȑȢ µȠȡijȒȢ ȖȚĮ IJȘȞ scanf()ijĮȓȞȠȞIJĮȚ ıIJȠȞ ȆȓȞĮțĮ 5.1. DzȞĮȢ ȤĮȡĮțIJȒȡĮȢ țİȞȠȪ µȑıĮ ıIJȠ ĮȜijĮȡȚșµȘIJȚțȩ İȜȑȖȤȠȣ ȣʌȠȤȡİȫȞİȚ IJȘȞ
scanf() ȞĮ ĮȖȞȠȒıİȚ ȑȞĮȞ Ȓ ʌİȡȚııȩIJİȡȠȣȢ ȤĮȡĮțIJȒȡİȢ țİȞȠȪ ʌȠȣ įȓȞȠȞIJĮȚ ȦȢ
İȓıȠįȠȢ. DzȞĮȢ ȤĮȡĮțIJȒȡĮȢ țİȞȠȪ İȓȞĮȚ İȓIJİ ȑȞĮ țİȞȩ įȚȐıIJȘµĮ, İȓIJİ ȑȞĮȢ ıIJȘȜȠȖȞȫµȠȞĮȢ (tab), Ȓ µȓĮ ȞȑĮ ȖȡĮµµȒ. ȅȣıȚĮıIJȚțȐ ȑȞĮȢ ȤĮȡĮțIJȒȡĮȢ ȜİȣțȠȪ țİȞȠȪ µȑıĮ ıIJȠ ĮȜijĮȡȚșµȘIJȚțȩ İȜȑȖȤȠȣ ȣʌȠȤȡİȫȞİȚ IJȘȞ scanf() ȞĮ įȚĮȕȐıİȚ, ĮȜȜȐ ȩȤȚ țĮȚ ȞĮ ĮʌȠșȘțİȪıİȚ, ȠʌȠȚȠȞįȒʌȠIJİ ĮȡȚșµȩ ȤĮȡĮțIJȒȡȦȞ ȜİȣțȠȪ țİȞȠȪ, µȑȤȡȚ ȞĮ ıȣȞĮȞIJȘșİȓ Ƞ ʌȡȫIJȠȢ ȤĮȡĮțIJȒȡĮȢ µȘ-țİȞȠȪ. DzȞĮȢ ȤĮȡĮțIJȒȡĮȢ µȘ-țİȞȠȪ µȑıĮ ıIJȠ ĮȜijĮȡȚșµȘIJȚțȩ İȜȑȖȤȠȣ ȣʌȠȤȡİȫȞİȚ IJȘȞ
scanf() ȞĮ įȚĮȕȐıİȚ țĮȚ ȞĮ ĮʌȠȡȡȓȥİȚ țȐʌȠȚȠ ıȣȖțİțȡȚµȑȞȠ ȤĮȡĮțIJȒȡĮ. īȚĮ ʌĮȡȐįİȚȖµĮ IJȠ ĮȜijĮȡȚșµȘIJȚțȩ İȜȑȖȤȠȣ "%d,%d" ȣʌȠȤȡİȫȞİȚ IJȘȞ scanf() ȞĮ įȚĮȕȐıİȚ ʌȡȫIJĮ ȑȞĮȞ ĮțȑȡĮȚȠ, ıIJȘ ıȣȞȑȤİȚĮ ȞĮ įȚĮȕȐıİȚ țĮȚ ȞĮ ĮʌȠȡȡȓȥİȚ ȑȞĮ țȩµµĮ țĮȚ IJȑȜȠȢ ȞĮ įȚĮȕȐıİȚ ȑȞĮȞ ȐȜȜȠȞ ĮțȑȡĮȚȠ.
ǵȜİȢ ȠȚ µİIJĮȕȜȘIJȑȢ ʌȠȣ ȤȡȘıȚµȠʌȠȚȠȪȞIJĮȚ ȖȚĮ ȞĮ įȑȤȠȞIJĮȚ IJȚµȑȢ µȑıȦ IJȘȢ
scanf() ʌȡȑʌİȚ ȞĮ ʌİȡȞȐȞİ µȑıȦ IJȦȞ įȚİȣșȪȞıİȫȞ IJȠȣȢ. īȚĮ ȞĮ ĮȞĮijİȡșȠȪµİ
ıIJȘ įȚİȪșȣȞıȘ µȓĮȢ µİIJĮȕȜȘIJȒȢ IJȪʌȠȣ ȤĮȡĮțIJȒȡĮ Ȓ ĮȡȚșµȠȪ, ʌȡȑʌİȚ µʌȡȠıIJȐ Įʌȩ IJȠ ȩȞȠµĮ IJȘȢ µİIJĮȕȜȘIJȒȢ ȞĮ IJȠʌȠșİIJȠȪµİ IJȠ ıȪµȕȠȜȠ & ʌȠȣ ȜȑȖİIJĮȚ IJİȜİıIJȒȢ įȚİȪșȣȞıȘȢ. ǵµȦȢ ȖȚĮ ȞĮ ĮȞĮijİȡșȠȪµİ ıIJȘ įȚİȪșȣȞıȘ µȓĮȢ ĮȜijĮȡȚșµȘIJȚțȒȢ µİIJĮȕȜȘIJȒȢ, įİȞ ʌȡȑʌİȚ ȞĮ IJȠʌȠșİIJȠȪµİ IJȠȞ IJİȜİıIJȒ įȚİȪșȣȞıȘȢ & µʌȡȠıIJȐ Įʌȩ IJȠ ȩȞȠµĮ IJȘȢ µİIJĮȕȜȘIJȒȢ.
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
40
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ȂȠȡijȒ
ȀĮșȠȡȚıIJȑȢ ȂȠȡijȒȢ printf()
scanf()
%c %d Ȓ %i
%c %d
țȚȞȘIJȒȢ ȣʌȠįȚĮıIJȠȜȒȢ (İțșİIJȚțȒ µȠȡijȒ)
%e
%e Ȓ %f
țȚȞȘIJȒȢ ȣʌȠįȚĮıIJȠȜȒȢ (IJȣʌȠʌȠȚȘµȑȞȘ µȠȡijȒ)
%f
%e Ȓ %f
țȚȞȘIJȒȢ ȣʌȠįȚĮıIJȠȜȒȢ (%e Ȓ %f ȩʌȠȚȠ İȓȞĮȚ ʌȚȠ µȚțȡȩ)
%g
ĮʌȡȩıȘµȠȢ ȠțIJĮįȚțȩȢ ĮțȑȡĮȚȠȢ
%o %s %u %x %p %ld,%li,%lo,%lu,%lx %hd,%hi,%ho,%hu,%hx
ȤĮȡĮțIJȒȡĮȢ ʌȡȠı/µȑȞȠȢ įİțĮįȚțȩȢ ĮțȑȡĮȚȠȢ
ĮȜijĮȡȚșµȘIJȚțȩ ĮʌȡȩıȘµȠȢ įİțĮįȚțȩȢ ĮțȑȡĮȚȠȢ ĮʌȡȩıȘµȠȢ įİțĮİȟĮįȚțȩȢ ĮțȑȡĮȚȠȢ įİȓțIJȘȢ long ĮțȑȡĮȚȠȚ short ĮțȑȡĮȚȠȚ
%o %s %u %x %p %D,%U,%O,%X Ȓ %ld ț.Ȝ.ʌ. %hd,%hi,%ho,%hu,%hx
ȆȓȞĮțĮȢ 5.1: ȅȚ țĮșȠȡȚıIJȑȢ µȠȡijȒȢ IJȦȞ scanf() țĮȚ printf()
ǹȢ ȣʌȠșȑıȠȣµİ ȩIJȚ ıİ ȑȞĮ ʌȡȩȖȡĮµµĮ ȑȤȠȣµİ įȘȜȫıİȚ µȓĮ µİIJĮȕȜȘIJȒ ĮțİȡĮȓȠȣ IJȪʌȠȣ µİ ȩȞȠµĮ num țĮȚ IJȘȢ ȑȤȠȣµİ įȫıİȚ IJȘȞ IJȚµȒ 2. ǹȞ ĮȡȖȩIJİȡĮ IJȠ ʌȡȩȖȡĮµµĮ ĮȞĮijİȡșİȓ ıIJȠ ȩȞȠµĮ IJȘȢ µİIJĮȕȜȘIJȒȢ (num) Ƞ µİIJĮȖȜȦIJIJȚıIJȒȢ șĮ İʌȚıIJȡȑȥİȚ IJȘȞ IJȚµȒ ʌȠȣ İȓȞĮȚ ĮʌȠșȘțİȣµȑȞȘ ıIJȘ µİIJĮȕȜȘIJȒ, įȘȜĮįȒ 2. ǹȞ ȩµȦȢ ĮȞĮijİȡșȠȪµİ ıIJȠ ȩȞȠµĮ IJȘȢ µİIJĮȕȜȘIJȒȢ ȕȐȗȠȞIJĮȢ µʌȡȠıIJȐ IJȠ & (&num) Ƞ µİIJĮȖȜȦIJIJȚıIJȒȢ șĮ İʌȚıIJȡȑȥİȚ IJȘ įȚİȪșȣȞıȘ ıIJȘȞ ȠʌȠȓĮ İȓȞĮȚ ĮʌȠșȘțİȣµȑȞȘ Ș num. ȉȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ įİȓȤȞİȚ ĮȣIJȒ IJȘ ȜİȚIJȠȣȡȖȓĮ: /* testaddr.c */ /* ǼțIJȪʌȦıȘ IJȘȢ įȚİȪșȣȞıȘȢ µȓĮȢ µİIJĮȕȜȘIJȒȢ */ main() { int num=2; printf("\nȉȚµȒ=%d getch();
ǻȚİȪșȣȞıȘ=%ld",num,&num);
} ȉȠ ĮʌȠIJȑȜİıµĮ İȓȞĮȚ: ȉȚµȒ=2
ǻȚİȪșȣȞıȘ=196562
ǼȓȞĮȚ ıȓȖȠȣȡȠ ȩIJȚ Ș įȚİȪșȣȞıȘ șĮ İȓȞĮȚ įȚĮijȠȡİIJȚțȒ ıİ įȚĮijȠȡİIJȚțȩ Ǿ/Ȋ.
ǼȓıȠįȠȢ - DzȟȠįȠȢ
41
5.4 ǹȈȀǾȈǼǿȈ 1.
ȆȜȘțIJȡȠȜȠȖȒıIJİ țĮȚ İțIJİȜȑıIJİ IJĮ ʌĮȡĮțȐIJȦ ʌȡȠȖȡȐµµĮIJĮ. ǼȡµȘȞİȪıIJİ IJĮ ĮʌȠIJİȜȑıµĮIJĮ: /* printf3.c */ /* ȋȡȒıȘ IJȘȢ ıȣȞȐȡIJȘıȘȢ printf() */ main() { char c='a'; int i=1234; float x=-123.456789;
}
printf("|%c|%s|%d|%f|%e|\n",c,"hello",i,x,x); printf("|%2c|%8s|%5d|%12f|%-13e|\n",c,"hello",i,x,x); printf("|%-2c|%-8s|%-5d|%-12f|%-13e|\n",c,"hello",i,x,x); printf("|%0c|%6s|%3d|%10f|%11e|\n",c,"hello",i,x,x);
/* ***************************************************** */ /* printf4.c */ /* ȋȡȒıȘ IJȘȢ ıȣȞȐȡIJȘıȘȢ printf() */ main() { char c='a'; int i=1234; float x=-123.456789;
}
printf("|%13.2f|%13.2e|\n",x,x); printf("|%13.0f|%13.0e|\n",x,x); printf("|%13.26f|\n",x); printf("|%40.32f|\n",x); printf("|%6.1c|%6.1d|\n",c,i); printf("|%8.35s|%8.1s|%8.0s|\n","hello","hello","hello");
/* ***************************************************** */ /* printf5.c */ /* ȋȡȒıȘ IJȘȢ ıȣȞȐȡIJȘıȘȢ printf() */ main() { char c='a'; int i=1234; float x=-123.456789;
}
printf("|%c|%d|%f|\n",c,c,c); printf("|%s|%d|%f|\n","hello","hello","hello"); printf("|%c|%d|%f|\n",i,i,i); printf("|%f|%d|\n",x,x);
/* ***************************************************** */
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
42
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
/* scanf1.c */ /* ȋȡȒıȘ IJȘȢ ıȣȞȐȡIJȘıȘȢ scanf() */ main() { int set; char game; float time;
} 2.
printf("ǻȫıİ ĮȡȚșµȩ IJȠȣ ıİIJ, ȖȡȐµµĮ ĮȖȫȞĮ țĮȚ ȫȡĮ: "); scanf("%d %c %f", &set, &game, &time); printf("To %do ıİIJ IJȠȣ %c ĮȖȫȞĮ įȚȒȡțİıİ ",set,game); printf("%1f ȜİʌIJȐ\n",time);
īȡȐȥIJİ ȑȞĮ ʌȡȩȖȡĮµµĮ IJȠ ȠʌȠȓȠ ȞĮ įȑȤİIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ IJȠ ȩȞȠµȐ ıĮȢ țĮȚ IJȘȞ ȘȜȚțȓĮ ıĮȢ țĮȚ ıIJȘ ıȣȞȑȤİȚĮ ȞĮ IJȣʌȫȞİȚ ıIJȘȞ ȠșȩȞȘ IJȠ µȒȞȣµĮ: Ȉİ ȜȑȞİ "............" țĮȚ İȓıĮȚ ...... İIJȫȞ.
43
ȀǼĭǹȁǹǿȅ 6
ǼȃȉȅȁǼȈ ǼȆǿȁȅīǾȈ Ȁǹǿ ǼȆǹȃǹȁǾȌǾȈ ȈIJȠ ȈȤȒµĮ 6.1 ijĮȓȞȠȞIJĮȚ ȠȚ įȚȐijȠȡȠȚ IJȪʌȠȚ IJȦȞ İȞIJȠȜȫȞ IJȘȢ C. ¢ÌÙÔÎ›Ú ÙÁÚ C
§·Ù·˜˛ÒÁÛÁÚ
ƒÔÏÁÏ›ÌÂÚ
”˝ÌËÂÙÂÚ
goto
¢ð·Ì‹ÎÁ¯ÁÚ
¢ðÈÎÔ„fiÚ
if-else
switch
while
do-while
for
ȈȤȒµĮ 6.1: ȅȚ İȞIJȠȜȑȢ IJȘȢ C
ȂȓĮ İȞIJȠȜȒ țĮIJĮȤȫȡȘıȘȢ Ȓ ĮʌȩįȠıȘȢ IJȚµȒȢ, ȩʌȦȢ ȑȤȠȣµİ įİȚ ıIJȚȢ § 4.3 țĮȚ 4.4 İȓȞĮȚ IJȘȢ µȠȡijȒȢ:
µİIJĮȕȜȘIJȒ = ʌĮȡȐıIJĮıȘ; Ȉ'ĮȣIJȩ IJȠ țİijȐȜĮȚȠ șĮ İȟİIJȐıȠȣµİ IJȚȢ įȠµȘµȑȞİȢ İȞIJȠȜȑȢ. īİȞȚțȐ ȠȚ İȞIJȠȜȑȢ İʌȚȜȠȖȒȢ țĮȚ İʌĮȞȐȜȘȥȘȢ, ȜȑȖȠȞIJĮȚ İȞIJȠȜȑȢ İȜȑȖȤȠȣ ȡȠȒȢ įȚȩIJȚ µĮȢ İʌȚIJȡȑʌȠȣȞ ȞĮ țĮșȠȡȓȗȠȣµİ IJȘ ıİȚȡȐ İțIJȑȜİıȘȢ IJȦȞ İȞIJȠȜȫȞ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ țĮșȫȢ țĮȚ IJȠ İȐȞ țȐʌȠȚİȢ Įʌȩ ĮȣIJȑȢ șĮ İțIJİȜİıIJȠȪȞ Ȓ ȩȤȚ. ǹȞ įİ ȤȡȘıȚµȠʌȠȚȘșȠȪȞ ȠȚ İȞIJȠȜȑȢ İȜȑȖȤȠȣ ȡȠȒȢ ı'ȑȞĮ ʌȡȩȖȡĮµµĮ, ȩȜİȢ ȠȚ İȞIJȠȜȑȢ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ İțIJİȜȠȪȞIJĮȚ ıİȚȡȚĮțȐ țĮȚ ȣʌȠȤȡİȦIJȚțȐ, ȤȦȡȓȢ ȞĮ ȣʌȐȡȤİȚ įȣȞĮIJȩIJȘIJĮ ʌĮȡȐȜİȚȥȘȢ țȐʌȠȚȦȞ İȟ ĮȣIJȫȞ. DzIJıȚ, ȩʌȦȢ șĮ įȠȪµİ ʌĮȡĮțȐIJȦ, ȠȚ İȞIJȠȜȑȢ İʌȚȜȠȖȒȢ µĮȢ İʌȚIJȡȑʌȠȣȞ ȞĮ țĮșȠȡȓȗȠȣµİ İȐȞ țĮȚ ʌȩIJİ șĮ İțIJİȜİıIJȠȪȞ țȐʌȠȚĮ IJµȒµĮIJĮ IJȠȣ ʌȡȠȖȡȐµµĮIJȩȢ µĮȢ țĮȚ ȠȚ İȞIJȠȜȑȢ İʌĮȞȐȜȘȥȘȢ µĮȢ İʌȚIJȡȑʌȠȣȞ ȞĮ İʌĮȞĮȜĮµȕȐȞȠȣµİ țĮIJȐ ȕȠȪȜȘıȘ IJȘȞ İțIJȑȜİıȘ țȐʌȠȚȦȞ IJµȘµȐIJȦȞ. ǵµȦȢ țĮIJĮȡȤȐȢ șĮ įȠȪµİ IJȘȞ ȑȞȞȠȚĮ IJȘȢ ıȪȞșİIJȘȢ İȞIJȠȜȒȢ.
44
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
6.1 Ǿ ȈȊȃĬǼȉǾ ǼȃȉȅȁǾ ǵʌȦȢ ȑȤȠȣµİ ĮȞĮijȑȡİȚ ıIJȘȞ § 4.4, µȓĮ ʌĮȡȐıIJĮıȘ ȩʌȦȢ Ș x=0, Ș i++, Ȓ Ș printf(...) ȖȓȞİIJĮȚ İȞIJȠȜȒ (statement) ȩIJĮȞ ĮțȠȜȠȣșİȓIJĮȚ Įʌȩ İȜȜȘȞȚțȩ İȡȦIJȘµĮIJȚțȩ (;), ȩʌȦȢ ıIJȚȢ:
x=0; i++; printf(...); ȈIJȘ C, IJȠ İȜȜȘȞȚțȩ İȡȦIJȘµĮIJȚțȩ İȓȞĮȚ ıȘµİȓȠ IJİȡµĮIJȚıµȠȪ İȞIJȠȜȫȞ, țȚ ȩȤȚ įȚĮȤȦȡȚıIJȚțȩ ȩʌȦȢ İȓȞĮȚ ıİ ȐȜȜİȢ ȖȜȫııİȢ, ʌ.Ȥ. ıIJȘȞ Pascal. ȈIJȘȞ ʌİȡȓʌIJȦıȘ ʌȠȣ șȑȜȠȣµİ ʌİȡȚııȩIJİȡİȢ Įʌȩ µȓĮ İȞIJȠȜȑȢ ȞĮ İȓȞĮȚ ıȣȞIJĮțIJȚțȐ ȚıȠįȪȞĮµİȢ µİ µȓĮ µȩȞȠ İȞIJȠȜȒ (ĮȣIJȩ șĮ ȖȓȞİȚ ʌİȡȚııȩIJİȡȠ țĮIJĮȞȠȘIJȩ ıIJȘȞ İȟȑIJĮıȘ IJȦȞ İȞIJȠȜȫȞ if-else, switch, while, do, for ʌȠȣ șĮ ȖȓȞİȚ ʌĮȡĮțȐIJȦ) IJȩIJİ ʌȡȑʌİȚ ȞĮ ȠµĮįȠʌȠȚȒıȠȣµİ ĮȣIJȑȢ IJȚȢ İȞIJȠȜȑȢ ıİ µȓĮ ıȪȞșİIJȘ İȞIJȠȜȒ Ȓ µʌȜȠț, ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ IJĮ ȐȖțȚıIJȡĮ { țĮȚ }. Ǿ ıȪȞșİIJȘ İȞIJȠȜȒ ȜĮµȕȐȞİIJĮȚ Įʌȩ IJȠ µİIJĮȖȜȦIJIJȚıIJȒ ȠȜȩțȜȘȡȘ (IJȠ {, ȠȚ İȞIJȠȜȑȢ ʌȠȣ ʌİȡȚȑȤİȚ țĮȚ IJȠ }) ȦȢ µȓĮ İȞIJȠȜȒ IJȘȢ C, µİ IJȠ İȜȜȘȞȚțȩ İȡȦIJȘµĮIJȚțȩ ĮȞIJȚȜȘʌIJȩ. DzIJıȚ įİ ȤȡİȚȐȗİIJĮȚ ȞĮ IJȠʌȠșİIJȠȪµİ İȜȜȘȞȚțȩ İȡȦIJȘµĮIJȚțȩ µİIJȐ IJȠ ȐȖțȚıIJȡȠ țȜİȚıȓµĮIJȠȢ (}).
6.2 Ǿ ǼȃȉȅȁǾ ǼȆǿȁȅīǾȈ if-else Ǿ İȞIJȠȜȒ if-else ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ȖȚĮ IJȘȞ ȣʌȩ ıȣȞșȒțȘ İțIJȑȜİıȘ İȞIJȠȜȫȞ. Ǿ ȖİȞȚțȒ µȠȡijȒ IJȘȢ İȓȞĮȚ:
if (ʌĮȡȐıIJĮıȘ) İȞIJȠȜȒ1 else İȞIJȠȜȒ2 ȩʌȠȣ IJȠ IJµȒµĮ IJȠȣ else İȓȞĮȚ ʌȡȠĮȚȡİIJȚțȩ. ǹȞ Ș ʌĮȡȐıIJĮıȘ İȓȞĮȚ ĮȜȘșȒȢ (įȚĮijȠȡİIJȚțȒ IJȠȣ µȘįİȞȩȢ) IJȩIJİ İțIJİȜİȓIJĮȚ Ș İȞIJȠȜȒ1. ǹȞ İȓȞĮȚ ȥİȣįȒȢ (ȓıȘ µİ µȘįȑȞ) țĮȚ ĮȞ ȣʌȐȡȤİȚ IJȠ IJµȒµĮ else, İțIJİȜİȓIJĮȚ Ș İȞIJȠȜȒ2, ȩʌȦȢ ijĮȓȞİIJĮȚ ıIJȠ ȈȤȒµĮ 6.2. Ǿ İȞIJȠȜȒ1 țĮȚ İȞIJȠȜȒ2 µʌȠȡȠȪȞ ȞĮ İȓȞĮȚ IJȩıȠ ĮʌȜȑȢ ȩıȠ țĮȚ ıȪȞșİIJİȢ İȞIJȠȜȑȢ.
(ð·Ò‹ÛÙ·ÛÁ)
!=0
==0
ÂÌÙÔÎfi2
ÂÌÙÔÎfi1
DzIJıȚ, ıIJȠ IJµȒµĮ țȫįȚțĮ ʌȠȣ ĮțȠȜȠȣșİȓ ıȣµȕĮȓȞȠȣȞ IJĮ İȟȒȢ: ȩIJĮȞ Ș µİIJĮȕȜȘIJȒ a İȓȞĮȚ įȚȐijȠȡȘ IJȠȣ µȘįİȞȩȢ, ȣʌȠȜȠȖȓȗİIJĮȚ IJȠ ʌȘȜȓțȠ -b/a țĮȚ IJȣʌȫȞİIJĮȚ ıIJȘȞ ȠșȩȞȘ. ȈIJȘȞ ȈȤȒµĮ 6.2: Ǿ İȞIJȠȜȒ if-else ʌİȡȓʌIJȦıȘ ʌȠȣ Ș µİIJĮȕȜȘIJȒ a İȓȞĮȚ ȓıȘ µİ IJȠ µȘįȑȞ, IJȩIJİ įİȞ ȣʌȠȜȠȖȓȗİIJĮȚ IJȓʌȠIJĮ țĮȚ ĮʌȜȫȢ ݵijĮȞȓȗİIJĮȚ ȑȞĮ µȒȞȣµĮ ıIJȘȞ ȠșȩȞȘ. ǵʌȦȢ ȕȜȑʌȠȣµİ µİIJȐ IJȠ if
ǼȞIJȠȜȑȢ ǼʌȚȜȠȖȒȢ țĮȚ ǼʌĮȞȐȜȘȥȘȢ
45
ĮțȠȜȠȣșİȓ µȓĮ ıȪȞșİIJȘ İȞIJȠȜȒ. Ȃİ IJȘȞ İȣțĮȚȡȓĮ, ʌȡȠıȑȟIJİ IJȠ İȜȜȘȞȚțȩ İȡȦIJȘµĮIJȚțȩ ʌȡȚȞ Įʌȩ IJȠ else, İȓȞĮȚ ĮʌĮȡĮȓIJȘIJȠ !!
if (a!=0) { x=-b/a; printf("x=%6.2f",x); } else printf("ǹįȪȞĮIJȘ įȚĮȓȡİıȘ"); ǹȢ įȠȪµİ IJȫȡĮ ȑȞĮ ĮʌȜȩ ʌȡȩȖȡĮµµĮ IJȠ ȠʌȠȓȠ ȕȡȓıțİȚ IJȠ µİȖĮȜȪIJİȡȠ Įʌȩ įȪȠ ʌȡĮȖµĮIJȚțȠȪȢ ĮȡȚșµȠȪȢ ʌȠȣ ʌȜȘțIJȡȠȜȠȖİȓ Ƞ ȤȡȒıIJȘȢ. ǹȡȤȚțȐ ȣʌȠșȑIJȠȣµİ ȩIJȚ µİȖĮȜȪIJİȡȠȢ İȓȞĮȚ Ƞ ʌȡȫIJȠȢ ĮȡȚșµȩȢ țĮȚ IJȠȞ țĮIJĮȤȦȡȠȪµİ ıIJȘ µİIJĮȕȜȘIJȒ max, ıIJȘ ıȣȞȑȤİȚĮ ıȣȖțȡȓȞȠȣµİ IJȘȞ IJȚµȒ IJȘȢ max µİ IJȠ įİȪIJİȡȠ ĮȡȚșµȩ, ĮȞ Ƞ įİȪIJİȡȠȢ ĮȡȚșµȩȢ İȓȞĮȚ µİȖĮȜȪIJİȡȠȢ Įʌȩ IJȘȞ IJȚµȒ IJȘȢ max, IJȩIJİ țĮIJĮȤȦȡȠȪµİ IJȠ įİȪIJİȡȠ ĮȡȚșµȩ ıIJȘ µİIJĮȕȜȘIJȒ max. ȉȑȜȠȢ IJȣʌȫȞȠȣµİ IJȘȞ IJȚµȒ IJȘȢ max. Ȃİ IJȘȞ ȓįȚĮ ȜȠȖȚțȒ µʌȠȡȠȪµİ ȞĮ ȣʌȠȜȠȖȓıȠȣµİ IJȠ µİȖĮȜȪIJİȡȠ ʌİȡȚııȠIJȑȡȦȞ IJȦȞ įȪȠ ĮȡȚșµȫȞ: /* max1.c */ /* ȋȡȒıȘ IJȘȢ if ȖȚĮ İȪȡİıȘ µİȖĮȜȪIJİȡȠȣ įȪȠ ĮȡȚșµȫȞ */ main() { float x,y,max; puts("\nǻȫıİ įȪȠ ĮȡȚșµȠȪȢ: "); scanf("%f %f", &x,&y); max=x; if (y>x) max=y; printf("\nȂİȖĮȜȪIJİȡȠȢ İȓȞĮȚ Ƞ %.2f",max);
} ȈIJȘ ıȣȞȑȤİȚĮ ʌĮȡȠȣıȚȐȗİIJĮȚ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ įȑȤİIJĮȚ ȑȞĮȞ ĮțȑȡĮȚȠ ĮȡȚșµȩ țĮȚ IJȣʌȫȞİȚ IJȘȞ ȘµȑȡĮ IJȘȢ İȕįȠµȐįĮȢ ʌȠȣ ĮȞIJȚıIJȠȚȤİȓ ı'ĮȣIJȩȞ (IJȠ 1 ĮȞIJȚıIJȠȚȤİȓ ıIJȘȞ ȀȣȡȚĮțȒ țĮȚ IJȠ 7 ıIJȠ ȈȐȕȕĮIJȠ). ȈIJȘȞ ʌİȡȓʌIJȦıȘ ʌȠȣ Ƞ ĮȡȚșµȩȢ İȓȞĮȚ µİȖĮȜȪIJİȡȠȢ IJȠȣ 7 Ȓ µȚțȡȩIJİȡȠȢ IJȠȣ 1, IJȣʌȫȞİIJĮȚ țĮIJȐȜȜȘȜȠ µȒȞȣµĮ: /* week1.c */ /* ǼțIJȪʌȦıȘ ȘµȑȡĮȢ IJȘȢ İȕįȠµȐįĮȢ ʌȠȣ ĮȞIJȚıIJȠȚȤİȓ ıİ ȑȞĮȞ ĮțȑȡĮȚȠ */ main() { int i; printf("\nǻȫıİ ȑȞĮȞ ĮțȑȡĮȚȠ Įʌȩ 1 ȑȦȢ 7: "); scanf("%d",&i); if (i==1) puts("ȀȣȡȚĮțȒ"); if (i==2) puts("ǻİȣIJȑȡĮ"); if (i==3) puts("ȉȡȓIJȘ"); if (i==4) puts("ȉİIJȐȡIJȘ"); if (i==5) puts("ȆȑµʌIJȘ"); if (i==6) puts("ȆĮȡĮıțİȣȒ"); if (i==7) puts("ȈȐȕȕĮIJȠ"); if (i>7 || i<1) puts("ǹțȣȡȠȢ ĮȡȚșµȩȢ"); }
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
46
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
6.2.1 ǼȃĬǼȉǼȈ ǼȃȉȅȁǼȈ if ĭȣıȚțȐ ıİ µȓĮ įȠµȒ if-else IJȩıȠ Ș İȞIJȠȜȒ1 ȩıȠ țĮȚ Ș İȞIJȠȜȒ2 µʌȠȡȠȪȞ ȞĮ İȓȞĮȚ İȞIJȠȜȑȢ if. — Ǿ ĮʌȜȠȪıIJİȡȘ ʌİȡȓʌIJȦıȘ İȓȞĮȚ ȩIJĮȞ Ș İȞIJȠȜȒ2 İȓȞĮȚ İȞIJȠȜȒ if-else . ȉȩIJİ Ȝȑµİ ȩIJȚ ȑȤȠȣµİ µȓĮ įȠµȒ if-else-if, ȩʌȦȢ ʌĮȡĮțȐIJȦ:
if(ʌĮȡȐıIJĮıȘ1) İȞIJȠȜȒ1 else if(ʌĮȡȐıIJĮıȘ2) İȞIJȠȜȒ2 Ȓ ȚıȠįȪȞĮµĮ else ... else if(ʌĮȡȐıIJĮıȘn) İȞIJȠȜȒn else İȞIJȠȜȒn+1
if(ʌĮȡȐıIJĮıȘ1) İȞIJȠȜȒ1 else if(ʌĮȡȐıIJĮıȘ2) İȞIJȠȜȒ2 else ... else if(ʌĮȡȐıIJĮıȘn) İȞIJȠȜȒn else İȞIJȠȜȒn+1
ȅ µİIJĮȖȜȦIJIJȚıIJȒȢ ȣʌȠȜȠȖȓȗİȚ IJȚȢ ʌĮȡĮıIJȐıİȚȢ µİ IJȘ ıİȚȡȐ țĮȚ ĮȞ țȐʌȠȚĮ ʌĮȡȐıIJĮıȘ ȕȡİșİȓ ĮȜȘșȒȢ (įȚȐijȠȡȘ IJȠȣ µȘįİȞȩȢ) İțIJİȜİȓIJĮȚ Ș İȞIJȠȜȒ ʌȠȣ ıȤİIJȓȗİIJĮȚ µ'ĮȣIJȒȞ IJȘȞ ʌĮȡȐıIJĮıȘ țĮȚ Ș ȩȜȘ ĮȜȣıȓįĮ IJİȡµĮIJȓȗİIJĮȚ. ǹȞ țĮµȓĮ ʌĮȡȐıIJĮıȘ įİȞ İȓȞĮȚ ĮȜȘșȒȢ, IJȩIJİ İțIJİȜİȓIJĮȚ Ș İȞIJȠȜȒ ʌȠȣ ıȤİIJȓȗİIJĮȚ µİ IJȠ IJİȜȚțȩ else. DzIJıȚ ȜȠȚʌȩȞ IJȠ IJİȜİȣIJĮȓȠ else ȤİȚȡȓȗİIJĮȚ IJȘȞ ʌİȡȓʌIJȦıȘ "IJȓʌȠIJĮ Įʌȩ IJĮ ʌĮȡĮʌȐȞȦ" (ʌȠȣ ȜȑȖİIJĮȚ țĮȚ "İȟ ȠȡȚıµȠȪ" ʌİȡȓʌIJȦıȘ). ǹȞ įİȞ ȣʌȐȡȤİȚ ıȣȖțİțȡȚµȑȞȘ İȞȑȡȖİȚĮ ȖȚĮ IJȘȞ İȟ ȠȡȚıµȠȪ ʌİȡȓʌIJȦıȘ, IJȩIJİ IJȠ IJİȜİȣIJĮȓȠ else µʌȠȡİȓ ȞĮ ʌĮȡĮȜİȚijșİȓ. ȂʌȠȡȠȪµİ ȞĮ ȤȡȘıȚµȠʌȠȚȒıȠȣµİ IJȘȞ ʌĮȡĮʌȐȞȦ įȠµȒ ȖȚĮ ȞĮ ȕİȜIJȚȫıȠȣµİ IJȠ ʌȡȩȖȡĮµµĮ week1.c ʌȠȣ İȓįĮµİ ʌĮȡĮʌȐȞȦ. Ǿ ĮȡȤȚțȒ ȑțįȠıȘ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ, İțIJİȜİȓ µİ IJȘ ıİȚȡȐ ȩȜİȢ IJȚȢ İȞIJȠȜȑȢ if ĮțȩµĮ țȚ ĮȞ țȐʌȠȚĮ Įʌȩ IJȚȢ ʌȡȠȘȖȠȪµİȞİȢ ȑȤİȚ ʌȡȠțȪȥİȚ ĮȜȘșȒȢ țĮȚ țĮIJȐ ıȣȞȑʌİȚĮ įİȞ ȣʌȐȡȤİȚ ʌİȡȓʌIJȦıȘ ȞĮ ĮȜȘșİȪİȚ țĮµȓĮ İʌȩµİȞȘ if. ǼȓȞĮȚ ʌȡȠijĮȞȑȢ IJȫȡĮ IJȚ ʌȡȑʌİȚ ȞĮ țȐȞȠȣµİ ȖȚĮ ȞĮ ȕİȜIJȚȫıȠȣµİ IJȠ ʌȡȩȖȡĮµµĮ (țȐȞIJİ IJȠ !!). — ȂȓĮ țȐʌȦȢ ʌİȡȚııȩIJİȡȠ ʌȠȜȪʌȜȠțȘ ʌİȡȓʌIJȦıȘ İȓȞĮȚ Ș ʌĮȡĮțȐIJȦ:
if (ʌĮȡȐıIJĮıȘ1) if (ʌĮȡȐıIJĮıȘ2) İȞIJȠȜȒ1 else İȞIJȠȜȒ2 Ȉ'ĮȣIJȒ IJȘȞ ʌİȡȓʌIJȦıȘ ıİ ʌȠȚȠ if ĮȞIJȚıIJȠȚȤİȓ IJȠ else ; īİȞȚțȐ ȚıȤȪİȚ Ƞ İʌȩµİȞȠȢ țĮȞȩȞĮȢ: DzȞĮ else ĮȞIJȚıIJȠȚȤİȓ ıIJȠ IJİȜİȣIJĮȓȠ if ʌȠȣ įİȞ ȑȤİȚ IJȠ įȚțȩ IJȠȣ else. DzIJıȚ ıIJȘȞ ʌĮȡĮʌȐȞȦ ʌİȡȓʌIJȦıȘ IJȠ else ĮȞIJȚıIJȠȚȤİȓ ıIJȠ įİȪIJİȡȠ if. ǹȞ șȑȜȠȣµİ ȩµȦȢ țȐʌȠȚȠ else ȞĮ ĮȞIJȚıIJȠȚȤİȓ ıIJȠ ʌȡȠȘȖȠȪµİȞȠ if ʌĮȡȐ ı'ĮȣIJȩ ʌȠȣ șĮ ĮȞIJȚıIJȠȚȤȠȪıİ ʌȡĮȖµĮIJȚțȐ, ʌȡȑʌİȚ ȞĮ ȤȡȘıȚµȠʌȠȚȒıȠȣµİ ȐȖțȚıIJȡĮ ȖȚĮ ȞĮ ʌİȡȚțȜİȓıȠȣµİ IJȠ İȞįȚȐµİıȠ if. DzIJıȚ ĮȞ șȑȜĮµİ ıIJȘȞ ʌĮȡĮʌȐȞȦ ʌİȡȓʌIJȦıȘ IJȠ else ȞĮ ĮȞIJȚıIJȠȚȤİȓ ıIJȠ ʌȡȫIJȠ if țĮȚ ȩȤȚ ıIJȠ įİȪIJİȡȠ, șĮ ȑʌȡİʌİ ȞĮ ȖȡȐȥȠȣµİ:
ǼȞIJȠȜȑȢ ǼʌȚȜȠȖȒȢ țĮȚ ǼʌĮȞȐȜȘȥȘȢ
47
if (ʌĮȡȐıIJĮıȘ1) { if (ʌĮȡȐıIJĮıȘ2) İȞIJȠȜȒ1 } else İȞIJȠȜȒ2
6.2.2 ȅ ȉǼȁǼȈȉǾȈ ȈȊȃĬǾȀǾȈ ?: ȅ IJİȜİıIJȒȢ ?: İȓȞĮȚ ȑȞĮȢ IJȡȚĮįȚțȩȢ IJİȜİıIJȒȢ (µİ IJȡİȚȢ IJİȜİıIJȑȠȣȢ) ʌȠȣ ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ıIJȚȢ ʌĮȡĮıIJȐıİȚȢ ȣʌȩ ıȣȞșȒțȘ. ȂȓĮ ʌĮȡȐıIJĮıȘ ȣʌȩ ıȣȞșȒțȘ ȑȤİȚ IJȘȞ ʌĮȡĮțȐIJȦ µȠȡijȒ:
ʌĮȡȐıIJĮıȘ1
?
ʌĮȡȐıIJĮıȘ2
:
ʌĮȡȐıIJĮıȘ3
ȊʌȠȜȠȖȓȗİIJĮȚ ʌȡȫIJĮ Ș ʌĮȡȐıIJĮıȘ1. ǹȞ İȓȞĮȚ µȘ-µȘįİȞȚțȒ (ĮȜȘșȒȢ), ȣʌȠȜȠȖȓȗİIJĮȚ Ș ʌĮȡȐıIJĮıȘ2 țĮȚ ĮȣIJȒ İȓȞĮȚ Ș IJȚµȒ IJȘȢ ʌĮȡȐıIJĮıȘȢ ȣʌȩ ıȣȞșȒțȘ. ǻȚĮijȠȡİIJȚțȐ, ȣʌȠȜȠȖȓȗİIJĮȚ Ș ʌĮȡȐıIJĮıȘ3 țĮȚ ĮȣIJȒ İȓȞĮȚ Ș IJȚµȒ IJȘȢ ʌĮȡȐıIJĮıȘȢ ȣʌȩ ıȣȞșȒțȘ. ȂȩȞȠ µȓĮ Įʌȩ IJȚȢ ʌĮȡȐıIJĮıȘ2 țĮȚ ʌĮȡȐıIJĮıȘ3 ȣʌȠȜȠȖȓȗİIJĮȚ. ȅȚ ʌĮȡĮıIJȐıİȚȢ ȣʌȩ ıȣȞșȒțȘ ȤȡȘıȚµȠʌȠȚȠȪȞIJĮȚ ȖȚĮ ȞĮ ĮȞIJȚțĮșȚıIJȠȪȞ İȞIJȠȜȑȢ
if-else IJȘȢ ȖİȞȚțȒȢ µȠȡijȒȢ: if (ʌĮȡȐıIJĮıȘ1) µİIJĮȕȜȘIJȒ=ʌĮȡȐıIJĮıȘ2; else µİIJĮȕȜȘIJȒ=ʌĮȡȐıIJĮıȘ3; ȦȢ İȟȒȢ:
µİIJĮȕȜȘIJȒ=ʌĮȡȐıIJĮıȘ1 ? ʌĮȡȐıIJĮıȘ2 : ʌĮȡȐıIJĮıȘ3; īȚĮ ʌĮȡȐįİȚȖµĮ IJȠ ʌĮȡĮțȐIJȦ IJµȒµĮ țȫįȚțĮ ʌȠȣ țĮIJĮȤȦȡİȓ ıIJȘȞ max IJȠ µİȖĮȜȪIJİȡȠ IJȦȞ a țĮȚ b:
if (a>b) max=a; else max=b; µʌȠȡİȓ ȞĮ ȖȡĮijİȓ ȦȢ:
max=a>b?a:b;
6.3 H ǼȃȉȅȁǾ ǼȆǿȁȅīǾȈ switch ǵʌȦȢ İȓįĮµİ ʌȡȠȘȖȠȣµȑȞȦȢ Ș įȠµȒ if-else-if İʌȚIJȡȑʌİȚ IJȘȞ İʌȚȜȠȖȒ µȓĮȢ țĮIJȐıIJĮıȘȢ Įʌȩ ȑȞĮ ıȪȞȠȜȠ ʌȠȜȜȫȞ țĮIJĮıIJȐıİȦȞ µİ ȕȐıȘ IJȘȞ IJȚµȒ țȐʌȠȚĮȢ ʌĮȡȐıIJĮıȘȢ. Ǿ ȖȜȫııĮ C ȩµȦȢ įȚĮșȑIJİȚ µȓĮ ʌȠȜȣțȜĮįȚțȒ İȞIJȠȜȒ ĮʌȠijȐıİȦȞ, IJȘȞ switch, Ș ȠʌȠȓĮ İȜȑȖȤİȚ ĮȞ Ș IJȚµȒ µȓĮȢ ʌĮȡȐıIJĮıȘȢ IJĮȣIJȓȗİIJĮȚ µİ µȓĮ IJȚµȒ Įʌȩ ȑȞĮ ıȪȞȠȜȠ ıIJĮșİȡȫȞ ĮțİȡĮȓȦȞ IJȚµȫȞ, Ȓ ȤĮȡĮțIJȒȡȦȞ țĮȚ įȚĮțȜĮįȫȞİIJĮȚ ĮȞȐȜȠȖĮ. ȉȠ ıȣȞIJĮțIJȚțȩ IJȘȢ İȞIJȠȜȒȢ switch İȓȞĮȚ IJȠ ĮțȩȜȠȣșȠ:
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
48
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
switch (ʌĮȡȐıIJĮıȘ) { case ıIJĮșİȡȐ1 : case ıIJĮșİȡȐ2 : ... case ıIJĮșİȡȐn : default : }
İȞIJȠȜȑȢ1 İȞIJȠȜȑȢ2 İȞIJȠȜȑȢn İȞIJȠȜȑȢ
Ǿ ʌĮȡȐıIJĮıȘ ʌȠȣ ĮțȠȜȠȣșİȓ IJȘ ȜȑȟȘ switch µʌȠȡİȓ ȞĮ İȓȞĮȚ: (i)
ȂȓĮ ĮțȑȡĮȚĮ ıIJĮșİȡȐ ȩʌȦȢ 1, 2, 3 ...
(ii) ȂȓĮ ıȣȞȐȡIJȘıȘ ʌȠȣ İʌȚıIJȡȑijİȚ ĮțȑȡĮȚȠ ĮȡȚșµȩ (iii) ȂȓĮ ĮȡȚșµȘIJȚțȒ ʌĮȡȐıIJĮıȘ, ʌȠȣ įȓȞİȚ ȦȢ IJȚµȒ ĮțȑȡĮȚȠ ĮȡȚșµȩ (iv) DzȞĮȢ ȤĮȡĮțIJȒȡĮȢ ȀȐșİ ʌİȡȓʌIJȦıȘ (case) ĮțȠȜȠȣșİȓIJĮȚ Įʌȩ µȓĮ ıIJĮșİȡȐ ʌȠȣ µʌȠȡİȓ ȞĮ İȓȞĮȚ µȓĮ ĮțȑȡĮȚĮ ıIJĮșİȡȐ (ʌ.Ȥ. 1), ȑȞĮȢ ȤĮȡĮțIJȒȡĮȢ (ʌ.Ȥ. 'Ǻ'), Ȓ µȓĮ ĮțȑȡĮȚĮ ĮȡȚșµȘIJȚțȒ ʌĮȡȐıIJĮıȘ (ʌ.Ȥ. 4*3+8). ǻİȞ İʌȚIJȡȑʌİIJĮȚ ʌİȡȚııȩIJİȡİȢ Įʌȩ µȓĮ case ȞĮ ȑȤȠȣȞ IJȘȞ ȓįȚĮ ıIJĮșİȡȐ. ǹȡȤȚțȐ ȣʌȠȜȠȖȓȗİIJĮȚ Ș IJȚµȒ IJȘȢ ʌĮȡȐıIJĮıȘȢ țĮȚ țĮIJȩʌȚȞ İȡİȣȞȫȞIJĮȚ ȑȞĮ ʌȡȠȢ ȑȞĮ IJĮ case ȖȚĮ ȞĮ ȕȡİșİȓ ȩµȠȚĮ IJȚµȒ. ǼijȩıȠȞ ȕȡİșİȓ, IJȩIJİ Ș İțIJȑȜİıȘ ıȣȞİȤȓȗİIJĮȚ Įʌȩ IJȘȞ İȞIJȠȜȒ ʌȠȣ ĮțȠȜȠȣșİȓ IJȘȞ case. ǻȚĮijȠȡİIJȚțȐ Ș İțIJȑȜİıȘ ıȣȞİȤȓȗİIJĮȚ Įʌȩ IJȘȞ ʌȡȫIJȘ İȞIJȠȜȒ µİIJȐ IJȠ default, ĮȞ ȣʌȐȡȤİȚ. ǹȞ țĮµȓĮ ıIJĮșİȡȐ įİ ıȣµijȦȞİȓ µİ IJȘȞ IJȚµȒ IJȘȢ ʌĮȡȐıIJĮıȘȢ țĮȚ įİȞ ȣʌȐȡȤİȚ default, IJȩIJİ įİȞ ʌȡĮȖµĮIJȠʌȠȚİȓIJĮȚ țĮµȓĮ İȞȑȡȖİȚĮ. ȉȠ default µʌȠȡİȓ ȞĮ IJİșİȓ ȠʌȠȣįȒʌȠIJİ ĮȞȐµİıĮ ıIJȚȢ case, ȩȤȚ µȩȞȠ ıIJȠ IJȑȜȠȢ. ȋȡȘıȚµȠʌȠȚȫȞIJĮȢ IJȘȞ İȞIJȠȜȒ switch IJȠ ʌȡȩȖȡĮµµĮ week1.c IJȘȢ § 6.2 ȖȡȐijİIJĮȚ ȩʌȦȢ ijĮȓȞİIJĮȚ ʌĮȡĮțȐIJȦ. ȈIJȠ ʌȡȩȖȡĮµµĮ ĮȣIJȩ ĮȢ ʌȡȠıȑȟȠȣµİ IJȘ ȤȡȒıȘ IJȘȢ İȞIJȠȜȒȢ break. Ǿ İȞIJȠȜȒ break ȤȡȘıȚµȠʌȠȚİȓIJĮȚ İįȫ ȖȚĮ ȞĮ ʌȡȠțĮȜȑıİȚ ȐµİıȘ ȑȟȠįȠ Įʌȩ IJȘȞ switch. ǼʌİȚįȒ ȠȚ case İȟȣʌȘȡİIJȠȪȞ ĮʌȜȫȢ ıĮȞ ıȘµİȓĮ ȩʌȠȣ µİIJĮijȑȡİIJĮȚ Ƞ ȑȜİȖȤȠȢ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ (İIJȚțȑIJİȢ), µİIJȐ IJȘȞ İțIJȑȜİıȘ IJȠȣ țȫįȚțĮ țȐʌȠȚĮȢ case IJȠ ʌȡȩȖȡĮµµĮ ıȣȞİȤȓȗİȚ µİ IJȠȞ țȫįȚțĮ IJȘȢ İʌȩµİȞȘȢ case ț.Ƞ.ț. ȑȦȢ ȩIJȠȣ ijIJȐıİȚ ıİ țȐʌȠȚĮ break Ȓ ıIJȠ IJȑȜȠȢ IJȘȢ İȞIJȠȜȒȢ switch. /* week2.c */ /* ǼțIJȪʌȦıȘ ȘµȑȡĮȢ IJȘȢ İȕįȠµȐįĮȢ ʌȠȣ ĮȞIJȚıIJȠȚȤİȓ ıİ ȑȞĮȞ ĮțȑȡĮȚȠ */ main() { int i; printf("\nǻȫıİ ȑȞĮȞ ĮțȑȡĮȚȠ Įʌȩ 1 ȑȦȢ 7: "); scanf("%d",&i); switch (i) { case 1 : puts("ȀȣȡȚĮțȒ"); break; case 2 : puts("ǻİȣIJȑȡĮ"); break; case 3 : puts("ȉȡȓIJȘ"); break;
ǼȞIJȠȜȑȢ ǼʌȚȜȠȖȒȢ țĮȚ ǼʌĮȞȐȜȘȥȘȢ
case 4 : case 5 : case 6 : case 7 : default:
49
puts("ȉİIJȐȡIJȘ"); break; puts("ȆȑµʌIJȘ"); break; puts("ȆĮȡĮıțİȣȒ"); break; puts("ȈȐȕȕĮIJȠ"); break; puts("ǹțȣȡȠȢ ĮȡȚșµȩȢ");
} } ȍıIJȩıȠ µʌȠȡȠȪµİ ȞĮ İțµİIJĮȜȜİȣIJȠȪµİ, ıİ µİȡȚțȑȢ ʌİȡȚʌIJȫıİȚȢ, IJȘ ıȣȞȑȤȚıȘ IJȘȢ İțIJȑȜİıȘȢ IJȠȣ țȫįȚțĮ IJȘȢ İʌȩµİȞȘȢ case, ȩʌȦȢ ijĮȓȞİIJĮȚ ıIJȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ, ȩʌȠȣ ȣʌȠȜȠȖȓȗİIJĮȚ µİ ȑȞĮȞ "ȑȟȣʌȞȠ" IJȡȩʌȠ IJȠ ʌĮȡĮȖȠȞIJȚțȩ İȞȩȢ ĮȡȚșµȠȪ: /* fact1.c */ /* ȊʌȠȜȠȖȚıµȩȢ ʌĮȡĮȖȠȞIJȚțȠȪ İȞȩȢ ĮțİȡĮȓȠȣ ıIJȠ įȚȐıIJȘµĮ 1..8 */ main() { int number; unsigned int factorial=1;
}
printf("\nǻȫıİ ĮțȑȡĮȚȠ: "); scanf("%d",&number); switch (number) { case 8 : factorial =8; case 7 : factorial *=7; case 6 : factorial *=6; case 5 : factorial *=5; case 4 : factorial *=4; case 3 : factorial *=3; case 2 : factorial *=2; case 1 : case 0 : printf("ȉȠ ʌĮȡĮȖȠȞIJȚțȩ IJȠȣ %d İȓȞĮȚ %u\n", number,factorial); break; default: printf("ǹįȪȞĮIJȠȢ Ƞ ȣʌȠȜȠȖȚıµȩȢ IJȠȣ ʌĮȡĮȖȠȞIJȚțȠȪ IJȠȣ %d\n", number); }
ǼʌȓıȘȢ Įʌȩ IJȠ ʌĮȡĮʌȐȞȦ ʌȡȩȖȡĮµµĮ ijĮȓȞİIJĮȚ ʌȫȢ µʌȠȡȠȪµİ ȞĮ ĮȞIJȚıIJȠȚȤȒıȠȣµİ ıİ ʌİȡȚııȩIJİȡİȢ Įʌȩ µȓĮ case IJȘȞ ȓįȚĮ İȞȑȡȖİȚĮ (IJȠ ʌĮȡĮȖȠȞIJȚțȩ IJȩıȠ IJȠȣ 0 ȩıȠ țĮȚ IJȠȣ 1 İȓȞĮȚ 1). ȈIJȠ ʌĮȡĮțȐIJȦ IJµȒµĮ țȫįȚțĮ ĮȣIJȩ ijĮȓȞİIJĮȚ țĮȜȪIJİȡĮ. ĬȑȜȠȣµİ ȞĮ ȤĮȡĮțIJȘȡȓıȠȣµİ IJȘȞ İʌȓįȠıȘ İȞȩȢ µĮșȘIJȒ (A, B, C, D) ĮȞȐȜȠȖĮ µİ IJȠ ȕĮșµȩ IJȠȣ (9-10, 7-8, 5-6, 0-4):
switch { case case case case case case
(score) 10 9 8 7 6 5
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
: : printf("\nA"); break; : : printf("\nB"); break; : : printf("\nC"); break;
50
}
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
case 4 case 3 case 2 case 1 case 0 default
: : : : : printf("\nD"); break; : printf("\nǹțȣȡȠȢ ȕĮșµȩȢ");
6.4 Ǿ ǼȃȉȅȁǾ ǼȆǹȃǹȁǾȌǾȈ while Ǿ İȞIJȠȜȒ while İȓȞĮȚ µȓĮ İȞIJȠȜȒ İʌĮȞȐȜȘȥȘȢ țĮȚ ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ȩIJĮȞ șȑȜȠȣµİ ȞĮ İțIJİȜİȓIJĮȚ ıȣȞȑȤİȚĮ țȐʌȠȚĮ İȞȑȡȖİȚĮ ȩıȠ µȓĮ ıȣȞșȒțȘ İȓȞĮȚ ĮȜȘșȒȢ. Ǿ İȞIJȠȜȒ while ȑȤİȚ IJȘȞ ĮțȩȜȠȣșȘ µȠȡijȒ:
while (ʌĮȡȐıIJĮıȘ) İȞIJȠȜȒ Ǿ İȞIJȠȜȒ ʌȠȣ ĮțȠȜȠȣșİȓ IJȠ while µʌȠȡİȓ ȞĮ İȓȞĮȚ ȠʌȠȚĮįȒʌȠIJİ ĮʌȜȒ Ȓ ıȪȞșİIJȘ İȞIJȠȜȒ. ǹȡȤȚțȐ ȣʌȠȜȠȖȓȗİIJĮȚ Ș ʌĮȡȐıIJĮıȘ țĮȚ ĮȞ İȓȞĮȚ µȘ-µȘįİȞȚțȒ, İțIJİȜİȓIJĮȚ Ș İȞIJȠȜȒ țĮȚ Ș ʌĮȡȐıIJĮıȘ ȣʌȠȜȠȖȓȗİIJĮȚ ȟĮȞȐ. ȅ ȕȡȩȤȠȢ ıȣȞİȤȓȗİIJĮȚ µȑȤȡȚ ȞĮ ȖȓȞİȚ Ș ʌĮȡȐıIJĮıȘ µȘįȑȞ, ȠʌȩIJİ Ș İțIJȑȜİıȘ ıȣȞİȤȓȗİIJĮȚ Įʌȩ IJȠ ıȘµİȓȠ µİIJȐ IJȘȞ İȞIJȠȜȒ, ȩʌȦȢ ijĮȓȞİIJĮȚ ıIJȠ ȈȤȒµĮ 6.3.
(ð·Ò‹ÛÙ·ÛÁ)
==0
!=0
ÂÌÙÔÎfi
ǼȓȞĮȚ ijĮȞİȡȩ ȩIJȚ ĮȞ Ș IJȚµȒ IJȘȢ ʌĮȡȐıIJĮıȘȢ İȓȞĮȚ İȟĮȡȤȒȢ µȘįȑȞ, Ș İȞIJȠȜȒ įİ șĮ İțIJİȜİıIJİȓ ȠȪIJİ ȈȤȒµĮ 6.3: Ǿ İȞIJȠȜȒ while µȓĮ ijȠȡȐ. ǼʌȓıȘȢ ʌȡȑʌİȚ ȞĮ ʌȡȠȕȜȑʌİIJĮȚ Ș µİIJĮȕȠȜȒ IJȘȢ IJȚµȒȢ IJȘȢ ʌĮȡȐıIJĮıȘȢ, Įʌȩ IJȘȞ İȞIJȠȜȒ, įȚĮijȠȡİIJȚțȐ Ƞ ȕȡȩȤȠȢ șĮ İțIJİȜİȓIJĮȚ ıȣȞȑȤİȚĮ (black operational hole). ȉȠ ĮțȩȜȠȣșȠ ʌȡȩȖȡĮµµĮ ȤȡȘıȚµȠʌȠȚİȓ ȑȞĮ ȕȡȩȤȠ while ȖȚĮ ȞĮ IJȣʌȫıİȚ IJȠȣȢ ĮȡȚșµȠȪȢ 0 ȑȦȢ 9 ȩʌȦȢ İʌȓıȘȢ țĮȚ IJȠ IJȡȑȤȠȞ ȐșȡȠȚıµĮ: /* wloop.c */ /* ǼțIJȪʌȦıȘ IJȦȞ ĮȡȚșµȫȞ Įʌȩ 0 ȦȢ 9 */ /* țĮȚ IJȠȣ IJȡȑȤȠȞIJȠȢ ĮșȡȠȓıµĮIJȠȢ */ main() { int count=0; int total=0;
}
while(count<10) printf("ȂİIJȡȘIJȒȢ=%d, ǹșȡȠȚıµĮ=%d\n", count++, total+=count);
ȉȠ ĮʌȠIJȑȜİıµĮ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ İȓȞĮȚ:
ǼȞIJȠȜȑȢ ǼʌȚȜȠȖȒȢ țĮȚ ǼʌĮȞȐȜȘȥȘȢ
ȂİIJȡȘIJȒȢ=0, ȂİIJȡȘIJȒȢ=1, ȂİIJȡȘIJȒȢ=2, ȂİIJȡȘIJȒȢ=3, ȂİIJȡȘIJȒȢ=4, ȂİIJȡȘIJȒȢ=5, ȂİIJȡȘIJȒȢ=6, ȂİIJȡȘIJȒȢ=7, ȂİIJȡȘIJȒȢ=8, ȂİIJȡȘIJȒȢ=9,
51
ǹșȡȠȚıµĮ=0 ǹșȡȠȚıµĮ=1 ǹșȡȠȚıµĮ=3 ǹșȡȠȚıµĮ=6 ǹșȡȠȚıµĮ=10 ǹșȡȠȚıµĮ=15 ǹșȡȠȚıµĮ=21 ǹșȡȠȚıµĮ=28 ǹșȡȠȚıµĮ=36 ǹșȡȠȚıµĮ=45
ȅ ȕȡȩȤȠȢ while İȓȞĮȚ Ƞ ʌȜȑȠȞ țĮIJȐȜȜȘȜȠȢ ıİ ʌİȡȚʌIJȫıİȚȢ ʌȠȣ įİȞ İȓȞĮȚ ȖȞȦıIJȩȢ İț IJȦȞ ʌȡȠIJȑȡȦȞ Ƞ ĮȡȚșµȩȢ IJȦȞ İʌĮȞĮȜȒȥİȦȞ țĮȚ Ƞ ȕȡȩȤȠȢ µʌȠȡİȓ ȞĮ IJİȡµĮIJȚıIJİȓ ĮʌȡȩıµİȞĮ Įʌȩ ıȣȞșȒțİȢ ʌȠȣ ĮȞĮțȪʌIJȠȣȞ µȑıĮ ıIJȠ ȕȡȩȤȠ. ȍȢ ʌĮȡȐįİȚȖµĮ ĮȢ įȠȪµİ IJȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ: /* charcnt.c */ /* ǹʌĮȡȓșµȘıȘ ȤĮȡĮțIJȒȡȦȞ ʌȡȩIJĮıȘȢ */ main() { int count=0; printf("īȡȐȥİ µȚĮ ʌȡȩIJĮıȘ (ȖȚĮ IJȑȜȠȢ įȫıİ ENTER):\n"); while(getche() != '\r') count++ ; printf("\nȅ ĮȡȚșµȩȢ IJȦȞ ȤĮȡĮțIJȒȡȦȞ İȓȞĮȚ %d\n",count);
} ǹȣIJȩ IJȠ ʌȡȩȖȡĮµµĮ µĮȢ ʌȡȠıțĮȜİȓ ȞĮ ʌȜȘțIJȡȠȜȠȖȒıȠȣµİ µȓĮ ʌȡȩIJĮıȘ. ȀĮșȫȢ İȚıȐȖȠȣµİ țȐșİ ȤĮȡĮțIJȒȡĮ IJȠ ʌȡȩȖȡĮµµĮ ĮʌĮȡȚșµİȓ IJȠȣȢ ȤĮȡĮțIJȒȡİȢ ʌȠȣ ʌȜȘțIJȡȠȜȠȖȠȪµİ țĮȚ ȩIJĮȞ ʌĮIJȐµİ ENTER IJȣʌȫȞİȚ IJȠ ıȪȞȠȜȠ. ȆȡȠıȑȟIJİ IJȠ ȤĮȡĮțIJȒȡĮ '\r' ʌȠȣ ıȘµĮȓȞİȚ İʌĮȞĮijȠȡȐ țİijĮȜȒȢ (ȕȜȑʌİ § 3.3.2). Ǿ İȞIJȠȜȒ ıIJȠ ȕȡȩȤȠ while µʌȠȡİȓ ȞĮ İȓȞĮȚ țĮȚ Ș țİȞȒ İȞIJȠȜȒ. Ǿ țİȞȒ İȞIJȠȜȒ İȓȞĮȚ ĮʌȜȫȢ ȑȞĮ İȜȜȘȞȚțȩ İȡȦIJȘµĮIJȚțȩ (;), Ș İțIJȑȜİıȘ ĮȣIJȒȢ IJȘȢ İȞIJȠȜȒȢ įİȞ ȑȤİȚ țĮȞȑȞĮ ȐȜȜȠ ĮʌȠIJȑȜİıµĮ İțIJȩȢ IJȘȢ țĮșȣıIJȑȡȘıȘȢ. īȚĮ ʌĮȡȐįİȚȖµĮ Ƞ ʌĮȡĮțȐIJȦ ȕȡȩȤȠȢ șĮ İțIJİȜİȓIJĮȚ ıȣȞȑȤİȚĮ µȑȤȡȚ ȞĮ ʌȜȘțIJȡȠȜȠȖȒıȠȣµİ IJȠ ȤĮȡĮțIJȒȡĮ 'ǹ':
while((ch=getche())!='A') ; ȆȡȚȞ ĮijȒıȠȣµİ IJȠ ȕȡȩȤȠ while șĮ įȠȪµİ įȪȠ ʌĮȡĮįİȓȖµĮIJĮ. ȉȠ ʌȡȫIJȠ ȣʌȠȜȠȖȓȗİȚ IJȠ ʌĮȡĮȖoȞIJȚțȩ İȞȩȢ ĮȡȚșµȠȪ (ıȣȖțȡȓȞİIJİ µİ IJȠ fact1.c IJȘȢ § 6.3): /* fact2.c */ /* ȊʌȠȜȠȖȚıµȩȢ ʌĮȡĮȖȠȞIJȚțȠȪ İȞȩȢ µȘ-ĮȡȞȘIJȚțȠȪ ĮțİȡĮȓȠȣ */ main() { unsigned long int factorial; int number;
}
printf("\nǻȫıİ ĮțȑȡĮȚȠ: "); scanf("%d",&number); factorial=1; while (number>1) factorial *=number--; printf("ȉȠ ʌĮȡĮȖȠȞIJȚțȩ İȓȞĮȚ: %lu\n",factorial);
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
52
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ȉȠ įİȪIJİȡȠ ʌĮȡȐįİȚȖµĮ ȣʌȠȜȠȖȓȗİȚ IJȘȞ IJȚµȒ IJȠȣ ĮșȡȠȓıµĮIJȠȢ
S=1+1/2+1/3+...+1/n ȖȚĮ įȠıµȑȞȠ țȐșİ ijȠȡȐ n. /* series1.c */ /* ȊʌȠȜȠȖȚıµȩȢ IJȠȣ ĮșȡȠȓıµĮIJȠȢ 1+1/2+1/3+...+1/n */ main() { unsigned long int n, i=0; float sum=0.0;
}
puts("ǻȫıİ IJȠ ʌȜȒșȠȢ IJȦȞ ȩȡȦȞ:"); scanf("%U",&n); while (i<n) sum+=1.0/++i; printf("ȅȚ %lu ȩȡȠȚ IJȘȢ ıİȚȡȐȢ ȑȤȠȣȞ ȐșȡȠȚıµĮ %.6f\n",n,sum);
6.5 Ǿ ǼȃȉȅȁǾ ǼȆǹȃǹȁǾȌǾȈ do-while ǵʌȦȢ İȓįĮµİ ıIJȘȞ ʌȡȠȘȖȠȪµİȞȘ ʌĮȡȐȖȡĮijȠ, Ƞ ȕȡȩȤȠȢ while İȜȑȖȤİȚ IJȘ ıȣȞșȒțȘ IJİȡµĮIJȚıµȠȪ ıIJȘȞ ĮȡȤȒ IJȠȣ ȕȡȩȤȠȣ. ǹȞIJȓșİIJĮ Ƞ ȕȡȩȤȠȢ dowhile, IJȘȞ İȜȑȖȤİȚ ıIJȠ IJȑȜȠȢ IJȠȣ, ĮijȠȪ ıȣµʌȜȘȡȦșİȓ țȐșİ ʌȑȡĮıµĮ Įʌȩ IJȠ ıȫµĮ IJȠȣ ȕȡȩȤȠȣ. DzIJıȚ IJȠ ıȫµĮ IJȠȣ ȕȡȩȤȠȣ İțIJİȜİȓIJĮȚ ʌȐȞIJȠIJİ IJȠȣȜȐȤȚıIJȠȞ µȓĮ ijȠȡȐ. Ǿ ȖİȞȚțȒ µȠȡijȒ IJȠȣ ȕȡȩȤȠȣ do-while İȓȞĮȚ Ș ĮțȩȜȠȣșȘ:
do
ÂÌÙÔÎfi
(ð·Ò‹ÛÙ·ÛÁ) !=0
İȞIJȠȜȒ while (ʌĮȡȐıIJĮıȘ);
==0
ȩʌȠȣ İȞIJȠȜȒ µʌȠȡİȓ ȞĮ İȓȞĮȚ ȠʌȠȚĮįȒʌȠIJİ ĮʌȜȒ Ȓ ıȪȞșİIJȘ İȞIJȠȜȒ IJȘȢ C. ǼțIJİȜİȓIJĮȚ Ș İȞIJȠȜȒ țĮȚ µİIJȐ ȣʌȠȜȠȖȓȗİIJĮȚ Ș ʌĮȡȐıIJĮıȘ. ǹȞ İȓȞĮȚ ĮȜȘșȒȢ (µȘµȘįİȞȚțȒ) İțIJİȜİȓIJĮȚ ȟĮȞȐ ț.Ƞ.ț. ǵIJĮȞ Ș ʌĮȡȐıIJĮıȘ ȖȓȞİȚ ȥİȣįȒȢ (µȘįİȞȚțȒ), Ƞ ȕȡȩȤȠȢ IJİȡµĮIJȓȗİIJĮȚ, ȩʌȦȢ ijĮȓȞİIJĮȚ ıIJȠ ȈȤȒµĮ 6.4.
ȈȤȒµĮ 6.4: H İȞIJȠȜȒ do-while
ȂȓĮ İȞIJȠȜȒ while ȖȓȞİIJĮȚ ȚıȠįȪȞĮµȘ µȓĮȢ do-while țĮȚ µȓĮ do-while ȖȓȞİIJĮȚ ȚıȠįȪȞĮµȘ µȓĮȢ İȞIJȠȜȒȢ while, ȦȢ ĮțȠȜȠȪșȦȢ:
while(ʌĮȡȐıIJĮıȘ) İȞIJȠȜȒ
if(ʌĮȡȐıIJĮıȘ) do İȞIJȠȜȒ while(ʌĮȡȐıIJĮıȘ)
İȞIJȠȜȒ while(ʌĮȡȐıIJĮıȘ) İȞIJȠȜȒ
do İȞIJȠȜȒ while(ʌĮȡȐıIJĮıȘ)
ǼȞIJȠȜȑȢ ǼʌȚȜȠȖȒȢ țĮȚ ǼʌĮȞȐȜȘȥȘȢ
53
ȉȠ ȖȞȦıIJȩ µĮȢ ʌȡȩȖȡĮµµĮ ʌȠȣ IJȣʌȫȞİȚ IJȠȣȢ ĮȡȚșµȠȪȢ Įʌȩ 0 ȑȦȢ 9 țĮȚ IJȠ IJȡȑȤȠȞ ȐșȡȠȚıµĮ, ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ IJȘȞ İȞIJȠȜȒ do-while ȖȓȞİIJĮȚ: /* doloop.c */ /* ǼțIJȪʌȦıȘ IJȦȞ ĮȡȚșµȫȞ Įʌȩ 0 ȦȢ 9 */ /* țĮȚ IJȠȣ IJȡȑȤȠȞIJȠȢ ĮșȡȠȓıµĮIJȠȢ */ main() { int count=0; int total=0; do
printf("ȂİIJȡȘIJȒȢ=%d, ǹșȡȠȚıµĮ=%d\n", count++, total+=count); while(count<10);
} ȉȠ ĮʌȠIJȑȜİıµĮ İȓȞĮȚ IJȠ ȓįȚȠ µİ ĮȣIJȩ IJȠȣ wloop.c.
To ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ ȣʌȠȜȠȖȓȗİȚ IJȠ ʌȜȒșȠȢ (n) IJȦȞ ȩȡȦȞ IJȠȣ ĮșȡȠȓıµĮIJȠȢ
S=1+1/2+1/3+...+1/n ʌȠȣ ȤȡİȚȐȗȠȞIJĮȚ ȫıIJİ IJȠ ȐșȡȠȚıµĮ ȞĮ ȖȓȞİȚ µİȖĮȜȪIJİȡȠ Įʌȩ țȐʌȠȚȠ ȩȡȚȠ: /* series2.c */ /* ȊʌȠȜȠȖȚıµȩȢ IJȠȣ ʌȜȒșȠȣȢ IJȦȞ ȩȡȦȞ IJȠȣ ĮșȡȠȓıµĮIJȠȢ 1+1/2+1/3+... */ /* ȑȦȢ ȩIJȠȣ ĮȣIJȩ ȖȓȞİȚ µİȖĮȜȪIJİȡȠ Įʌȩ țȐʌȠȚȠ įİįȠµȑȞȠ ȩȡȚȠ */ main() { unsigned long int n=0; /* IJȠ ʌȜȒșȠȢ IJȦȞ ȩȡȦȞ */ float limit,sum=0; /* IJȠ ȩȡȚȠ țĮȚ IJȠ ȐșȡȠȚıµĮ */
}
puts("ǻȫıİ IJȠ ȩȡȚȠ:"); scanf("%f",&limit); do { n++; sum+=1.0/n; } while (sum<=limit); printf("ȅȚ ĮȡȚșµȩȢ IJȦȞ ȩȡȦȞ İȓȞĮȚ %lu\n",n);
6.6 Ǿ ǼȃȉȅȁǾ ǼȆǹȃǹȁǾȌǾȈ for Ǿ ȖİȞȚțȒ µȠȡijȒ IJȘȢ İȞIJȠȜȒȢ for İȓȞĮȚ Ș ĮțȩȜȠȣșȘ:
for(ʌĮȡȐıIJĮıȘ1 ; ʌĮȡȐıIJĮıȘ2 ; ʌĮȡȐıIJĮıȘ3) İȞIJȠȜȒ ȈIJȘ ıȣȞȘșȑıIJİȡȘ ʌİȡȓʌIJȦıȘ, Ș ʌĮȡȐıIJĮıȘ1 țĮȚ ʌĮȡȐıIJĮıȘ3 İȓȞĮȚ ʌĮȡĮıIJȐıİȚȢ ĮʌȩįȠıȘȢ IJȚµȒȢ țĮȚ Ș ʌĮȡȐıIJĮıȘ2 İȓȞĮȚ ʌĮȡȐıIJĮıȘ ıȣıȤȑIJȚıȘȢ. Ǿ ʌĮȡȐıIJĮıȘ1 ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ȖȚĮ ȞĮ įȓȞİIJĮȚ ĮȡȤȚțȒ IJȚµȒ ıIJȘ µİIJĮȕȜȘIJȒ İȜȑȖȤȠȣ IJȠȣ ȕȡȩȤȠȣ. Ǿ ʌĮȡȐıIJĮıȘ2 , ȦȢ ıȣıȤİIJȚıIJȚțȒ ʌĮȡȐıIJĮıȘ, İȜȑȖȤİȚ IJȘ µİIJĮȕȜȘIJȒ İȜȑȖȤȠȣ IJȠȣ ȕȡȩȤȠȣ ıİ ıȤȑıȘ µİ µȓĮ IJȚµȒ, ȖȚĮ ȞĮ țĮșȠȡȓıİȚ IJȘ ıIJȚȖµȒ İȟȩįȠȣ Įʌȩ IJȠ ȕȡȩȤȠ. ǹȞ Ș ʌĮȡȐıIJĮıȘ2 İȓȞĮȚ ĮȜȘșȒȢ (µȘ-µȘįİȞȚțȒ) Ș İȞIJȠȜȒ İțIJİȜİȓIJĮȚ, įȚĮijȠȡİIJȚțȐ Ƞ
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
54
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ȕȡȩȤȠȢ IJİȡµĮIJȓȗİIJĮȚ. ȂİIJȐ IJȘȞ İțIJȑȜİıȘ IJȘȢ İȞIJȠȜȒȢ ĮʌȠIJȚµȐIJĮȚ Ș ʌĮȡȐıIJĮıȘ3 Ș ȠʌȠȓĮ țĮșȠȡȓȗİȚ IJȠȞ IJȡȩʌȠ µİIJĮȕȠȜȒȢ IJȘȢ µİIJĮȕȜȘIJȒȢ İȜȑȖȤȠȣ IJȠȣ ȕȡȩȤȠȣ (ȕȒµĮ), țȐșİ ijȠȡȐ ʌȠȣ İʌĮȞĮȜĮµȕȐȞİIJĮȚ Ƞ ȕȡȩȤȠȢ. ȈIJȘ ıȣȞȑȤİȚĮ İȜȑȖȤİIJĮȚ ʌȐȜȚ Ș ʌĮȡȐıIJĮıȘ2 țȚ ĮȞ İȓȞĮȚ ĮȜȘșȒȢ İțIJİȜİȓIJĮȚ Ș İȞIJȠȜȒ ț.Ƞ.ț., ȕȜȑʌİ ȈȤȒµĮ 6.5. ǼȓȞĮȚ ʌȡȠijĮȞȑȢ ð·Ò‹ÛÙ·ÛÁ 1 ȩIJȚ Ș İȞIJȠȜȒ µʌȠȡİȓ ȞĮ İȓȞĮȚ ȠʌȠȚĮįȒʌȠIJİ ĮʌȜȒ Ȓ ıȪȞșİIJȘ İȞIJȠȜȒ IJȘȢ C. Ǿ İȞIJȠȜȒ for İȓȞĮȚ ȚıȠįȪȞĮµȘ µİ IJȘȞ ĮțȩȜȠȣșȘ İȞIJȠȜȒ while:
ʌĮȡȐıIJĮıȘ1; while (ʌĮȡȐıIJĮıȘ2) { İȞIJȠȜȒ ʌĮȡȐıIJĮıȘ3; } Ǿ İʌȚȜȠȖȒ IJȘȢ İȞIJȠȜȒȢ while Ȓ for İȟĮȡIJȐIJĮȚ Įʌȩ IJȠȞ ʌȡȠȖȡĮµµĮIJȚıIJȒ. īȚĮ ȞĮ ȤȡȘıȚµȠʌȠȚȘșİȓ Ș İȞIJȠȜȒ for ʌȡȑʌİȚ ȞĮ ȖȞȦȡȓȗȠȣµİ İț IJȦȞ ʌȡȠIJȑȡȦȞ ʌȩıİȢ ijȠȡȑȢ șĮ İțIJİȜİıIJİȓ Ƞ ȕȡȩȤȠȢ. ȉȠ ȖȞȦıIJȩ µĮȢ ʌȡȩȖȡĮµµĮ ʌȠȣ IJȣʌȫȞİȚ IJȠȣȢ ĮȡȚșµȠȪȢ Įʌȩ IJȠ 0 ȑȦȢ IJȠ 9 țĮȚ IJȠ IJȡȑȤȠȞ ȐșȡȠȚıµĮ, ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ IJȘȞ İȞIJȠȜȒ for, ȖȓȞİIJĮȚ: /* forloop.c */ /* ǼțIJȪʌȦıȘ IJȦȞ ĮȡȚșµȫȞ Įʌȩ 0 ȦȢ 9 */ /* țĮȚ IJȠȣ IJȡȑȤȠȞIJȠȢ ĮșȡȠȓıµĮIJȠȢ */ main() { int count, total=0;
}
ð·Ò‹ÛÙ·ÛÁ 2
==0
!=0 ÂÌÙÔÎfi
ð·Ò‹ÛÙ·ÛÁ 3
ȈȤȒµĮ 6.5: H İȞIJȠȜȒ for
for(count=0,total=0; count<10; count++) printf("ȂİIJȡȘIJȒȢ=%d, ǹșȡȠȚıµĮ=%d\n",count,total+=count);
ȈIJȠ ʌȡȩȖȡĮµµĮ ʌȠȣ ĮțȠȜȠȣșİȓ ȖȓȞİIJĮȚ ȤȡȒıȘ IJȦȞ İȞIJȠȜȫȞ for țĮȚ while ȖȚĮ IJȘȞ İțIJȪʌȦıȘ ȩȜȦȞ IJȦȞ ʌȡȫIJȦȞ ĮȡȚșµȫȞ Įʌȩ IJȠ 1 ȑȦȢ țȐʌȠȚȠ įİįȠµȑȞȠ ȩȡȚȠ. DzȞĮȢ ĮȡȚșµȩȢ İȓȞĮȚ ʌȡȫIJȠȢ ȩIJĮȞ įİȞ ȑȤİȚ ȐȜȜȠȣȢ įȚĮȚȡȑIJİȢ İțIJȩȢ IJȠȣ İĮȣIJȠȪ IJȠȣ țĮȚ IJȘȢ µȠȞȐįĮȢ. Ǿ ȜȠȖȚțȒ IJȠȣ ʌĮȡĮțȐIJȦ ʌȡȠȖȡȐµµĮIJȠȢ İȓȞĮȚ Ș İȟȒȢ: ǼȜȑȖȤȠȣµİ ȑȞĮȞ-ȑȞĮȞ ȩȜȠȣȢ IJȠȣȢ ĮȡȚșµȠȪȢ Įʌȩ IJȠ 1 ȑȦȢ IJȠ ȩȡȚȠ țĮȚ ĮȞ țȐʌȠȚȠȢ ȕȡİșİȓ ȩIJȚ İȓȞĮȚ ʌȡȫIJȠȢ, IJȠȞ IJȣʌȫȞȠȣµİ. ȅ ȑȜİȖȤȠȢ ȖȚĮ IJȠȞ țĮșȑȞĮ ȖȓȞİIJĮȚ ȣʌȠșȑIJȠȞIJĮȢ țĮIJĮȡȤȐȢ ȩIJȚ Ƞ ĮȡȚșµȩȢ İȓȞĮȚ ʌȡȫIJȠȢ (prime=1) țĮȚ ıIJȘ ıȣȞȑȤİȚĮ İȡİȣȞȫȞIJĮȢ ȖȚĮ ʌȚșĮȞȠȪȢ įȚĮȚȡȑIJİȢ IJȠȣ ĮȡȚșµȠȪ İțIJȩȢ IJȘȢ µȠȞȐįĮȢ țĮȚ IJȠȣ ȓįȚȠȣ, ĮȞ ȕȡİșİȓ țȐʌȠȚȠȢ įȚĮȚȡȑIJȘȢ IJȩIJİ ĮȜȜȐȗȠȣµİ IJȘȞ ĮȡȤȚțȒ µĮȢ ȣʌȩșİıȘ (prime=0) țĮȚ Ƞ ĮȡȚșµȩȢ įİȞ IJȣʌȫȞİIJĮȚ. ǹȞ ȥȐȤȞȠȞIJĮȢ ȖȚĮ IJȠȣȢ ʌȚșĮȞȠȪȢ įȚĮȚȡȑIJİȢ IJȠȣ ĮȡȚșµȠȪ, ȟİțȚȞȫȞIJĮȢ Įʌȩ IJȠ 2 țĮȚ ĮȣȟȐȞoȞIJĮȢ țĮIJȐ 1, ijIJȐıȠȣµİ µȑȤȡȚ țĮȚ IJȘȞ IJİIJȡĮȖȦȞȚțȒ ȡȓȗĮ IJȠȣ ĮȡȚșµȠȪ țĮȚ įİȞ ȑȤȠȣµİ ȕȡİȚ țĮȞȑȞĮȞ įȚĮȚȡȑIJȘ, IJȩIJİ İȓȞĮȚ µȐIJĮȚȠ ȞĮ ıȣȞİȤȓıȠȣµİ IJȘȞ ȑȡİȣȞĮ ȖȚĮ ʌȚșĮȞȠȪȢ įȚĮȚȡȑIJİȢ µİȖĮȜȪIJİȡȠȣȢ Įʌȩ IJȘȞ IJİIJȡĮȖȦȞȚțȒ ȡȓȗĮ (ȖȚĮIJȓ ;).
ǼȞIJȠȜȑȢ ǼʌȚȜȠȖȒȢ țĮȚ ǼʌĮȞȐȜȘȥȘȢ
55
/* prime.c */ /* ǼȪȡİıȘ IJȦȞ ʌȡȫIJȦȞ ĮȡȚșµȫȞ Įʌȩ IJȠ 1 */ /* ȑȦȢ țȐʌȠȚȠ įİįȠµȑȞȠ ȩȡȚȠ */ #include <math.h> main() { int nominator,number,prime,limit; printf("\nǻȫıİ IJȠ ȩȡȚȠ: "); scanf("%d",&limit); for(number=1;number<=limit;number++) { nominator=1; prime=1; while((++nominator<=sqrt(number)) && prime) if(number%nominator==0) prime=0; if(prime) printf("%5d",number); }
} ȅʌȠȚĮįȒʌȠIJİ Įʌȩ IJȚȢ IJȡİȚȢ ʌĮȡĮıIJȐıİȚȢ IJȘȢ İȞIJȠȜȒȢ for µʌȠȡİȓ ȞĮ ʌĮȡĮȜİȓʌİIJĮȚ, ȩµȦȢ IJĮ İȜȜȘȞȚțȐ İȡȦIJȘµĮIJȚțȐ ʌȡȑʌİȚ ȞĮ ʌĮȡĮµȑȞȠȣȞ. ȉȘȞ ȑȜȜİȚȥȘ IJȘȢ ʌĮȡȐıIJĮıȘȢ Ƞ µİIJĮȖȜȦIJIJȚıIJȒȢ IJȘ șİȦȡİȓ ȦȢ ĮȜȘșȒ ʌĮȡȐıIJĮıȘ țȚ ȑIJıȚ µȓĮ įȠµȒ for IJȘȢ µȠȡijȒȢ:
for(ʌĮȡȐıIJĮıȘ1;
;ʌĮȡȐıIJĮıȘ3) İȞIJȠȜȒ
İȓȞĮȚ ȑȞĮȢ ĮIJȑȡµȦȞ ȕȡȩȤȠȢ ʌȠȣ įȚĮțȩʌIJİIJĮȚ µİ ȐȜȜĮ µȑıĮ, ȩʌȦȢ µȓĮ İȞIJȠȜȒ break. Ǿ İȞIJȠȜȒ ıIJȠ ȕȡȩȤȠ for µʌȠȡİȓ ȞĮ İȓȞĮȚ Ș țİȞȒ İȞIJȠȜȒ. Ȃİ IJȠȞ IJȡȩʌȠ ĮȣIJȩ µʌȠȡȠȪµİ ȞĮ įȘµȚȠȣȡȖȠȪµİ ȕȡȩȤȠȣȢ ȤȡȠȞȚțȒȢ țĮșȣıIJȑȡȘıȘȢ, ʌ.Ȥ.:
for(i=0;i<1000;i++); 6.6.1 ȅ ȉǼȁǼȈȉǾȈ comma ȈȣȤȞȐ ı'ȑȞĮ ȕȡȩȤȠ for ȖȓȞİIJĮȚ ȤȡȒıȘ įȪȠ Ȓ ʌİȡȚııȩIJİȡȦȞ µİIJĮȕȜȘIJȫȞ İȜȑȖȤȠȣ IJȠȣ ȕȡȩȤȠȣ, ȩʌȦȢ ʌ.Ȥ. ıIJȠ ʌĮȡĮțȐIJȦ IJµȒµĮ țȫįȚțĮ:
for(x=0,y=0; x+y<100; x++,y++) printf("%d",x+y); µİ IJȠ ȠʌȠȓȠ IJȣʌȫȞȠȞIJĮȚ ȠȚ ĮȡȚșµȠȓ Įʌȩ 0 ȑȦȢ 98 ıİ ȕȒµĮIJĮ IJȠȣ 2. ȆĮȡĮIJȘȡȠȪµİ ȩIJȚ ȤȡȘıȚµȠʌȠȚİȓIJĮȚ țȩµµĮ (,) ıIJȚȢ ĮȡȤȚțȑȢ IJȚµȑȢ țĮȚ ıIJĮ ȕȒµĮIJĮ. ȈIJȘȞ ʌȡĮȖµĮIJȚțȩIJȘIJĮ IJȠ țȩµµĮ İȓȞĮȚ IJİȜİıIJȒȢ IJȘȢ C (ȕȜȑʌİ ȆȓȞĮțĮ 4.5) țĮȚ ȜȑȖİIJĮȚ IJİȜİıIJȒȢ ıİȚȡȚĮțȒȢ ĮʌȠIJȓµȘıȘȢ µȚĮȢ țĮȚ ȤȡȘıȚµİȪİȚ ıIJȠ ȞĮ ȤȦȡȓȗȠȣµİ µȓĮ ȜȓıIJĮ Įʌȩ ȓįȚĮ ıIJȠȚȤİȓĮ ʌȠȣ ʌȡȩțİȚIJĮȚ ȞĮ ĮʌȠIJȚµȘșȠȪȞ µİ IJȘ ıİȚȡȐ Įʌȩ ĮȡȚıIJİȡȐ ʌȡȠȢ IJĮ įİȟȚȐ. ǵIJĮȞ Ƞ IJİȜİıIJȒȢ țȩµµĮ ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ıIJȘ įİȟȚȐ ʌȜİȣȡȐ µȓĮȢ ʌĮȡȐıIJĮıȘȢ ĮʌȩįȠıȘȢ IJȚµȒȢ, IJȩIJİ Ș IJȚµȒ ʌȠȣ ĮʌȠįȓįİIJĮȚ ıIJȠ ĮȡȚıIJİȡȩ µȑȜȠȢ (țĮȚ țĮIJȐ ıȣȞȑʌİȚĮ ıİ ȩȜȘ IJȘȞ ʌĮȡȐıIJĮıȘ) İȓȞĮȚ Ș IJȚµȒ IJȘȢ IJİȜİȣIJĮȓĮȢ ʌĮȡȐıIJĮıȘȢ IJȘȢ ȜȓıIJĮȢ IJȦȞ ʌĮȡĮıIJȐıİȦȞ ʌȠȣ ȤȦȡȓȗȠȞIJĮȚ µİ țȩµµĮ. īȚĮ ʌĮȡȐįİȚȖµĮ, ȩIJĮȞ İțIJİȜİıIJȠȪȞ ȠȚ:
y=10; x=(y-=5,100/y);
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
56
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
IJȠ x șĮ ȑȤİȚ IJȘȞ IJȚµȒ 20, İʌİȚįȒ Ș ĮȡȤȚțȒ IJȚµȒ 10 IJȠȣ y µİȚȫȞİIJĮȚ țĮIJȐ 5 țĮȚ µİIJȐ ĮȣIJȒ Ș IJȚµȒ įȚĮȚȡİȓ IJȠ 100, įȓȞȠȞIJĮȢ ĮʌȠIJȑȜİıµĮ 20.
6.7 ȆǹȇǹǻǼǿīȂǹȉǹ 1. ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ IJȘȞ IJȚµȒ İȞȩȢ ĮȡȚșµȠȪ țĮȚ ȞĮ ȕȡȓıțİȚ țĮȚ IJȣʌȫȞİȚ IJȘȞ ĮʌȩȜȣIJȘ IJȚµȒ ĮȣIJȠȪ. /* abs.c */ /* ȆȡȩȖȡĮµµĮ İȪȡİıȘȢ ĮʌȩȜȣIJȘȢ IJȚµȒȢ */ main() { float number, abs;
}
puts("ǹȡȚșµȩȢ: "); scanf("%f",&number); if(number<0) abs=-number; else abs=number; printf("Ǿ ĮʌȩȜȣIJȘ IJȚµȒ IJȠȣ %f İȓȞĮȚ %f",number,abs);
2. īȚĮ ȞĮ ȣʌȐȡȤİȚ IJȡȓȖȦȞȠ µİ ʌȜİȣȡȑȢ a, b, c ʌȡȑʌİȚ ȞĮ ȚıȤȪİȚ: a<b+c țĮȚ b<a+c țĮȚ c<a+b. īȡȐȥIJİ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ IJĮ a, b, c țĮȚ ȞĮ IJȣʌȫȞİȚ IJȠ ݵȕĮįȩȞ IJȠȣ IJȡȚȖȫȞȠȣ µİ ʌȜİȣȡȑȢ a, b, c ĮȞ ȣʌȐȡȤİȚ. ȉȠ ݵȕĮįȩȞ įȓȞİIJĮȚ Įʌȩ IJȠȞ ʌĮȡĮțȐIJȦ IJȪʌȠ (IJȪʌȠȢ IJȠȣ dzȡȦȞĮ):
E
s (s a)(s b)(s c)
ȩʌȠȣ
2s
a b c
/* tr_area.c */ /* ȊʌȠȜȠȖȚıµȩȢ ݵȕĮįȠȪ IJȡȚȖȫȞȠȣ µİ IJȠȞ IJȪʌȠ IJȠȣ HȡȦȞĮ */ # include <math.h> main() { float a,b,c,s,area;
}
puts("ǻȫıİ IJȚȢ ʌȜİȣȡȑȢ a b c IJȠȣ IJȡȚȖȫȞȠȣ: "); scanf("%f %f %f",&a,&b,&c); if(a<b+c && b<a+c && c<a+b) { s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("ǼµȕĮįȩȞ IJȡȚȖȫȞȠȣ: %f",area); } else puts("ǻİȞ ȣʌȐȡȤİȚ IJȑIJȠȚȠ IJȡȓȖȦȞȠ");
ǼȞIJȠȜȑȢ ǼʌȚȜȠȖȒȢ țĮȚ ǼʌĮȞȐȜȘȥȘȢ
57
3. īȡȐȥIJİ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ ȣʌȠȜȠȖȓȗİȚ IJȚȢ ȡȓȗİȢ IJȘȢ įİȣIJİȡȠȕȐșµȚĮȢ İȟȓıȦıȘȢ ax2+bx+c=0. ȉȠ ȜȠȖȚțȩ įȚȐȖȡĮµµĮ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ įȓȞİIJĮȚ ıIJȠ ȈȤȒµĮ 6.6. ȈȪµijȦȞĮ µİ ĮȣIJȩ, ȖȡȐijȠȣµİ IJȠ ʌȡȩȖȡĮµµĮ:
¡–´«
ƒÈ‹‚·Û abc
œ´… a==0
œ´…
’ðÔθ„ÈÛ d=b -4ac
d>=0
Õ¡…
‘˝ð˘Û "ƒÂÌ ıð‹Ò˜ÔıÌ ðÒ·„Ï·ÙÈÍ›Ú ÒflÊÂÚ"
Õ¡… œ´…
b==0
’ðÔθ„ÈÛ x1= -c/b
‘˝ð˘Û x1
’ðÔθ„ÈÛ x1,2=(-b±sqrt(d))/2a
Õ¡… œ´… c==0
‘˝ð˘Û "¡‰˝Ì·ÙÁ"
‘˝ð˘Û x1,x2
Õ¡…
‘˝ð˘Û "¡¸ÒÈÛÙÁ"
‘¢Àœ”
ȈȤȒµĮ 6.6: ȁȠȖȚțȩ įȚȐȖȡĮµµĮ ȜȪıȘȢ IJȘȢ įİȣIJİȡȠȕȐșµȚĮȢ İȟȓıȦıȘȢ
/* trionymo.c */ /* ȊʌȠȜȠȖȚıµȩȢ IJȦȞ ȡȚȗȫȞ įİȣIJİȡȠȕȐșµȚĮȢ İȟȓıȦıȘȢ */ # include <math.h> main() { float a,b,c,d,x1,x2; printf("ǻȫıİ IJĮ a b c :"); scanf("%f %f %f",&a,&b,&c); if (a==0) if (b==0) if (c==0) puts("Ǿ İȟȓıȦıȘ İȓȞĮȚ ĮȩȡȚıIJȘ"); else puts("Ǿ İȟȓıȦıȘ İȓȞĮȚ ĮįȪȞĮIJȘ"); else { x1=-c/b;
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
58
}
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
printf("ȂȓĮ ȡȓȗĮ: x1=%0.3f",x1); } else { d=b*b-4*a*c; if (d>=0) { x1=(-b+sqrt(d))/(2*a); x2=(-b-sqrt(d))/(2*a); printf("ȇȓȗİȢ: x1=%0.3f , x2=%0.3f",x1,x2); } else puts("ǻİȞ ȣʌȐȡȤȠȣȞ ʌȡĮȖµĮIJȚțȑȢ ȡȓȗİȢ"); }
4. ǹȢ ȣʌȠșȑıȠȣµİ ȩIJȚ ȠȚ µȒȞİȢ IJȠȣ ȑIJȠȣȢ, ǿĮȞȠȣȐȡȚȠȢ ȑȦȢ ǻİțȑµȕȡȚȠȢ, ĮȞIJȚıIJȠȚȤȠȪȞ ıIJȠȣȢ ĮȡȚșµȠȪȢ 1 ȑȦȢ 12. īȡȐȥIJİ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ ȑȞĮȞ ĮțȑȡĮȚȠ ĮȡȚșµȩ țĮȚ ȞĮ IJȣʌȫȞİȚ IJȠ ȩȞȠµĮ IJȘȢ İʌȠȤȒȢ ıIJȘȞ ȠʌȠȓĮ ĮȞȒțİȚ Ƞ µȒȞĮȢ, ĮȞ ȣʌȐȡȤİȚ. /* month.c */ /* ǼțIJȪʌȦıȘ İʌȠȤȒȢ ıIJȘȞ ȠʌȠȓĮ ĮȞȒțİȚ țȐʌȠȚȠȢ µȒȞĮȢ */ main() { int i;
}
printf("\nǻȫıİ µȒȞĮ (ĮțȑȡĮȚȠ Įʌȩ 1 ȑȦȢ 12): "); scanf("%d",&i); switch (i) { case 1 : case 2 : case 12: puts("ȋİȚµȫȞĮȢ"); case 3 : case 4 : case 5 : puts("DZȞȠȚȟȘ"); case 6 : case 7 : case 8 : puts("ȀĮȜȠțĮȓȡȚ"); case 9 : case 10: case 11: puts("ĭșȚȞȩʌȦȡȠ"); default: puts("ǹțȣȡȠȢ ĮȡȚșµȩȢ"); }
break; break; break; break;
5. ȃĮ ȖȡĮijİȓ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ µİIJȡȐ IJȚȢ ȜȑȟİȚȢ, IJȠȣȢ ȤĮȡĮțIJȒȡİȢ țĮȚ IJĮ ȥȘijȓĮ µȓĮȢ ijȡȐıȘȢ ʌȠȣ șĮ įȓȞİȚ Ƞ ȤȡȒıIJȘȢ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ. /* count.c */ /* ǹʌĮȡȓșµȘıȘ ȤĮȡĮțIJȒȡȦȞ, ȥȘijȓȦȞ țĮȚ ȜȑȟİȦȞ µȚĮȢ ʌȡȩIJĮıȘȢ */ main() { char ch; int character=0,number=0,word=0; puts("īȡȐȥİ µȚĮ ʌȡȩIJĮıȘ (ȖȚĮ IJȑȜȠȢ įȫıİ ENTER):"); while ((ch=getche()) != '\r') { character++ ; if(ch>='0' && ch<='9') number++; if(ch==' ') word++; } printf("\nȅ ĮȡȚșµȩȢ IJȦȞ ȤĮȡĮțIJȒȡȦȞ İȓȞĮȚ %d\n",character); printf("\nȅ ĮȡȚșµȩȢ IJȦȞ ȥȘijȓȦȞ İȓȞĮȚ %d\n",number);
ǼȞIJȠȜȑȢ ǼʌȚȜȠȖȒȢ țĮȚ ǼʌĮȞȐȜȘȥȘȢ
}
59
printf("\nȅ ĮȡȚșµȩȢ IJȦȞ ȜȑȟİȦȞ İȓȞĮȚ %d\n",word+1);
6. ȂȓĮ µʌȐȜĮ ĮijȒȞİIJĮȚ ȞĮ ʌȑıİȚ Įʌȩ ȑȞĮ įİįȠµȑȞȠ ȪȥȠȢ ʌȐȞȦ Įʌȩ IJȠ ȠȡȚȗȩȞIJȚȠ İʌȓʌİįȠ țĮȚ ıİ țȐșİ ĮȞĮʌȒįȘıȘ ijIJȐȞİȚ ıIJȠ 75% IJȠȣ ȪȥȠȣȢ ʌȠȣ İȓȤİ ʌȡȠȘȖȠȣµȑȞȦȢ. īȡȐȥIJİ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ IJȠ ĮȡȤȚțȩ ȪȥȠȢ, ıİ µȑIJȡĮ, țĮȚ ȞĮ ȣʌȠȜȠȖȓȗİȚ ʌȩıİȢ ĮȞĮʌȘįȒıİȚȢ șĮ țȐȞİȚ Ș µʌȐȜĮ µȑȤȡȚ ȞĮ ıIJĮµĮIJȒıİȚ. ĬİȦȡȒıIJİ ȩIJȚ ȠȚ ĮȞĮʌȘįȒıİȚȢ ıIJĮµĮIJȐȞİ ȩIJĮȞ IJȠ ȪȥȠȢ IJȠȣȢ ȖȓȞİȚ µȚțȡȩIJİȡȠ IJȦȞ 10mm. /* ball.c */ /* ȊʌȠȜȠȖȚıµȩȢ ĮȞĮʌȘįȒıİȦȞ µʌȐȜĮȢ */ main() { float h; int n=0;
}
puts("ǹȡȤȚțȩ ȪȥȠȢ: "); scanf("%f",&h); h*=0.75; while (h>=0.01) { n++; h*=0.75; } printf("ȉȠ ʌȜȒșȠȢ IJȦȞ ĮȞĮʌȘįȒıİȦȞ İȓȞĮȚ: %d\n",n);
7. ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ IJȠ ȠʌȠȓȠ ȞĮ ȣʌȠȜȠȖȓȗİȚ IJȠ ʌȜȒșȠȢ IJȦȞ ȩȡȦȞ IJȠȣ ĮșȡȠȓıµĮIJȠȢ:
S
1
2
3 ...
ʌȠȣ ĮʌĮȚIJȠȪȞIJĮȚ, ȫıIJİ IJȠ ȐșȡȠȚıµĮ ȞĮ ȖȓȞİȚ µİȖĮȜȪIJİȡȠ Įʌȩ țȐʌȠȚȠ ȩȡȚȠ IJȠ ȠʌȠȓȠ șĮ įȓȞİIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ. /* series3.c */ /* ȊʌȠȜȠȖȚıµȩȢ ʌȜȒșȠȣȢ ȩȡȦȞ ĮșȡȠȓıµĮIJȠȢ */ # include <math.h> main() { unsigned long int n=0; float limit,sum=0;
}
puts("ǻȫıİ IJȠ ȩȡȚȠ:"); scanf("%f",&limit); do { n++; sum+=sqrt(n); } while (sum<=limit); printf("ȅȚ ĮȡȚșµȩȢ IJȦȞ ȩȡȦȞ İȓȞĮȚ %lu\n",n);
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
60
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
6.8 ǹȈȀǾȈǼǿȈ 1.
īȡȐȥIJİ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ șĮ įȑȤİIJĮȚ ȑȞĮȞ ĮțȑȡĮȚȠ įİțĮįȚțȩ ĮȡȚșµȩ țĮȚ șĮ ȑȤİȚ IJȘ įȣȞĮIJȩIJȘIJĮ, µȑıĮ Įʌȩ țȐʌȠȚȠ menu, ȞĮ µİIJĮIJȡȑʌİȚ ĮȣIJȩȞ ıIJȠȞ ĮȞIJȓıIJȠȚȤȠ ȠțIJĮįȚțȩ Ȓ įİțĮİȟĮįȚțȩ ĮțȑȡĮȚȠ.
2.
ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ IJȘȞ IJȚµȒ İȞȩȢ ĮțİȡĮȓȠȣ ĮȡȚșµȠȪ țĮȚ ȞĮ İȜȑȖȤİȚ ĮȞ ĮȣIJȩȢ İȓȞĮȚ ʌȡȫIJȠȢ.
3.
ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ ȑȞĮ ıȪȞȠȜȠ ĮȡȚșµȫȞ țĮȚ ȞĮ IJȣʌȫȞİȚ IJȘ µȑıȘ ĮȡȚșµȘIJȚțȒ IJȚµȒ IJȠȣȢ, IJȠ µȚțȡȩIJİȡȠ țĮȚ IJȠ µİȖĮȜȪIJİȡȠ Įʌ'ĮȣIJȠȪȢ. ȉȠ IJȑȜȠȢ IJȠȣ ıȣȞȩȜȠȣ ȞĮ įȘȜȫȞİIJĮȚ µİ IJȠȞ ĮȡȚșµȩ 0.
4.
īȡȐȥIJİ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ ȣʌȠȜȠȖȓȗİȚ țĮȚ İțIJȣʌȫȞİȚ IJȘȞ IJȚµȒ IJȠȣ ʌ (3.14...) ȖȚĮ țĮșȑȞĮȞ Įʌȩ IJȠȣȢ IJȪʌȠȣȢ ʌȠȣ įȓȞȠȞIJĮȚ ʌĮȡĮțȐIJȦ, ʌȡȠıșȑIJȠȞIJĮȢ (Ȓ ʌȠȜ/ȐȗȠȞIJĮȢ) IJȠȣȢ ȩȡȠȣȢ ʌȠȣ İȓȞĮȚ µİȖĮȜȪIJİȡȠȚ IJȠȣ 10-6. Į) ʌ4/96 = 1 + 1/34 + 1/54 + 1/74 +... ȕ) ʌ2/6 = 1 + 1/22 + 1/32 + 1/42 +... Ȗ) ʌ/4
5.
= 1 - 1/3
+ 1/5
- 1/7
+ 1/9 -...
īȡȐȥIJİ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ ȣʌȠȜȠȖȓȗİȚ țĮȚ IJȣʌȫȞİȚ IJȚȢ IJȚµȑȢ IJȦȞ ʌĮȡĮțȐIJȦ ʌĮȡĮıIJȐıİȦȞ ȜĮµȕȐȞȠȞIJĮȢ ȣʌȩȥȘ ȩȡȠȣȢ ʌȠȣ İȓȞĮȚ µİȖĮȜȪIJİȡȠȚ IJȠȣ 10-6. Į) ex
= 1 + x /1! + x2/2! + x2/3! +... ȕ) sin(x) = x - x3/3! + x5/5! - x7/7! +... Ȗ) cos(x) = 1 - x2/2! + x4/4! - x6/6! +... ȈIJȚȢ IJȡȚȖȦȞȠµİIJȡȚțȑȢ ıȣȞĮȡIJȒıİȚȢ Ș ȖȦȞȓĮ ȞĮ įȓȞİIJĮȚ ıİ µȠȓȡİȢ țĮȚ țĮIJȩʌȚȞ ȞĮ µİIJĮIJȡȑʌİIJĮȚ ıİ ĮțIJȓȞȚĮ ʌȡȚȞ IJȘȞ İijĮȡµȠȖȒ IJȦȞ IJȪʌȦȞ. 6.
ǻȓȞȠȞIJĮȚ įȚĮįȠȤȚțȐ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ IJĮ ȕȐȡȘ µİȡȚțȫȞ țȚȕȦIJȓȦȞ (ĮʌȡȠıįȚȩȡȚıIJȠ IJȠ ʌȜȒșȠȢ IJȠȣȢ) µİ IJȠ IJİȜİȣIJĮȓȠ țȚȕȫIJȚȠ ȞĮ İȓȞĮȚ ȐįİȚȠ (ȕȐȡȠȢ µȘįȑȞ). ǽȘIJİȓIJĮȚ ȞĮ µİIJȡȘșİȓ: Į) ȉȠ ʌȜȒșȠȢ IJȦȞ țȚȕȦIJȓȦȞ ʌȠȣ ȑȤȠȣȞ ȕȐȡȠȢ µİȖĮȜȪIJİȡȠ IJȦȞ 100 Nt ȕ) ȉȠ ʌȜȒșȠȢ IJȦȞ țȚȕȦIJȓȦȞ ʌȠȣ ȑȤȠȣȞ ȕȐȡȠȢ µȚțȡȩIJİȡȠ Ȓ ȓıȠ IJȦȞ 100 Nt țĮȚ µİȖĮȜȪIJİȡȠ IJȦȞ 50 Nt țĮȚ Ȗ) ȉȠ ʌȜȒșȠȢ IJȦȞ țȚȕȦIJȓȦȞ ʌȠȣ ȑȤȠȣȞ ȕȐȡȠȢ µȚțȡȩIJİȡȠ Ȓ ȓıȠ IJȦȞ 50 Nt.
7.
ǻȓȞȠȞIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ įȪȠ ȤĮȡĮțIJȒȡİȢ. ǽȘIJİȓIJĮȚ ȞĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ IJȣʌȫȞİȚ ĮȣIJȠȪȢ IJȠȣȢ ȤĮȡĮțIJȒȡİȢ țĮȚ ȩȜȠȣȢ IJȠȣȢ İȞįȚȐµİıȠȣȢ.
8.
ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ IJȣʌȫȞİȚ Į) ȉȠȣȢ ȤĮȡĮțIJȒȡİȢ ʌȠȣ ĮȞIJȚıIJȠȚȤȠȪȞ ıIJȠȣȢ țȦįȚțȠȪȢ ASCII Įʌȩ 65 ȑȦȢ 90. ȕ) ȉȠȣȢ țȦįȚțȠȪȢ ASCII ʌȠȣ ĮȞIJȚıIJȠȚȤȠȪȞ ıIJȠȣȢ ʌİȗȠȪȢ ȜĮIJȚȞȚțȠȪȢ ȤĮȡĮțIJȒȡİȢ.
9.
īȡȐȥIJİ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ ȣʌȠȜȠȖȓȗİȚ țĮȚ IJȣʌȫȞİȚ ıIJȠ IJȑȜȠȢ țȐșİ ȑIJȠȣȢ IJȠȞ IJȩțȠ İȞȩȢ ȖȞȦıIJȠȪ țİijĮȜĮȓȠȣ ȖȚĮ ȑȞĮȞ ȠȡȚıµȑȞȠ ĮȡȚșµȩ İIJȫȞ țĮȚ µİ ȖȞȦıIJȩ İʌȚIJȩțȚȠ.
10. īȡȐȥIJİ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ ʌĮȡȐȖİȚ ȑȞĮȞ ʌȓȞĮțĮ µİIJĮIJȡȠʌȒȢ șİȡµȠțȡĮıȚȫȞ Įʌȩ ȕĮșµȠȪȢ Celsius ıİ ȕĮșµȠȪȢ Fahrenheit ıIJȘȞ ʌİȡȚȠȤȒ Įʌȩ -40° C ȑȦȢ +40° C. ȅ IJȪʌȠȢ µİIJĮIJȡȠʌȒȢ įȓȞİIJĮȚ ıIJȘȞ DZıțȘıȘ 8 IJȠȣ ȀİijĮȜĮȓȠȣ 4.
ǼȞIJȠȜȑȢ ǼʌȚȜȠȖȒȢ țĮȚ ǼʌĮȞȐȜȘȥȘȢ
61
11. ȃĮ ȖȡĮijȠȪȞ ʌȡȠȖȡȐµµĮIJĮ ʌȠȣ ȞĮ IJȣʌȫȞȠȣȞ țĮșȑȞĮ Įʌȩ IJĮ ʌĮȡĮțȐIJȦ: 1 12 123 1234 12345
1 23 345 4567 56789
1 13 135 1357 13579
12. ȃĮ ȖȡĮijȠȪȞ ʌȡȠȖȡȐµµĮIJĮ ʌȠȣ ȞĮ IJȣʌȫȞȠȣȞ țĮșȑȞĮ Įʌȩ IJĮ ʌĮȡĮțȐIJȦ: * ** *** **** *****
***** **** *** ** *
* ** *** **** *****
***** **** *** ** *
* ** *** **** *** ** *
* *** ***** ******* ***** *** *
******* ***** *** * *** ***** *******
************* ***** ***** *** *** * * *** *** ***** ***** *************
13. īȡȐȥIJİ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ ȣʌȠȜȠȖȓȗİȚ IJȘȞ IJİIJȡĮȖȦȞȚțȒ ȡȓȗĮ (x) İȞȩȢ ĮȡȚșµȠȪ (a) ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ IJȠȞ İʌĮȞĮȜȘʌIJȚțȩ ĮȜȖȩȡȚșµȠ IJȠȣ Newton:
a xi xi 2
xi 1
µİ x0 IJȣȤĮȓȠ ʌ.Ȥ.:
x0
a
2
µİ ĮțȡȓȕİȚĮ 6 țȜĮıµĮIJȚțȫȞ ȥȘijȓȦȞ. 14. ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ ȣʌȠȜȠȖȓȗİȚ țĮȚ IJȣʌȫȞİȚ IJĮ ʌȡȫIJĮ 20 µİȡȚțȐ ĮșȡȠȓıµĮIJĮ IJȠȣ İʌȩµİȞȠȣ ıȣȞİȤȠȪȢ țȜȐıµĮIJȠȢ:
SK
1
1
1
1 1
1 1
1 ...
ʌĮȡĮIJȘȡȫȞIJĮȢ ȩIJȚ: S1=1 țĮȚ SK+1=1+1/SK 15. īȡȐȥIJİ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ ȣʌȠȜȠȖȓȗİȚ IJȠȣȢ N (įİįȠµȑȞȠ) ʌȡȫIJȠȣȢ ȩȡȠȣȢ IJȘȢ ĮțȠȜȠȣșȓĮȢ Fibonacci. Ǿ ĮțȠȜȠȣșȓĮ ȠȡȓȗİIJĮȚ ȦȢ İȟȒȢ: țĮȚ F1 = 1 , F 2 = 1 FN = FN-1 + FN-2 ȖȚĮ ȃ>2
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
62
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
16. īȡȐȥIJİ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ ȣʌȠȜȠȖȓȗİȚ IJȠȣȢ ıȣȞįȣĮıµȠȪȢ țĮȚ IJȚȢ įȚĮIJȐȟİȚȢ IJȦȞ Ȃ ĮȞȐ ȃ. ȆȡȑʌİȚ ȞĮ ȚıȤȪİȚ: Ȃtȃ, Ȃ>0, ȃ>0. ȈȣȞįȣĮıµȠȓ
§M·
: ¨¨ ¸¸ N
M! N!(M N)!
: PM,N
M(M 1)...(M N 1)
© ¹
ǻȚĮIJȐȟİȚȢ
63
ȀǼĭǹȁǹǿȅ 7
ȈȊȃǹȇȉǾȈǼǿȈ Ǿ ȖȜȫııĮ C ȕĮıȓȗİIJĮȚ ıIJȘȞ ĮȡȤȒ IJȦȞ įȠµȚțȫȞ IJµȘµȐIJȦȞ (building blocks). ȉĮ įȠµȚțȐ IJµȒµĮIJĮ țĮȜȠȪȞIJĮȚ ıȣȞĮȡIJȒıİȚȢ (functions). ȂȓĮ ıȣȞȐȡIJȘıȘ İȓȞĮȚ ȑȞĮ IJµȒµĮ țȫįȚțĮ, ʌȠȣ İțIJİȜİȓ țȐʌȠȚȠ ıȣȖțİțȡȚµȑȞȠ ȑȡȖȠ. ȋȡȘıȚµȠʌȠȚȫȞIJĮȢ ıȣȞĮȡIJȒıİȚȢ, µʌȠȡȠȪµİ ȞĮ ȤȦȡȓıȠȣµİ IJȚȢ İțIJİIJĮµȑȞİȢ įȚĮįȚțĮıȓİȢ ʌȡȠȖȡĮµµĮIJȚıµȠȪ ıİ µȚțȡȩIJİȡİȢ țĮȚ ĮȣIJȩȞȠµİȢ. ǹȣIJȩ ȑȤİȚ ȦȢ ĮʌȠIJȑȜİıµĮ, ȑȞĮ µİȖȐȜȠ țĮȚ ıȪȞșİIJȠ ʌȡȩȕȜȘµĮ, IJȠȣ ȠʌȠȓȠȣ Ș ȜȪıȘ İȓȞĮȚ įȪıțȠȜȘ, ȞĮ įȚĮȚȡİȓIJĮȚ ıİ µȚțȡȩIJİȡĮ ȣʌȠʌȡȠȕȜȒµĮIJĮ IJĮ ȠʌȠȓĮ İȓȞĮȚ İȪțȠȜȠ ȞĮ İʌȚȜȣșȠȪȞ. Ȃİ IJȠȞ IJȡȩʌȠ ĮȣIJȩ țĮIJĮijȑȡȞȠȣµİ ıİ țȐșİ įİįȠµȑȞȘ ȤȡȠȞȚțȒ ıIJȚȖµȒ ȞĮ µȘȞ ĮıȤȠȜȠȪµĮıIJİ µİ ȩȜȠ IJȠ ʌȡȩȕȜȘµĮ, ĮȜȜȐ µİ țȐʌȠȚȠ IJµȒµĮ IJȠȣ IJȠ ȠʌȠȓȠ İȓȞĮȚ ȕȑȕĮȚĮ ĮʌȜȠȪıIJİȡȠ (IJİȤȞȚțȒ "įȚĮȓȡİȚ țĮȚ ȕĮıȓȜİȣİ" - divide and conquer). īȚĮ IJȘ ȜȪıȘ IJȠȣ țȐșİ ȣʌȠʌȡȠȕȜȒµĮIJȠȢ ȣȜȠʌȠȚȠȪµİ µȓĮ ıȣȞȐȡIJȘıȘ țĮȚ IJȑȜȠȢ ıȣȞșȑIJȠȞIJĮȢ ȩȜİȢ ĮȣIJȑȢ IJȚȢ ıȣȞĮȡIJȒıİȚȢ ȣȜȠʌȠȚȠȪµİ IJȠ ʌȡȩȖȡĮµµĮ ʌȠȣ İʌȚȜȪİȚ IJȠ ĮȡȤȚțȩ ʌȡȩȕȜȘµĮ. ǼʌȓıȘȢ ȤȡȘıȚµȠʌȠȚȠȪµİ IJȚȢ ıȣȞĮȡIJȒıİȚȢ ȩIJĮȞ șȑȜȠȣµİ ȞĮ ȖȡȐȥȠȣµİ µȩȞȠ µȓĮ ijȠȡȐ, ȑȞĮ țȠµµȐIJȚ țȫįȚțĮ ʌȡȠȖȡȐµµĮIJȠȢ ʌȠȣ İʌĮȞĮȜĮµȕȐȞİIJĮȚ ıȣȤȞȐ (ȖȚ'ĮȣIJȩ ȜȑȖȠȞIJĮȚ țĮȚ ȡȠȣIJȓȞİȢ - routines). DzȞĮ ʌȡȩȖȡĮµµĮ ıİ C İȓȞĮȚ µȓĮ ıȣȜȜȠȖȒ Įʌȩ ıȣȞĮȡIJȒıİȚȢ. ǻİȞ ȣʌȐȡȤİȚ ʌİȡȚȠȡȚıµȩȢ ıIJȠȞ ĮȡȚșµȩ IJȦȞ ıȣȞĮȡIJȒıİȦȞ ʌȠȣ µʌȠȡȠȪȞ ȞĮ ȣʌȐȡȤȠȣȞ ı'ȑȞĮ ʌȡȩȖȡĮµµĮ, ȠȪIJİ țĮȚ ıIJȘ ıİȚȡȐ µİ IJȘȞ ȠʌȠȓĮ ĮȣIJȑȢ ȕȡȓıțȠȞIJĮȚ. ȅ µȩȞȠȢ ʌİȡȚȠȡȚıµȩȢ İȓȞĮȚ ȩIJȚ ʌȡȑʌİȚ ȞĮ ȣʌȐȡȤİȚ µȓĮ țĮȚ µȩȞȠ µȓĮ ıȣȞȐȡIJȘıȘ µİ ȩȞȠµĮ main(), Ș ȠʌȠȓĮ İȓȞĮȚ țĮȚ Ș ʌȡȫIJȘ ıȣȞȐȡIJȘıȘ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ ʌȠȣ İțIJİȜİȓIJĮȚ, ȠʌȠȣįȒʌȠIJİ țȚ ĮȞ ȕȡȓıțİIJĮȚ µȑıĮ ıIJȠ ʌȡȩȖȡĮµµĮ. ǹȣIJȒ µİ IJȘ ıİȚȡȐ IJȘȢ µʌȠȡİȓ ȞĮ țĮȜİȓ ȐȜȜİȢ ıȣȞĮȡIJȒıİȚȢ, ijȣıȚțȐ țĮȚ ȠȚ ȐȜȜİȢ ıȣȞĮȡIJȒıİȚȢ ȑȤȠȣȞ įȚțĮȓȦµĮ ȞĮ țĮȜȠȪȞ țȚ ĮȣIJȑȢ ıȣȞĮȡIJȒıİȚȢ µİ IJȘ ıİȚȡȐ IJȠȣȢ. ǵIJĮȞ µȓĮ ıȣȞȐȡIJȘıȘ (țĮȜȠȪıĮ) țĮȜİȓ țȐʌȠȚĮ ȐȜȜȘ (țĮȜȠȪµİȞȘ), Ƞ ȑȜİȖȤȠȢ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ µİIJĮijȑȡİIJĮȚ ıIJȘȞ ʌȡȫIJȘ İȞIJȠȜȒ IJȘȢ țĮȜȠȪµİȞȘȢ ıȣȞȐȡIJȘıȘȢ, ȩIJĮȞ IJİȜİȚȫıİȚ Ș İțIJȑȜİıȘ IJȘȢ țĮȜȠȪµİȞȘȢ ıȣȞȐȡIJȘıȘȢ IJȩIJİ Ƞ ȑȜİȖȤȠȢ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ µİIJĮijȑȡİIJĮȚ ıIJȘȞ ĮµȑıȦȢ İʌȩµİȞȘ, Įʌȩ IJȘȞ țȜȒıȘ IJȘȢ ıȣȞȐȡIJȘıȘȢ, İȞIJȠȜȒ IJȘȢ țĮȜȠȪıĮȢ ıȣȞȐȡIJȘıȘȢ, (ȈȤȒµĮ 7.1). f1() main() { İȞIJȠȜȑȢ
{
f1();
}
}
İȞIJȠȜȑȢ ...
İȞIJȠȜȒ ...
ȈȤȒµĮ 7.1: ȂİIJĮijȠȡȐ IJȠȣ İȜȑȖȤȠȣ țĮIJȐ IJȘȞ țȜȒıȘ ıȣȞȐȡIJȘıȘȢ
64
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
7.1 ȅȇǿȈȂȅȈ ȈȊȃǹȇȉǾȈǾȈ Ǿ ȖȜȫııĮ C ʌȡȠıijȑȡİȚ ȑIJȠȚµİȢ țȐʌȠȚİȢ ıȣȞĮȡIJȒıİȚȢ (µĮșȘµĮIJȚțȑȢ, ıȣıIJȒµĮIJȠȢ, ĮȜijĮȡȚșµȘIJȚțȫȞ ț.Ȝ.ʌ.) ȠȚ ȠʌȠȓİȢ ȕȡȓıțȠȞIJĮȚ ıIJȚȢ įȚȐijȠȡİȢ ȕȚȕȜȚȠșȒțİȢ IJȘȢ ȖȜȫııĮȢ țĮȚ µʌȠȡȠȪµİ ȞĮ IJȚȢ ȤȡȘıȚµȠʌȠȚȒıȠȣµİ. ȂȑȤȡȚ IJȫȡĮ ȑȤȠȣµİ ȤȡȘıȚµȠʌȠȚȒıİȚ µȩȞȠ ıȣȞĮȡIJȒıİȚȢ ıĮȞ IJȚȢ printf(), scanf(), getche(), IJȚȢ ȠʌȠȓİȢ ȕȡȒțĮµİ ȑIJȠȚµİȢ.ȉȫȡĮ ȑijIJĮıİ Ș ıIJȚȖµȒ ȞĮ ȖȡȐȥȠȣµİ IJȚȢ įȚțȑȢ µĮȢ ıȣȞĮȡIJȒıİȚȢ. Ǿ ȖİȞȚțȒ µȠȡijȒ ȠȡȚıµȠȪ µȓĮȢ ıȣȞȐȡIJȘıȘȢ İȓȞĮȚ:
İʌȚıIJȡİijȩµİȞȠȢ_IJȪʌȠȢ ĮȞĮȖȞ_ıȣȞȐȡIJ(ȜȓıIJĮ_įȘȜȫı_IJȣʌȚțȫȞ_ʌĮȡĮµ) { įȘȜȫıİȚȢ_IJȠʌȚțȫȞ_µİIJĮȕȜȘIJȫȞ İȞIJȠȜȑȢ } ǵʌȠȣ İʌȚıIJȡİijȩµİȞȠȢ_IJȪʌȠȢ İȓȞĮȚ Ƞ IJȪʌȠȢ IJȘȢ IJȚµȒȢ ʌȠȣ İʌȚıIJȡȑijİȚ Ș ıȣȞȐȡIJȘıȘ. ȂʌȠȡİȓ ȩµȦȢ Ș ıȣȞȐȡIJȘıȘ ȞĮ µȘȞ İʌȚıIJȡȑijİȚ țĮµȓĮ IJȚµȒ, ĮʌȜȫȢ ȞĮ İʌȚIJİȜİȓ µȓĮ țĮșȠȡȚıµȑȞȘ İȡȖĮıȓĮ (ȩʌȦȢ ȠȚ įȚĮįȚțĮıȓİȢ-procedures ıIJȘȞ Pascal), IJȩIJİ ĮȣIJȒ Ș ıȣȞȐȡIJȘıȘ șĮ ȑȤİȚ IJȪʌȠ void. ǹȞ Ƞ İʌȚıIJȡİijȩµİȞȠȢ IJȪʌȠȢ µȓĮȢ ıȣȞȐȡIJȘıȘȢ İȓȞĮȚ ĮțȑȡĮȚȠȢ Ȓ void, IJȩIJİ µʌȠȡȠȪµİ ȞĮ IJȠȞ ʌĮȡĮȜİȓȥȠȣµİ Įʌȩ IJȠȞ ȠȡȚıµȩ IJȘȢ ıȣȞȐȡIJȘıȘȢ. Ǿ ȜȓıIJĮ_įȘȜȫıİȦȞ_IJȣʌȚțȫȞ_ʌĮȡĮµȑIJȡȦȞ İȓȞĮȚ µȓĮ ȜȓıIJĮ ʌȠȣ țĮșȠȡȓȗİȚ IJȠȣȢ IJȪʌȠȣȢ țĮȚ IJĮ ĮȞĮȖȞȦȡȚıIJȚțȐ IJȦȞ ʌĮȡĮµȑIJȡȦȞ ʌȠȣ ȤȡȘıȚµȠʌȠȚȠȪȞIJĮȚ ȖȚĮ IJȠȞ ȠȡȚıµȩ IJȘȢ ıȣȞȐȡIJȘıȘȢ (ȜȑȖȠȞIJĮȚ IJȣʌȚțȑȢ ʌĮȡȐµİIJȡȠȚ). ȀȐșİ įȒȜȦıȘ ȤȦȡȓȗİIJĮȚ Įʌȩ IJȘȞ İʌȩµİȞȘ µİ țȩµµĮ. ǹʌȩ ĮȣIJȒ IJȘ ȜȓıIJĮ ʌĮȡĮȜĮµȕȐȞȠȞIJĮȚ ȠȚ IJȚµȑȢ IJȦȞ ʌȡĮȖµĮIJȚțȫȞ ʌĮȡĮµȑIJȡȦȞ (ȜȑȖȠȞIJĮȚ țĮȚ ȠȡȓıµĮIJĮ) țĮIJȐ IJȘȞ țȜȒıȘ IJȘȢ ıȣȞȐȡIJȘıȘȢ. ǼʌİȚįȒ µȓĮ ıȣȞȐȡIJȘıȘ µʌȠȡİȓ ȞĮ µȘ įȑȤİIJĮȚ ʌĮȡĮµȑIJȡȠȣȢ, Ș ȜȓıIJĮ µʌȠȡİȓ ȞĮ İȓȞĮȚ țİȞȒ, ȠȚ ʌĮȡİȞșȑıİȚȢ ȩµȦȢ İȓȞĮȚ ĮʌĮȡĮȓIJȘIJİȢ. ȈIJȠ IJµȒµĮ įȘȜȫıİȚȢ_IJȠʌȚțȫȞ_µİIJĮȕȜȘIJȫȞ įȘȜȫȞȠȞIJĮȚ ȩȜİȢ ȠȚ µİIJĮȕȜȘIJȑȢ ʌȠȣ ȤȡİȚȐȗȠȞIJĮȚ ȖȚĮ ȞĮ ȣȜȠʌȠȚȘșİȓ Ș ıȣȞȐȡIJȘıȘ (İțIJȩȢ IJȦȞ IJȣʌȚțȫȞ ʌĮȡĮµȑIJȡȦȞ), ĮȣIJȑȢ ȠȚ µİIJĮȕȜȘIJȑȢ ȑȤȠȣȞ IJȠʌȚțȒ ݵȕȑȜİȚĮ. ǻȘȜĮįȒ İȓȞĮȚ ȖȞȦıIJȑȢ µȩȞȠ µȑıĮ ıIJȘ ıȣȞȐȡIJȘıȘ ȩʌȠȣ įȘȜȫȞȠȞIJĮȚ.
7.1.1 ȆȇȅȉȊȆȅȆȅǿǾȈǾ ȈȊȃǹȇȉǾȈǾȈ ȂȓĮ ıȣȞȐȡIJȘıȘ İȓȞĮȚ ȖȞȦıIJȒ ıIJȠ ʌȡȩȖȡĮµµĮ ʌȠȣ ȠȡȓȗİIJĮȚ, Įʌȩ IJȠ ıȘµİȓȠ ʌȠȣ ȠȡȓȗİIJĮȚ (ȣȜȠʌȠȚİȓIJĮȚ) țĮȚ µİIJȐ. īȚĮ ȞĮ IJȘ ȤȡȘıȚµȠʌȠȚȒıȠȣµİ ʌȡȚȞ Įʌȩ IJȠȞ ȠȡȚıµȩ IJȘȢ șĮ ʌȡȑʌİȚ ȞĮ ȖȞȦıIJȠʌȠȚȒıȠȣµİ IJȠȞ IJȪʌȠ IJȘȢ ıIJȠ ȣʌȩȜȠȚʌȠ ʌȡȩȖȡĮµµĮ, įȘȜĮįȒ șĮ ʌȡȑʌİȚ ȞĮ IJȘ įȘȜȫıȠȣµİ ıIJȘȞ ĮȡȤȒ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ, ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ ȑȞĮ ʌȡȩIJȣʌȠ, ȦȢ İȟȒȢ:
İʌȚıIJȡİijȩµİȞȠȢ_IJȪʌȠȢ
ĮȞĮȖȞ_ıȣȞȐȡIJȘıȘȢ(ȜȓıIJĮ_IJȪʌȦȞ_IJȣʌȚțȫȞ_ʌĮȡĮµ);
Ǿ įȚĮįȚțĮıȓĮ ĮȣIJȒ ȜȑȖİIJĮȚ ʌȡȠIJȣʌȠʌȠȓȘıȘ ıȣȞȐȡIJȘıȘȢ. Ǿ ʌȡȠIJȣʌȠʌȠȓȘıȘ ȖȚĮ ıȣȞĮȡIJȒıİȚȢ ʌȠȣ İʌȚıIJȡȑijȠȣȞ IJȚµȑȢ ĮțİȡĮȓȠȣ IJȪʌȠȣ țĮșȫȢ țĮȚ ȖȚĮ IJȚȢ ıȣȞĮȡIJȒıİȚȢ void İȓȞĮȚ ʌȡȠĮȚȡİIJȚțȒ.
ȈȣȞĮȡIJȒıİȚȢ
65
7.1.2 ǹȆȁǼȈ ȈȊȃǹȇȉǾȈǼǿȈ ǹȢ įȠȪµİ IJȫȡĮ ȑȞĮ ĮʌȜȩ ʌȡȩȖȡĮµµĮ ʌȠȣ țȐȞİȚ ȤȡȒıȘ µȓĮȢ ıȣȞȐȡIJȘıȘȢ: /* textbox.c */ /* ǻȘµȚȠȣȡȖȓĮ ʌȜĮȚıȓȠȣ µİ '*' */ void line(); /* ʌȡȩIJȣʌȠ ıȣȞȐȡIJȘıȘȢ, șĮ µʌȠȡȠȪıİ ȞĮ ʌĮȡĮȜİȚijșİȓ */ main() { line(); printf("* ȂǼīǹȈ ǹȁǼȄǹȃǻȇȅȈ *\n"); line(); } /* line() */ /* ǼțIJȪʌȦıȘ ȖȡĮµµȒȢ ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ 20 '*' */ void line() { int j; /* IJȠʌȚțȒ µİIJĮȕȜȘIJȒ */ for(j=1;j<=20;j++)printf("*"); printf("\n");
} ȉȠ ĮʌȠIJȑȜİıµĮ ĮȣIJȠȪ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ İȓȞĮȚ: ******************** * ȂǼīǹȈ ǹȁǼȄǹȃǻȇȅȈ * ******************** ȈIJȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ ȖȓȞİIJĮȚ ʌȐȜȚ țȜȒıȘ µȓĮȢ ıȣȞȐȡIJȘıȘȢ Ș ȠʌȠȓĮ IJȣʌȫȞİȚ IJȠ ȤĮȡĮțIJȒȡĮ ʌȠȣ Ș įİțĮİȟĮįȚțȒ IJȠȣ IJȚµȒ ıIJȠȞ țȫįȚțĮ ASCII İȓȞĮȚ 7, ĮȣIJȩȢ Ƞ ȤĮȡĮțIJȒȡĮȢ țĮȜİȓIJĮȚ BELL (țĮµʌĮȞȐțȚ) țĮȚ Ș İțIJȪʌȦıȒ IJȠȣ ʌȡȠțĮȜİȓ ȑȞĮȞ ȒȤȠ "µʌȚʌ" Įʌȩ IJȠ µİȖȐijȦȞȠ IJȠȣ Ǿ/Ȋ: /* beeptest.c */ /* ǼȜİȖȤȠȢ ıȣȞȐȡIJȘıȘȢ */ void twobeep(); main() { twobeep(); printf("ȆȐIJĮ ȑȞĮ ʌȜȒțIJȡȠ\n"); getch(); twobeep(); } /* twobeep() */ /* ȆȡȩțȜȘıȘ ȘȤȘIJȚțȠȪ ıȒµĮIJȠȢ Įʌȩ IJȠ µİȖȐijȦȞȠ void twobeep() { int k; /* IJȠʌȚțȒ µİIJĮȕȜȘIJȒ printf("\x7"); /* ʌȡȫIJȠ µʌȚʌ for(k=1;k<=5000;k++); /* țĮșȣıIJȑȡȘıȘ printf("\x7"); /* įİȪIJİȡȠ µʌȚʌ }
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
IJȠȣ Ǿ/Ȋ */ */ */ */ */
66
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ǹȣIJȩ IJȠ ʌȡȩȖȡĮµµĮ ıIJȘȞ ĮȡȤȒ țĮȜİȓ µȓĮ ıȣȞȐȡIJȘıȘ, IJȘȞ twobeep(), ʌȠȣ țȐȞİȚ ĮțȡȚȕȫȢ ĮȣIJȩ ʌȠȣ ȜȑİȚ IJȠ ȩȞȠµȐ IJȘȢ: ȘȤİȓ įȪȠ µʌȚʌ ȤȦȡȚıµȑȞĮ Įʌȩ ȑȞĮ ıȪȞIJȠµȠ ıȚȦʌȘȜȩ įȚȐȜİȚµµĮ. DzʌİȚIJĮ IJȠ ʌȡȩȖȡĮµµĮ µĮȢ ȗȘIJȐ ȞĮ ʌĮIJȒıȠȣµİ ȑȞĮ ʌȜȒțIJȡȠ, ȩIJĮȞ IJȠ ʌĮIJȒıȠȣµİ, ȘȤİȓ ȟĮȞȐ įȪȠ µʌȚʌ.
7.2 Ǿ ǼȃȉȅȁǾ return ȅȚ ıȣȞĮȡIJȒıİȚȢ ʌȠȣ İȓįĮµİ ıIJĮ ʌȡȠȘȖȠȪµİȞĮ ʌĮȡĮįİȓȖµĮIJĮ įİȞ İʌȑıIJȡİijĮȞ țĮµȓĮ IJȚµȒ ıIJȘ ıȣȞȐȡIJȘıȘ ʌȠȣ IJȚȢ țĮȜȠȪıİ. ǹʌȜȫȢ, µİIJȐ IJȘȞ țȜȒıȘ IJȠȣȢ, İțIJİȜȠȪȞIJĮȞ ȩȜİȢ ȠȚ İȞIJȠȜȑȢ ʌȠȣ ʌİȡȚİȓȤĮȞ țĮȚ Ƞ ȑȜİȖȤȠȢ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ İʌȑıIJȡİijİ ȤȦȡȓȢ IJȚµȒ ıIJȘȞ İʌȩµİȞȘ İȞIJȠȜȒ IJȘȢ țĮȜȠȪıĮȢ ıȣȞȐȡIJȘıȘȢ. DzIJıȚ ȜȠȚʌȩȞ Ș İțIJȑȜİıȘ IJȘȢ ıȣȞȐȡIJȘıȘȢ IJİȡµĮIJȚȗȩIJĮȞ ȩIJĮȞ ıȣȞĮȞIJȚȩIJĮȞ IJȠ ȐȖțȚıIJȡȠ țȜİȚıȓµĮIJȠȢ (}). ȂʌȠȡȠȪµİ ȩµȦȢ ȞĮ țȐȞȠȣµİ µȓĮ ıȣȞȐȡIJȘıȘ ȞĮ IJİȡµĮIJȓıİȚ, țĮȚ Ƞ ȑȜİȖȤȠȢ ȞĮ İʌȚıIJȡȑȥİȚ ıIJȘȞ țĮȜȠȪıĮ ıȣȞȐȡIJȘıȘ, ıİ ȠʌȠȚȠįȒʌȠIJİ ıȘµİȓȠ IJȘȢ ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ IJȘȞ İȞIJȠȜȒ:
return; Ȉ'ĮȣIJȒ IJȘȞ ʌİȡȓʌIJȦıȘ Ș ıȣȞȐȡIJȘıȘ IJİȡµĮIJȓȗİIJĮȚ ȩIJĮȞ İțIJİȜİıIJİȓ Ș return țĮȚ įİȞ İʌȚıIJȡȑijİIJĮȚ țĮµȓĮ IJȚµȒ ıIJȘȞ țĮȜȠȪıĮ ıȣȞȐȡIJȘıȘ. ǼȓȞĮȚ ʌȡȠijĮȞȑȢ ȩIJȚ Ș İʌȚıIJȡȠijȒ ȤȦȡȓȢ IJȚµȒ Įʌȩ µȓĮ ıȣȞȐȡIJȘıȘ, µʌȠȡİȓ ȞĮ ȤȡȘıȚµȠʌȠȚȘșİȓ µȩȞȠ ıİ ıȣȞĮȡIJȒıİȚȢ ʌȠȣ ȑȤȠȣȞ ȠȡȚıIJİȓ IJȪʌȠȣ void. īȚĮ ʌĮȡȐįİȚȖµĮ Ș ʌĮȡĮțȐIJȦ ıȣȞȐȡIJȘıȘ ݵijĮȞȓȗİȚ IJȠ ĮʌȠIJȑȜİıµĮ IJȘȢ ȪȥȦıȘȢ İȞȩȢ ĮȡȚșµȠȪ ı'ȑȞĮ șİIJȚțȩ ĮțȑȡĮȚȠ: void power() { int exp; float base, i=1; printf("\nǻȫıİ IJȘ ȕȐıȘ țĮȚ IJȠȞ İțșȑIJȘ "); scanf("%f %d",&base,&exp); if(exp<0) return; /* įİ µʌȠȡİȓ ȞĮ ȤİȚȡȚıIJİȓ ĮȡȞȘIJȚțȠȪȢ İțșȑIJİȢ */ for( ;exp;exp--) i*=base; printf("ǹʌȠIJȑȜİıµĮ: %.5f",i);
} ǹȞ Ƞ İțșȑIJȘȢ İȓȞĮȚ ĮȡȞȘIJȚțȩȢ, Ș İȞIJȠȜȒ return IJİȡµĮIJȓȗİȚ IJȘ ıȣȞȐȡIJȘıȘ ʌȡȚȞ ijIJȐıİȚ ıIJȠ IJİȜȚțȩ ȐȖțȚıIJȡȠ, ĮȜȜȐ įİȞ İʌȚıIJȡȑijİȚ țĮµȓĮ IJȚµȒ. ȂȓĮ ıȣȞȐȡIJȘıȘ µʌȠȡİȓ ȞĮ ȑȤİȚ ʌİȡȚııȩIJİȡİȢ Įʌȩ µȓĮ İȞIJȠȜȑȢ return. īȚĮ ȞĮ İʌȚıIJȡȑȥİȚ Ș țĮȜȠȪµİȞȘ ıȣȞȐȡIJȘıȘ µȓĮ IJȚµȒ ıIJȘȞ țĮȜȠȪıĮ, ʌȡȑʌİȚ IJȠ return ȞĮ ĮțȠȜȠȣșİȓIJĮȚ Įʌȩ µȓĮ ʌĮȡȐıIJĮıȘ:
return(ʌĮȡȐıIJĮıȘ); ȩʌȠȣ ȠȚ ʌĮȡİȞșȑıİȚȢ İȓȞĮȚ ʌȡȠĮȚȡİIJȚțȑȢ, ĮȜȜȐ ıȣȞȚıIJȫȞIJĮȚ. ȅ İʌȚıIJȡİijȩµİȞȠȢ IJȪʌȠȢ İȓȞĮȚ ĮȣIJȩȢ ʌȠȣ ȠȡȓıIJȘțİ țĮIJȐ IJȠȞ ȠȡȚıµȩ IJȘȢ ıȣȞȐȡIJȘıȘȢ. Ȃİ IJȘ ȤȡȒıȘ IJȘȢ return, µȩȞȠ µȓĮ IJȚµȒ µʌȠȡİȓ ȞĮ İʌȚıIJȡĮijİȓ Įʌȩ µȓĮ ıȣȞȐȡIJȘıȘ.
ȈȣȞĮȡIJȒıİȚȢ
67
ȉȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ ȤȡȘıȚµȠʌȠȚİȓ IJȘ ıȣȞȐȡIJȘıȘ read_int() Ș ȠʌȠȓĮ įȚĮȕȐȗİȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ ȑȞĮȞ ĮțȑȡĮȚȠ țĮȚ IJȠȞ İʌȚıIJȡȑijİȚ ıIJȘ main(). Ǿ main() ʌȡȠıșȑIJİȚ µȓĮ ĮțȠȜȠȣșȓĮ ĮțİȡĮȓȦȞ, IJȘȢ ȠʌȠȓĮȢ IJȠ IJȑȜȠȢ įȘȜȫȞİIJĮȚ µİ IJȠȞ ĮȡȚșµȩ µȘįȑȞ: /* add.c */ /* ȆȡȩıșİıȘ ĮțȠȜȠȣșȓĮȢ ĮțİȡĮȓȦȞ ʌȠȣ IJİȜİȚȫȞİȚ µİ 0 */ int read_int(); main() { int i,s=0;
}
printf("\nǻȫıİ ĮțȑȡĮȚȠȣȢ, 0 ȖȚĮ IJȑȜȠȢ:\n"); while(i=read_int()) s+=i; printf("To ȐșȡȠȚıµĮ İȓȞĮȚ %d\n",s);
/* read_int() */ /* ǻȑȤİIJĮȚ ĮțȑȡĮȚȠ țĮȚ IJȠȞ İʌȚıIJȡȑijİȚ ıIJȘ main() */ int read_int() { int x; scanf("%d",&x); return(x);
} ȈIJȘȞ ʌĮȡȐıIJĮıȘ ĮʌȩįȠıȘȢ IJȚµȒȢ:
i=read_int() IJȠȣ ʌĮȡĮʌȐȞȦ ʌȡȠȖȡȐµµĮIJȠȢ, Ș įİȟȚȐ ʌȜİȣȡȐ ȠȞȠµȐȗİIJĮȚ țȜȒıȘ IJȘȢ ıȣȞȐȡIJȘıȘȢ. Ǿ IJȚµȒ IJȘȢ ʌĮȡȐıIJĮıȘȢ İȓȞĮȚ Ș IJȚµȒ IJȠȣ i. ǼijȩıȠȞ İȓȞĮȚ µȘµȘįİȞȚțȒ, İȡµȘȞİȪİIJĮȚ ȦȢ ĮȜȘșȒȢ țĮȚ IJȠ s İȞȘµİȡȫȞİIJĮȚ µİ IJȘȞ İȞIJȠȜȒ:
s+=i;
7.3 ȀȁǾȈǾ ȈȊȃǹȇȉǾȈǾȈ "Ȁǹȉ'ǹȄǿǹ" (by value) ȂȑȤȡȚ IJȫȡĮ ȠȚ ıȣȞĮȡIJȒıİȚȢ ʌȠȣ ȤȡȘıȚµȠʌȠȚȒıĮµİ įİȞ ȒIJĮȞ ʌȠȜȪ İȣȑȜȚțIJİȢ. ȉȚȢ țĮȜȠȪıĮµİ țĮȚ ȑțĮȞĮȞ ĮȣIJȐ ʌȠȣ ıȤİįȚȐıIJȘțĮȞ ȞĮ țȐȞȠȣȞ, İʌȚıIJȡȑijȠȞIJĮȢ Ȓ ȩȤȚ µȓĮ IJȚµȒ. Ǿ țĮȜȠȪıĮ ıȣȞȐȡIJȘıȘ įİ µİIJĮȕȓȕĮȗİ ʌȜȘȡȠijȠȡȓİȢ ıIJȘȞ țĮȜȠȪµİȞȘ (Ș ȜȓıIJĮ įȘȜȫıİȦȞ IJȣʌȚțȫȞ ʌĮȡĮµȑIJȡȦȞ ȒIJĮȞ țİȞȒ). ȅ µȘȤĮȞȚıµȩȢ ȖȚĮ IJȘ µİIJĮȕȓȕĮıȘ ʌȜȘȡȠijȠȡȚȫȞ ıİ µȓĮ ıȣȞȐȡIJȘıȘ İȓȞĮȚ Ș ʌĮȡȐµİIJȡȠȢ. ȂʌȠȡȠȪµİ ȞĮ µİIJĮȕȚȕȐıȠȣµİ ıİ µȓĮ ıȣȞȐȡIJȘıȘ IJȚȢ IJȚµȑȢ ȩıȦȞ ʌĮȡĮµȑIJȡȦȞ șȑȜȠȣµİ. ȈIJȠ İʌȩµİȞȠ ʌȡȩȖȡĮµµĮ ȤȡȘıȚµȠʌȠȚȠȪµİ IJȘ ıȣȞȐȡIJȘıȘ area() Ș ȠʌȠȓĮ įȑȤİIJĮȚ µȓĮ IJȚµȒ ʌȠȣ ĮȞIJȚʌȡȠıȦʌİȪİȚ IJȘȞ ĮțIJȓȞĮ µȓĮȢ ıijĮȓȡĮȢ țĮȚ İʌȚıIJȡȑijİȚ IJȠ ݵȕĮįȩȞ IJȘȢ İʌȚijȐȞİȚĮȢ IJȘȢ ıijĮȓȡĮȢ (E=4ʌr2). Ǿ µİIJĮȕȓȕĮıȘ IJȘȢ ʌȜȘȡȠijȠȡȓĮȢ ıIJȘȞ area() ȖȓȞİIJĮȚ µȑıȦ µȓĮȢ ʌĮȡĮµȑIJȡȠȣ. Ǿ rad İȓȞĮȚ IJȣʌȚțȒ ʌĮȡȐµİIJȡȠȢ,
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
68
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
İȞȫ Ș radius İȓȞĮȚ ʌȡĮȖµĮIJȚțȒ, Ƞ IJȪʌȠȢ IJȘȢ ʌȡĮȖµĮIJȚțȒȢ ʌĮȡĮµȑIJȡȠȣ İȓȞĮȚ ȓįȚȠȢ µİ ĮȣIJȩȞ IJȘȢ IJȣʌȚțȒȢ: /* sphere.c */ /* ȊʌȠȜȠȖȚıµȩȢ ݵȕĮįȠȪ ıijĮȓȡĮȢ */ #define PI 3.14159 float area(float); main() { float radius;
}
printf("ǻȫıİ IJȘȞ ĮțIJȓȞĮ IJȘȢ ıijĮȓȡĮȢ: "); scanf("%f", &radius); printf("ȉȠ ݵȕĮįȩȞ IJȘȢ ıijĮȓȡĮȢ İȓȞĮȚ %.2f\n",area(radius));
/* area() */ /* ǼʌȚıIJȡȑijİȚ IJȠ ݵȕĮįȩȞ IJȘȢ ıijĮȓȡĮȢ */ float area(float rad) { return(4*PI*rad*rad); } ȈIJȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ ȤȡȘıȚµȠʌȠȚȠȪµİ IJȘ ıȣȞȐȡIJȘıȘ power() Ș ȠʌȠȓĮ ȕȡȓıțİȚ IJȘ įȪȞĮµȘ İȞȩȢ ʌȡĮȖµĮIJȚțȠȪ ĮȡȚșµȠȪ, ȣȥȦµȑȞȠȣ ı'ȑȞĮȞ ĮțȑȡĮȚȠ İțșȑIJȘ. Ǿ ıȣȞȐȡIJȘıȘ power() ȑȤİȚ įȪȠ ʌĮȡĮµȑIJȡȠȣȢ (IJȘ ȕȐıȘ țĮȚ IJȠȞ İțșȑIJȘ) țĮȚ İʌȚıIJȡȑijİȚ µȓĮ IJȚµȒ Ș ȠʌȠȓĮ țĮȚ IJȣʌȫȞİIJĮȚ: /* power.c */ /* ȊʌȠȜȠȖȚıµȩȢ įȪȞĮµȘȢ İȞȩȢ ʌȡĮȖµĮIJȚțȠȪ ıİ İțșȑIJȘ ĮțȑȡĮȚȠ */ float power(float,int); main() { float base; int exp;
}
puts("\nǻȫıİ IJȘ ȕȐıȘ țĮȚ IJȠȞ İțșȑIJȘ: "); scanf("%f %d",&base, &exp); printf("%.5f ıIJȘȞ %d = %.5f",base,exp,power(base,exp)); /* IJĮ base, exp İȓȞĮȚ ȠȚ ʌȡĮȖµĮIJȚțȑȢ ʌĮȡȐµİIJȡȠȚ */
/* power() */ /* ǼʌȚıIJȡȑijİȚ IJȘ įȪȞĮµȘ */ float power(float b,int e) /* IJĮ b,e İȓȞĮȚ ȠȚ IJȣʌȚțȑȢ ʌĮȡȐµİIJȡȠȚ */ { int i; float p=1.0;
}
i=abs(e); /* İʌȚıIJȡȑijİȚ IJȘȞ ĮʌȩȜȣIJȘ IJȚµȒ IJȠȣ ȠȡȓıµĮIJȩȢ IJȘȢ */ for( ;i;i--) p*=b; if(e>=0) return(p); /* ĮȞ Ƞ İțșȑIJȘȢ İȓȞĮȚ µȘ-ĮȡȞȘIJȚțȩȢ */ else return(1/p); /* ĮȞ Ƞ İțșȑIJȘȢ İȓȞĮȚ ĮȡȞȘIJȚțȩȢ */
ȈȣȞĮȡIJȒıİȚȢ
69
ȈIJȘȞ țȜȒıȘ µȓĮȢ ıȣȞȐȡIJȘıȘȢ, ȠȚ ʌĮȡȐµİIJȡȠȚ ʌİȡȚȜĮµȕȐȞȠȞIJĮȚ µȑıĮ ıIJȚȢ ʌĮȡİȞșȑıİȚȢ (). ȈIJȘȞ ʌİȡȓʌIJȦıȘ IJȠȣ ʌĮȡĮʌȐȞȦ ʌĮȡĮįİȓȖµĮIJȠȢ ȣʌȐȡȤȠȣȞ įȪȠ ʌĮȡȐµİIJȡȠȚ, ʌȠȣ İȓȞĮȚ ȠȚ base țĮȚ exp. ȅȚ ʌĮȡȐµİIJȡȠȚ ĮȣIJȑȢ ȜȑȖȠȞIJĮȚ ʌȡĮȖµĮIJȚțȑȢ ʌĮȡȐµİIJȡȠȚ Ȓ ȠȡȓıµĮIJĮ (actual parameters). ǹȞIJȓșİIJĮ ȠȚ ʌĮȡȐµİIJȡȠȚ ʌȠȣ ȤȡȘıȚµȠʌȠȚȠȪȞIJĮȚ țĮIJȐ IJȠȞ ȠȡȚıµȩ IJȘȢ ıȣȞȐȡIJȘıȘȢ, ȜȑȖȠȞIJĮȚ IJȣʌȚțȑȢ ʌĮȡȐµİIJȡȠȚ Ȓ ĮʌȜȫȢ ʌĮȡȐµİIJȡȠȚ (formal parameters). Ǿ țȜȒıȘ IJȘȢ ıȣȞȐȡIJȘıȘȢ ȩʌȦȢ ȑȖȚȞİ ıIJȠ ʌȡȠȘȖȠȪµİȞȠ ʌĮȡȐįİȚȖµĮ:
power(base,exp) ȠȞȠµȐȗİIJĮȚ țȜȒıȘ țĮIJ'ĮȟȓĮ (call by value) ʌȠȣ İȓȞĮȚ Ƞ µȩȞȠȢ IJȡȩʌȠȢ µİIJĮȕȓȕĮıȘȢ ʌĮȡĮµȑIJȡȦȞ ıIJȘ ȖȜȫııĮ C. ȀĮIJ'ĮȣIJȩȞ IJȠȞ IJȡȩʌȠ Ș IJȚµȒ µȚĮȢ ʌȡĮȖµĮIJȚțȒȢ ʌĮȡĮµȑIJȡȠȣ ĮȞIJȚȖȡȐijİIJĮȚ ıIJȘȞ ĮȞIJȓıIJȠȚȤȘ IJȣʌȚțȒ ʌĮȡȐµİIJȡȠ IJȘȢ ıȣȞȐȡIJȘıȘȢ. DzIJıȚ, ȠȚ ʌȚșĮȞȑȢ ĮȜȜĮȖȑȢ ʌȠȣ ȖȓȞȠȞIJĮȚ ıIJȚȢ IJȚµȑȢ IJȦȞ IJȣʌȚțȫȞ ʌĮȡĮµȑIJȡȦȞ IJȘȢ ıȣȞȐȡIJȘıȘȢ, įİȞ ȑȤȠȣȞ țĮµȓĮ İʌȓįȡĮıȘ ıIJȚȢ IJȚµȑȢ IJȦȞ ʌȡĮȖµĮIJȚțȫȞ ʌĮȡĮµȑIJȡȦȞ. ǹȣIJȩ ijĮȓȞİIJĮȚ țĮȚ ıIJȠ ĮțȩȜȠȣșȠ ʌȡȩȖȡĮµµĮ: /* value.c */ main() { int i=0;
}
printf("\n%3d",i); p(i); printf("%3d\n",i);
/* p() */ p(int j) { do printf("%3d",++j); while(j<5); } IJȠ ȠʌȠȓȠ IJȣʌȫȞİȚ: 0
1
2
3
4
5
0
Ǿ IJȚµȒ IJȘȢ µİIJĮȕȜȘIJȒȢ i ıIJȘ ıȣȞȐȡIJȘıȘ main() įİ µʌȠȡİȓ ȞĮ ĮȜȜĮȤșİȓ Įʌȩ IJȘȞ p(), İijȩıȠȞ µȩȞȠ ȑȞĮ ĮȞIJȓȖȡĮijȠ IJȘȢ IJȚµȒȢ IJȠȣ i µİIJĮijȑȡİIJĮȚ ıIJȘȞ p().
7.3.1 ȈȊȃǹȇȉǾȈǾ ȍȈ ȆǹȇǹȂǼȉȇȅȈ ȈȊȃǹȇȉǾȈǾȈ ȂȓĮ ıȣȞȐȡIJȘıȘ, ȖȚĮ ȑȞĮ ʌȡȩȖȡĮµµĮ İțʌȡȠıȦʌİȓ µȓĮ IJȚµȒ. ĬĮ µʌȠȡȠȪıİ, ȜȠȚʌȩȞ, µȓĮ ıȣȞȐȡIJȘıȘ ȞĮ ȤȡȘıȚµȠʌȠȚȘșİȓ ȦȢ ʌȡĮȖµĮIJȚțȒ ʌĮȡȐµİIJȡȠȢ ıİ țȐʌȠȚĮ ȐȜȜȘ ıȣȞȐȡIJȘıȘ. ǹȣIJȩ ȖȓȞİIJĮȚ ıIJȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ, IJȠ ȠʌȠȓȠ įȑȤİIJĮȚ IJȡİȚȢ ĮțȑȡĮȚȠȣȢ ĮȡȚșµȠȪȢ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ țĮȚ ȣʌȠȜȠȖȓȗİȚ IJȠ ȖȚȞȩµİȞȠ (total) IJȠȣ IJȡȓIJȠȣ ĮȡȚșµȠȪ (c) İʌȓ IJȠ µİȖĮȜȪIJİȡȠ IJȦȞ ȐȜȜȦȞ įȪȠ. ȆĮȡĮIJȘȡȠȪµİ ȩIJȚ Ș IJȚµȒ IJȘȢ ıȣȞȐȡIJȘıȘȢ maxinteger() ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ȦȢ ʌȡĮȖµĮIJȚțȒ ʌĮȡȐµİIJȡȠȢ ȖȚĮ IJȘ ıȣȞȐȡIJȘıȘ multiply(). ǵIJĮȞ ȑȡșİȚ Ș ıIJȚȖµȒ ȞĮ İțIJİȜİıIJİȓ Ș İȞIJȠȜȒ țĮȜİȓIJĮȚ țĮIJĮȡȤȐȢ Ș total=multiply(maxinteger(a,b),c); ıȣȞȐȡIJȘıȘ maxinteger() Ș ȠʌȠȓĮ İʌȚıIJȡȑijİȚ µȓĮ IJȚµȒ ʌȠȣ ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ȦȢ ʌĮȡȐµİIJȡȠȢ IJȘȢ multiply().
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
70
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
/* ȈȣȞȐȡIJȘıȘ ȦȢ ʌĮȡȐµİIJȡȠȢ ıȣȞȐȡIJȘıȘȢ */ int maxinteger(int,int); int multiply(int,int); main() { int a,b,c,total;
}
puts("ǻȫıİ IJȡİȚȢ ĮțȑȡĮȚȠȣȢ:"); scanf("%d %d %d",&a,&b,&c); total=multiply(maxinteger(a,b),c); printf("ǹʌȠIJȑȜİıµĮ: %d",total);
/* maxinteger() */ /* İʌȚıIJȡȑijİȚ IJȠ µİȖĮȜȪIJİȡȠ Įʌȩ įȪȠ ĮțİȡĮȓȠȣȢ */ int maxinteger(int x,int y) { if(x>y) return(x); else return(y); } /* myltiply */ /* ʌȠȜȜĮʌȜĮıȚȐȗİȚ įȪȠ ĮȡȚșµȠȪȢ */ int multiply(int k,int l) { return(k*l); }
7.4 ȉȅȆǿȀǼȈ Ȁǹǿ ȀǹĬȅȁǿȀǼȈ ȂǼȉǹǺȁǾȉǼȈ ȂȓĮ µİIJĮȕȜȘIJȒ Ș ȠʌȠȓĮ įȘȜȫȞİIJĮȚ µȑıĮ ı'ȑȞĮ IJµȒµĮ țȫįȚțĮ (µʌȜȠț), IJȠ ȠʌȠȓȠ ȠȡȚȠșİIJİȓIJĮȚ Įʌȩ IJĮ ȐȖțȚıIJȡĮ ĮȞȠȓȖµĮIJȠȢ țĮȚ țȜİȚıȓµĮIJȠȢ ({}), İȓȞĮȚ IJȠʌȚțȒ (local) ȖȚĮ IJȠ ıȣȖțİțȡȚµȑȞȠ IJµȒµĮ. Ǿ ݵȕȑȜİȚĮ IJȦȞ IJȠʌȚțȫȞ µİIJĮȕȜȘIJȫȞ, ʌİȡȚȠȡȓȗİIJĮȚ ıIJȠ IJµȒµĮ ȩʌȠȣ įȘȜȫȞȠȞIJĮȚ. DzIJıȚ, ȠȚ µİIJĮȕȜȘIJȑȢ ʌȠȣ įȘȜȫȞȠȞIJĮȚ µȑıĮ ıİ µȓĮ ıȣȞȐȡIJȘıȘ İȓȞĮȚ ȖȞȦıIJȑȢ µȩȞȠ µȑıĮ ı'ĮȣIJȒȞ țĮȚ ıİ țĮµȓĮ ȐȜȜȘ, ȖȚĮ IJȠ ȜȩȖȠ ĮȣIJȩ ȜȑȖȠȞIJĮȚ țĮȚ İıȦIJİȡȚțȑȢ (internal). ǹȢ įȠȪµİ IJȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ: /* local.c */ /* ȉȠʌȚțȑȢ µİIJĮȕȜȘIJȑȢ */ main() { int x=10;
}
printf("Ǿ x ıIJȘ main() İȓȞĮȚ : %3d\n",x); f(); printf("Ǿ x ıIJȘ main() ʌĮȡĮµȑȞİȚ: %3d\n",x);
ȈȣȞĮȡIJȒıİȚȢ
71
/* f() */ f() { float x=100.123; printf("Ǿ x ıIJȘȞ f() İȓȞĮȚ } Ǿ ȑȟȠįȠȢ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ İȓȞĮȚ:
: %.3f\n",x);
Ǿ x ıIJȘ main() İȓȞĮȚ : 10 Ǿ x ıIJȘȞ f() İȓȞĮȚ : 100.123 Ǿ x ıIJȘ main() ʌĮȡĮµȑȞİȚ: 10 ȈIJȠ ʌĮȡĮʌȐȞȦ ʌȡȩȖȡĮµµĮ ȑȤȠȣµİ įȪȠ µİIJĮȕȜȘIJȑȢ µİ IJȠ ȓįȚȠ ȩȞȠµĮ x, µȓĮ ĮțȑȡĮȚĮ µİIJĮȕȜȘIJȒ ıIJȘ main() țĮȚ µȓĮ µİIJĮȕȜȘIJȒ țȚȞȘIJȒȢ ȣʌȠįȚĮıIJȠȜȒȢ ıIJȘȞ f(). Ǿ x IJȘȢ main() įİȞ ȑȤİȚ țĮµȓĮ ıȤȑıȘ µİ IJȘ x IJȘȢ f(), ȖȚĮIJȓ țĮșݵȚȐ İȓȞĮȚ ȖȞȦıIJȒ µȩȞȠ ıIJȠȞ țȫįȚțĮ IJȠȣ įȚțȠȪ IJȘȢ IJµȒµĮIJȠȢ. ǼʌȓıȘȢ ıIJȠ ʌȡȩȖȡĮµµĮ ʌȠȣ ĮțȠȜȠȣșİȓ ȕȜȑʌȠȣµİ ȩIJȚ ʌȐȜȚ įȘȜȫȞȠȞIJĮȚ įȪȠ µİIJĮȕȜȘIJȑȢ µİ IJȠ ȓįȚȠ ȩȞȠµĮ (i) țĮȚ ȠȚ įȪȠ ıIJȘȞ ȓįȚĮ ıȣȞȐȡIJȘıȘ (main()) ĮȜȜȐ ıİ įȚĮijȠȡİIJȚțȐ IJµȒµĮIJĮ țȫįȚțĮ. /* local1.c */ /* ȉȠʌȚțȑȢ µİIJĮȕȜȘIJȑȢ */ main() { int i=10;
}
printf("i=%d\n",i); { float i=3.14; printf("i=%f\n",i); } printf("i=%d",i);
Ǿ ȑȟȠįȠȢ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ İȓȞĮȚ (įȚțĮȚȠȜȠȖȒıIJİ IJȘȞ): i=10 i=3.1400 i=10 DzȞĮ ȕĮıȚțȩ ȤĮȡĮțIJȘȡȚıIJȚțȩ IJȦȞ IJȠʌȚțȫȞ µİIJĮȕȜȘIJȫȞ İȓȞĮȚ ȩIJȚ ĮʌȠțIJȠȪȞ ȣʌȩıIJĮıȘ µȩȞȠ țĮIJȐ IJȘ įȚȐȡțİȚĮ İțIJȑȜİıȘȢ IJȠȣ IJµȒµĮIJȠȢ IJȠȣ țȫįȚțĮ ȩʌȠȣ įȘȜȫȞȠȞIJĮȚ. ǻȘȜĮįȒ µȓĮ IJȠʌȚțȒ µİIJĮȕȜȘIJȒ įȘµȚȠȣȡȖİȓIJĮȚ ȩIJĮȞ Ƞ ȑȜİȖȤȠȢ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ İȚıȑȡȤİIJĮȚ ıIJȠ ĮȞIJȓıIJȠȚȤȠ IJµȒµĮ țȫįȚțĮ țĮȚ țĮIJĮıIJȡȑijİIJĮȚ µİ IJȘȞ ȑȟȠįȠ Įʌȩ IJȠ IJµȒµĮ. īȚ'ĮȣIJȩ IJȠ ȜȩȖȠ ȠȚ IJȠʌȚțȑȢ µİIJĮȕȜȘIJȑȢ µȓĮȢ ıȣȞȐȡIJȘıȘȢ įİ µʌȠȡȠȪȞ ȞĮ įȚĮIJȘȡȠȪȞ IJȘȞ IJȚµȒ IJȠȣȢ µİIJĮȟȪ IJȦȞ țȜȒıİȦȞ IJȘȢ ıȣȞȐȡIJȘıȘȢ. (ȉĮ ʌĮȡĮʌȐȞȦ įİȞ ȚıȤȪȠȣȞ ĮȞ ȤȡȘıȚµȠʌȠȚȘșİȓ Ƞ țĮșȠȡȚıIJȒȢ țĮIJȘȖȠȡȓĮȢ ĮʌȠșȒțİȣıȘȢ static, ȕȜȑʌİ § 7.5). ǹȞ ıIJȚȢ IJȠʌȚțȑȢ µİIJĮȕȜȘIJȑȢ įİ įȫıȠȣµİ ĮȡȤȚțȒ IJȚµȒ, IJȠ ʌİȡȚİȤȩµİȞȩ IJȠȣȢ İȓȞĮȚ ĮʌȡȠıįȚȩȡȚıIJȠ. ȅȚ IJȣʌȚțȑȢ ʌĮȡȐµİIJȡȠȚ µȓĮȢ ıȣȞȐȡIJȘıȘȢ ıȣµʌİȡȚijȑȡȠȞIJĮȚ ȦȢ IJȠʌȚțȑȢ µİIJĮȕȜȘIJȑȢ.
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
72
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
Ȉİ ĮȞIJȓșİıȘ µİ IJȚȢ IJȠʌȚțȑȢ µİIJĮȕȜȘIJȑȢ, ȠȚ țĮșȠȜȚțȑȢ (global) µİIJĮȕȜȘIJȑȢ İȓȞĮȚ ȖȞȦıIJȑȢ ıİ ȠȜȩțȜȘȡȠ IJȠ ĮȡȤİȓȠ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ țĮȚ µʌȠȡȠȪȞ ȞĮ ȤȡȘıȚµȠʌȠȚȠȪȞIJĮȚ Įʌȩ ȠʌȠȚȠįȒʌȠIJİ IJµȒµĮ țȫįȚțĮ. Ǿ ݵȕȑȜİȚȐ IJȠȣȢ İȓȞĮȚ țĮșȠȜȚțȒ țĮȚ Ƞ ȤȡȩȞȠȢ ȗȦȒȢ IJȠȣȢ İȓȞĮȚ Ƞ ȤȡȩȞȠȢ İțIJȑȜİıȘȢ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ. ǹȢ įȠȪµİ IJȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ, ȩʌȠȣ ȠȡȓȗİIJĮȚ Ș µİIJĮȕȜȘIJȒ count ȑȟȦ Įʌȩ ȩȜİȢ IJȚȢ ıȣȞĮȡIJȒıİȚȢ: /* external.c */ /* ȀĮșȠȜȚțȑȢ µİIJĮȕȜȘIJȑȢ */ int count; /* Ș count İȓȞĮȚ țĮșȠȜȚțȒ */ main() { count=100;
}
printf("ȈIJȘȞ main() count=%d\n",count); f1();
/* ݵijĮȞȓȗİȚ IJȠ 100 */
/* f1() */ f1() { int temp; temp=count;
}
f2(); printf("ȈIJȘȞ f1()
count=%d\n",count);
/* f2() */ f2() { int count=200; printf("ȈIJȘȞ f2() count=%d\n",count); } Ǿ ȑȟȠįȠȢ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ İȓȞĮȚ:
/* ݵijĮȞȓȗİȚ IJȠ 100 */
/* ݵijĮȞȓȗİȚ IJȠ 200 */
ȈIJȘȞ main() count=100 ȈIJȘȞ f2() count=200 ȈIJȘȞ f1() count=100 ȆĮȡȩȜȠ ʌȠȣ ȠȪIJİ Ș main() ȠȪIJİ Ș f1() ȑȤȠȣȞ įȘȜȫıİȚ IJȘ µİIJĮȕȜȘIJȒ count, ȦıIJȩıȠ µʌȠȡȠȪȞ ȞĮ IJȘ ȤȡȘıȚµȠʌȠȚȠȪȞ. ǵµȦȢ, Ș f2() ȑȤİȚ įȘȜȫıİȚ µȓĮ IJȠʌȚțȒ µİIJĮȕȜȘIJȒ µİ ȩȞȠµĮ count. ǵIJĮȞ ĮȞĮijȑȡİIJĮȚ ıIJȘȞ count, Ș f2() ĮȞĮijȑȡİIJĮȚ ıIJȘȞ IJȠʌȚțȒ IJȘȢ µİIJĮȕȜȘIJȒ, ȩȤȚ ıIJȘȞ țĮșȠȜȚțȒ. ȅȚ țĮșȠȜȚțȑȢ µİIJĮȕȜȘIJȑȢ ȠȞȠµȐȗȠȞIJĮȚ İʌȓıȘȢ țĮȚ İȟȦIJİȡȚțȑȢ (external) įȚȩIJȚ ȠȡȓȗȠȞIJĮȚ ȑȟȦ Įʌȩ ȩȜİȢ IJȚȢ ıȣȞĮȡIJȒıİȚȢ. Ȉİ ĮȞIJȓșİıȘ µİ IJȚȢ IJȠʌȚțȑȢ µİIJĮȕȜȘIJȑȢ, ȠȚ İȟȦIJİȡȚțȑȢ įȚĮIJȘȡȠȪȞ IJȘȞ ȣʌȩıIJĮıȒ IJȠȣȢ µȩȞȚµĮ, ȑIJıȚ įȚĮIJȘȡȠȪȞ IJȚȢ IJȚµȑȢ IJȠȣȢ ĮțȩµĮ țĮȚ µİIJȐ IJȘȞ İʌȚıIJȡȠijȒ IJȘȢ ıȣȞȐȡIJȘıȘȢ ʌȠȣ ȩȡȚıİ IJȘȞ ĮȡȤȚțȒ IJȚµȒ IJȠȣȢ. ǹȞ ıIJȚȢ İȟȦIJİȡȚțȑȢ µİIJĮȕȜȘIJȑȢ įİ įȫıȠȣµİ ĮȡȤȚțȒ IJȚµȒ ʌĮȓȡȞȠȣȞ ĮȣIJȩµĮIJĮ IJȘȞ IJȚµȒ µȘįȑȞ. ǼȓȞĮȚ ıȘµĮȞIJȚțȩ ȞĮ țȐȞȠȣµİ įȚȐțȡȚıȘ ĮȞȐµİıĮ ıIJȘ įȒȜȦıȘ (declaration) țĮȚ IJȠȞ ȠȡȚıµȩ (definition) µȚĮȢ İȟȦIJİȡȚțȒȢ µİIJĮȕȜȘIJȒȢ. ȂȓĮ įȒȜȦıȘ ĮȞĮțȠȚȞȫȞİȚ IJȠ
ȈȣȞĮȡIJȒıİȚȢ
73
ȩȞȠµĮ țĮȚ IJȚȢ ȚįȚȩIJȘIJİȢ µȓĮȢ µİIJĮȕȜȘIJȒȢ (țȣȡȓȦȢ IJȠȞ IJȪʌȠ IJȘȢ), İȞȫ ȑȞĮȢ ȠȡȚıµȩȢ ʌȡȠțĮȜİȓ țĮȚ įȑıµİȣıȘ ȤȫȡȠȣ ıIJȘ µȞȒµȘ. īİȞȚțȐ ȑȤȠȣµİ:
ȠȡȚıµȩȢ=įȒȜȦıȘ+įȑıµİȣıȘ µȞȒµȘȢ ȂȑıĮ ı'ȑȞĮ ʌȡȩȖȡĮµµĮ µʌȠȡȠȪµİ ȞĮ įȚĮțȡȓȞȠȣµİ IJȠȣȢ ȠȡȚıµȠȪȢ Įʌȩ IJȚȢ įȘȜȫıİȚȢ. ǹȞ ȠȚ ȖȡĮµµȑȢ:
int i; double f; ݵijĮȞȓȗȠȞIJĮȚ ȑȟȦ Įʌȩ ȠʌȠȚĮįȒʌȠIJİ ıȣȞȐȡIJȘıȘ, ȠȡȓȗȠȣȞ IJȚȢ İȟȦIJİȡȚțȑȢ µİIJĮȕȜȘIJȑȢ i țĮȚ f įİıµİȪȠȞIJĮȢ µȞȒµȘ ȖȚ'ĮȣIJȑȢ țĮȚ įȘȜȫȞȠȞIJȐȢ IJİȢ ȖȚĮ IJȠ ȣʌȩȜȠȚʌȠ ĮȡȤİȓȠ IJȠȣ ʌȘȖĮȓȠȣ țȫįȚțĮ. ǹʌȩ IJȘȞ ȐȜȜȘ ȠȚ:
extern int i; extern double f; ȤȡȘıȚµȠʌȠȚȠȪȞ IJȘ įİıµİȣµȑȞȘ ȜȑȟȘ extern ȖȚĮ ȞĮ įȘȜȫıȠȣȞ, ȖȚĮ IJȠ ȣʌȩȜȠȚʌȠ ĮȡȤİȓȠ ʌȘȖĮȓȠȣ țȫįȚțĮ IJȚȢ İȟȦIJİȡȚțȑȢ µİIJĮȕȜȘIJȑȢ i țĮȚ f, ĮȜȜȐ įİ įȘµȚȠȣȡȖȠȪȞ IJȚȢ µİIJĮȕȜȘIJȑȢ, ȠȪIJİ įİıµİȪȠȣȞ ȤȫȡȠ ıIJȘ µȞȒµȘ. ȈIJȘȞ ʌİȡȓʌIJȦıȘ ʌȠȣ Ƞ ʌȘȖĮȓȠȢ țȫįȚțĮȢ ĮʌȠIJİȜİȓIJĮȚ Įʌȩ ʌİȡȚııȩIJİȡĮ IJȠȣ İȞȩȢ ĮȡȤİȓĮ, șĮ ʌȡȑʌİȚ ȞĮ ȣʌȐȡȤİȚ µȩȞȠ ȑȞĮȢ ȠȡȚıµȩȢ µȓĮȢ İȟȦIJİȡȚțȒȢ µİIJĮȕȜȘIJȒȢ ıİ ȑȞĮ ĮȡȤİȓȠ, ȖȚĮ ȩȜĮ IJĮ ĮȡȤİȓĮ. IJĮ ȐȜȜĮ ĮȡȤİȓĮ µʌȠȡȠȪȞ ȞĮ ʌİȡȚȑȤȠȣȞ įȘȜȫıİȚȢ extern ȖȚĮ IJȘȞ ʌȡȠıʌȑȜĮıȒ IJȘȢ. ǻİȢ țĮȚ § 7.5.
7.5 ȀǹĬȅȇǿȈȉǼȈ ȀǹȉǾīȅȇǿǹȈ ǹȆȅĬǾȀǼȊȈǾȈ ȅȚ țĮșȠȡȚıIJȑȢ țĮIJȘȖȠȡȓĮȢ ĮʌȠșȒțİȣıȘȢ (storage class specifiers) İȓȞĮȚ ȜȑȟİȚȢ ȠȚ ȠʌȠȓİȢ ȤȡȘıȚµȠʌȠȚȠȪȞIJĮȚ ȦȢ ʌȡȠșȑµĮIJĮ ıIJȚȢ įȘȜȫıİȚȢ IJȦȞ µİIJĮȕȜȘIJȫȞ țĮȚ ĮʌȠįȓįȠȣȞ ıIJȚȢ µİIJĮȕȜȘIJȑȢ IJȘȢ C ȑȞĮ ȤĮȡĮțIJȘȡȚıIJȚțȩ ʌȠȣ țĮȜİȓIJĮȚ țĮIJȘȖȠȡȓĮ ĮʌȠșȒțİȣıȘȢ. Ǿ țĮIJȘȖȠȡȓĮ ĮʌȠșȒțİȣıȘȢ țĮșȠȡȓȗİȚ įȪȠ ȤĮȡĮțIJȘȡȚıIJȚțȐ IJȘȢ µİIJĮȕȜȘIJȒȢ: IJȠ ȤȡȩȞȠ ȗȦȒȢ țĮȚ IJȘȞ ݵȕȑȜİȚȐ IJȘȢ (Ȓ ȠȡĮIJȩIJȘIJĮ). ȅȚ țĮșȠȡȚıIJȑȢ țĮIJȘȖȠȡȓĮȢ ĮʌȠșȒțİȣıȘȢ İȓȞĮȚ ȠȚ: auto, register, extern, static.
auto ǵȜİȢ ȠȚ µİIJĮȕȜȘIJȑȢ ʌȠȣ ȤȡȘıȚµȠʌȠȚȒșȘțĮȞ ȦȢ IJȫȡĮ, İțIJȩȢ Įʌȩ IJȠ IJİȜİȣIJĮȓȠ ʌȡȩȖȡĮµµĮ (external.c), įȘȜȫȞȠȞIJĮȞ µȑıĮ ıİ µȓĮ ıȣȞȐȡIJȘıȘ. ȅȚ µİIJĮȕȜȘIJȑȢ ʌȠȣ įȘȜȫȞȠȞIJĮȚ µȑıĮ ıİ µȓĮ ıȣȞȐȡIJȘıȘ Ȓ ȑȞĮ IJµȒµĮ țȫįȚțĮ (µʌȜȠț) țĮșȫȢ țĮȚ ȠȚ IJȣʌȚțȑȢ ʌĮȡȐµİIJȡȠȚ µȓĮȢ ıȣȞȐȡIJȘıȘȢ (IJȠʌȚțȑȢ) İȓȞĮȚ İȟ ȠȡȚıµȠȪ ĮȣIJȩµĮIJİȢ, țȚ ȑIJıȚ Ƞ țĮșȠȡȚıIJȒȢ auto ʌĮȡĮȜİȓʌİIJĮȚ ȖȚ'ĮȣIJȑȢ IJȚȢ µİIJĮȕȜȘIJȑȢ. ȅȚ ĮȣIJȩµĮIJİȢ µİIJĮȕȜȘIJȑȢ įȘµȚȠȣȡȖȠȪȞIJĮȚ ȩIJĮȞ țĮȜİȓIJĮȚ Ș ıȣȞȐȡIJȘıȘ ʌȠȣ IJȚȢ ʌİȡȚȑȤİȚ țĮȚ țĮIJĮıIJȡȑijȠȞIJĮȚ ȩIJĮȞ Ƞ ȑȜİȖȤȠȢ İʌȚıIJȡȑijİȚ ıIJȘ ıȣȞȐȡIJȘıȘ ʌȠȣ ȑțĮȞİ IJȘȞ țȜȒıȘ. DzIJıȚ įİ įȚĮIJȘȡȠȪȞ IJȘȞ IJȚµȒ IJȠȣȢ µİIJĮȟȪ įȚĮįȠȤȚțȫȞ țȜȒıİȦȞ IJȘȢ ıȣȞȐȡIJȘıȘȢ. ǹȞ țĮIJȐ IJȘ įȒȜȦıȘ IJȦȞ ĮȣIJȩµĮIJȦȞ µİIJĮȕȜȘIJȫȞ IJȠȣȢ ĮʌȠįȓįİIJĮȚ țĮȚ µȓĮ ĮȡȤȚțȒ IJȚµȒ, ĮȣIJȒ IJȘȞ ĮȡȤȚțȒ IJȚµȒ IJȘȞ ʌĮȓȡȞȠȣȞ țȐșİ ijȠȡȐ ʌȠȣ İțIJİȜİȓIJĮȚ IJȠ IJµȒµĮ IJȠȣ țȫįȚțĮ ȩʌȠȣ įȘȜȫȞȠȞIJĮȚ. īȚĮ ʌĮȡȐįİȚȖµĮ, ȑıIJȦ IJȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ:
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
74
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
/* auto.c */ /* ǹȣIJȩµĮIJİȢ µİIJĮȕȜȘIJȑȢ */ main() { int i;
}
for(i=1;i<=5;i++) printf("%d %d\n",i,f(i));
/* f() */ f(int x) { int s=100;
/* ĮȣIJȩµĮIJȘ µİIJĮȕȜȘIJȒ */
return(s+=x); } Ǿ ȑȟȠįȠȢ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ İȓȞĮȚ: 1 2 3 4 5
101 102 103 104 105
ǹȞ įİ įȠșİȓ ĮȡȤȚțȒ IJȚµȒ ıİ µȓĮ µİIJĮȕȜȘIJȒ auto, IJȩIJİ IJȠ ʌİȡȚİȤȩµİȞȩ IJȘȢ İȓȞĮȚ ĮʌȡȠıįȚȩȡȚıIJȠ.
register ȅ țĮșȠȡȚıIJȒȢ register İȓȞĮȚ ȚıȠįȪȞĮµȠȢ µİ IJȠȞ țĮșȠȡȚıIJȒ auto ĮȜȜȐ ȣʌȠįİȚțȞȪİȚ ıIJȠ µİIJĮȖȜȦIJIJȚıIJȒ ȩIJȚ Ș µİIJĮȕȜȘIJȒ (ʌȠȣ ʌȡȑʌİȚ ȞĮ İȓȞĮȚ ĮțİȡĮȓȠȣ IJȪʌȠȣ Ȓ ȤĮȡĮțIJȒȡĮ) șĮ ȤȡȘıȚµȠʌȠȚȘșİȓ ıȣȤȞȐ (ʌ.Ȥ. ȦȢ µİIJȡȘIJȒȢ ıİ µȓĮ İȞIJȠȜȒ for). ȅ ıțȠʌȩȢ İȓȞĮȚ ȠȚ µİIJĮȕȜȘIJȑȢ register ȞĮ ĮʌȠșȘțİȪȠȞIJĮȚ ıİ țĮIJĮȤȦȡȘIJȑȢ (registers) IJȘȢ ȀİȞIJȡȚțȒȢ ȂȠȞȐįĮȢ ǼʌİȟİȡȖĮıȓĮȢ, ĮȞ ĮȣIJȩ İȓȞĮȚ įȣȞĮIJȩ, įȚĮijȠȡİIJȚțȐ ĮȞIJȚµİIJȦʌȓȗȠȞIJĮȚ ıĮȞ ĮȣIJȩµĮIJİȢ µİIJĮȕȜȘIJȑȢ. Ǿ ĮʌȠșȒțİȣıȘ IJȦȞ µİIJĮȕȜȘIJȫȞ ıİ țĮIJĮȤȦȡȘIJȑȢ, ĮȣȟȐȞİȚ IJȘȞ IJĮȤȪIJȘIJĮ. ȅ țĮșȠȡȚıIJȒȢ register µʌȠȡİȓ ȞĮ İijĮȡµȩȗİIJĮȚ µȩȞȠ ıİ IJȠʌȚțȑȢ µİIJĮȕȜȘIJȑȢ. ǹȞ įİ įȠșİȓ ĮȡȤȚțȒ IJȚµȒ ıİ µȓĮ µİIJĮȕȜȘIJȒ register, IJȩIJİ IJȠ ʌİȡȚİȤȩµİȞȩ IJȘȢ İȓȞĮȚ ĮʌȡȠıįȚȩȡȚıIJȠ.
extern ȂİȖȐȜĮ ʌȡȠȖȡȐµµĮIJĮ ıȣȞȒșȦȢ ĮʌȠIJİȜȠȪȞIJĮȚ Įʌȩ ʌȠȜȜȐ ĮȡȤİȓĮ ʌȘȖĮȓȦȞ ʌȡȠȖȡĮµµȐIJȦȞ. ȈȣȤȞȐ șȑȜȠȣµİ µȓĮ µİIJĮȕȜȘIJȒ ȞĮ İȓȞĮȚ ȖȞȦıIJȒ ıİ ʌİȡȚııȩIJİȡĮ Įʌȩ ȑȞĮ ĮȡȤİȓĮ. ȈIJȘȞ ʌİȡȓʌIJȦıȘ ĮȣIJȒ Ș µİIJĮȕȜȘIJȒ ȠȡȓȗİIJĮȚ ȦȢ țĮșȠȜȚțȒ ıİ ȑȞĮ µȩȞȠ ĮȡȤİȓȠ ʌȘȖĮȓȠȣ ʌȡȠȖȡȐµµĮIJȠȢ țĮȚ ıIJȘ ıȣȞȑȤİȚĮ IJĮ ȣʌȩȜȠȚʌĮ ĮȡȤİȓĮ IJȘ įȘȜȫȞȠȣȞ țȐȞȠȞIJĮȢ ȤȡȒıȘ IJȠȣ țĮșȠȡȚıIJȒ extern. ǻȘȜĮįȒ Ƞ țĮșȠȡȚıIJȒȢ extern ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ȖȚĮ ȞĮ įȘȜȫȞİȚ µȓĮ µİIJĮȕȜȘIJȒ Ș ȠʌȠȓĮ ȑȤİȚ ȠȡȚıIJİȓ ıİ ȐȜȜȠ ĮȡȤİȓȠ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ țĮȚ İȓȞĮȚ İȟȦIJİȡȚțȒ
ȈȣȞĮȡIJȒıİȚȢ
75
µİIJĮȕȜȘIJȒ (įȘȜĮįȒ țĮșȠȜȚțȒ). ȋȡȘıȚµİȪİȚ ıIJȠ ȞĮ țȐȞİȚ µȓĮ İȟȦIJİȡȚțȒ µİIJĮȕȜȘIJȒ ȠȡĮIJȒ ıİ ȑȞĮ ĮȡȤİȓȠ İțIJȩȢ IJȠȣ ĮȡȤİȓȠȣ ıIJȠ ȠʌȠȓȠ ȠȡȓıIJȘțİ. Ȇ.Ȥ. ĮȞ ıIJȠ ĮȡȤİȓȠ file1.c ȣʌȐȡȤİȚ Ƞ țȫįȚțĮȢ: /* file1.c */ int var1; /* ĮȣIJȩȢ Ƞ ȠȡȚıµȩȢ įİıµİȪİȚ µȞȒµȘ ȖȚĮ IJȘȞ var1 */ main() { ... } IJȩIJİ ȖȚĮ ȞĮ İȓȞĮȚ Ș µİIJĮȕȜȘIJȒ var1 ȠȡĮIJȒ ıIJȠ ĮȡȤİȓȠ file2.c ʌȡȑʌİȚ ȞĮ įȘȜȦșİȓ ȦȢ extern: /* file2.c */ function1() { extern int var1; /* ĮȣIJȒ Ș įȒȜȦıȘ țȐȞİȚ ȠȡĮIJȒ IJȘȞ var1 */ ... } ǹȞ Ƞ ȠȡȚıµȩȢ µȚĮȢ İȟȦIJİȡȚțȒȢ µİIJĮȕȜȘIJȒȢ ıȣȞĮȞIJȘșİȓ ıIJȠ ĮȡȤİȓȠ ʌȘȖĮȓȠȣ țȫįȚțĮ ʌȡȚȞ ȤȡȘıȚµȠʌȠȚȘșİȓ Įʌȩ µȓĮ ıȣȖțİțȡȚµȑȞȘ ıȣȞȐȡIJȘıȘ Ș ȠʌȠȓĮ ȣʌȐȡȤİȚ ıIJȠ ȓįȚȠ ĮȡȤİȓȠ, įİȞ ȣʌȐȡȤİȚ ĮȞȐȖțȘ ȞĮ įȘȜȦșİȓ ȦȢ extern µȑıĮ ı'ĮȣIJȒ IJȘ ıȣȞȐȡIJȘıȘ. ȂȐȜȚıIJĮ İȓȞĮȚ țȠȚȞȒ ʌȡĮțIJȚțȒ ȞĮ IJȠʌȠșİIJȠȪȞIJĮȚ ȠȚ ȠȡȚıµȠȓ ȩȜȦȞ IJȦȞ İȟȦIJİȡȚțȫȞ µİIJĮȕȜȘIJȫȞ ıIJȘȞ ĮȡȤȒ IJȠȣ ĮȡȤİȓȠȣ ʌȘȖĮȓȠȣ țȫįȚțĮ, țĮȚ µİIJȐ ȞĮ ʌĮȡĮȜİȓʌȠȞIJĮȚ ȩȜİȢ ȠȚ įȘȜȫıİȚȢ extern. Ȇ.Ȥ.: /* abc.c */ int var2; main() { var2=13; ... } function2() { /* įİȞ İȓȞĮȚ ĮʌĮȡĮȓIJȘIJȠ ȞĮ įȘȜȦșİȓ extern int var2 */ printf("%d\n",var2); } ǹȞ įİ įȠșİȓ ĮȡȤȚțȒ IJȚµȒ ıİ µȓĮ İȟȦIJİȡȚțȒ µİIJĮȕȜȘIJȒ, IJȩIJİ ʌĮȓȡȞİȚ ĮȣIJȩµĮIJĮ ĮȡȤȚțȒ IJȚµȒ µȘįȑȞ.
static ȅ țĮșȠȡȚıIJȒȢ static ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ȖȚĮ ȞĮ ȠȡȓıİȚ ıIJĮIJȚțȑȢ µİIJĮȕȜȘIJȑȢ ıIJȚȢ ĮțȩȜȠȣșİȢ įȪȠ ʌİȡȚʌIJȫıİȚȢ: (i)
ȈIJȠȞ ȠȡȚıµȩ µİIJĮȕȜȘIJȫȞ ȑȟȦ Įʌȩ țȐșİ ıȣȞȐȡIJȘıȘ (İȟȦIJİȡȚțȑȢ ıIJĮIJȚțȑȢ). ȈIJȘȞ ʌİȡȓʌIJȦıȘ ĮȣIJȒ Ș İȟȦIJİȡȚțȒ µİIJĮȕȜȘIJȒ ʌȠȣ ȑȤİȚ țĮșȠȡȚıIJİȓ ȦȢ static ȑȤİȚ ݵȕȑȜİȚĮ µȩȞȠ İȞIJȩȢ IJȠȣ ĮȡȤİȓȠȣ ʌȠȣ ȑȤİȚ ȠȡȚıIJİȓ. ǻİ µʌȠȡİȓ ȞĮ ȤȡȘıȚµȠʌȠȚȘșİȓ Įʌȩ ȐȜȜȠ ĮȡȤİȓȠ ʌȠȣ șȑȜȠȞIJĮȢ ȞĮ ȑȤİȚ ʌȡȩıȕĮıȘ ı'ĮȣIJȒ IJȘ įȘȜȫȞİȚ ȦȢ extern, įȘȜĮįȒ ȠȚ İȟȦIJİȡȚțȑȢ ıIJĮIJȚțȑȢ µİIJĮȕȜȘIJȑȢ ĮʌȠIJİȜȠȪȞ ȚįȚȠțIJȘıȓĮ IJȠȣ ĮȡȤİȓȠȣ ȩʌȠȣ ȠȡȓıIJȘțĮȞ. DzIJıȚ Ƞ țĮșȠȡȚıIJȒȢ static ʌĮȡȑȤİȚ ȑȞĮȞ IJȡȩʌȠ ĮʌȩțȡȣȥȘȢ µİIJĮȕȜȘIJȫȞ.
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
76
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
(ii) ȈIJȘ įȒȜȦıȘ µİIJĮȕȜȘIJȫȞ µȑıĮ ıİ µȓĮ ıȣȞȐȡIJȘıȘ Ȓ ȑȞĮ IJµȒµĮ țȫįȚțĮ (IJȠʌȚțȑȢ ıIJĮIJȚțȑȢ). Ȉ'ĮȣIJȒȞ IJȘȞ ʌİȡȓʌIJȦıȘ Ș IJȠʌȚțȒ µİIJĮȕȜȘIJȒ ʌȠȣ ȑȤİȚ įȘȜȦșİȓ ȦȢ static ȑȤİȚ ȕȑȕĮȚĮ IJȠʌȚțȒ ݵȕȑȜİȚĮ, ĮȜȜȐ įȚĮIJȘȡİȓ IJȘȞ IJȚµȒ IJȘȢ țĮȚ µİIJȐ IJȘȞ ȑȟȠįȠ Įʌȩ IJȠ IJµȒµĮ ȩʌȠȣ ȑȤİȚ įȘȜȦșİȓ. ǹȞIJȓșİIJĮ Įʌȩ IJȚȢ ĮȣIJȩµĮIJİȢ µİIJĮȕȜȘIJȑȢ, ȠȚ İıȦIJİȡȚțȑȢ ıIJĮIJȚțȑȢ µİIJĮȕȜȘIJȑȢ ʌĮȓȡȞȠȣȞ IJȘȞ ĮȡȤȚțȒ IJȠȣȢ IJȚµȒ (ĮȞ ıIJȠȞ ȠȡȚıµȩ IJȠȣȢ ȣʌȐȡȤİȚ țĮȚ ĮʌȩįȠıȘ ĮȡȤȚțȒȢ IJȚµȒȢ) µȩȞȠ µȓĮ ijȠȡȐ, ıIJȘȞ ĮȡȤȒ IJȘȢ İțIJȑȜİıȘȢ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ. DzIJıȚ ĮȞ șİȦȡȒıȠȣµİ IJȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ, ʌȠȣ İȓȞĮȚ IJȠ ȓįȚȠ µİ IJȠ auto.c ʌȠȣ İȓįĮµİ ʌȡȠȘȖȠȣµȑȞȦȢ, µȩȞȠ ʌȠȣ IJȫȡĮ ȣʌȐȡȤİȚ Ƞ țĮșȠȡȚıIJȒȢ static ıIJȘȞ įȒȜȦıȘ IJȘȢ µİIJĮȕȜȘIJȒȢ s: /* static.c */ /* ǹȣIJȩµĮIJİȢ µİIJĮȕȜȘIJȑȢ */ main() { int i;
}
for(i=1;i<=5;i++) printf("%d %d\n",i,f(i));
/* f() */ f(int x) { static int s=100;
/* ĮȣIJȩµĮIJȘ µİIJĮȕȜȘIJȒ */
return(s+=x); } ĬĮ ʌȐȡȠȣµİ ıIJȘȞ ȑȟȠįȠ (ȖȚĮIJȓ ;): 1 2 3 4 5
101 103 106 110 115
ǹȞ įİ įȠșİȓ ĮȡȤȚțȒ IJȚµȒ ıİ µȓĮ µİIJĮȕȜȘIJȒ static, ʌĮȓȡȞİȚ ĮȣIJȩµĮIJĮ ĮȡȤȚțȒ IJȚµȒ µȘįȑȞ. ȅ ȆȓȞĮțĮȢ 7.1 įİȓȤȞİȚ ʌİȡȚȜȘʌIJȚțȐ IJȠ ȤȡȩȞȠ ȗȦȒȢ țĮȚ IJȘȞ ݵȕȑȜİȚĮ IJȦȞ µİIJĮȕȜȘIJȫȞ ıİ ıȤȑıȘ µİ IJȘȞ ʌİȡȚȠȤȒ ıIJȘȞ ȠʌȠȓĮ įȘȜȫȞȠȞIJĮȚ țĮȚ µİ IJȠȣȢ țĮșȠȡȚıIJȑȢ țĮIJȘȖȠȡȓĮȢ ĮʌȠșȒțİȣıȘȢ ʌȠȣ İijĮȡµȩȗȠȞIJĮȚ ı'ĮȣIJȑȢ.
7.6 ȆȇȅȈǻǿȅȇǿȈȉǼȈ ȉȊȆȍȃ ȅ IJȪʌȠȢ µȚĮȢ µİIJĮȕȜȘIJȒȢ µʌȠȡİȓ ȞĮ ȑȤİȚ IJȠȣȢ ʌȡȩıșİIJȠȣȢ ʌȡȠıįȚȠȡȚıµȠȪȢ const, volatile. ǹȞ ıİ µȚĮ µİIJĮȕȜȘIJȒ İijĮȡµȠıIJİȓ Ƞ ʌȡȠıįȚȠȡȚıIJȒȢ const ĮȣIJȒ µʌȠȡİȓ ȞĮ ʌȐȡİȚ ĮȡȤȚțȒ IJȚµȒ ĮȜȜȐ įİȞ İʌȚIJȡȑʌİIJĮȚ țĮµȓĮ İʌȩµİȞȘ ĮȜȜĮȖȒ IJȘȢ IJȚµȒȢ IJȘȢ, ʌ.Ȥ.:
ȈȣȞĮȡIJȒıİȚȢ
77
const float pi=3.14159; ȅ ʌȡȠıįȚȠȡȚıIJȒȢ volatile ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ȖȚĮ ȞĮ įȘȜȫȞİȚ ıIJȠ µİIJĮȖȜȦIJIJȚıIJȒ
ȩIJȚ µȓĮ µİIJĮȕȜȘIJȒ µʌȠȡİȓ ȞĮ ĮȜȜȐȗİȚ IJȠ ʌİȡȚİȤȩµİȞȩ IJȘȢ µİ IJȡȩʌȠȣȢ ʌȠȣ įİȞ ȠȡȓȗȠȞIJĮȚ ȡȘIJȐ Įʌȩ IJȠ ʌȡȩȖȡĮµµĮ. īȚĮ ʌĮȡȐįİȚȖµĮ, µİIJĮȕȜȘIJȑȢ ʌȠȣ ĮȜȜȐȗȠȣȞ Įʌȩ IJȠ ȣȜȚțȩ, ȩʌȦȢ ȡȠȜȩȖȚĮ ʌȡĮȖµĮIJȚțȠȪ ȤȡȩȞȠȣ, įȚĮțȠʌȑȢ ț.Ȝ.ʌ. ʌȡȑʌİȚ ȞĮ ȠȡȓȗȠȞIJĮȚ ȦȢ volatile.
ȆİȡȚȠȤȒ ǻȒȜȦıȘȢ ıȣȞȐȡIJȘıȘ ıȣȞȐȡIJȘıȘ ıȣȞȐȡIJȘıȘ İȟȦIJİȡȚțȐ İȟȦIJİȡȚțȐ Ȓ ıİ ıȣȞȐȡIJȘıȘ İȟȦIJİȡȚțȐ
ȀĮșȠȡȚıIJȒȢ ȀĮIJȘȖȠȡȓĮȢ ǹʌȠșȒțİȣıȘȢ auto (İȟ ȠȡȚıµȠȪ) register static extern static
ȋȡȩȞȠȢ ǽȦȒȢ
ǼµȕȑȜİȚĮ (ȅȡĮIJȩIJȘIJĮ)
ıȣȞȐȡIJȘıȘ
ıȣȞȐȡIJȘıȘ
ıȣȞȐȡIJȘıȘ
ıȣȞȐȡIJȘıȘ
ʌȡȩȖȡĮµµĮ
ıȣȞȐȡIJȘıȘ
ʌȡȩȖȡĮµµĮ
µȩȞȠ ıIJȠ ĮȡȤİȓȠ ʌȠȣ ȠȡȓȗİIJĮȚ
ʌȡȩȖȡĮµµĮ
ıIJȘȞ ʌİȡȚȠȤȒ ʌȠȣ įȘȜȫȞİIJĮȚ
ʌȡȩȖȡĮµµĮ
ĮȡȤİȓȠ
ȆȓȞĮțĮȢ 7.1: ȀĮIJȘȖȠȡȓİȢ ǹʌȠșȒțİȣıȘȢ
7.7 ǻǾȁȍȈǼǿȈ ȂǼȉǹǺȁǾȉȍȃ Ȃİ ȕȐıȘ IJĮ ȩıĮ ĮȞĮʌIJȪȤșȘțĮȞ ıIJȚȢ ʌȡȠȘȖȠȪµİȞİȢ ʌĮȡĮȖȡȐijȠȣȢ (§ 7.5, 7.6 IJȠ ıȣȞIJĮțIJȚțȩ ȖȚĮ IJȘ įȒȜȦıȘ µȚĮȢ µİIJĮȕȜȘIJȒȢ İȓȞĮȚ: (i)
DzȞĮȢ ʌȡȠĮȚȡİIJȚțȩȢ ʌȡȠıįȚȠȡȚıIJȒȢ IJȪʌȠȣ (ȕȜȑʌİ § 7.6 ).
(ii) DzȞĮȢ ʌȡȠĮȚȡİIJȚțȩȢ țĮșȠȡȚıIJȒȢ țĮIJȘȖȠȡȓĮȢ ĮʌȠșȒțİȣıȘȢ (ȕȜȑʌİ § 7.5). (iii) ȉȠ ȩȞȠµĮ IJȠȣ IJȪʌȠȣ ĮțȠȜȠȣșȠȪµİȞȠ Įʌȩ µȓĮ ȜȓıIJĮ İȞȩȢ Ȓ ʌİȡȚııȠIJȑȡȦȞ ĮȞĮȖȞȦȡȚıIJȚțȫȞ µİIJĮȕȜȘIJȫȞ ȤȦȡȚıµȑȞȦȞ µİ țȩµµĮ. (iv) ȂȓĮ ʌȡȠĮȚȡİIJȚțȒ ĮʌȩįȠıȘ ĮȡȤȚțȒȢ IJȚµȒȢ, ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ IJȠȞ IJİȜİıIJȒ = țĮȚ µȓĮ ʌĮȡȐıIJĮıȘ. ȆĮȡĮįİȓȖµĮIJĮ įȘȜȫıİȦȞ µİIJĮȕȜȘIJȫȞ:
int i,j,k; register char alpha; static float beta=1.234; const auto double N=6.023E23;
7.8 ǹȃǹǻȇȅȂǾ ǼȓįĮµİ ıIJĮ ʌȡȠȘȖȠȪµİȞĮ ȩIJȚ µȓĮ ıȣȞȐȡIJȘıȘ µʌȠȡİȓ ȞĮ țȜȘșİȓ Įʌȩ ȠʌȠȚĮįȒʌȠIJİ ȐȜȜȘ ıȣȞȐȡIJȘıȘ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ. ȈIJȘȞ C µȓĮ ıȣȞȐȡIJȘıȘ µʌȠȡİȓ ȞĮ țĮȜİȓ IJȠȞ İĮȣIJȩ IJȘȢ, ȐµİıĮ Ȓ ȑµµİıĮ. ǹȞ µȓĮ ıȣȞȐȡIJȘıȘ, µȑıĮ ıIJȠ IJµȒµĮ IJȦȞ İȞIJȠȜȫȞ IJȘȢ, ʌİȡȚȑȤİȚ µȓĮ țȜȒıȘ IJȠȣ İĮȣIJȠȪ IJȘȢ, IJȩIJİ ȜȑȖİIJĮȚ ĮȞĮįȡȠµȚțȒ (recursive).
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
78
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
Ǿ ĮȞȐȖțȘ IJȘȢ ȪʌĮȡȟȘȢ ĮȞĮįȡȠµȚțȫȞ ıȣȞĮȡIJȒıİȦȞ ʌȡȠȑțȣȥİ Įʌȩ IJȠ ȖİȖȠȞȩȢ ȩIJȚ Ș ȤȡȒıȘ IJȘȢ įȚĮįȚțĮıȓĮȢ IJȘȢ ĮȞĮįȡȠµȒȢ İȓȞĮȚ ȑȞĮ ȠȣıȚĮıIJȚțȩ İȡȖĮȜİȓȠ, IJȠ ȠʌȠȓȠ ʌȠȜȜȑȢ ijȠȡȑȢ ȤȡȘıȚµİȪİȚ ȖȚĮ IJȘȞ ĮʌȜȠʌȠȓȘıȘ IJȘȢ ȜȪıȘȢ İȞȩȢ ʌȡȠȕȜȒµĮIJȠȢ. ȆȠȜȜȐ ʌȡȠȕȜȒµĮIJĮ, țȣȡȓȦȢ µĮșȘµĮIJȚțȐ, İȓȞĮȚ Įʌȩ IJȠȞ ȠȡȚıµȩ IJȠȣȢ ĮȞĮįȡȠµȚțȐ (ĮȞĮįȡȠµȒ İȓȞĮȚ Ƞ IJȡȩʌȠȢ µİ IJȠȞ ȠʌȠȓȠ ȠȡȓȗȠȣµİ țȐIJȚ µȑıȦ IJȠȣ ȓįȚȠȣ IJȠȣ ȠȡȚȗȩµİȞȠȣ), ʌ.Ȥ. IJȠ ıȪȞȠȜȠ IJȦȞ ijȣıȚțȫȞ ĮȡȚșµȫȞ µʌȠȡİȓ ȞĮ ȠȡȚıIJİȓ ȦȢ İȟȒȢ: 1.
ȅ ĮȡȚșµȩȢ 1 İȓȞĮȚ ȑȞĮȢ ijȣıȚțȩȢ ĮȡȚșµȩȢ.
2.
ȅ İʌȩµİȞȠȢ İȞȩȢ ijȣıȚțȠȪ ĮȡȚșµȠȪ İȓȞĮȚ ȑȞĮȢ ijȣıȚțȩȢ ĮȡȚșµȩȢ.
ȩʌȠȣ Ƞ İʌȩµİȞȠȢ İȞȩȢ ijȣıȚțȠȪ ĮȡȚșµȠȪ ȜĮµȕȐȞİIJĮȚ ʌȡȠıșȑIJȠȞIJĮȢ IJȘ µȠȞȐįĮ ıIJȠȞ ĮȡȚșµȩ ĮȣIJȩ. Ǿ įȪȞĮµȘ ĮȣIJȠȪ IJȠȣ ĮȞĮįȡȠµȚțȠȪ ȠȡȚıµȠȪ İȓȞĮȚ Ș ȚțĮȞȩIJȘIJȐ IJȠȣ ȞĮ ȠȡȓȗİȚ ȑȞĮ ıȪȞȠȜȠ, ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ µȩȞȠ įȪȠ İȞIJȠȜȑȢ. Ȃİ IJȠȞ ȓįȚȠ IJȡȩʌȠ, µȓĮ ĮȞĮįȡȠµȚțȒ ıȣȞȐȡIJȘıȘ µʌȠȡİȓ ȞĮ ʌȡȠıįȚȠȡȓȗİȚ ȑȞĮ ȐʌİȚȡȠ ʌȜȒșȠȢ ȣʌȠȜȠȖȚıµȫȞ ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ µȩȞȠ µİȡȚțȑȢ İȞIJȠȜȑȢ. Ǿ IJİȤȞȚțȒ IJȘȢ ĮȞĮįȡȠµȒȢ µʌȠȡİȓ ȞĮ İijĮȡµȠıIJİȓ ĮʌȠIJİȜİıµĮIJȚțȐ ıİ ʌȡȠȕȜȒµĮIJĮ ʌȠȣ ȑȤȠȣȞ IJȘȞ ʌĮȡĮțȐIJȦ įȠµȒ: 1.
Ǿ ȜȪıȘ İȓȞĮȚ İȪțȠȜȘ ȖȚĮ ȠȡȚıµȑȞİȢ İȚįȚțȑȢ ıȣȞșȒțİȢ, ȠȚ ȠʌȠȓİȢ țĮȜȠȪȞIJĮȚ țĮIJĮıIJȐıİȚȢ IJİȡµĮIJȚıµȠȪ.
2.
īȚĮ ȠʌȠȚĮįȒʌȠIJİ įİįȠµȑȞȘ țĮIJȐıIJĮıȘ, ȣʌȐȡȤȠȣȞ țĮȜȐ ȠȡȚıµȑȞȠȚ țĮȞȩȞİȢ ȖȚĮ IJȘ µİIJȐȕĮıȘ ıİ µȓĮ ȞȑĮ țĮIJȐıIJĮıȘ, Ș ȠʌȠȓĮ İȓIJİ İȓȞĮȚ µȓĮ țĮIJȐıIJĮıȘ IJİȡµĮIJȚıµȠȪ Ȓ ȠįȘȖİȓ IJİȜȚțȐ ıİ µȓĮ IJȑIJȠȚĮ țĮIJȐıIJĮıȘ (ĮȞĮįȡȠµȚțȩ ȕȒµĮ).
īȚĮ ȞĮ ȖȓȞȠȣȞ țĮIJĮȞȠȘIJȐ IJĮ ʌĮȡĮʌȐȞȦ, șĮ įȠȪµİ ȑȞĮ ıȣȖțİțȡȚµȑȞȠ ʌĮȡȐįİȚȖµĮ: DzıIJȦ ȩIJȚ µĮȢ ȗȘIJȐȞİ ȞĮ ȣʌȠȜȠȖȓıȠȣµİ IJȠ ʌĮȡĮȖȠȞIJȚțȩ (ȃ!) İȞȩȢ µȘ-ĮȡȞȘIJȚțȠȪ ĮțȑȡĮȚȠȣ ĮȡȚșµȠȪ (ȃ). ȉȠ ʌĮȡĮȖȠȞIJȚțȩ ȠȡȓȗİIJĮȚ ȦȢ İȟȒȢ: ǹȞ ȃ=0, IJȩIJİ ȃ!=1 īȚĮ ȃ>0, IJȩIJİ ȃ!=1*2*3*...*ȃ Ȃİ ȕȐıȘ ĮȣIJȩȞ IJȠȞ ȠȡȚıµȩ, Ș ʌĮȡĮțȐIJȦ ıȣȞȐȡIJȘıȘ ȤȡȘıȚµȠʌȠȚİȓ µȓĮ İʌĮȞĮȜȘʌIJȚțȒ įȚĮįȚțĮıȓĮ (İȞIJȠȜȒ for) ȖȚĮ IJȠȞ ȣʌȠȜȠȖȚıµȩ IJȠȣ ʌĮȡĮȖȠȞIJȚțȠȪ (ıȣȖțȡȓȞİIJİ µİ IJȘ įȚĮįȚțĮıȓĮ ʌȠȣ ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ıIJȠ ʌȡȩȖȡĮµµĮ fact2.c IJȘȢ § 6.4): unsigned long int factorial(int n) { int t; unsigned long int answer=1;
}
/* µȘ-ĮȞĮįȡȠµȚțȒ */
for(t=1;t<=n;t++) answer*=t; return(answer);
ȉȠ ʌĮȡĮȖȠȞIJȚțȩ ȩµȦȢ, µʌȠȡİȓ ȞĮ ȠȡȚıIJİȓ țĮȚ ĮȞĮįȡȠµȚțȐ: (țĮIJȐıIJĮıȘ IJİȡµĮIJȚıµȠȪ) ǹȞ ȃ=0, IJȩIJİ ȃ!=1 īȚĮ ȃ>0, IJȩIJİ ȃ!=ȃ*(ȃ-1)! (ĮȞĮįȡȠµȚțȩ ȕȒµĮ)
ȈȣȞĮȡIJȒıİȚȢ
79
Ȃİ ȕȐıȘ IJȠȞ ʌĮȡĮʌȐȞȦ ȠȡȚıµȩ țĮȚ ȩʌȦȢ ijĮȓȞİIJĮȚ Įʌȩ IJȠ ĮȞĮįȡȠµȚțȩ ȕȒµĮ, IJȠ ʌȡȩȕȜȘµĮ İȪȡİıȘȢ IJȠȣ ʌĮȡĮȖȠȞIJȚțȠȪ İȞȩȢ ĮțȑȡĮȚȠȣ ĮȡȚșµȠȪ ĮȞȐȖİIJĮȚ ıIJȘȞ İȪȡİıȘ IJȠȣ ʌĮȡĮȖȠȞIJȚțȠȪ IJȠȣ ʌȡȠȘȖȠȪµİȞȠȣ µȚțȡȩIJİȡȠȣ ĮțȑȡĮȚȠȣ. ǼȓȞĮȚ ijĮȞİȡȩ ȩIJȚ IJȠ ȃ-1 İȓȞĮȚ ʌȜȘıȚȑıIJİȡȠ ʌȡȠȢ IJȠ 0 Įʌȩ ȩIJȚ İȓȞĮȚ IJȠ ȃ. Ǿ ĮȞĮįȡȠµȚțȒ ıȣȞȐȡIJȘıȘ ȣʌȠȜȠȖȚıµȠȪ IJȠȣ ʌĮȡĮȖȠȞIJȚțȠȪ, İȓȞĮȚ: unsigned long int factorial(int n) { unsigned long int answer;
}
/* ĮȞĮįȡȠµȚțȒ */
if (n==0) answer=1; else answer=n*factorial(n-1); return(answer);
ǹȢ ʌĮȡĮțȠȜȠȣșȒıȠȣµİ IJȚ ıȣµȕĮȓȞİȚ ıİ µȓĮ țȜȒıȘ IJȘȢ ʌȡȠȘȖȠȪµİȞȘȢ ıȣȞȐȡIJȘıȘȢ. ȀȐșİ ȞȑĮ țȜȒıȘ IJȘȢ factorial() ĮȣȟȐȞİȚ IJȠ ĮȞĮįȡȠµȚțȩ İʌȓʌİįȠ. ȅ µİIJĮȖȜȦIJIJȚıIJȒȢ ĮʌȠșȘțİȪİȚ ıİ ıIJȠȓȕĮ (stack) IJȚȢ IJȚµȑȢ IJȘȢ ʌĮȡĮµȑIJȡȠȣ n IJȘȢ ıȣȞȐȡIJȘıȘȢ ȩʌȦȢ İʌȓıȘȢ țĮȚ ȠʌȠȚĮıįȒʌȠIJİ ȐȜȜȘȢ IJȠʌȚțȒȢ µİIJĮȕȜȘIJȒȢ, ʌȡȚȞ Įʌȩ țȐșİ ȞȑĮ țȜȒıȘ. ǵIJĮȞ ȠȜȠțȜȘȡȦșİȓ Ș įȚĮįȚțĮıȓĮ İțIJȑȜİıȘȢ µȓĮȢ țȜȒıȘȢ, Ƞ ȑȜİȖȤȠȢ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ İʌȚıIJȡȑijİȚ ıIJȘȞ ĮµȑıȦȢ İʌȩµİȞȘ İȞIJȠȜȒ µİIJȐ IJȘȞ țȜȒıȘ. ȀĮIJȐ IJȘ įȚȐȡțİȚĮ IJȘȢ țȜȒıȘȢ ȣʌȠȜȠȖȓȗİIJĮȚ Ș ȑțijȡĮıȘ n-1 țĮȚ țĮIJĮȤȦȡİȓIJĮȚ ıĮȞ ȞȑĮ IJȚµȒ IJȘȢ ʌĮȡĮµȑIJȡȠȣ n. ȉİȜȚțȐ Ș ʌĮȡȐµİIJȡȠȢ n șĮ ȖȓȞİȚ µȘįȑȞ țĮȚ Ș µİIJĮȕȜȘIJȒ answer șĮ ʌȐȡİȚ IJȚµȒ 1, µİ IJȘȞ IJİȜİȣIJĮȓĮ țȜȒıȘ IJȘȢ ıȣȞȐȡIJȘıȘȢ factorial() (ʌȡȠȢ IJĮ ʌȓıȦ įȚĮįȚțĮıȓĮ). ȈIJȘ ıȣȞȑȤİȚĮ Ƞ µİIJĮȖȜȦIJIJȚıIJȒȢ İʌȚıIJȡȑijİȚ Įʌȩ țȐșİ ĮȞĮįȡȠµȚțȩ İʌȓʌİįȠ țĮȚ ȣʌȠȜȠȖȓȗİȚ IJȘȞ IJȡȑȤȠȣıĮ IJȚµȒ IJȘȢ answer ʌȠȜȜĮʌȜĮıȚȐȗȠȞIJĮȢ IJȘȞ ʌĮȡȐµİIJȡȠ ʌȠȣ ȑȤİȚ ĮʌȠșȘțİȪıİȚ ı'ĮȣIJȩ IJȠ İʌȓʌİįȠ µİ IJȘȞ IJȚµȒ IJȘȢ answer IJȠȣ ʌȡȠȘȖȠȪµİȞȠȣ İʌȚʌȑįȠȣ. Ȃİ ĮȣIJȩ IJȠȞ IJȡȩʌȠ İʌȚıIJȡȑijȠȣµİ ıIJȠ ĮȡȤȚțȩ İʌȓʌİįȠ (ʌȡȠȢ IJĮ ݵʌȡȩȢ įȚĮįȚțĮıȓĮ). īȚĮ ʌĮȡȐįİȚȖµĮ, µȓĮ țȜȒıȘ factorial(3) ʌİȡȚȑȤİȚ, țĮIJȐ IJȘ įȚȐȡțİȚĮ IJȘȢ İțIJȑȜİıȒȢ IJȘȢ, µȓĮ țȜȒıȘ IJȘȢ factorial(2). īȚĮ IJȠȞ ȣʌȠȜȠȖȚıµȩ IJȘȢ factorial(2) ȤȡİȚȐȗİIJĮȚ Ƞ ȣʌȠȜȠȖȚıµȩȢ IJȘȢ factorial(1), Ș ȠʌȠȓĮ µİ IJȘ ıİȚȡȐ IJȘȢ ȤȡİȚȐȗİIJĮȚ IJȘȞ IJȚµȒ IJȘȢ factorial(0), ʌȠȣ İȓȞĮȚ 1. DzIJıȚ Įʌȩ IJȘ ıIJȚȖµȒ ĮȣIJȒ µʌȠȡİȓ ȞĮ ĮȡȤȓıİȚ Ș ʌȡȠȢ IJĮ ݵʌȡȩȢ įȚĮįȚțĮıȓĮ µİ IJȠȞ ȣʌȠȜȠȖȚıµȩ IJȘȢ factorial(1), ʌȠȣ IJȫȡĮ µʌȠȡİȓ ȞĮ ȣʌȠȜȠȖȚıIJİȓ ıĮȞ 1*1. ȈIJȘ ıȣȞȑȤİȚĮ Ș factorial(2) ȣʌȠȜȠȖȓȗİIJĮȚ ıĮȞ 2*1 țĮȚ IJȑȜȠȢ Ș factorial(3) ıĮȞ 3*2. ȈIJȠ ȈȤȒµĮ 7.2 ʌĮȡȠȣıȚȐȗİIJĮȚ Ș İțIJȑȜİıȘ IJȘȢ factorial(3). ȊʌȐȡȤȠȣȞ 4 ĮȞĮįȡȠµȚțȐ İʌȓʌİįĮ (0-3) țĮȚ IJȡİȚȢ ĮȞĮįȡȠµȚțȑȢ țȜȒıİȚȢ IJȘȢ factorial() ıȣȞ IJȘȞ ĮȡȤȚțȒ țȜȒıȘ. ȉĮ ȕȑȜȘ ʌȠȣ ȑȤȠȣȞ ijȠȡȐ ʌȡȠȢ IJĮ țȐIJȦ įİȓȤȞȠȣȞ IJȘȞ ȑțijȡĮıȘ ʌȠȣ ʌȡȠțȪʌIJİȚ µİIJȐ Įʌȩ IJȘȞ İijĮȡµȠȖȒ țȐșİ ĮȞĮįȡȠµȚțȠȪ ȕȒµĮIJȠȢ. ȂİIJȐ IJȘȞ IJİȜİȣIJĮȓĮ ĮȞĮįȡȠµȚțȒ țȜȒıȘ (factorial(0)), Ș ıȣȞȐȡIJȘıȘ ʌȡȑʌİȚ ȞĮ İʌȚıIJȡȑijİȚ Įʌȩ țȐșİ țȜȒıȘ µİ µȓĮ IJȚµȒ (IJȘȞ IJȚµȒ IJȘȢ answer). Ǿ IJȚµȒ İȓȞĮȚ İțİȓȞȘ ʌȠȣ ʌȡȠțȪʌIJİȚ Įʌȩ IJȠȞ ʌȠȜȜĮʌȜĮıȚĮıµȩ IJȠȣ ĮʌȠIJİȜȑıµĮIJȠȢ IJȠȣ ʌȡȠȘȖȠȣµȑȞȠȣ İʌȚʌȑįȠȣ µİ IJȘȞ IJȚµȒ IJȘȢ ʌĮȡĮµȑIJȡȠȣ n ıIJȠ IJȡȑȤȠȞ İʌȓʌİįȠ. ȅȚ IJȚµȑȢ ĮȣIJȑȢ įȘȜȫȞȠȞIJĮȚ įȓʌȜĮ ıIJĮ ȕȑȜȘ ʌȠȣ ȑȤȠȣȞ ijȠȡȐ ʌȡȠȢ IJĮ İʌȐȞȦ.
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
80
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
¡Ì·‰ÒÔÏÈ͸ ÂðflðÂ‰Ô 0 factorial(3) 6 1
answer=3* factorial(2) 2
2
answer=2* factorial(1) 1
3
answer=1* factorial(0) 1 answer=1
ȈȤȒµĮ 7.2: ȆĮȡȠȣıȓĮıȘ IJȘȢ İțIJȑȜİıȘȢ IJȘȢ factorial(3)
ȉȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ ȤȡȘıȚµȠʌȠȚİȓ µȓĮ ĮȞĮįȡȠµȚțȒ ıȣȞȐȡIJȘıȘ (IJȘȞ stackchar()) Ș ȠʌȠȓĮ įȑȤİIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ µȓĮ ıİȚȡȐ ȤĮȡĮțIJȒȡȦȞ ʌȠȣ IJİȜİȚȫȞİȚ µİ ENTER țĮȚ IJȘȞ IJȣʌȫȞİȚ ıIJȘȞ ȠșȩȞȘ µİ IJȘȞ ĮȞIJȓıIJȡȠijȘ ıİȚȡȐ. ȋȡȘıȚµȠʌȠȚȫȞIJĮȢ IJȘȞ IJİȤȞȚțȒ IJȘȢ ĮȞĮįȡȠµȒȢ, įȚĮȕȐȗİIJĮȚ ȑȞĮȢ ȤĮȡĮțIJȒȡĮȢ ıİ țȐșİ ĮȞĮįȡȠµȚțȩ İʌȓʌİįȠ țĮIJȐ IJȘȞ ʌȡȠȢ IJĮ ʌȓıȦ įȚĮįȚțĮıȓĮ țĮȚ ıIJȘ ıȣȞȑȤİȚĮ Ƞ ȤĮȡĮțIJȒȡĮȢ ĮȣIJȩȢ IJȣʌȫȞİIJĮȚ țĮIJȐ IJȘȞ ʌȡȠȢ IJĮ ݵʌȡȩȢ įȚĮįȚțĮıȓĮ: /* revline */ /* ǹȞIJȓıIJȡȠijȘ İțIJȪʌȦıȘ */ #include <stdio.h> main() { puts("ǻȫıİ ıİȚȡȐ ȤĮȡĮțIJȒȡȦȞ (ȖȚĮ IJȑȜȠȢ ENTER):"); stackchar(); } /* stackchar() */ /* ȉȣʌȫȞİȚ ĮȞIJȓıIJȡȠijĮ µȓĮ ıİȚȡȐ ȤĮȡĮțIJȒȡȦȞ */ stackchar() { char c;
}
c=getche(); if(c!='\r') stackchar(); putchar(c);
ȈȣȞĮȡIJȒıİȚȢ
81
7.9 ȂǹĬǾȂǹȉǿȀǼȈ ȈȊȃǹȇȉǾȈǼǿȈ ǺǿǺȁǿȅĬǾȀǾȈ ȈIJȠ ĮȡȤİȓȠ-İʌȚțİijĮȜȓįĮȢ math.h ʌİȡȚȜĮµȕȐȞȠȞIJĮȚ įȘȜȫıİȚȢ µĮșȘµĮIJȚțȫȞ ıȣȞĮȡIJȒıİȦȞ (İțIJȩȢ IJȘȢ abs(), Ș ȠʌȠȓĮ įȘȜȫȞİIJĮȚ ıIJȠ stdlib.h), ȠȚ țȣȡȚȩIJİȡİȢ Įʌȩ IJȚȢ ȠʌȠȓİȢ İȓȞĮȚ: double cos(double x) /* ıȣȞ(x), IJȠ x ıİ ĮțIJȓȞȚĮ double sin(double x) /* Șµ(x), IJȠ x ıİ ĮțIJȓȞȚĮ double tan(double x) /* İij(x), IJȠ x ıİ ĮțIJȓȞȚĮ double exp(double x) /* ex double log(double x) /* ln(x) double log10(double x) /* log10(x) double pow(double x, double y) /* xy double double double int double double double double double double double
sqrt(double x) floor(double x) ceil(double x) abs(int x) fabs(double x) acos(double x) asin(double x) atan(double x) cosh(double x) sinh(double x) tanh(double x)
/* /* /* /* /* /* /* /* /* /* /*
x
floor(4.9)=4.0 ceil(1.02)=2.0 |x|, įȘȜȫȞİIJĮȚ |x| IJȠȟıȣȞ(x), IJȠ IJȠȟȘµ(x), IJȠ IJȠȟİij(x) ȣʌİȡıȣȞ(x), IJȠ ȣʌİȡȘµ(x), IJȠ ȣʌİȡİij(x), IJȠ
ıIJȠ stdlib.h x [-1..1] x [-1..1] x ıİ ĮțIJȓȞȚĮ x ıİ ĮțIJȓȞȚĮ x ıİ ĮțIJȓȞȚĮ
7.10 ȆǹȇǹǻǼǿīȂǹȉǹ 1. ȃĮ ȖȡĮijİȓ µȓĮ ıȣȞȐȡIJȘıȘ ʌȠȣ ȞĮ įȑȤİIJĮȚ ȦȢ ʌĮȡĮµȑIJȡȠȣȢ įȪȠ ʌȡĮȖµĮIJȚțȠȪȢ țĮȚ ȞĮ İʌȚıIJȡȑijİȚ IJȠ µİȖĮȜȪIJİȡȠ Įʌ'ĮȣIJȠȪȢ. /* max() */ /* ǼʌȚıIJȡȑijİȚ IJȠ µİȖĮȜȪIJİȡȠ Įʌȩ įȪȠ ĮȡȚșµȠȪȢ */ float max(float n1,float n2) { if (n1>n2) return(n1); else return(n2); } 2. īȡȐȥIJİ µȓĮ ıȣȞȐȡIJȘıȘ ʌȠȣ ȞĮ İʌȚıIJȡȑijİȚ IJȠ µİȖĮȜȪIJİȡȠ Įʌȩ IJȡİȚȢ ʌȡĮȖµĮIJȚțȠȪȢ ĮȡȚșµȠȪȢ ʌȠȣ șĮ įȑȤİIJĮȚ ȦȢ ʌĮȡĮµȑIJȡȠȣȢ. ȈIJȘ ıȣȞȑȤİȚĮ ȤȡȘıȚµȠʌȠȚȒıIJİ ĮȣIJȒ IJȘ ıȣȞȐȡIJȘıȘ ıİ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ șĮ ȕȡȓıțİȚ IJȠ µİȖĮȜȪIJİȡȠ Įʌȩ ʌȑȞIJİ ĮȡȚșµȠȪȢ. /* max5.c */ /* ǼȪȡİıȘ µİȖĮȜȪIJİȡȠȣ Įʌȩ ʌȑȞIJİ ĮȡȚșµȠȪȢ */ float max(float,float,float); main() { float a,b,c,d,e,temp,maximum;
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
*/ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */ */
82
}
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
printf("\nǻȫıİ ʌȑȞIJİ ĮȡȚșµȠȪȢ: "); scanf("%f %f %f %f %f", &a,&b,&c,&d,&e); temp=max(a,b,c); maximum=max(temp,d,e); printf("\nȂİȖĮȜȪIJİȡȠȢ İȓȞĮȚ Ƞ %f",maximum);
/* max() */ /* ǼʌȚıIJȡȑijİȚ IJȠ µİȖĮȜȪIJİȡȠ Įʌȩ IJȡİȚȢ ĮȡȚșµȠȪȢ */ float max(float n1,float n2,float n3) { float m;
}
if(n1>n2) m=n1; else m=n2; if(n3>m) m=n3; return(m);
3. ȃĮ ȖȡĮijİȓ µȓĮ ıȣȞȐȡIJȘıȘ Ș ȠʌȠȓĮ șĮ įȑȤİIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ IJȘȞ ȫȡĮ ıIJȘ µȠȡijȒ hh:mm (ȫȡİȢ:ȜİʌIJȐ) țĮȚ șĮ IJȘȞ İʌȚıIJȡȑijİȚ ıİ ȜİʌIJȐ. ȈIJȘ ıȣȞȑȤİȚĮ ȞĮ ȖȓȞİȚ ȤȡȒıȘ IJȘȢ ıȣȞȐȡIJȘıȘȢ Įʌȩ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ ȣʌȠȜȠȖȓȗİȚ IJȘ įȚĮijȠȡȐ ĮȞȐµİıĮ ıİ įȪȠ ȤȡȠȞȚțȑȢ ıIJȚȖµȑȢ, ıİ ȜİʌIJȐ. /* intimes.c */ /* ȊʌȠȜȠȖȚıµȩȢ ȤȡȠȞȚțȒȢ įȚĮijȠȡȐȢ */ main() { int mins1,mins2;
}
puts("ǻȫıİ IJȘȞ 1Ș ȤȡȠȞȚțȒ ıIJȚȖµȒ (µȠȡijȒ hh:mm)"); mins1=getmins(); puts("ǻȫıİ IJȘȞ 2Ș ȤȡȠȞȚțȒ ıIJȚȖµȒ (µȠȡijȒ hh:mm)"); mins2=getmins(); printf("ǻȚĮijȠȡȐ: %d ȜİʌIJȐ", mins2-mins1);
/* getmins() */ /* ǻȑȤİIJĮȚ ȫȡĮ ıİ µȠȡijȒ hh:mm țĮȚ IJȘȞ İʌȚıIJȡȑijİȚ ıİ ȜİʌIJȐ */ getmins() { int hours,minutes;
}
scanf("%d:%d",&hours,&minutes); return(hours*60+minutes);
4. ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ IJȡİȚȢ ĮțȑȡĮȚȠȣȢ ĮȡȚșµȠȪȢ ʌȠȣ șĮ įȘȜȫȞȠȣȞ IJȚȢ µȘȞȚĮȓİȢ ʌȦȜȒıİȚȢ İȞȩȢ ȣȜȚțȠȪ Įʌȩ IJȠȣȢ ʌȦȜȘIJȑȢ īȚȐȞȞȘ, ȂĮȡȓĮ, ǼȜȑȞȘ ĮȞIJȓıIJȠȚȤĮ. DzʌİȚIJĮ, ĮȞȐȜȠȖĮ µİ IJȠ ȪȥȠȢ IJȦȞ ʌȦȜȒıİȦȞ, ȞĮ IJȣʌȫȞİIJĮȚ ȖȚĮ țȐșİ ʌȦȜȘIJȒ µȓĮ ȠȡȚȗȩȞIJȚĮ ȖȡĮµµȒ ĮȞȐȜȠȖȠȣ µȒțȠȣȢ, ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ IJȠ ȤĮȡĮțIJȒȡĮ '='.
ȈȣȞĮȡIJȒıİȚȢ
83
/* bargraph.c */ /* ȆĮȡȐıIJĮıȘ ʌȦȜȒıİȦȞ µİ ȠȡȚȗȩȞIJȚİȢ µʌȐȡİȢ */ main() { int x,y,z;
}
printf("ǻȫıİ IJȚȢ ʌȦȜȒıİȚȢ IJȦȞ IJȡȚȫȞ ʌȦȜȘIJȫȞ (ĮțȑȡĮȚȠȚ): "); scanf("%d %d %d",&x,&y,&z); printf("īȚȐȞȞȘȢ\t"); bar(x); printf("ȂĮȡȓĮ\t"); bar(y); printf("ǼȜȑȞȘ\t"); bar(z);
/* bar() */ /* ǽȦȖȡĮijȓȗİȚ ȠȡȚȗȩȞIJȚĮ µʌȐȡĮ */ bar(int score) { int j;
}
for(j=1;j<=score;j++) printf("="); printf("\n");
5. īȡȐȥIJİ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ ȣʌȠȜȠȖȓȗİȚ IJĮ ݵȕĮįȐ IJȦȞ İȟȒȢ ıȤȘµȐIJȦȞ: ȠȡșȠȖȦȞȓȠȣ ʌĮȡĮȜȜȘȜȠȖȡȐµµȠȣ, țȪțȜȠȣ, IJȡȚȖȫȞȠȣ țĮȚ IJȡĮʌİȗȓȠȣ. Ǿ İʌȚȜȠȖȒ ȖȚĮ IJȠ ʌȠȚȠȣ ıȤȒµĮIJȠȢ IJȠ ݵȕĮįȩȞ șĮ ȣʌȠȜȠȖȚıIJİȓ, ȞĮ ȖȓȞİIJĮȚ µȑıĮ Įʌȩ ȑȞĮ menu İʌȚȜȠȖȫȞ. ȅȚ İʌȚȜȠȖȑȢ IJȠȣ menu ȞĮ țĮȜȠȪȞ țĮIJȐȜȜȘȜİȢ ıȣȞĮȡIJȒıİȚȢ ʌȠȣ ȞĮ ȣʌȠȜȠȖȓȗȠȣȞ IJȠ ĮȞIJȓıIJȠȚȤȠ ݵȕĮįȩȞ. /* areas1.c */ #define PI 3.14159 float square(float,float); float circle(float); float triangle(float,float); float trapezoid(float,float,float); main() { char select; float l,w,r,h,b,b1,b2; do {
clrscr(); puts("1. ǼµȕĮįȩȞ ȠȡșȠȖȦȞȓȠȣ"); puts("2. ǼµȕĮįȩȞ țȪțȜȠȣ"); puts("3. ǼµȕĮįȩȞ IJȡȚȖȫȞȠȣ"); puts("4. ǼµȕĮįȩȞ IJȡĮʌİȗȓȠȣ"); puts("5. ǼȟȠįȠȢ"); printf(" ǼʌȚȜȠȖȒ: "); scanf("%c",&select); switch(select)
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
84
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
{
}
case '1': printf("ȂȒțȠȢ : "); scanf("%f",&l); printf("ȆȜȐIJȠȢ: "); scanf("%f",&w); printf("ǼµȕĮįȩȞ: %f",square(l,w)); getch(); break; case '2': printf("ǹțIJȓȞĮ: "); scanf("%f",&r); printf("ǼµȕĮįȩȞ: %f",circle(r)); getch(); break; case '3': printf("ǺȐıȘ: "); scanf("%f",&b); printf("ǶȥȠȢ: "); scanf("%f",&h); printf("ǼµȕĮįȩȞ: %f",triangle(b,h)); getch(); break; case '4': printf("ǺȐıȘ : "); scanf("%f",&b1); printf("ǺȐıȘ µİȖȐȜȘ: "); scanf("%f",&b2); printf("YȥȠȢ : "); scanf("%f",&h); printf("ǼµȕĮįȩȞ: %f",trapezoid(b1,b2,h)); getch(); break;
} } while(select!='5');
/* square() */ /* ǼµȕĮįȩȞ ȠȡșȠȖȦȞȓȠȣ */ float square(float a,float b) { return(a*b); } /* circle() */ /* ǼµȕĮįȩȞ țȪțȜȠȣ */ float circle(float a) { return(a*a*PI); } /* triangle() */ /* ǼµȕĮįȩȞ IJȡȚȖȫȞȠȣ */ float triangle(float a,float b) { return(a*b/2); } /* trapezoid() */ /* ǼµȕĮįȩȞ IJȡĮʌİȗȓȠȣ */ float trapezoid(float a,float b,float c) { return((a+b)*c/2); } 6. ȃĮ ȖȡȐȥİIJİ µȓĮ ıȣȞȐȡIJȘıȘ ʌȠȣ ȞĮ µİIJĮIJȡȑʌİȚ ȑȞĮȞ ĮțȑȡĮȚȠ ĮȡȚșµȩ IJȠȣ įİțĮįȚțȠȪ ıȣıIJȒµĮIJȠȢ (ȕȐıȘ IJȠ 10) ıİ ĮȡȚșµȩ ıİ ȐȜȜȘ ȕȐıȘ. Ǿ ıȣȞȐȡIJȘıȘ ȞĮ įȑȤİIJĮȚ ȦȢ ʌĮȡĮµȑIJȡȠȣȢ IJȠȞ ĮȡȤȚțȩ ĮȡȚșµȩ țĮȚ IJȘ ȕȐıȘ (Ș ȕȐıȘ ȞĮ İȓȞĮȚ ĮțȑȡĮȚȠȢ Įʌȩ 2 ȦȢ 9) țĮȚ ȞĮ İʌȚıIJȡȑijİȚ IJȠ µİIJĮıȤȘµĮIJȚıµȑȞȠ ĮȡȚșµȩ. ȈIJȘ
ȈȣȞĮȡIJȒıİȚȢ
85
ıȣȞȑȤİȚĮ, Ș ıȣȞȐȡIJȘıȘ ĮȣIJȒ ȞĮ ȤȡȘıȚµȠʌȠȚȘșİȓ ıİ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ șĮ įȑȤİIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ IJȠȞ ĮȡȚșµȩ ıIJȠ įİțĮįȚțȩ ıȪıIJȘµĮ țĮȚ IJȘ ȞȑĮ ȕȐıȘ țĮȚ IJȑȜȠȢ ȞĮ ݵijĮȞȓȗİȚ ıIJȘȞ ȠșȩȞȘ IJȠ µİIJĮıȤȘµĮIJȚıµȑȞȠ ĮȡȚșµȩ. ȅ ĮȜȖȩȡȚșµȠȢ İȓȞĮȚ Ƞ İȟȒȢ: ǻȚĮȚȡȠȪµİ IJȠȞ ĮȡȚșµȩ ʌȠȣ ʌȡȑʌİȚ ȞĮ µİIJĮIJȡĮʌİȓ įȚĮ IJȘȢ ȕȐıȘȢ țĮȚ IJȠ µİȞ ĮțȑȡĮȚȠ ȣʌȩȜȠȚʌȠ İȓȞĮȚ IJȠ ȜȚȖȩIJİȡȠ ıȘµĮȞIJȚțȩ ȥȘijȓȠ IJȠȣ ȞȑȠȣ ĮȡȚșµȠȪ, IJȠ įİ ʌȘȜȓțȠ șİȦȡİȓIJĮȚ ȩIJȚ İȓȞĮȚ Ƞ įİțĮįȚțȩȢ ĮȡȚșµȩȢ ʌȠȣ ʌȡȑʌİȚ ȞĮ µİIJĮıȤȘµĮIJȚıIJİȓ. Ǿ įȚĮįȚțĮıȓĮ ĮȣIJȒ ıIJĮµĮIJȐİȚ ȩIJĮȞ ʌȡȠțȪȥİȚ ʌȘȜȓțȠ µȘįȑȞ. DzIJıȚ ʌ.Ȥ. Ƞ ĮȡȚșµȩȢ 1959 IJȠȣ įİțĮįȚțȠȪ ıȣıIJȒµĮIJȠȢ (ȕȐıȘ 10) µİIJĮıȤȘµĮIJȓȗİIJĮȚ ıIJȠȞ 3647 IJȠȣ ȠțIJĮįȚțȠȪ ıȣıIJȒµĮIJȠȢ (ȕȐıȘ 8), ȩʌȦȢ ijĮȓȞİIJĮȚ ıIJȠ ȈȤȒµĮ 7.3. 1959 8 7
244
244 4
8 30
30 6
8 3
3 3
3
6
4
8 0
7
ȈȤȒµĮ 7.3: ȂİIJĮIJȡȠʌȒ IJȠȣ 1959 ıIJȠ ȠțIJĮįȚțȩ
/* convert.c */ /* ǹȜȜĮȖȒ ȕȐıȘȢ ĮțİȡĮȓȠȣ */ #include <math.h> unsigned long int convert(int,int); main() { int number,base;
}
puts("ǻȫıİ ĮȡȚșµȩ țĮȚ ȕȐıȘ"); scanf("%d %d",&number,&base); printf("ȅ %d µİ ȕȐıȘ %d: %lu",number,base,convert(number,base));
/* convert() */ /* ǹȜȜȐȗİȚ IJȘ ȕȐıȘ İȞȩȢ ĮțİȡĮȓȠȣ */ unsigned long int convert(int n,int b) { int p,y,i=0; unsigned long int result=0; while(n!=0) { y=n%b; n=n/b; result=y*pow(10,i)+result;
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
86
}
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
i++; } return(result);
7. ȃĮ ȖȡĮijİȓ ıȣȞȐȡIJȘıȘ ʌȠȣ ȞĮ ȕȡȓıțİȚ IJȠ ȂȑȖȚıIJȠ ȀȠȚȞȩ ǻȚĮȚȡȑIJȘ (Ȃ.Ȁ.ǻ.) įȪȠ ĮțİȡĮȓȦȞ. ȈIJȘ ıȣȞȑȤİȚĮ ȞĮ ȖȓȞİȚ ȤȡȒıȘ IJȘȢ ıȣȞȐȡIJȘıȘȢ ĮȣIJȒȢ ıİ țĮIJȐȜȜȘȜȠ ʌȡȩȖȡĮµµĮ. īȚĮ IJȘȞ İȪȡİıȘ IJȠȣ Ȃ.Ȁ.ǻ. ȞĮ ȤȡȘıȚµȠʌȠȚȘșİȓ Ƞ ĮȜȖȩȡȚșµȠȢ IJȠȣ ǼȣțȜİȓįȘ:
ȂȀǻ(n,m%n)
ĮȞ nz0
m
ĮȞ n=0
ȂȀǻ(m,n) =
/* mkd.c */ /* ǼȪȡİıȘ Ȃ.Ȁ.ǻ. įȪȠ ĮțİȡĮȓȦȞ */ main() { int a,b;
}
puts("ǻȫıİ įȪȠ ĮțİȡĮȓȠȣȢ:"); scanf("%d %d",&a,&b); printf("ȅ Ȃ.Ȁ.ǻ. İȓȞĮȚ %d",mkd(a,b));
/* mkd() */ /* ǼʌȚıIJȡȑijİȚ IJȠȞ Ȃ.Ȁ.ǻ. IJȦȞ ʌĮȡĮµȑIJȡȦȞ IJȘȢ */ mkd(int x,int y) { int answer;
}
if(y!=0) answer=mkd(y,x%y); else answer=x; return(answer);
8. ȅ µȪșȠȢ ȜȑİȚ ȩIJȚ ıIJȠȣȢ țĮȜȩȖİȡȠȣȢ IJȠȣ ȞĮȠȪ ȂʌȡȐµĮ įȩșȘțİ IJȠ ĮțȩȜȠȣșȠ ʌȡȩȕȜȘµĮ (IJȦȞ ʌȪȡȖȦȞ IJȠȣ ǹȞȩȚ): DzȤȠȣµİ µȓĮ ȕȐıȘ µİ IJȡİȚȢ ıIJȪȜȠȣȢ, ıİ ȑȞĮȞ Įʌȩ IJȠȣȢ ȠʌȠȓȠȣȢ ȑȤȠȣȞ IJȠʌȠșİIJȘșİȓ 64 įȓıțȠȚ, ȩʌȦȢ ıIJȠ ȈȤȒµĮ 7.4 (ıIJȠ ȠʌȠȓȠ ijĮȓȞȠȞIJĮȚ µȩȞȠ 6 įȓıțȠȚ). ȉȠ IJȑȜȠȢ IJȠȣ țȩıµȠȣ șĮ ȑȡșİȚ ĮȞ țĮIJĮijȑȡȠȣµİ ȞĮ IJȠʌȠșİIJȒıȠȣµİ ȩȜȠȣȢ IJȠȣȢ įȓıțȠȣȢ ıİ ȑȞĮȞ ȐȜȜȠ ıIJȪȜȠ, ĮțȠȜȠȣșȫȞIJĮȢ IJȠȣȢ ʌĮȡĮțȐIJȦ țĮȞȩȞİȢ: 1. ǵIJĮȞ µİIJĮijȑȡİIJĮȚ ȑȞĮȢ įȓıțȠȢ ʌȡȑʌİȚ ȞĮ IJȠʌȠșİIJȘșİȓ ıİ ȑȞĮȞ Įʌȩ IJȠȣȢ IJȡİȚȢ ıIJȪȜȠȣȢ. 2. ȂȩȞȠ ȑȞĮȢ įȓıțȠȢ µʌȠȡİȓ ȞĮ µİIJĮijİȡșİȓ țȐșİ ijȠȡȐ țĮȚ ʌȡȑʌİȚ ȞĮ İȓȞĮȚ Įʌȩ ĮȣIJȠȪȢ ʌȠȣ ȕȡȓıțȠȞIJĮȚ ıIJȘȞ țȠȡȣijȒ. 3. DzȞĮȢ µİȖĮȜȪIJİȡȠȢ įȓıțȠȢ įİ µʌȠȡİȓ ȞĮ IJȠʌȠșİIJȘșİȓ ʌȐȞȦ Įʌȩ ȑȞĮ µȚțȡȩIJİȡȠ.
ȈȣȞĮȡIJȒıİȚȢ
87
ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ İʌȚȜȪİȚ IJȠ ʌȡȩȕȜȘµĮ IJȦȞ įȓıțȦȞ IJȠȣ ǹȞȩȚ ȖȚĮ n įȓıțȠȣȢ, ȩʌȠȣ IJȠ n șĮ įȓȞİIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ.
A
B
C
ȈȤȒµĮ 7.4: ȅȚ įȓıțȠȚ IJȠȣ ǹȞȩȚ
/* hanoi.c */ /* ȆȡȩȕȜȘµĮ IJȦȞ įȓıțȦȞ IJȠȣ ǹȞȩȚ */ unsigned long int i=0; main() { int number;
}
puts("ǻȫıİ ĮȡȚșµȩ įȓıțȦȞ:"); scanf("%d",&number); move(number,'A','B','C'); printf("\nȆȡĮȖµĮIJȠʌȠȚȒșȘțĮȞ %lu µİIJĮțȚȞȒıİȚȢ įȓıțȦȞ",i);
/* move() */ /* ǹȞĮįȡȠµȚțȒ ıȣȞȐȡIJȘıȘ µİIJĮțȓȞȘıȘȢ įȓıțȦȞ */ move(int n,char arxikos, char boithitikos,char telikos) { if(n==1) { printf("\nȃĮ țȚȞȘșİȓ Ƞ įȓıțȠȢ Įʌȩ IJȠȞ %c ıIJȠȞ %c", arxikos,telikos); i++; } else { move(n-1,arxikos,telikos,boithitikos); move(1,arxikos,' ',telikos); move(n-1,boithitikos,arxikos,telikos); } }
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
88
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
7.11 ǹȈȀǾȈǼǿȈ 1.
īȡȐȥIJİ µȓĮ ıȣȞȐȡIJȘıȘ rectang(length,width) ʌȠȣ ȞĮ İțIJȣʌȫȞİȚ ȑȞĮ ȠȡșȠȖȫȞȚȠ ʌĮȡĮȜȜȘȜȩȖȡĮµµȠ, ʌȠȣ ȠȚ ʌȜİȣȡȑȢ IJȠȣ ĮʌȠIJİȜȠȪȞIJĮȚ Įʌȩ ĮıIJİȡȓıțȠȣȢ. ȉȠ µȒțȠȢ țĮȚ IJȠ ʌȜȐIJȠȢ IJȠȣ ʌĮȡĮȜȜȘȜȠȖȡȐµµȠȣ İȓȞĮȚ length țĮȚ width ĮȞIJȓıIJȠȚȤĮ.
2.
ȃĮ ȖȡĮijİȓ µȓĮ ıȣȞȐȡIJȘıȘ ʌȠȣ ȞĮ ȣʌȠȜȠȖȓȗİȚ IJȠ sin(x) ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ IJȠȞ IJȪʌȠ:
sin(x) = x - x3/3! + x5/5! - x7/7! +... ȅ ĮȡȚșµȩȢ IJȦȞ ȩȡȦȞ ʌȠȣ șĮ ȤȡȘıȚµȠʌȠȚȠȪȞIJĮȚ ȞĮ įȓȞİIJĮȚ ȦȢ ʌĮȡȐµİIJȡȠȢ ıIJȘȞ țȜȒıȘ IJȘȢ ıȣȞȐȡIJȘıȘȢ. Ȇ.Ȥ. sin(x,3) ıȘµĮȓȞİȚ ȞĮ ȣʌȠȜȠȖȚıIJİȓ IJȠ sin(x) µİ IJȘ ȤȡȒıȘ IJȦȞ IJȡȚȫȞ ʌȡȫIJȦȞ ȩȡȦȞ. 3.
ȅ ĮȞĮįȡȠµȚțȩȢ ȠȡȚıµȩȢ IJȘȢ įȪȞĮµȘȢ an ȖȚĮ n Z+ țĮȚ a R İȓȞĮȚ:
1
ĮȞ n=0
a*an-1
ĮȞ n>0
n
a = īȡȐȥIJİ ĮȞĮįȡȠµȚțȒ ıȣȞȐȡIJȘıȘ įȪȞĮµȘ an.
power(a,n) ʌȠȣ ȞĮ İʌȚıIJȡȑijİȚ IJȘ
4.
ȃĮ ȖȡĮijİȓ ĮȞĮįȡȠµȚțȒ ıȣȞȐȡIJȘıȘ ȖȚĮ IJȠȞ ȣʌȠȜȠȖȚıµȩ IJȠȣ n-ȠıIJȠȪ ȩȡȠȣ IJȘȢ ĮțȠȜȠȣșȓĮȢ Fibonacci. ȅȚ ȩȡȠȚ IJȘȢ ĮțȠȜȠȣșȓĮȢ Fibonacci ȠȡȓȗȠȞIJĮȚ Įʌȩ IJȚȢ ıȤȑıİȚȢ: țĮȚ F1 = 1 , F 2 = 1 FN = FN+1 + FN+2 ȖȚĮ ȃ>2
5.
īȡȐȥIJİ µȓĮ µȘ-ĮȞĮįȡȠµȚțȒ țĮȚ µȓĮ ĮȞĮįȡȠµȚțȒ ıȣȞȐȡIJȘıȘ ʌȠȣ ȞĮ ȣʌȠȜȠȖȓȗİȚ IJȠ ȐșȡȠȚıµĮ, S, µȚĮȢ ıİȚȡȐȢ ĮțİȡĮȓȦȞ șİIJȚțȫȞ ĮȡȚșµȫȞ Įʌȩ IJȠ 1 µȑȤȡȚ IJȠ N, ȩʌȠȣ N ȖȞȦıIJȩȢ șİIJȚțȩȢ ĮțȑȡĮȚȠȢ ĮȡȚșµȩȢ: ȂȘ ĮȞĮįȡȠµȚțȩȢ IJȪʌȠȢ: S(N)=1+2+3+...N ǹȞĮįȡȠµȚțȩȢ IJȪʌȠȢ:
ǹȞ ȃ=1, S(1)=1 īȚĮ ȃ>1, S(N)=N+S(N-1)
6.
ȃĮ ȖȡĮijİȓ µȓĮ ıȣȞȐȡIJȘıȘ ʌȠȣ ȞĮ įȑȤİIJĮȚ ȑȞĮ șİIJȚțȩ ĮțȑȡĮȚȠ ĮȡȚșµȩ țĮȚ ȞĮ IJȠȞ İʌȚıIJȡȑijİȚ µİ IJĮ ȥȘijȓĮ IJȠȣ ıİ ĮȞIJȓıIJȡȠijȘ ıİȚȡȐ (IJȠ IJİȜİȣIJĮȓȠ ȞĮ ȖȓȞİȚ ʌȡȫIJȠ, IJȠ ʌȡȠ-IJİȜİȣIJĮȓȠ ȞĮ ȖȓȞİȚ įİȪIJİȡȠ ț.Ƞ.ț., ʌ.Ȥ. IJȠ 123 ȞĮ IJȠ İʌȚıIJȡȑijİȚ ȦȢ 321).
7.
ȃĮ ȖȡĮijİȓ µȓĮ ıȣȞȐȡIJȘıȘ Ș ȠʌȠȓĮ ȞĮ įȑȤİIJĮȚ ȑȞĮȞ ĮțȑȡĮȚȠ ĮȡȚșµȩ țĮȚ ȞĮ İʌȚıIJȡȑijİȚ IJȠ ʌȜȒșȠȢ IJȦȞ ȥȘijȓȦȞ IJȠȣ.
89
ȀǼĭǹȁǹǿȅ 8
ȆǿȃǹȀǼȈ Ȁǹǿ ǹȁĭǹȇǿĬȂǾȉǿȀǹ 8.1 ȆǿȃǹȀǼȈ ȆȓȞĮțĮȢ (array) İȓȞĮȚ ȑȞĮȢ įȠµȘµȑȞȠȢ IJȪʌȠȢ įİįȠµȑȞȦȞ ʌȠȣ ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ȖȚĮ IJȘȞ țĮIJĮȤȫȡȘıȘ įİįȠµȑȞȦȞ IJȠȣ ȓįȚȠȣ IJȪʌȠȣ ıİ įȚĮįȠȤȚțȑȢ șȑıİȚȢ IJȘȢ µȞȒµȘȢ. ȅ IJȪʌȠȢ IJȦȞ įİįȠµȑȞȦȞ IJȠȣ ʌȓȞĮțĮ ȜȑȖİIJĮȚ ȕĮıȚțȩȢ IJȪʌȠȢ. ǼʌİȚįȒ IJĮ įİįȠµȑȞĮ IJȠȣ ʌȓȞĮțĮ İȓȞĮȚ ȩȜĮ IJȠȣ ȓįȚȠȣ IJȪʌȠȣ, Ƞ ʌȓȞĮțĮȢ ȤĮȡĮțIJȘȡȓȗİIJĮȚ ȦȢ ȠµȠȖİȞȒȢ įȠµȘµȑȞȠȢ IJȪʌȠȢ.
8.1.1 ǻǾȁȍȈǾ ȆǿȃǹȀǹ Ǿ ȖİȞȚțȒ µȠȡijȒ IJȘȢ İȞIJȠȜȒȢ įȒȜȦıȘȢ İȞȩȢ ʌȓȞĮțĮ İȓȞĮȚ:
IJȪʌȠȢ
ĮȞĮȖȞȦȡȚıIJȚțȩ[µȑȖİșȠȢ];
ȩʌȠȣ IJȪʌȠȢ İȓȞĮȚ Ƞ ȕĮıȚțȩȢ IJȪʌȠȢ (base type) IJȠȣ ʌȓȞĮțĮ, țĮȚ IJȠ µȑȖİșȠȢ İȓȞĮȚ ȑȞĮȢ ĮțȑȡĮȚȠȢ ĮȡȚșµȩȢ ʌȠȣ țĮșȠȡȓȗİȚ IJȠȞ ĮȡȚșµȩ IJȦȞ ıIJȠȚȤİȓȦȞ ʌȠȣ șĮ ʌİȡȚȑȤİȚ Ƞ ʌȓȞĮțĮȢ. Ȇ.Ȥ. Ș İȞIJȠȜȒ:
int ar[5]; įȘȜȫȞİȚ ȑȞĮȞ ʌȓȞĮțĮ ĮțİȡĮȓȦȞ µİ ȩȞȠµĮ ar, ȚțĮȞȩ ȞĮ ĮʌȠșȘțİȪıİȚ 5 ĮțȑȡĮȚİȢ µİIJĮȕȜȘIJȑȢ (țĮșݵȚȐ Įʌȩ IJȚȢ µİIJĮȕȜȘIJȑȢ IJȠȣ ʌȓȞĮțĮ ȠȞȠµȐȗİIJĮȚ ıIJȠȚȤİȓȠ). ȉȠ ȈȤȒµĮ 8.1 İȓȞĮȚ µȓĮ ıȤȘµĮIJȚțȒ ĮȞĮʌĮȡȐıIJĮıȘ IJȠȣ ʌȓȞĮțĮ ar. ar
¸ÌÔÏ· ÙÔı ðflÌ·Í·
ar[0]
0
ar[1]
1
Í‹Ë ÛÙÔȘÂflÔ ÙÔı ðflÌ·Í· ar[2] ÂflÌ·È Ù˝ðÔı int
2
ar[3]
3
ar[4]
4
5 Ô ·ÒÈËÏ¸Ú Ù˘Ì ÛÙÔȘÂfl˘Ì ÙÔı ðflÌ·Í·
ȈȤȒµĮ 8.1: ȈȤȘµĮIJȚțȒ ĮȞĮʌĮȡȐıIJĮıȘ ʌȓȞĮțĮ
8.1.2 ǹȃǹĭȅȇǹ Ȉȉǹ ȈȉȅǿȋǼǿǹ ǼȃȅȈ ȆǿȃǹȀǹ īȚĮ ȞĮ ĮȞĮijİȡșȠȪµİ ıIJȠ țȐșİ ıIJȠȚȤİȓȠ IJȠȣ ʌȓȞĮțĮ ȟİȤȦȡȚıIJȐ ȤȡȘıȚµȠʌȠȚȠȪµİ ȑȞĮ įİȓțIJȘ-ʌȓȞĮțĮ (subscript). ȅ įİȓțIJȘȢ-ʌȓȞĮțĮ İȓȞĮȚ ȑȞĮȢ ĮțȑȡĮȚȠȢ ĮȡȚșµȩȢ, Ȓ µȓĮ ĮțȑȡĮȚĮ ʌĮȡȐıIJĮıȘ, ʌȠȣ ȖȡȐijİIJĮȚ µȑıĮ ıİ ĮȖțȪȜİȢ ([]) ʌȠȣ ĮțȠȜȠȣșȠȪȞ IJȠ ĮȞĮȖȞȦȡȚıIJȚțȩ IJȠȣ ʌȓȞĮțĮ. ǹȢ ʌȡȠıȑȟȠȣµİ ȩIJȚ ĮȣIJȩȢ Ƞ ĮȡȚșµȩȢ ȑȤİȚ įȚĮijȠȡİIJȚțȒ ıȘµĮıȓĮ ȩIJĮȞ ĮȞĮijİȡȩµĮıIJİ ı'ȑȞĮ ıIJȠȚȤİȓȠ IJȠȣ ʌȓȞĮțĮ Įʌ'ȩ,IJȚ ȩIJĮȞ įȘȜȫȞȠȣµİ
90
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
IJȠȞ ʌȓȞĮțĮ, ȩʌȠȣ Ƞ ĮȡȚșµȩȢ ıIJȚȢ ĮȖțȪȜİȢ țĮșȠȡȓȗİȚ IJȠ µȑȖİșȠȢ IJȠȣ ʌȓȞĮțĮ. ǵIJĮȞ ĮȞĮijİȡȩµĮıIJİ ı'ȑȞĮ ıIJȠȚȤİȓȠ IJȠȣ ʌȓȞĮțĮ, ĮȣIJȩȢ Ƞ ĮȡȚșµȩȢ țĮșȠȡȓȗİȚ IJȘ șȑıȘ IJȠȣ ıIJȠȚȤİȓȠȣ. ǵȜĮ IJĮ ıIJȠȚȤİȓĮ IJȠȣ ʌȓȞĮțĮ ĮȡȚșµȠȪȞIJĮȚ ĮȡȤȓȗȠȞIJĮȢ Įʌȩ IJȠ µȘįȑȞ. DzIJıȚ, ʌ.Ȥ. IJȠ IJȑIJĮȡIJȠ ıIJȠȚȤİȓȠ IJȠȣ ʌȓȞĮțĮ ar ʌȠȣ įȘȜȫıĮµİ ʌĮȡĮʌȐȞȦ șĮ ĮȞĮijİȡșİȓ ȦȢ:
ar[3] țĮȚ IJȠ IJİȜİȣIJĮȓȠ ıIJȠȚȤİȓȠ IJȠȣ ʌȓȞĮțĮ ȦȢ (ȕȜȑʌİ ȈȤȒµĮ 8.1):
ar[4] ȈIJȠ ʌȡȩȖȡĮµµĮ ʌȠȣ ĮțȠȜȠȣșİȓ ȤȡȘıȚµȠʌȠȚȠȪµİ ȑȞĮȞ ʌȓȞĮțĮ temper ȖȚĮ ȞĮ ĮʌȠșȘțİȪıȠȣµİ IJȚȢ șİȡµȠțȡĮıȓİȢ IJȦȞ ȘµİȡȫȞ µȓĮȢ İȕįȠµȐįĮȢ. ȋȡȘıȚµȠʌȠȚȠȪµİ µȓĮ İȞIJȠȜȒ for ȖȚĮ IJȘȞ İȚıĮȖȦȖȒ IJȦȞ șİȡµȠțȡĮıȚȫȞ ıIJȠȞ ʌȓȞĮțĮ. ȈIJȘ ıȣȞȑȤİȚĮ ȣʌȠȜȠȖȓȗȠȣµİ IJȠ ȐșȡȠȚıµĮ țĮȚ IJȘ µȑıȘ IJȚµȒ IJȦȞ șİȡµȠțȡĮıȚȫȞ, IJȘȞ ȠʌȠȓĮȞ ݵijĮȞȓȗȠȣµİ ıIJȘȞ ȠșȩȞȘ: /* temper.c */ /* ȂȑıȘ IJȚµȒ IJȦȞ șİȡµȠțȡĮıȚȫȞ µȚĮȢ İȕįȠµȐįĮȢ */ #define SIZE 7 main() { float temper[SIZE], sum=0; int day; for(day=0;day<SIZE;day++) { printf("ǻȫıİ IJȘ șİȡµȠțȡĮıȓĮ IJȘȢ %dȘȢ µȑȡĮȢ: ",day+1); scanf("%f",&temper[day]); } for(day=0;day<SIZE;day++) sum+=temper[day]; printf("Ǿ µȑıȘ IJȚµȒ İȓȞĮȚ %.2f",sum/SIZE);
} ȋȡİȚȐȗİIJĮȚ ʌȡȠıȠȤȒ ȩIJĮȞ ȤİȚȡȚȗȩµĮıIJİ ʌȓȞĮțİȢ, ȖȚĮIJȓ Ș ȖȜȫııĮ C įİȞ İțIJİȜİȓ ȑȜİȖȤȠ ȠȡȓȦȞ ıIJȠȣȢ ʌȓȞĮțİȢ. DzIJıȚ IJȓʌȠIJĮ įİ µĮȢ ݵʌȠįȓȗİȚ ȞĮ ȟİʌİȡȐıȠȣµİ IJȠ IJȑȜȠȢ İȞȩȢ ʌȓȞĮțĮ. ǹȞ ȟİʌİȡȐıȠȣµİ IJȠ IJȑȜȠȢ İȞȩȢ ʌȓȞĮțĮ țĮIJȐ IJȘ ȜİȚIJȠȣȡȖȓĮ ĮʌȩįȠıȘȢ IJȚµȒȢ, IJĮ įİįȠµȑȞĮ ʌȠȣ șĮ ĮʌȠįȫıȠȣµİ șĮ IJȠʌȠșİIJȘșȠȪȞ ıIJȘ µȞȒµȘ ȑȟȦ Įʌȩ IJȠȞ ʌȓȞĮțĮ, ʌȚșĮȞȩȞ ıİ șȑıİȚȢ µȞȒµȘȢ ʌȠȣ ȑȤȠȣȞ țȡĮIJȘșİȓ ȖȚĮ ȐȜȜİȢ µİIJĮȕȜȘIJȑȢ, Ȓ ıİ șȑıİȚȢ µȞȒµȘȢ ȩʌȠȣ ȣʌȐȡȤİȚ ĮʌȠșȘțİȣµȑȞȠ IJȠ ȓįȚȠ IJȠ ʌȡȩȖȡĮµµĮ. ǹȣIJȩ șĮ ȠįȘȖȒıİȚ IJȠȣȜȐȤȚıIJȠȞ ıİ ĮʌȡȩıµİȞĮ ĮʌȠIJİȜȑıµĮIJĮ țĮȚ įİ șĮ ȣʌȐȡȟİȚ Įʌȩ IJȠ µİIJĮȖȜȦIJIJȚıIJȒ µȒȞȣµĮ ȜȐșȠȣȢ ȖȚĮ ȞĮ µĮȢ İȚįȠʌȠȚȒıİȚ ȖȚĮ IJȠ IJȚ ıȣµȕĮȓȞİȚ.
8.1.3 ȆǿȃǹȀǼȈ Ȇȅȁȁȍȃ ǻǿǹȈȉǹȈǼȍȃ DzȦȢ IJȫȡĮ ȑȤȠȣµİ įİȚ ʌȓȞĮțİȢ µİ µȓĮ µȩȞȠ įȚȐıIJĮıȘ: µİ ȑȞĮ µȩȞȠ įİȓțIJȘ-ʌȓȞĮțĮ. ǼȓȞĮȚ ȩµȦȢ įȣȞĮIJȩȞ, ȠȚ ʌȓȞĮțİȢ ȞĮ ȑȤȠȣȞ ʌİȡȚııȩIJİȡİȢ IJȘȢ µȓĮȢ įȚĮıIJȐıİȚȢ. DzȞĮȢ ʌȓȞĮțĮȢ įȪȠ įȚĮıIJȐıİȦȞ µʌȠȡİȓ ȞĮ șİȦȡȘșİȓ ȦȢ ȑȞĮȢ ʌȓȞĮțĮȢ µȓĮȢ įȚȐıIJĮıȘȢ, IJȠȣ ȠʌȠȓȠȣ IJĮ ıIJȠȚȤİȓĮ İȓȞĮȚ İʌȓıȘȢ ʌȓȞĮțİȢ µȓĮȢ įȚȐıIJĮıȘȢ. īİȞȚțİȪȠȞIJĮȢ µʌȠȡȠȪµİ ȞĮ ȠȡȓȗȠȣµİ ʌȓȞĮțİȢ µİ ʌİȡȚııȩIJİȡİȢ įȚĮıIJȐıİȚȢ. Ǿ ȖİȞȚțȒ µȠȡijȒ IJȘȢ İȞIJȠȜȒȢ įȒȜȦıȘȢ İȞȩȢ ʌȠȜȣįȚȐıIJĮIJȠȣ ʌȓȞĮțĮ İȓȞĮȚ:
IJȪʌȠȢ
ĮȞĮȖȞȦȡȚıIJȚțȩ[µȑȖİșȠȢ1][µȑȖİșȠȢ2]...[µȑȖİșȠȢn];
ȆȓȞĮțİȢ țĮȚ ǹȜijĮȡȚșµȘIJȚțȐ
91
DzIJıȚ, ȖȚĮ ʌĮȡȐįİȚȖµĮ, Ș ʌĮȡĮțȐIJȦ İȞIJȠȜȒ įȘµȚȠȣȡȖİȓ ȑȞĮ įȚįȚȐıIJĮIJȠ ʌȓȞĮțĮ ĮțİȡĮȓȦȞ 4x3 (įȘȜĮįȒ µİ 4 ȖȡĮµµȑȢ țĮȚ 3 ıIJȒȜİȢ):
int towd[4][3]; Ǿ ĮȞĮijȠȡȐ ıIJĮ ıIJȠȚȤİȓĮ İȞȩȢ ʌȓȞĮțĮ µİ ʌİȡȚııȩIJİȡİȢ IJȘȢ µȓĮȢ įȚĮıIJȐıİȚȢ ȖȓȞİIJĮȚ µİ IJȘ ȤȡȒıȘ ʌİȡȚııȩIJİȡȦȞ Įʌȩ ȑȞĮ įİȚțIJȫȞ-ʌȓȞĮțĮ. Ȇ.Ȥ. ȖȚĮ ȞĮ ĮȞĮijİȡșȠȪµİ ıIJȠ ıIJȠȚȤİȓȠ IJȘȢ 2ȘȢ ȖȡĮµµȒȢ țĮȚ IJȘȢ 3ȘȢ ıIJȒȜȘȢ IJȠȣ ʌȓȞĮțĮ towd ȖȡȐijȠȣµİ:
towd[1][2] ȈIJȠ ȈȤȒµĮ 8.2 įȓȞİIJĮȚ µȓĮ ıȤȘµĮIJȚțȒ ĮȞĮʌĮȡȐıIJĮıȘ IJȠȣ ʌȓȞĮțĮ towd. ÛÙfiÎÂÚ ¸ÌÔÏ· ÙÔı ðflÌ·Í· „Ò·ÏÏ›Ú
towd 0
1
2
0
towd[1][2]
1 Í‹Ë ÛÙÔȘÂflÔ ÙÔı ðflÌ·Í· ÂflÌ·È Ù˝ðÔı int
2 3
towd[3][1] ȈȤȒµĮ 8.2: ȈȤȘµĮIJȚțȒ ĮȞĮʌĮȡȐıIJĮıȘ įȚįȚȐıIJĮIJȠȣ ʌȓȞĮțĮ
ȉȠ ʌȡȩȖȡĮµµĮ ʌȠȣ ĮțȠȜȠȣșİȓ ȤȡȘıȚµȠʌȠȚİȓ ȑȞĮ įȚįȚȐıIJĮIJȠ ʌȓȞĮțĮ ĮțİȡĮȓȦȞ 4x5, IJĮ ıIJȠȚȤİȓĮ IJȠȣ ȠʌȠȓȠȣ įȓȞȠȞIJĮȚ Įʌ'IJȠ ȤȡȒıIJȘ, µȩȜȚȢ ȠȜȠțȜȘȡȦșİȓ Ș İȚıĮȖȦȖȒ Ƞ ʌȓȞĮțĮȢ ݵijĮȞȓȗİIJĮȚ ıIJȘȞ ȠșȩȞȘ. ȈIJȘ ıȣȞȑȤİȚĮ Ƞ ȤȡȒıIJȘȢ țĮȜİȓIJĮȚ ȞĮ įȫıİȚ ȑȞĮȞ ĮțȑȡĮȚȠ, IJȠȞ ȠʌȠȓȠȞ IJȠ ʌȡȩȖȡĮµµĮ ĮȞĮȗȘIJȐ µȑıĮ ıIJȠȞ ʌȓȞĮțĮ. ǹȞ IJȠȞ İȞIJȠʌȓıİȚ IJȣʌȫȞİȚ IJȘ șȑıȘ IJȘȞ ȠʌȠȓĮ ȕȡȓıțİIJĮȚ (ȖȡĮµµȒ, ıIJȒȜȘ): /* found.c */ /* ǹȞĮȗȒIJȘıȘ ıIJȠȚȤİȓȠȣ ıİ ʌȓȞĮțĮ įȪȠ įȚĮıIJȐıİȦȞ */ #define LINES 4 #define COLUMNS 5 main() { int matrix[LINES][COLUMNS],i,j,num,found=0; for(i=0;i<LINES;i++) /* İȚıĮȖȦȖȒ ıIJȠȚȤİȓȦȞ */ for(j=0;j<COLUMNS;j++) /* ıIJȠȞ ʌȓȞĮțĮ */ { printf("ǻȫıİ IJȠ ıIJȠȚȤİȓȠ %d,%d IJȠȣ ʌȓȞĮțĮ: ",i,j); scanf("%d",&matrix[i][j]); } for(i=0;i<LINES;i++) /* İțIJȪʌȦıȘ ʌȓȞĮțĮ */ { for(j=0;j<COLUMNS;j++) printf("%5d",matrix[i][j]); printf("\n"); }
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
92
}
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
printf("ǻȫıİ IJȠȞ ĮțȑȡĮȚȠ ʌȠȣ șȑȜİȚȢ ȞĮ ȥȐȟȦ: "); scanf("%d",&num); i=0; while(!found && i<LINES) /* ȑȡİȣȞĮ IJȠȣ ʌȓȞĮțĮ */ { j=0; while(!found && j<COLUMNS) if(matrix[i][j]==num) found=1; else j++; if(!found) i++; } if(found) printf("O ĮȡȚșµȩȢ %d ȣʌȐȡȤİȚ ıIJȘ șȑıȘ %d,%d",num,i,j); else printf("ȅ ĮȡȚșµȩȢ %d įİȞ ȣʌȐȡȤİȚ ıIJȠȞ ʌȓȞĮțĮ",num);
8.1.4 ǹȆȅǻȅȈǾ ǹȇȋǿȀȍȃ ȉǿȂȍȃ ȈǼ ȆǿȃǹȀǼȈ īȚĮ ȞĮ șȑıȠȣµİ ĮȡȤȚțȑȢ IJȚµȑȢ ı'ȑȞĮȞ ʌȓȞĮțĮ, șĮ ʌȡȑʌİȚ ĮȣIJȩȢ ȞĮ ȑȤİȚ ȠȡȚıIJİȓ İȟȦIJİȡȚțȐ Ȓ ȞĮ ȑȤİȚ țĮșȠȡȚıIJİȓ ȦȢ static (ȕȜȑʌİ § 7.5). Ǿ ȖİȞȚțȒ µȠȡijȒ IJȘȢ İȞIJȠȜȒȢ ĮʌȩįȠıȘȢ ĮȡȤȚțȫȞ IJȚµȫȞ ıİ ȑȞĮȞ ʌȓȞĮțĮ, µȠȚȐȗİȚ µİ IJȦȞ ȐȜȜȦȞ µİIJĮȕȜȘIJȫȞ:
static IJȪʌȠȢ ĮȞĮȖȞȦȡ.[µȑȖ.1]...[µȑȖ.n]={ȜȓıIJĮ_IJȚµȫȞ}; ȩʌȠȣ ȜȓıIJĮ_IJȚµȫȞ İȓȞĮȚ µȓĮ ȜȓıIJĮ ıIJĮșİȡȫȞ ʌȠȣ ȤȦȡȓȗȠȞIJĮȚ µİIJĮȟȪ IJȠȣȢ µİ țȩµµĮ țĮȚ Ƞ IJȪʌȠȢ IJȠȣȢ İȓȞĮȚ ıȣµȕĮIJȩȢ µİ IJȠ ȕĮıȚțȩ IJȪʌȠ IJȠȣ ʌȓȞĮțĮ. ǹȣIJȒ Ș İȞIJȠȜȒ IJȠʌȠșİIJİȓ IJȘȞ ʌȡȫIJȘ ıIJĮșİȡȐ ıIJȘȞ ʌȡȫIJȘ șȑıȘ IJȠȣ ʌȓȞĮțĮ, IJȘ įİȪIJİȡȘ ıIJĮșİȡȐ ıIJȘ įİȪIJİȡȘ șȑıȘ ț.Ƞ.ț. Ǿ ʌĮȡĮțȐIJȦ İȞIJȠȜȒ ĮʌȠįȓįİȚ ĮȡȤȚțȑȢ IJȚµȑȢ ı'ȑȞĮ µȠȞȠįȚȐıIJĮIJȠ ʌȓȞĮțĮ:
static float array[5]={18.3,7.98,6.8,3.1,7.21}; ǵIJĮȞ ĮʌȠįȓįȠȣµİ ĮȡȤȚțȑȢ IJȚµȑȢ ı'ȑȞĮ µȠȞȠįȚȐıIJĮIJȠ ʌȓȞĮțĮ, µʌȠȡȠȪµİ ĮȞ șȑȜȠȣµİ ȞĮ ʌĮȡĮȜİȓȥȠȣµİ IJȠ µȑȖİșȠȢ IJȠȣ ʌȓȞĮțĮ. ȈIJȘȞ ʌİȡȓʌIJȦıȘ ĮȣIJȒ Ƞ µİIJĮȖȜȦIJIJȚıIJȒȢ șĮ µĮȢ țȐȞİȚ IJȘ ȤȐȡȘ ȞĮ µİIJȡȒıİȚ IJȠ ʌȜȒșȠȢ IJȦȞ ıIJȠȚȤİȓȦȞ ıIJȘ ȜȓıIJĮ IJȦȞ ĮȡȤȚțȫȞ IJȚµȫȞ țĮȚ ȞĮ șȑıİȚ ĮȣIJȩ ıĮȞ µȑȖİșȠȢ IJȠȣ ʌȓȞĮțĮ. DzIJıȚ Ș ʌĮȡĮʌȐȞȦ İȞIJȠȜȒ șĮ µʌȠȡȠȪıİ ȞĮ ȒIJĮȞ:
static float array[]={18.3,7.98,6.8,3.1,7.21}; ȍȢ ʌĮȡȐįİȚȖµĮ ĮȢ įȠȪµİ IJȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ IJȠ ȠʌȠȓȠ ȗȘIJȐ Įʌȩ IJȠ ȤȡȒıIJȘ ȞĮ įȫıİȚ țȐʌȠȚȠ ʌȠıȩ ıİ įȡĮȤµȑȢ țĮȚ țĮIJȩʌȚȞ ĮȣIJȩ IJȠ ʌȠıȩ µİIJĮIJȡȑʌİIJĮȚ ıIJȠȞ İȜȐȤȚıIJȠ ĮȡȚșµȩ țİȡµȐIJȦȞ țĮȚ ȤĮȡIJȠȞȠµȚıµȐIJȦȞ ʌȠȣ ȤȡİȚȐȗȠȞIJĮȚ ȖȚĮ ȞĮ ıȣµʌȜȘȡȦșİȓ ĮȣIJȩ: /* change.c */ /* ȂİIJĮIJȡȠʌȒ ʌȠıȠȪ ıIJȠȞ İȜȐȤȚıIJȠ ĮȡȚșµȩ ȞȠµȚıµȐIJȦȞ */ # define SIZE 11 main() { static int table[]={10000,5000,1000,500,100,50,20,10,5,2,1}; /* ĮȡȤȚțȑȢ IJȚµȑȢ ıIJȠȞ ʌȓȞĮțĮ table */ long int amount; int i,quantity;
ȆȓȞĮțİȢ țĮȚ ǹȜijĮȡȚșµȘIJȚțȐ
}
93
printf("ǻȫıİ ʌȠıȩ ıİ įȡĮȤµȑȢ: "); scanf("%D", &amount); for(i=0;i<SIZE;i++) { quantity=amount/table[i]; printf("ȃȩµȚıµĮ %4d įȡȤ. IJݵȐȤȚĮ=%d\n", table[i],quantity); amount %=table[i]; }
ȅȚ ʌȠȜȣįȚȐıIJĮIJȠȚ ʌȓȞĮțİȢ ʌĮȓȡȞȠȣȞ ĮȡȤȚțȑȢ IJȚµȑȢ țĮIJȐ IJȠȞ ȓįȚȠ IJȡȩʌȠ ʌȠȣ ʌĮȓȡȞȠȣȞ țĮȚ ȠȚ µȠȞȠįȚȐıIJĮIJȠȚ. īȚĮ ʌĮȡȐįİȚȖµĮ Ș ʌĮȡĮțȐIJȦ İȞIJȠȜȒ įȓȞİȚ ıIJȠȞ ʌȓȞĮțĮ sqrs ȦȢ ĮȡȤȚțȑȢ IJȚµȑȢ IJȠȣȢ ĮȡȚșµȠȪȢ Įʌȩ 1 ȑȦȢ 4 µĮȗȓ µİ IJĮ IJİIJȡȐȖȦȞȐ IJȠȣȢ:
static int sqrs[4][2]={{1,1}, {2,4}, {3,9}, {4,16}}; Ȓ ȚıȠįȪȞĮµĮ:
static int sqrs[4][2]={1,1, 2,4, 3,9, 4,16}; ĭȣıȚțȐ ȠȚ ĮȡȤȚțȑȢ IJȚµȑȢ șĮ µʌȠȡȠȪıĮȞ ȞĮ ȖȡĮijȠȪȞ țĮȚ ıİ µȓĮ ȖȡĮµµȒ, ĮȞ țĮȚ ĮȣIJȩ įİ µĮȢ ȕȠȘșȐ ıIJȘ ıȤȘµĮIJȚțȒ ĮȞĮʌĮȡȐıIJĮıȘ IJȠȣ ʌȓȞĮțĮ. ȀĮIJȐ IJȘȞ ĮʌȩįȠıȘ ĮȡȤȚțȫȞ IJȚµȫȞ ıİ ʌȠȜȣįȚȐıIJĮIJȠȣȢ ʌȓȞĮțİȢ, µʌȠȡȠȪµİ ĮȞ șȑȜȠȣµİ, ȞĮ ʌĮȡĮȜİȓȥȠȣµİ IJȘȞ ĮȡȚıIJİȡȩIJİȡȘ įȚȐıIJĮıȘ IJȠȣ ʌȓȞĮțĮ. ǹȣIJȩ įİȞ ݵʌȠįȓȗİȚ IJȠ µİIJĮȖȜȦIJIJȚıIJȒ ȞĮ ȣʌȠȜȠȖȓıİȚ ĮȣIJȒ IJȘ įȚȐıIJĮıȘ, ĮijȠȪ ȩȜĮ IJĮ ıIJȠȚȤİȓĮ IJȠȣ ʌȓȞĮțĮ İȓȞĮȚ µİ IJȘ ıİȚȡȐ ĮʌȠșȘțİȣµȑȞĮ țĮIJȐ ȖȡĮµµȑȢ, Įʌȩ IJȠ ʌȡȫIJȠ ȦȢ IJȠ IJİȜİȣIJĮȓȠ, ıİ įȚĮįȠȤȚțȑȢ șȑıİȚȢ µȞȒµȘȢ. īȚĮ ʌĮȡȐįİȚȖµĮ Ș ĮʌȩįȠıȘ ĮȡȤȚțȫȞ IJȚµȫȞ ıIJȠȞ ʌȓȞĮțĮ sqrs șĮ µʌȠȡȠȪıİ ȞĮ ȒIJĮȞ:
static int sqrs[][2]{1,1, 2,4, 3,9, 4,16}; Įʌ'ȩʌȠȣ İȓȞĮȚ ʌȡȠijĮȞȑȢ ȩIJȚ İijȩıȠȞ Ƞ ʌȓȞĮțĮȢ ȑȤİȚ įȪȠ ıIJȒȜİȢ țĮȚ ıȣȞȠȜȚțȐ ȠțIJȫ ıIJȠȚȤİȓĮ, IJȠ µȑȖİșȠȢ IJȘȢ įȚȐıIJĮıȘȢ ʌȠȣ įİȞ țĮșȠȡȓȗİIJĮȚ İȓȞĮȚ 4 (ȖȡĮµµȑȢ x ıIJȒȜİȢ = 8 ȖȡĮµµȑȢ = 8/ıIJȒȜİȢ).
8.1.5 ȆǿȃǹȀǼȈ ȍȈ ȆǹȇǹȂǼȉȇȅǿ ȈǼ ȈȊȃǹȇȉǾȈǼǿȈ ǵʌȦȢ ȟȑȡȠȣµİ IJĮ ıIJȠȚȤİȓĮ İȞȩȢ ʌȓȞĮțĮ țĮIJĮȜĮµȕȐȞȠȣȞ įȚĮįȠȤȚțȑȢ șȑıİȚȢ ıIJȘ µȞȒµȘ IJȠȣ Ǿ/Ȋ. ȀȐșİ șȑıȘ µȞȒµȘȢ ȑȤİȚ ȤȦȡȘIJȚțȩIJȘIJĮ 1 byte (=8 bits) țĮȚ IJȘȢ ĮȞIJȚıIJȠȚȤİȓ ȑȞĮȢ ĮȡȚșµȩȢ ʌȠȣ țĮȜİȓIJĮȚ įȚİȪșȣȞıȘ. ȅȚ įȚİȣșȪȞıİȚȢ ĮȡȤȓȗȠȣȞ Įʌȩ IJȠ µȘįȑȞ țĮȚ įȚĮįȠȤȚțȑȢ șȑıİȚȢ µȞȒµȘȢ ȑȤȠȣȞ įȚİȣșȪȞıİȚȢ ʌȠȣ įȚĮijȑȡȠȣȞ țĮIJȐ ȑȞĮ.
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
94
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ȍȢ įȚİȪșȣȞıȘ IJȠȣ ʌȓȞĮțĮ İȞȞȠİȓIJĮȚ Ș įȚİȪșȣȞıȘ µȞȒµȘȢ ȩʌȠȣ ȕȡȓıțİIJĮȚ ĮʌȠșȘțİȣµȑȞȠ IJȠ ʌȡȫIJȠ ıIJȠȚȤİȓȠ IJȠȣ. ĭȣıȚțȐ, ĮijȠȪ ȟȑȡȠȣµİ IJȠȞ IJȪʌȠ IJȦȞ ıIJȠȚȤİȓȦȞ IJȠȣ ʌȓȞĮțĮ (țĮȚ țĮIJȐ ıȣȞȑʌİȚĮ IJȠȞ ĮȡȚșµȩ IJȦȞ bytes ʌȠȣ țĮIJĮȜĮµȕȐȞİȚ țĮșȑȞĮ Įʌ'ĮȣIJȐ) țĮȚ IJȘ įȚİȪșȣȞıȘ IJȠȣ ʌȡȫIJȠȣ ıIJȠȚȤİȓȠȣ IJȠȣ, µʌȠȡȠȪµİ ȞĮ ȕȡȠȪµİ IJȘ įȚİȪșȣȞıȘ ȠʌȠȚȠȣįȒʌȠIJİ ıIJȠȚȤİȓȠȣ IJȠȣ. ȉȠ İȡȫIJȘµĮ İȓȞĮȚ: ʌȫȢ ĮȞĮijİȡȩµĮıIJİ ıIJȘ įȚİȪșȣȞıȘ IJȠȣ ʌȓȞĮțĮ; ȀĮȚ Ș ĮʌȐȞIJȘıȘ: ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ IJȠ ĮȞĮȖȞȦȡȚıIJȚțȩ IJȠȣ ʌȓȞĮțĮ, ȤȦȡȓȢ IJȚȢ ĮȖțȪȜİȢ. ǹʌȩ IJȘȞ ȐȜȜȘ, Ș įȚİȪșȣȞıȘ IJȠȣ ʌȡȫIJȠȣ ıIJȠȚȤİȓȠȣ IJȠȣ ʌȓȞĮțĮ (ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ IJȠȞ IJİȜİıIJȒ įȚİȪșȣȞıȘȢ &, ʌȠȣ ȑȤȠȣµİ įİȚ ıIJȘȞ § 5.3.2) İȓȞĮȚ:
&ĮȞĮȖȞȦȡȚıIJȚțȩ[0] DzIJıȚ, µİ ȕȐıȘ IJĮ ʌĮȡĮʌȐȞȦ ʌȡȠțȪʌIJİȚ ȩIJȚ:
įȚİȪșȣȞıȘ_ʌȓȞĮțĮ==įȚİȪșȣȞıȘ_ʌȡȫIJȠȣ_ıIJȠȚȤİȓȠȣ_IJȠȣ țĮȚ ȐȡĮ
ĮȞĮȖȞȦȡȚıIJȚțȩ==&ĮȞĮȖȞȦȡȚıIJȚțȩ[0] īȚĮ ȞĮ ȖȓȞȠȣȞ țĮIJĮȞȠȘIJȐ IJĮ ʌĮȡĮʌȐȞȦ ĮȢ șİȦȡȒıȠȣµİ IJȠȞ ȠȡȚıµȩ:
static int list[4]={42,1,64,33}; ȉȠ ȈȤȒµĮ 8.3 įİȓȤȞİȚ IJȘ ıȤȑıȘ µİIJĮȟȪ IJȘȢ ıȤȘµĮIJȚțȒȢ ĮȞĮʌĮȡȐıIJĮıȘȢ IJȠȣ ʌȓȞĮțĮ țĮȚ IJȘȢ ʌȡĮȖµĮIJȚțȒȢ IJȠȣ ȣʌȩıIJĮıȘȢ ıIJȘ µȞȒµȘ. ǼʌȓıȘȢ įİȓȤȞİȚ IJȘ įȚĮijȠȡȐ µİIJĮȟȪ IJȘȢ įȚİȪșȣȞıȘȢ İȞȩȢ ıIJȠȚȤİȓȠȣ IJȠȣ ʌȓȞĮțĮ țĮȚ IJȘȢ IJȚµȒȢ ĮȣIJȠȪ. œÌÔÏ· ‰È½ËıÌÛÁÚ ðflÌ·Í·
”˜ÁÏ·ÙÈÍfi ·Ì·ð·Ò‹ÛÙ·ÛÁ ÙÔı ðflÌ·Í·
ƒÈ½ËıÌÛÁ ðflÌ·Í· —flÌ·Í·Ú ÛÙÁ ÏÌfiÏÁ
list ¢
ƒÈ½ËıÌÛÁ ÛÙÔȘÂflÔı ÙÔı ðflÌ·Í·
¢+1 ¢+2 ¢+3 ¢+4 ¢+5 ¢+6 ¢+7
42 1 64 33
0
1
2
3
42
1
64
33
} list[0] } list[1] } list[2] } list[3] œÌÔÏ· ÛÙÔȘÂflÔı ÙÔı ðflÌ·Í·
&list[3]
‘ÈÏfi ÛÙÔȘÂflÔı ÙÔı ðflÌ·Í·
œÌÔÏ· ÙÁÚ ‰È½ËıÌÛÁÚ ÛÙÔȘÂflÔı ÙÔı ðflÌ·Í·
ȈȤȒµĮ 8.3: Ǿ įȚİȪșȣȞıȘ țĮȚ IJĮ ıIJȠȚȤİȓĮ İȞȩȢ ʌȓȞĮțĮ
ȉȫȡĮ ʌȠȣ țĮIJĮȞȠȒıĮµİ IJĮ ʌİȡȓ įȚİȣșȪȞıİȦȞ IJȦȞ ʌȚȞȐțȦȞ, ĮȢ įȠȪµİ ʌȫȢ ȤȡȘıȚµȠʌȠȚȠȪȞIJĮȚ ȠȚ ʌȓȞĮțİȢ ȦȢ ʌĮȡȐµİIJȡȠȚ ıİ ıȣȞĮȡIJȒıİȚȢ. ȂȑȤȡȚ IJȫȡĮ ȑȤȠȣµİ įİȚ ʌĮȡĮįİȓȖµĮIJĮ ʌȠȣ ȤȡȘıȚµȠʌȠȚȠȪıĮȞ µİIJĮȕȜȘIJȑȢ ȕĮıȚțȫȞ IJȪʌȦȞ įİįȠµȑȞȦȞ ȦȢ ʌȡĮȖµĮIJȚțȑȢ ʌĮȡĮµȑIJȡȠȣȢ ıİ µȓĮ ıȣȞȐȡIJȘıȘ. ȈIJȘȞ ʌİȡȓʌIJȦıȘ ĮȣIJȒ
ȆȓȞĮțİȢ țĮȚ ǹȜijĮȡȚșµȘIJȚțȐ
95
µİIJĮȕȚȕȐȗȠȞIJĮȚ ıIJȘ ıȣȞȐȡIJȘıȘ ȠȚ IJȚµȑȢ IJȦȞ µİIJĮȕȜȘIJȫȞ. Ȃİ ȐȜȜĮ ȜȩȖȚĮ, įȘµȚȠȣȡȖȠȪȞIJĮȚ ĮȞIJȓȖȡĮijĮ IJȦȞ µİIJĮȕȜȘIJȫȞ țĮȚ µȩȞȠ ı'ĮȣIJȐ IJĮ ĮȞIJȓȖȡĮijĮ µʌȠȡİȓ ȞĮ ȑȤİȚ ʌȡȩıȕĮıȘ Ș ıȣȞȐȡIJȘıȘ (țȜȒıȘ țĮIJ'ĮȟȓĮ). ǵIJĮȞ ȤȡȘıȚµȠʌȠȚȠȪµİ ȑȞĮȞ ʌȓȞĮțĮ ȦȢ ʌĮȡȐµİIJȡȠ ıİ µȓĮ ıȣȞȐȡIJȘıȘ, įİ µİIJĮȕȚȕȐȗȠȞIJĮȚ ȠȚ IJȚµȑȢ IJȠȣ ʌȓȞĮțĮ ıIJȘ ıȣȞȐȡIJȘıȘ, įȘȜĮįȒ įİ įȘµȚȠȣȡȖİȓIJĮȚ ȑȞĮ ĮȞIJȓȖȡĮijȠ IJȠȣ ʌȓȞĮțĮ, ʌȐȞȦ ıIJȠ ȠʌȠȓȠ șĮ ȑȤİȚ ʌȡȩıȕĮıȘ Ș ıȣȞȐȡIJȘıȘ. ǹȣIJȩ ʌȠȣ µİIJĮȕȚȕȐȗİIJĮȚ İȓȞĮȚ Ș įȚİȪșȣȞıȘ IJȠȣ ʌȓȞĮțĮ. DzIJıȚ ȠʌȠȚĮįȒʌȠIJİ ĮȜȜĮȖȒ ȖȓȞİȚ Įʌȩ IJȘ ıȣȞȐȡIJȘıȘ ıIJĮ ıIJȠȚȤİȓĮ IJȠȣ ʌȓȞĮțĮ, İȓȞĮȚ ʌȡĮȖµĮIJȚțȒ. ȍȢ İijĮȡµȠȖȒ IJȦȞ ʌĮȡĮʌȐȞȦ ĮȢ įȠȪµİ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ įȑȤİIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ ĮțȑȡĮȚİȢ IJȚµȑȢ ȖȚĮ IJĮ ıIJȠȚȤİȓĮ İȞȩȢ įȚįȚȐıIJĮIJȠȣ ʌȓȞĮțĮ țĮȚ ıIJȘ ıȣȞȑȤİȚĮ ȕȡȓıțİȚ țĮȚ IJȣʌȫȞİȚ IJȘ µİȖĮȜȪIJİȡȘ Įʌ'ĮȣIJȑȢ. Ǿ İȪȡİıȘ IJȘȢ µİȖĮȜȪIJİȡȘȢ IJȚµȒȢ ȖȓȞİIJĮȚ Įʌȩ IJȘ ıȣȞȐȡIJȘıȘ max() Ș ȠʌȠȓĮ įȑȤİIJĮȚ ȦȢ ʌĮȡȐµİIJȡȠ ȑȞĮȞ ʌȓȞĮțĮ. ǹȢ ʌĮȡĮIJȘȡȒıȠȣµİ ȩIJȚ ıIJȘ įȒȜȦıȘ IJȠȣ ʌȓȞĮțĮ ȦȢ IJȣʌȚțȒȢ ʌĮȡĮµȑIJȡȠȣ ıIJȘ ıȣȞȐȡIJȘıȘ, įİ ȤȡİȚȐȗİIJĮȚ ȞĮ ʌȠȪµİ ıIJȘ ıȣȞȐȡIJȘıȘ ʌȩıİȢ ȖȡĮµµȑȢ ȑȤİȚ Ƞ ʌȓȞĮțĮȢ. ǹȣIJȩ įȚȩIJȚ ĮȣIJȒ Ș įȒȜȦıȘ įİȞ țȡĮIJȐİȚ ȤȫȡȠ ıIJȘ µȞȒµȘ ȖȚĮ IJȠȞ ʌȓȞĮțĮ. ȉȠ µȩȞȠ ʌȠȣ ȤȡİȚȐȗİIJĮȚ ȞĮ ȟȑȡİȚ Ș ıȣȞȐȡIJȘıȘ İȓȞĮȚ IJȠ ʌȩıİȢ ıIJȒȜİȢ ȑȤİȚ Ƞ ʌȓȞĮțĮȢ, ĮȣIJȩ IJȘȢ İʌȚIJȡȑʌİȚ ȞĮ ĮȞĮijȑȡİIJĮȚ µİ ĮțȡȓȕİȚĮ ıİ ȠʌȠȚȠįȒʌȠIJİ ıIJȠȚȤİȓȠ IJȠȣ ʌȓȞĮțĮ, țĮșȩıȠȞ IJĮ ıIJȠȚȤİȓĮ IJȠȣ įȚįȚȐıIJĮIJȠȣ ʌȓȞĮțĮ ĮʌȠșȘțİȪȠȞIJĮȚ țĮIJȐ ȖȡĮµµȑȢ ıİ įȚĮįȠȤȚțȑȢ șȑıİȚȢ ıIJȘ µȞȒµȘ. īȚĮ ʌĮȡȐįİȚȖµĮ ȖȚĮ ȞĮ ȕȡİȚ IJȘ șȑıȘ ıIJȘ µȞȒµȘ (ȦȢ ʌȡȠȢ IJȠ ʌȡȫIJȠ ıIJȠȚȤİȓȠ IJȠȣ ʌȓȞĮțĮ) ʌȠȣ İȓȞĮȚ ĮʌȠșȘțİȣµȑȞȠ IJȠ ıIJȠȚȤİȓȠ matrix[3][1], ʌȠȜȜĮʌȜĮıȚȐȗİȚ IJȠȞ ĮȡȚșµȩ IJȘȢ ȖȡĮµµȒȢ (3) µİ IJȠȞ ĮȡȚșµȩ IJȦȞ ıIJȠȚȤİȓȦȞ ĮȞȐ ȖȡĮµµȒ (COLUMNS, ʌȠȣ İȓȞĮȚ 5) țĮȚ µİIJȐ ʌȡȠıșȑIJİȚ IJȠȞ ĮȡȚșµȩ IJȘȢ ıIJȒȜȘȢ (ʌȠȣ İȓȞĮȚ 1). ȉȠ ĮʌȠIJȑȜİıµĮ İȓȞĮȚ 3*5+1=16. /* maxnum.c */ /* ǼȪȡİıȘ µİȖĮȜȪIJİȡȠȣ ĮȡȚșµȠȪ ıİ ʌȓȞĮțĮ įȪȠ įȚĮıIJȐıİȦȞ */ #define LINES 4 #define COLUMNS 5 main() { int matrix[LINES][COLUMNS],i,j,num;
}
for(i=0;i<LINES;i++) for(j=0;j<COLUMNS;j++) { printf("ǻȫıİ IJȠ ıIJȠȚȤİȓȠ %d,%d IJȠȣ ʌȓȞĮțĮ: ",i,j); scanf("%d",&matrix[i][j]); } num=max(matrix); printf("To µȑȖȚıIJȠ ıIJȠȚȤİȓȠ IJȠȣ ʌȓȞĮțĮ İȓȞĮȚ IJȠ %d\n",num);
/* max() */ /* ǼʌȚıIJȡȑijİȚ IJȠ µİȖĮȜȪIJİȡȠ ıIJȠȚȤİȓȠ IJȠȣ ʌȓȞĮțĮ */ max(int matr[][COLUMNS]) { int i,j,m; m=matr[0][0];
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
/* ȑıIJȦ ȩIJȚ µİȖĮȜȪIJİȡȠ ıIJȠȚȤİȓȠ */
96
}
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
for(i=0;i<LINES;i++) /* for(j=0;j<COLUMNS;j++)/* if(m<matr[i][j]) /* m=matr[i][j]; /* return(m);
İȓȞĮȚ IJȠ 0,0, ȑʌİȚIJĮ İȜȑȖȤȠȣµİ IJĮ ȣʌȩȜȠȚʌĮ ıIJȠȚȤİȓĮ, ĮȞ țȐʌȠȚȠ İȓȞĮȚ µİȖĮȜȪIJİȡȠ șȑIJȠȣµİ ĮȣIJȩ ıIJȘ µİIJĮȕȜȘIJȒ m
*/ */ */ */
8.1.6 ȉǹȄǿȃȅȂǾȈǾ ȆǿȃǹȀǹ ȆȡȚȞ ʌȡȠȤȦȡȒıȠȣµİ ıIJĮ ĮȜijĮȡȚșµȘIJȚțȐ, șĮ įȠȪµİ µȓĮ ıȣȞȐȡIJȘıȘ ʌȠȣ IJĮȟȚȞȠµİȓ IJȚȢ IJȚµȑȢ İȞȩȢ ʌȓȞĮțĮ. Ǿ IJĮȟȚȞȩµȘıȘ İȓȞĮȚ ıȘµĮȞIJȚțȒ ȜİȚIJȠȣȡȖȓĮ, ȚįȚĮȓIJİȡĮ ıİ ʌȡȠȖȡȐµµĮIJĮ ʌȠȣ ȤİȚȡȓȗȠȞIJĮȚ ȕȐıİȚȢ įİįȠµȑȞȦȞ (databases), ıIJĮ ȠʌȠȓĮ Ƞ ȤȡȒıIJȘȢ șȑȜİȚ ȞĮ ĮȞĮįȚĮIJȐȟİȚ µȓĮ ĮȡȚșµȘIJȚțȒ Ȓ ĮȜijĮȕȘIJȚțȒ ȜȓıIJĮ ıIJȠȚȤİȓȦȞ, ıİ ĮȪȟȠȣıĮ Ȓ ijșȓȞȠȣıĮ ıİȚȡȐ. ȊʌȐȡȤȠȣȞ ĮȡțİIJȑȢ µȑșȠįȠȚ IJĮȟȚȞȩµȘıȘȢ, µȓĮ Įʌȩ IJȚȢ ĮʌȜȠȪıIJİȡİȢ İȓȞĮȚ Ș µȑșȠįȠȢ IJȘȢ İʌȚȜȠȖȒȢ (sorting by selection). Ǿ µȑșȠįȠȢ ĮȣIJȒ İȓȞĮȚ Ș İȟȒȢ: ǺȡȓıțȠȣµİ IJȠ µȚțȡȩIJİȡȠ ıIJȠȚȤİȓȠ IJȠȣ ʌȓȞĮțĮ țĮȚ IJȠ ĮȞIJĮȜȜȐııȠȣµİ µİ IJȠ ʌȡȫIJȠ ıIJȠȚȤİȓȠ ĮȣIJȠȪ. DzʌİȚIJĮ țȐȞȠȣµİ IJȠ ȓįȚȠ ıIJȠȞ ʌȓȞĮțĮ ʌȠȣ µȑȞİȚ ĮȞ ĮȖȞȠȒıȠȣµİ IJȠ ʌȡȫIJȠ ıIJȠȚȤİȓȠ IJȠȣ ĮȡȤȚțȠȪ ʌȓȞĮțĮ, țȐȞȠȣµİ IJȠ ȓįȚȠ ıIJȠȞ ʌȓȞĮțĮ ʌȠȣ µȑȞİȚ ĮȞ ĮȖȞȠȒıȠȣµİ IJĮ įȪȠ ʌȡȫIJĮ ıIJȠȚȤİȓĮ IJȠȣ ĮȡȤȚțȠȪ ʌȓȞĮțĮ ț.Ƞ.ț. Ǿ µȑșȠįȠȢ ıIJĮµĮIJȐİȚ ĮȞ ijIJȐıȠȣµİ ıİ ʌȓȞĮțĮ µİ ȑȞĮ µȩȞȠ ıIJȠȚȤİȓȠ. /* sortsel.c */ /* ȉĮȟȚȞȩµȘıȘ µİ IJȘ µȑșȠįȠ IJȘȢ İʌȚȜȠȖȒȢ */ #define SIZE 5 main() { int list[SIZE],i;
}
for(i=0;i<SIZE;i++) { printf("ǻȫıİ IJȠ %do ıIJȠȚȤİȓȠ IJȠȣ ʌȓȞĮțĮ: ",i); scanf("%d",&list[i]); } sort(list); printf("ȅ ʌȓȞĮțĮȢ IJĮȟȚȞȠµȘµȑȞȠȢ İȓȞĮȚ:\n"); for(i=0;i<SIZE;i++) printf("%d ",list[i]);
/* sort() */ /* ȉĮȟȚȞȠµİȓ IJȠȞ ʌȓȞĮțĮ µİ IJȘ µȑșȠįȠ IJȘȢ İʌȚȜȠȖȒȢ */ sort(int list[]) { int i,j,k,min,temp; for(i=0;i<SIZE-1;i++) { /* ȣʌȠșȑIJȠȣµİ ȩIJȚ IJȠ İȜȐȤȚıIJȠ min=i; /* ıIJȠȚȤİȓȠ ȕȡȓıțİIJĮȚ ıIJȘȞ 1Ș for(j=i+1;j<SIZE;j++) /* șȑıȘ IJȠȣ ʌȓȞĮțĮ, ıĮȡȫȞȠȣµİ if(list[j]<list[min]) min=j;/* IJȠȞ ʌȓȞĮțĮ țĮȚ ȕȡȓıțȠȣµİ if(min!=i) /* IJȘ șȑıȘ IJȠȣ ʌȡĮȖµĮIJȚțȐ
*/ */ */ */ */
ȆȓȞĮțİȢ țĮȚ ǹȜijĮȡȚșµȘIJȚțȐ
{
}
}
}
temp=list[i]; list[i]=list[min]; list[min]=temp;
/* /* /* /* /*
97
İȜȐȤȚıIJȠȣ ıIJȠȚȤİȓȠȣ,IJȑȜȠȢ İȞĮȜȜȐııȠȣµİ IJȘȞ IJȚµȒ IJȘȢ ʌȡȫIJȘȢ șȑıȘȢ µİ ĮȣIJȒ IJȘȢ șȑıȘȢ ʌȠȣ ȕȡȒțĮµİ IJȠ ʌȡĮȖµĮIJȚțȐ İȜȐȤȚıIJȠ
*/ */ */ */ */
8.2 ǹȁĭǹȇǿĬȂǾȉǿȀǹ Ǿ ıȣȞȘșȑıIJİȡȘ ȤȡȒıȘ IJȦȞ µȠȞȠįȚȐıIJĮIJȦȞ ʌȚȞȐțȦȞ İȓȞĮȚ ıIJȘ įȘµȚȠȣȡȖȓĮ ĮȜijĮȡȚșµȘIJȚțȫȞ (strings). ȈIJȘ C ȑȞĮ ĮȜijĮȡȚșµȘIJȚțȩ, įİȞ İȓȞĮȚ IJȓʌȠIJĮ ȐȜȜȠ Įʌȩ ȑȞĮȞ ʌȓȞĮțĮ ȤĮȡĮțIJȒȡȦȞ, Ƞ ȠʌȠȓȠȢ IJİȡµĮIJȓȗİȚ µİ IJȠ ȤĮȡĮțIJȒȡĮ '\0' Ƞ ȠʌȠȓȠȢ ȜȑȖİIJĮȚ ĮȞȪʌĮȡțIJȠȢ ȤĮȡĮțIJȒȡĮȢ (null character) țĮȚ ȑȤİȚ ĮȡȚșµȘIJȚțȒ IJȚµȒ µȘįȑȞ. īȚĮ IJȠ ȜȩȖȠ ĮȣIJȩ șĮ ʌȡȑʌİȚ ȞĮ įȘȜȫȞȠȣµİ IJȠȣȢ ʌȓȞĮțİȢ ȤĮȡĮțIJȒȡȦȞ țĮIJȐ ȑȞĮ ȤĮȡĮțIJȒȡĮ µİȖĮȜȪIJİȡȠȣȢ Įʌȩ IJȠ µİȖĮȜȪIJİȡȠ ĮȜijĮȡȚșµȘIJȚțȩ ʌȠȣ İʌȚșȣµȠȪµİ ȞĮ ȤȦȡȐȞİ. ǵʌȦȢ µʌȠȡȠȪµİ ȞĮ șȑıȠȣµİ ĮȡȤȚțȑȢ IJȚµȑȢ ıIJȠȣȢ ʌȓȞĮțİȢ, ȑIJıȚ µʌȠȡȠȪµİ țĮȚ ıIJĮ ĮȜijĮȡȚșµȘIJȚțȐ, µȚĮȢ țȚ ĮȣIJȐ İȓȞĮȚ ʌȓȞĮțİȢ ȤĮȡĮțIJȒȡȦȞ. DzIJıȚ Ș ʌĮȡĮțȐIJȦ İȞIJȠȜȒ:
static char str[]={'Ȁ','Į','Ȝ','Ș','µ','ȑ','ȡ','Į','\0'}; șȑIJİȚ IJȘȞ ĮȡȤȚțȒ IJȚµȒ "ȀĮȜȘµȑȡĮ" ıIJȠ ĮȜijĮȡȚșµȘIJȚțȩ str. ǵµȦȢ Ș C µĮȢ ʌĮȡȑȤİȚ ȑȞĮȞ ʌȚȠ ıȪȞIJȠµȠ IJȡȩʌȠ ȖȚĮ ȞĮ țȐȞȠȣµİ IJȠ ȓįȚȠ ʌȡȐȖµĮ:
static char str[]="ȀĮȜȘµȑȡĮ"; ĮȢ ʌȡȠıȑȟȠȣµİ ȩIJȚ ıIJȠ įİȪIJİȡȠ IJȡȩʌȠ įİ ȤȡİȚȐȗİIJĮȚ ȞĮ țȐȞȠȣµİ ȤȡȒıȘ IJȠȣ '\0'. ȉȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ İȟİIJȐȗİȚ ʌȫȢ İȓȞĮȚ ĮʌȠșȘțİȣµȑȞȠ ȑȞĮ ĮȜijĮȡȚșµȘIJȚțȩ ıIJȘ µȞȒµȘ IJȠȣ Ǿ/Ȋ. ȈIJȠ ʌȡȩȖȡĮµµĮ ĮȣIJȩ ijĮȓȞİIJĮȚ țĮȚ µȓĮ ȞȑĮ ıȣȞȐȡIJȘıȘ ȕȚȕȜȚȠșȒțȘȢ, Ș strlen(), IJȘȞ ȠʌȠȓĮ șĮ įȠȪµİ ıIJȘȞ İʌȩµİȞȘ ʌĮȡȐȖȡĮijȠ. /* strexam.c */ main() { char name[81]; int i; puts("ǻȫıİ IJȠ ȩȞȠµȐ ıȠȣ: "); gets(name); for(i=0;i<strlen(name)+4;i++) printf("ǻ/ȞıȘ=%5u ȋĮȡĮțIJ.='%c'=%3d\n",&name[i],name[i],name[i]);
} īȚĮ ȞĮ įİȓȟȠȣµİ IJȚ ıȣµȕĮȓȞİȚ µİIJȐ IJȠ IJȑȜȠȢ IJȠȣ ĮȜijĮȡȚșµȘIJȚțȠȪ, ıIJȠ ʌȡȠȘȖȠȪµİȞȠ ʌȡȩȖȡĮµµĮ, IJȣʌȫȞȠȣµİ ĮțȩµĮ IJȑııİȡȚȢ ȤĮȡĮțIJȒȡİȢ µİIJȐ IJȠ IJȑȜȠȢ IJȠȣ.
8.2.1 ȈȊȃǹȇȉǾȈǼǿȈ ǺǿǺȁǿȅĬǾȀǾȈ īǿǹ ǹȁĭǹȇǿĬȂǾȉǿȀǹ DzȤȠȣµİ įİȚ ıIJȘȞ § 5.2 IJȚȢ ıȣȞĮȡIJȒıİȚȢ gets() țĮȚ puts() ȖȚĮ IJȠ įȚȐȕĮıµĮ țĮȚ IJȘȞ İțIJȪʌȦıȘ ĮȜijĮȡȚșµȘIJȚțȫȞ. ǵIJĮȞ įȚĮȕȐȗȠȣµİ µİ IJȘȞ gets() ȑȞĮ ĮȜijĮȡȚșµȘIJȚțȩ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ, Ƞ ȤĮȡĮțIJȒȡĮȢ IJİȡµĮIJȚıµȠȪ '\0' ʌȡȠıIJȓșİIJĮȚ ĮȣIJȩµĮIJĮ ıIJȠ IJȑȜȠȢ IJȠȣ. ǼțIJȩȢ Įʌ'ĮȣIJȑȢ, Ș C ʌĮȡȑȤİȚ ȑȞĮ ıȪȞȠȜȠ Įʌȩ ıȣȞĮȡIJȒıİȚȢ ȤİȚȡȚıµȠȪ ĮȜijĮȡȚșµȘIJȚțȫȞ, IJȚȢ țȣȡȚȩIJİȡİȢ Įʌ'IJȚȢ ȠʌȠȓİȢ șĮ įȠȪµİ ʌĮȡĮțȐIJȦ:
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
98
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
strlen() Ǿ țȜȒıȘ IJȘȢ strlen() ȑȤİȚ IJȘȞ ʌĮȡĮțȐIJȦ µȠȡijȒ:
strlen(s); ȩʌȠȣ s İȓȞĮȚ ȑȞĮ ĮȜijĮȡȚșµȘIJȚțȩ. Ǿ ıȣȞȐȡIJȘıȘ İʌȚıIJȡȑijİȚ IJȠ ʌȜȒșȠȢ IJȦȞ
ȤĮȡĮțIJȒȡȦȞ (µȒțȠȢ) IJȠȣ ĮȜijĮȡȚșµȘIJȚțȠȪ. ǻİ µİIJȡȐ IJȠ ȤĮȡĮțIJȒȡĮ IJİȡµĮIJȚıµȠȪ '\0'.
strcpy() Ǿ țȜȒıȘ IJȘȢ strcpy() ȑȤİȚ IJȘȞ ʌĮȡĮțȐIJȦ µȠȡijȒ:
strcpy(s1,s2); ȩʌȠȣ s1, s2 ĮȜijĮȡȚșµȘIJȚțȐ. Ǿ ıȣȞȐȡIJȘıȘ ĮȞIJȚȖȡȐijİȚ IJȠ ĮȜijĮȡȚșµȘIJȚțȩ s2 ıIJȠ s1. ȉȠ s1 ʌȡȑʌİȚ ȞĮ İȓȞĮȚ ĮȡțİIJȐ µİȖȐȜȠ ȖȚĮ ȞĮ ȤȦȡȑıİȚ IJȠ s2. strcat() Ǿ țȜȒıȘ IJȘȢ strcat() ȑȤİȚ IJȘȞ ʌĮȡĮțȐIJȦ µȠȡijȒ:
strcat(s1,s2); ȩʌȠȣ s1, s2 ĮȜijĮȡȚșµȘIJȚțȐ. Ǿ ıȣȞȐȡIJȘıȘ ʌȡȠıĮȡIJȐ IJȠ s2 ıIJȠ IJȑȜȠȢ IJȠȣ s1. ȉȠ s1 ʌȡȑʌİȚ ȞĮ İȓȞĮȚ ĮȡțİIJȐ µİȖȐȜȠ ȖȚĮ ȞĮ ȤȦȡȑıİȚ țĮȚ IJȠ s2. strcmp() Ǿ țȜȒıȘ IJȘȢ strcmp() ȑȤİȚ IJȘȞ ʌĮȡĮțȐIJȦ µȠȡijȒ:
strcmp(s1,s2); ȩʌȠȣ s1, s2 ĮȜijĮȡȚșµȘIJȚțȐ. Ǿ ıȣȞȐȡIJȘıȘ ıȣȖțȡȓȞİȚ IJĮ s1, s2 țĮȚ İʌȚıIJȡȑijİȚ IJȚµȒ ĮȡȞȘIJȚțȒ, µȘįİȞȚțȒ, Ȓ șİIJȚțȒ, ĮȞ IJȠ s1 İȓȞĮȚ, ȜİȟȚțȠȖȡĮijȚțȐ, µȚțȡȩIJİȡȠ Įʌȩ, ȓıȠ µİ, Ȓ µİȖĮȜȪIJİȡȠ Įʌȩ IJȠ s2 ĮȞIJȓıIJȠȚȤĮ. ȆĮȡĮțȐIJȦ įȓȞȠȞIJĮȚ µİȡȚțȐ ʌȡȠȖȡȐµµĮIJĮ ʌȠȣ ȤİȚȡȓȗȠȞIJĮȚ ĮȜijĮȡȚșµȘIJȚțȐ, țȐȞȠȞIJĮȢ ȤȡȒıȘ IJȦȞ ıȣȞĮȡIJȒıİȦȞ ʌȠȣ ʌȡȠĮȞĮijȑȡĮµİ. ȉȠ ʌȡȫIJȠ ʌȡȩȖȡĮµµĮ ȤȡȘıȚµȠʌȠȚİȓ IJȘ ıȣȞȐȡIJȘıȘ strcmp() ȖȚĮ ȞĮ ıȣȖțȡȓȞİȚ įȪȠ ĮȜijĮȡȚșµȘIJȚțȐ: /* compare.c */ /* ȈȪȖțȡȚıȘ įȪȠ ĮȜijĮȡȚșµȘIJȚțȫȞ µİ IJȘ ıȣȞȐȡIJȘıȘ strcmp() */ main() { char string1[81], string2[81]; int i;
}
printf("\nǻȫıİ IJȠ ʌȡȫIJȠ ĮȜijĮȡȚșµȘIJȚțȩ: "); gets(string1); printf("ǻȫıİ IJȠ įİȪIJİȡȠ ĮȜijĮȡȚșµȘIJȚțȩ: "); gets(string2); i=strcmp(string1,string2); if(i<0) printf("%s < %s",string1,string2); else if(i>0) printf("%s > %s",string1,string2); else printf("%s == %s",string1,string2);
ȆȓȞĮțİȢ țĮȚ ǹȜijĮȡȚșµȘIJȚțȐ
99
ȉȠ İʌȩµİȞȠ ʌȡȩȖȡĮµµĮ ȗȘIJȐ Įʌȩ IJȠ ȤȡȒıIJȘ ȞĮ ʌȜȘțIJȡȠȜȠȖȒıİȚ ȑȞĮ ĮȜijĮȡȚșµȘIJȚțȩ țĮȚ ȑȞĮȞ ĮțȑȡĮȚȠ ĮȡȚșµȩ. ȈIJȘ ıȣȞȑȤİȚĮ įȚĮȖȡȐijİȚ Įʌȩ IJȠ ĮȜijĮȡȚșµȘIJȚțȩ IJȠ ȤĮȡĮțIJȒȡĮ ʌȠȣ ȕȡȓıțİIJĮȚ ıIJȘ șȑıȘ ʌȠȣ ĮȞIJȚıIJȠȚȤİȓ ıIJȠȞ ĮȡȚșµȩ ʌȠȣ ȑįȦıİ Ƞ ȤȡȒıIJȘȢ: /* delete.c */ /* ǻȚĮȖȡĮijȒ ȤĮȡĮțIJȒȡĮ Įʌȩ ȑȞĮ ĮȜijĮȡȚșµȘIJȚțȩ, */ /* µİ ȤȡȒıȘ IJȘȢ ıȣȞȐȡIJȘıȘȢ strcpy() */ main() { char string[81]; int position;
}
printf("\nǻȫıİ ĮȜijĮȡȚșµȘIJȚțȩ [ENTER], șȑıȘ\n"); gets(string); scanf("%d",&position); strdel(string,position); puts(string);
/* strdel */ /* ǻȚĮȖȡȐijİȚ ȤĮȡĮțIJȒȡĮ Įʌȩ ĮȜijĮȡȚșµȘIJȚțȩ */ strdel(char str[],int n) { /* µİIJĮțȚȞȠȪµİ IJȠ įİȪIJİȡȠ IJµȒµĮ IJȠȣ */ strcpy(&str[n],&str[n+1]);/* ĮȜijĮȡȚșµȘIJȚțȠȪ, µȓĮ șȑıȘ ĮȡȚıIJİȡȐ */ } ȉȑȜȠȢ IJȠ İʌȩµİȞȠ ʌȡȩȖȡĮµµĮ țȐȞİȚ IJȠ ĮȞIJȓșİIJȠ. ǻȚĮȕȐȗİȚ ȑȞĮ ĮȜijĮȡȚșµȘIJȚțȩ, ȑȞĮ ȤĮȡĮțIJȒȡĮ țĮȚ ȑȞĮȞ ĮȡȚșµȩ țĮȚ ʌĮȡݵȕȐȜȜİȚ ıIJȘ șȑıȘ IJȠȣ ĮȜijĮȡȚșµȘIJȚțȠȪ ıIJȘȞ ȠʌȠȓĮ ĮȞIJȚıIJȠȚȤİȓ Ƞ ĮȡȚșµȩȢ, IJȠ ȤĮȡĮțIJȒȡĮ: /* insert.c */ /* ǼȚıĮȖȦȖȒ ȤĮȡĮțIJȒȡĮ ıİ ȑȞĮ ĮȜijĮȡȚșµȘIJȚțȩ, */ /* µİ ȤȡȒıȘ IJȘȢ ıȣȞȐȡIJȘıȘȢ strcpy() */ main() { char character, string[81]; int position; printf("\nǻȫıİ ĮȜijĮȡȚșµȘIJȚțȩ [ENTER],ȤĮȡĮțIJȒȡĮ, șȑıȘ\n"); gets(string); scanf("%c %d",&character,&position); strins(string,character,position); puts(string); } /* strins */ /* ȆĮȡݵȕȐȜȜİȚ ȤĮȡĮțIJȒȡĮ ıİ ĮȜijĮȡȚșµȘIJȚțȩ */ strins(char str[],char ch,int n) { char temp[81]; /* ʌȡȠıȦȡȚȞȒ µİIJĮȕȜȘIJȒ */ strcpy(temp,&str[n]); /* ĮʌȠșȘțİȪȠȣµİ IJȠ įİȪIJİȡȠ µȚıȩ ıIJȘȞ temp */ str[n]=ch; /* İȚıȐȖȠȣµİ IJȠ ȤĮȡĮțIJȒȡĮ ıIJȘ șȑıȘ IJȠȣ */ strcpy(&str[n+1],temp);/* ȠȜȚıșĮȓȞȠȣµİ IJȠ įİȪIJİȡȠ µȚıȩ įİȟȚȐ */
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
100
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
}
8.3 ȆǹȇǹǻǼǿīȂǹȉǹ 1. ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ ıIJȠȚȤİȓĮ ȖȚĮ ȑȞĮ µȠȞȠįȚȐıIJĮIJȠ ʌȓȞĮțĮ ĮțİȡĮȓȦȞ 10 șȑıİȦȞ. ȈIJȘ ıȣȞȑȤİȚĮ ȞĮ ȕȡȓıțİȚ IJȠ µȑȖȚıIJȠ țȚ İȜȐȤȚıIJȠ ıIJȠȚȤİȓȠ ĮȣIJȠȪ, țĮșȫȢ țĮȚ IJȚȢ șȑıİȚȢ ʌȠȣ ȕȡȓıțȠȞIJĮȚ (ȖȡĮµµȒ, ıIJȒȜȘ). /* minmax1.c */ /* ǼȪȡİıȘ IJȠȣ µȚțȡȩIJİȡȠȣ țĮȚ µİȖĮȜȪIJİȡȠȣ ıIJȠȚȤİȓȠȣ /* µȠȞȠįȚȐıIJĮIJȠȣ ʌȓȞĮțĮ țĮșȫȢ țĮȚ IJȦȞ șȑıİȫȞ IJȠȣȢ #define SIZE 10 main() { int i,max,min,imax,imin,list[SIZE];
}
*/ */
for(i=0;i<SIZE;i++) { printf("ǻȫıİ ĮțȑȡĮȚȠ: "); /* İȚıĮȖȦȖȒ ıIJȠȚȤİȓȦȞ */ scanf("%d",&list[i]); /* ıIJȠȞ ʌȓȞĮțĮ */ } for(i=0;i<SIZE;i++) /* İțIJȪʌȦıȘ ʌȓȞĮțĮ */ printf("%d ",list[i]); max=min=list[0]; /* ȣʌȠșȑIJȠȣµİ ȩIJȚ IJȠ µȑȖȚıIJȠ imax=imin=0; /* țĮȚ IJȠ İȜȐȤȚıIJȠ ıIJȠȚȤİȓȠ for(i=1;i<SIZE;i++) /* ȕȡȓıțȠȞIJĮȚ ıIJȘȞ ʌȡȫIJȘ șȑıȘ, { /* ıIJȘ ıȣȞȑȤİȚĮ ıĮȡȫȞȠȣµİ ȩȜĮ if(list[i]>max) /* IJĮ ıIJȠȚȤİȓĮ țĮȚ İȜȑȖȤȠȣµİ { /* țĮșȑȞĮ Įʌ'ĮȣIJȐ İȓȞĮȚ µİȖĮmax=list[i]; /* ȜȪIJİȡȠ Įʌȩ IJȠ µȑȤȡȚ ıIJȚȖµȒȢ imax=i; /* µȑȖȚıIJȠ Ȓ µȚțȡȩIJİȡȠ Įʌȩ IJȠ } /* µȑȤȡȚ ıIJȚȖµȒȢ İȜȐȤȚıIJȠ, ĮȞ else if(list[i]<min) /* İȓȞĮȚ IJȩIJİ ĮȜȜȐȗȠȣµİ IJȚȢ { /* µȑȤȡȚ ıIJȚȖµȒȢ ȣʌȠșȑıİȚȢ µĮȢ min=list[i]; /* ȖȚĮ IJȠ µȑȖȚıIJȠ țĮȚ (Ȓ) İȜȐimin=i; /* ȤȚıIJȠ țĮȚ ıȣȞİȤȓȗȠȣµİ µȑȤȡȚ } /* IJȠ IJȑȜȠȢ IJȠȣ ʌȓȞĮțĮ } printf("\nȂİȖĮȜȪIJİȡȠ ıIJȠȚȤİȓȠ %d, șȑıȘ %d\n",max,imax); printf("\nȂȚțȡȩIJİȡȠ ıIJȠȚȤİȓȠ %d, șȑıȘ %d\n",min,imin);
2. ȈIJȘȞ § 8.1.6 İȓįĮµİ µȓĮ µȑșȠįȠ IJĮȟȚȞȩµȘıȘȢ, ĮȣIJȒ IJȘȢ İʌȚȜȠȖȒȢ. ȂȓĮ ıȤİIJȚțȐ ĮʌȜȒ țĮȚ ʌȚȠ ȖȡȒȖȠȡȘ µȑșȠįȠȢ IJĮȟȚȞȩµȘıȘȢ İȓȞĮȚ Ș µȑșȠįȠȢ IJȘȢ ijȣıĮȜȓįĮȢ (bubble sort) țĮIJȐ IJȘȞ ȠʌȠȓĮ ıȣȖțȡȓȞȠȞIJĮȚ IJĮ ıIJȠȚȤİȓĮ ĮȞȐ įȪȠ µİIJĮȟȪ IJȠȣȢ. ȈȣȖțİțȡȚµȑȞĮ, ĮȞ ȣʌȠșȑıȠȣµİ ȩIJȚ ȑȤȠȣµİ ȑȞĮȞ ʌȓȞĮțĮ µİ ȃ ıIJȠȚȤİȓĮ, ĮȡȤȚțȐ ıȣȖțȡȓȞȠȞIJĮȚ IJȠ ʌȡȫIJȠ µİ IJȠ įİȪIJİȡȠ țĮȚ ĮȞ IJȠ ʌȡȫIJȠ İȓȞĮȚ µİȖĮȜȪIJİȡȠ Įʌȩ IJȠ įİȪIJİȡȠ, IJȩIJİ ĮȞIJĮȜȜȐııȠȞIJĮȚ. ȈIJȘ ıȣȞȑȤİȚĮ ıȣȖțȡȓȞȠȞIJĮȚ IJȠ įİȪIJİȡȠ µİ IJȠ IJȡȓIJȠ țĮȚ ĮȞ IJȠ įİȪIJİȡȠ İȓȞĮȚ µİȖĮȜȪIJİȡȠ Įʌȩ IJȠ IJȡȓIJȠ ĮȞIJĮȜȜȐııȠȞIJĮȚ, ț.Ƞ.ț. īİȞȚțȐ ȖȚĮ ȃ ıIJȠȚȤİȓĮ ȖȓȞȠȞIJĮȚ ȃ-1 ıȣȖțȡȓıİȚȢ. ȈIJȠ IJȑȜȠȢ IJȦȞ ıȣȖțȡȓıİȦȞ ʌĮȡĮIJȘȡȠȪµİ ȩIJȚ IJȠ µİȖĮȜȪIJİȡȠ ıIJȠȚȤİȓȠ ȕȡȓıțİIJĮȚ ıIJȠ IJȑȜȠȢ IJȠȣ ʌȓȞĮțĮ țĮȚ IJĮ µȚțȡȩIJİȡĮ ıIJȠȚȤİȓĮ
*/ */ */ */ */ */ */ */ */ */ */ */ */ */
ȆȓȞĮțİȢ țĮȚ ǹȜijĮȡȚșµȘIJȚțȐ
101
ȑȤȠȣȞ "ĮȞȑȕİȚ" ʌȡȠȢ IJȘȞ ĮȡȤȒ IJȠȣ (ıĮȞ ijȣıĮȜȓįİȢ). ȈIJȘ ıȣȞȑȤİȚĮ İʌĮȞĮȜĮµȕȐȞİIJĮȚ Ș įȚĮįȚțĮıȓĮ ıȣȖțȡȓȞȠȞIJĮȢ Įʌȩ IJȘȞ ĮȡȤȒ IJĮ ıIJȠȚȤİȓĮ µİIJĮȟȪ IJȠȣȢ, İțIJȩȢ Įʌȩ IJȠ IJİȜİȣIJĮȓȠ. ǻȘȜĮįȒ IJȫȡĮ ȖȓȞȠȞIJĮȚ ȃ-2 ıȣȖțȡȓıİȚȢ. ȈȣȞȠȜȚțȐ Ș įȚĮįȚțĮıȓĮ İʌĮȞĮȜĮµȕȐȞİIJĮȚ ȃ-1 ijȠȡȑȢ țĮȚ țȐșİ ijȠȡȐ ȖȓȞİIJĮȚ µȓĮ ıȪȖțȡȚıȘ ȜȚȖȩIJİȡȘ. ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ IJĮȟȚȞȠµİȓ ȑȞĮȞ ʌȓȞĮțĮ µİ IJȘ µȑșȠįȠ IJȘȢ ijȣıĮȜȓįĮȢ. ȈIJȘȞ ȠȣıȓĮ IJȠ ʌȡȩȖȡĮµµĮ İȓȞĮȚ ȓįȚȠ µİ IJȠ sortsel.c IJȘȢ § 8.1.6, µȩȞȠ ʌȠȣ Ș ıȣȞȐȡIJȘıȘ sort() șĮ ĮȜȜȐȟİȚ țĮȚ șĮ ȖȓȞİȚ ȩʌȦȢ ʌĮȡĮțȐIJȦ: /* sort() */ /* TĮȟȚȞȠµİȓ IJȠȞ ʌȓȞĮțĮ µİ IJȘ µȑșȠįȠ IJȘȢ ijȣıĮȜȓįĮȢ */ sort(int list[]) { int i,j,temp;
}
for(i=0;i<SIZE-1;i++) for(j=0;j<SIZE-1-i;j++) if(list[j]>list[j+1]) { temp=list[j]; list[j]=list[j+1]; list[j+1]=temp; }
3. ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ȖȚĮ IJȠȞ ʌȡȠıįȚȠȡȚıµȩ IJȘȢ șȑıȘȢ İȞȩȢ ıIJȠȚȤİȓȠȣ µȑıĮ ıİ ȑȞĮ µȠȞȠįȚȐıIJĮIJȠ ʌȓȞĮțĮ (ȑıIJȦ ĮțİȡĮȓȦȞ). ǹȞ Ƞ ʌȓȞĮțĮȢ įİȞ İȓȞĮȚ IJĮȟȚȞȠµȘµȑȞȠȢ, IJȩIJİ Ƞ µȩȞȠȢ IJȡȩʌȠȢ ĮȞĮȗȒIJȘıȘȢ İȓȞĮȚ Ș ıİȚȡȚĮțȒ (serial) ĮȞĮȗȒIJȘıȘ. ȀĮIJȐ IJȘ ıİȚȡȚĮțȒ ĮȞĮȗȒIJȘıȘ ıȣȖțȡȓȞȠȣµİ IJȠ ıIJȠȚȤİȓȠ ʌȠȣ ȗȘIJȐµİ µİ IJȠ ʌȡȫIJȠ ıIJȠȚȤİȓȠ IJȠȣ ʌȓȞĮțĮ. ǹȞ įİȞ İȓȞĮȚ ȓįȚĮ ıȣȖțȡȓȞȠȣµİ IJȠ ȗȘIJȠȪµİȞȠ ıIJȠȚȤİȓȠ µİ IJȠ įİȪIJİȡȠ ıIJȠȚȤİȓȠ IJȠȣ ʌȓȞĮțĮ ț.Ƞ.ț. Ȃİ IJȘ µȑșȠįȠ ĮȣIJȒ, ȖȚĮ ʌȓȞĮțĮ ȃ ıIJȠȚȤİȓȦȞ, ĮʌĮȚIJȠȪȞIJĮȚ țĮIJȐ µȑıȠ ȩȡȠ ȃ/2 ıȣȖțȡȓıİȚȢ. ȉȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ ʌȡĮȖµĮIJȠʌȠȚİȓ IJȘ ıİȚȡȚĮțȒ ĮȞĮȗȒIJȘıȘ: /* serfound.c */ /* ȈİȚȡȚĮțȒ ĮȞĮȗȒIJȘıȘ ıİ ʌȓȞĮțĮ */ #define SIZE 10 main() { int list[SIZE],pos=-1,i,num; for(i=0;i<SIZE;i++) {
printf("ǻȫıİ IJȠ %do ıIJȠȚȤİȓȠ IJȠȣ ʌȓȞĮțĮ: ",i); scanf("%d",&list[i]);
} printf("\nǻȫıİ IJȠȞ ĮțȑȡĮȚȠ ʌȠȣ șȑȜİȚȢ ȞĮ ȥȐȟȦ: "); scanf("%d",&num); pos=search(list,num); if(pos<0) puts("ȅ ĮȡȚșµȩȢ įİȞ ȣʌȐȡȤİȚ ıIJȠȞ ʌȓȞĮțĮ"); else printf("ȊʌȐȡȤİȚ ıIJȘȞ %d șȑıȘ",pos);
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
102
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
} /* search() */ /* ȈİȚȡȚĮțȒ ĮȞĮȗȒIJȘıȘ */ search(int list[],int n) { int i=0,found=0,pos=-1;
}
while(i<SIZE && !found) { if(list[i]==n) { found=1; pos=i; } else i++; } return(pos);
ȈIJȘȞ ʌİȡȓʌIJȦıȘ ʌȠȣ IJĮ ıIJȠȚȤİȓĮ IJȠȣ ʌȓȞĮțĮ İȓȞĮȚ IJĮȟȚȞȠµȘµȑȞĮ, IJȩIJİ Ș įȚĮįȚțĮıȓĮ ĮȞĮȗȒIJȘıȘȢ µʌȠȡİȓ ȞĮ İʌȚIJĮȤȣȞșİȓ İijĮȡµȩȗȠȞIJĮȢ IJȘ µȑșȠįȠ IJȘȢ įȣĮįȚțȒȢ (binary) ĮȞĮȗȒIJȘıȘȢ. ȀĮIJȐ IJȘ µȑșȠįȠ ĮȣIJȒ ıȣȖțȡȓȞȠȣµİ IJȠ ȗȘIJȠȪµİȞȠ ıIJȠȚȤİȓȠ µİ IJȠ µİıĮȓȠ ıIJȠȚȤİȓȠ IJȠȣ ʌȓȞĮțĮ. ǹȞ įİȞ İȓȞĮȚ ȓıĮ, IJȩIJİ İȟİIJȐȗȠȣµİ ĮȞ IJȠ ȗȘIJȠȪµİȞȠ ıIJȠȚȤİȓȠ ȕȡȓıțİIJĮȚ ıIJȠȞ ĮȡȚıIJİȡȩ ȣʌȠʌȓȞĮțĮ (įȘȜĮįȒ ĮȞ ȗȘIJȠȪµİȞȠ<µİıĮȓȠ) Ȓ ıIJȠȞ įİȟȚȩ ȣʌȠʌȓȞĮțĮ (įȘȜĮįȒ ĮȞ ȗȘIJȠȪµİȞȠ>µİıĮȓȠ). ǼʌĮȞĮȜĮµȕȐȞȠȣµİ IJȘ įȚĮįȚțĮıȓĮ ıIJȠȞ ȞȑȠ ȣʌȠʌȓȞĮțĮ ȕȡȓıțȠȞIJĮȢ ʌȐȜȚ IJȠ µİıĮȓȠ ıIJȠȚȤİȓȠ, ț.Ƞ.ț. ȅ µȑȖȚıIJȠȢ ĮȡȚșµȩȢ ıȣȖțȡȓıİȦȞ ȖȚĮ ʌȓȞĮțĮ ȃ ıIJȠȚȤİȓȦȞ İȓȞĮȚ Log2N. Ǿ ʌĮȡĮțȐIJȦ ıȣȞȐȡIJȘıȘ țȐȞİȚ įȣĮįȚțȒ ĮȞĮȗȒIJȘıȘ ıIJȠȞ ʌȓȞĮțĮ IJȠȣ ʌȡȠȘȖȠȣµȑȞȠȣ ʌȡȠȖȡȐµµĮIJȠȢ, µİ IJȘȞ ʌȡȠȨʌȩșİıȘ ȕȑȕĮȚĮ, ȩIJȚ ĮȣIJȩȢ İȓȞĮȚ IJĮȟȚȞȠµȘµȑȞȠȢ: /* search() */ /* ǻȣĮįȚțȒ ĮȞĮȗȒIJȘıȘ ıİ IJĮȟȚȞȠµȘµȑȞȠ ʌȓȞĮțĮ */ search(int list[],int n) { int left=0,right=SIZE-1,middle,found=0,i=-1;
}
while(left<=right && !found) { middle=(left+right)/2; if(n==list[middle]) { i=middle; found=1; } else { if(n>list[middle]) left=middle+1; else right=middle-1; } } return(i);
ȆȓȞĮțİȢ țĮȚ ǹȜijĮȡȚșµȘIJȚțȐ
103
4. ǹȢ ȣʌȠșȑıȠȣµİ ȩIJȚ ȑȤȠȣµİ įȪȠ IJĮȟȚȞȠµȘµȑȞȠȣȢ µȠȞȠįȚȐıIJĮIJȠȣȢ ʌȓȞĮțİȢ. ȉȩIJİ Ș įȚĮįȚțĮıȓĮ IJȘȢ ıȣȞIJĮȟȚȞȩµȘıȘȢ (merge) İȓȞĮȚ ȞĮ įȘµȚȠȣȡȖȒıȠȣµİ ȑȞĮȞ IJȡȓIJȠ İʌȓıȘȢ IJĮȟȚȞȠµȘµȑȞȠ ʌȓȞĮțĮ ʌȠȣ șĮ ʌİȡȚȑȤİȚ ȩȜĮ IJĮ ıIJȠȚȤİȓĮ IJȦȞ įȪȠ ʌȡȠȘȖȠȣµȑȞȦȞ ʌȚȞȐțȦȞ. ȉȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ įȑȤİIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ IJĮ ıIJȠȚȤİȓĮ ȖȚĮ įȪȠ µȠȞȠįȚȐıIJĮIJȠȣȢ ʌȓȞĮțİȢ ĮțİȡĮȓȦȞ (IJȠȣȢ list1[] țĮȚ list2[]), ıIJȘ ıȣȞȑȤİȚĮ IJĮȟȚȞȠµİȓ ĮȣIJȠȪȢ µİ IJȠ µȑșȠįȠ IJȘȢ ijȣıĮȜȓįĮȢ țĮȚ țĮIJȩʌȚȞ IJȠȣȢ ıȣȞIJĮȟȚȞȠµİȓ IJȠʌȠșİIJȫȞIJĮȢ IJĮ ıIJȠȚȤİȓĮ IJȠȣȢ ıİ ȑȞĮȞ IJȡȓIJȠ ʌȓȞĮțĮ (IJȠȞ list[]): /* merge.c */ /* ȈȣȞIJĮȟȚȞȩµȘıȘ */ #define SIZE1 5 #define SIZE2 10 #define SIZE SIZE1+SIZE2 main() { int list1[SIZE1],list2[SIZE2],list[SIZE],i;
}
for(i=0;i<SIZE1;i++) { printf("ǻȫıİ IJȠ %do ıIJȠȚȤİȓȠ IJȠȣ 1Ƞȣ ʌȓȞĮțĮ: ",i); scanf("%d",&list1[i]); } for(i=0;i<SIZE2;i++) { printf("ǻȫıİ IJȠ %do ıIJȠȚȤİȓȠ IJȠȣ 2Ƞȣ ʌȓȞĮțĮ: ",i); scanf("%d",&list2[i]); } sort(list1,SIZE1); sort(list2,SIZE2); merge(list1,list2,list); printf("ȅȚ ʌȓȞĮțİȢ IJĮȟȚȞȠµȘµȑȞȠȚ İȓȞĮȚ:\nlist1="); for(i=0;i<SIZE1;i++) printf("%d ",list1[i]); printf("\nlist2="); for(i=0;i<SIZE2;i++) printf("%d ",list2[i]); printf("\nlist ="); for(i=0;i<SIZE;i++) printf("%d ",list[i]);
/* sort() */ /* ȉĮȟȚȞȠµİȓ IJȠȞ ʌȓȞĮțĮ µİ IJȘ µȑșȠįȠ IJȘȢ ijȣıĮȜȓįĮȢ */ sort(int list[],int s) { int i,j,temp;
}
for(i=0;i<s-1;i++) for(j=0;j<s-1-i;j++) if(list[j]>list[j+1]) { temp=list[j]; list[j]=list[j+1]; list[j+1]=temp; }
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
104
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
/* merge() */ /* ȈȣȞIJĮȟȚȞȠµİȓ įȪȠ ʌȓȞĮțİȢ */ merge(int list1[],int list2[],int list[]) { int i=0,j=0,k=0;
}
while(i<SIZE1 && j<SIZE2) /* ȩıȠ ȣʌȐȡȤȠȣȞ ıIJȠȚȤİȓĮ { /* țĮȚ ıIJȠȣȢ įȪȠ ʌȓȞĮțİȢ if(list1[i]<list2[j]) /* IJȠʌȠșİIJȠȪȞIJĮȚ ıIJȠȞ ʌȓȞĮțĮ { /* list[] µİ ĮȪȟȠȣıĮ ıİȚȡȐ list[k]=list1[i]; i++; k++; } else { list[k]=list2[j]; j++; k++; } } while(i<SIZE1) /* ıIJȘȞ ʌİȡȓʌIJȦıȘ ʌȠȣ IJİȜİȚȫıȠȣȞ { /* ʌȡȫIJĮ IJĮ ıIJȠȚȤİȓĮ IJȠȣ ʌȓȞĮțĮ list[k]=list1[i]; /* list2[], IJȠʌȠșİIJȠȪȞIJĮȚ ȩȜĮ IJĮ i++; /* İȞĮʌȠµİȓȞĮȞIJĮ ıIJȠȚȤİȓĮ IJȠȣ k++; /* list1[] ıIJȠȞ list[] } while(j<SIZE2) /* ıIJȘȞ ʌİȡȓʌIJȦıȘ ʌȠȣ IJİȜİȚȫıȠȣȞ { /* ʌȡȫIJĮ IJĮ ıIJȠȚȤİȓĮ IJȠȣ ʌȓȞĮțĮ list[k]=list2[j]; /* list1[], IJȠʌȠșİIJȠȪȞIJĮȚ ȩȜĮ IJĮ j++; /* İȞĮʌȠµİȓȞĮȞIJĮ ıIJȠȚȤİȓĮ IJȠȣ k++; /* list2[] ıIJȠȞ list[] }
*/ */ */ */
*/ */ */ */ */ */ */ */ */ */
5. ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ n (ȑıIJȦ n=10) ĮțȑȡĮȚȠȣȢ ĮȡȚșµȠȪȢ țĮȚ ȞĮ ȣʌȠȜȠȖȓȗİȚ țĮȚ IJȣʌȫȞİȚ IJȘ µȑıȘ IJȚµȒ IJȠȣȢ. ȀĮIJȩʌȚȞ ȞĮ IJȣʌȫȞİȚ ȑȞĮȞ ʌȓȞĮțĮ ʌȠȣ șĮ ĮʌȠIJİȜİȓIJĮȚ Įʌȩ įȪȠ ıIJȒȜİȢ. Ǿ ʌȡȫIJȘ ıIJȒȜȘ ʌȡȑʌİȚ ȞĮ ʌİȡȚȑȤİȚ IJȠȣȢ įȑțĮ ĮȡȚșµȠȪȢ ʌȠȣ įȫıĮµİ țĮȚ Ș įİȪIJİȡȘ, ȖȚĮ țĮșȑȞĮȞ Įʌȩ ĮȣIJȠȪȢ, IJȘȞ ĮʌȩțȜȚıȒ IJȠȣ Įʌȩ IJȘ µȑıȘ IJȚµȒ (ĮʌȩțȜȚıȘ = µȑıȘ IJȚµȒ ĮȡȚșµȩȢ). /* statist1.c */ /* ȊʌȠȜȠȖȚıµȩȢ µȑıȘȢ IJȚµȒȢ țĮȚ ĮʌȠțȜȓıİȦȞ ȃ ĮȡȚșµȫȞ */ #define N 10 main() { int i; float list[N],sum=0,aver; for(i=0;i<N;i++) { printf("ǻȫıİ ĮȡȚșµȩ: ");
ȆȓȞĮțİȢ țĮȚ ǹȜijĮȡȚșµȘIJȚțȐ
105
scanf("%f",&list[i]); sum+=list[i];
}
} aver=sum/N; printf("\nMȑıȘ TȚµȒ=%9.5f\n",aver); puts(" list[i] list[i]-ȂȑıȘ ȉȚµȒ"); for(i=0;i<N;i++) printf("%16.4f%16.5f\n",list[i],list[i]-aver);
6. ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ ȑȞĮ ĮȜijĮȡȚșµȘIJȚțȩ țĮȚ ȑȞĮ ȤĮȡĮțIJȒȡĮ țĮȚ ȞĮ ȣʌȠȜȠȖȓȗİȚ IJȠ ʌȜȒșȠȢ IJȦȞ ݵijĮȞȓıİȦȞ IJȠȣ ȤĮȡĮțIJȒȡĮ µȑıĮ ıIJȠ ĮȜijĮȡȚșµȘIJȚțȩ. /* ch_in_s.c */ /* ȆȜȒșȠȢ ݵijĮȞȓıİȦȞ ȤĮȡĮțIJȒȡĮ ıİ ĮȜijĮȡȚșµȘIJȚțȩ */ main() { char str[81],ch; int i=0,length;
}
printf("\nǹȜijĮȡȚșµȘIJȚțȩ,ȋĮȡĮțIJȒȡĮȢ:"); scanf("%s %c",str,&ch); length=strlen(str); for(i=0;i<length;i++) if(ch==str[i]) i++; printf("\nȅ ȤĮȡĮțIJȒȡĮȢ \'%c\' ݵijĮȞȓȗİIJĮȚ %d ijȠȡȑȢ",ch,i);
7. ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ ȑȞĮ ĮȜijĮȡȚșµȘIJȚțȩ țĮȚ ȞĮ IJȠ IJȣʌȫȞİȚ ĮȞIJȓıIJȡȠijĮ (Įʌȩ IJȠ IJȑȜȠȢ ʌȡȠȢ IJȘȞ ĮȡȤȒ IJȠȣ). īȚĮ ʌĮȡȐįİȚȖµĮ, IJȠ ĮȜijĮȡȚșµȘIJȚțȩ: ǹȣIJȒ İȓȞĮȚ µȓĮ ȖȡĮµµȒ ȞĮ IJȠ IJȣʌȫȞİȚ ȦȢ: ȒµµĮȡȖ Įȓµ ȚĮȞȓİ ȒIJȣǹ /* sreverse.c */ /* ǼțIJȪʌȦıȘ ĮȜijĮȡȚșµȘIJȚțȠȪ µİ ĮȞIJȓıIJȡȠijȘ ıİȚȡȐ */ main() { int length,i;
}
puts("ǹȜijĮȡȚșµȘIJȚțȩ:"); gets(str); length=strlen(str); for(i=length-1;i>=0;i--) putch(str[i]);
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
106
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
8. ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ ȑȞĮ ĮȜijĮȡȚșµȘIJȚțȩ țĮȚ ȞĮ IJȠ IJȣʌȫȞİȚ µİ IJȚȢ ȜȑȟİȚȢ ȞĮ ȑȤȠȣȞ IJȘȞ ȓįȚĮ ıİȚȡȐ, ĮȜȜȐ µİ IJĮ ȖȡȐµµĮIJȐ IJȠȣȢ ĮȞIJȓıIJȡȠijĮ. īȚĮ ʌĮȡȐįİȚȖµĮ, IJȠ ĮȜijĮȡȚșµȘIJȚțȩ: ǹȣIJȒ İȓȞĮȚ µȓĮ ȖȡĮµµȒ ȞĮ IJȠ IJȣʌȫȞİȚ ȦȢ: ȒIJȣǹ ȚĮȞȓİ Įȓµ ȒµµĮȡȖ /* srevers1.c */ /* ǼțIJȪʌȦıȘ ĮȜijĮȡȚșµȘIJȚțȠȪ µİ ĮȞIJȓıIJȡȠijȘ ıİȚȡȐ ıIJĮ */ /* ȖȡȐµµĮIJĮ IJȦȞ ȜȑȟİȦȞ */ main() { char str[81]; int length,i,j,begin=0,end=0;
}
puts("ǹȜijĮȡȚșµȘIJȚțȩ:"); gets(str); length=strlen(str); for(i=0;i<=length;i++) { if(str[i]!=' ' && str[i]!='\0') end++; if(str[i]==' ' || str[i]=='\0') { for(j=end-1;j>=begin;j--) putch(str[j]); putch(' '); begin=end+1; end++; } }
8.4 ǹȈȀǾȈǼǿȈ 1.
īȡȐȥIJİ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ ıIJȠȚȤİȓĮ ȖȚĮ ȑȞĮ įȚįȚȐıIJĮIJȠ ʌȓȞĮțĮ ĮțİȡĮȓȦȞ 4x4 țĮȚ ȞĮ ȕȡȓıțİȚ țĮȚ IJȣʌȫȞİȚ IJȠ µȑȖȚıIJȠ țȚ İȜȐȤȚıIJȠ ıIJȠȚȤİȓȠ ĮȣIJȠȪ, țĮșȫȢ țĮȚ IJȚȢ șȑıİȚȢ ʌȠȣ ȕȡȓıțȠȞIJĮȚ (ȖȡĮµµȒ, ıIJȒȜȘ).
2.
ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ ĮțȑȡĮȚİȢ IJȚµȑȢ ȖȚĮ IJĮ ıIJȠȚȤİȓĮ İȞȩȢ ʌȓȞĮțĮ 3x3 țĮȚ ȞĮ ȣʌȠȜȠȖȓȗİȚ țĮȚ IJȣʌȫȞİȚ IJȠ ȐșȡȠȚıµĮ IJȦȞ ıIJȠȚȤİȓȦȞ IJȘȢ țȪȡȚĮȢ țĮȚ IJȘȢ įİȣIJİȡİȪȠȣıĮȢ įȚĮȖȦȞȓȠȣ IJȠȣ.
3.
īȡȐȥIJİ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ ȦȢ İȓıȠįȠ IJĮ ıIJȠȚȤİȓĮ İȞȩȢ įȚįȚȐıIJĮIJȠȣ ʌȓȞĮțĮ ĮțİȡĮȓȦȞ 4x3 țĮȚ ȞĮ ݵijĮȞȓȗİȚ IJȠȞ ʌȓȞĮțĮ ıIJȘȞ ȠșȩȞȘ. ǼʌȓıȘȢ ȞĮ µİIJȡȐİȚ țĮȚ ȞĮ ݵijĮȞȓȗİȚ ıIJȘȞ ȠșȩȞȘ IJȠ ʌȜȒșȠȢ IJȦȞ șİIJȚțȫȞ, ĮȡȞȘIJȚțȫȞ țĮȚ µȘįİȞȚțȫȞ ıIJȠȚȤİȓȦȞ IJȠȣ ʌȓȞĮțĮ.
ȆȓȞĮțİȢ țĮȚ ǹȜijĮȡȚșµȘIJȚțȐ
107
4.
īȡȐȥIJİ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ ȦȢ İȓıȠįȠ IJĮ ıIJȠȚȤİȓĮ İȞȩȢ įȚįȚȐıIJĮIJȠȣ ʌȓȞĮțĮ ʌȡĮȖµĮIJȚțȫȞ 4x3 țĮȚ ȞĮ ĮȞĮıIJȡȑijİȚ ĮȣIJȩȞ. ǹȞȐıIJȡȠijȠȢ İȞȩȢ ʌȓȞĮțĮ, İȓȞĮȚ ȑȞĮȢ ȐȜȜȠȢ ʌȓȞĮțĮȢ IJȠȣ ȠʌȠȓȠȣ ȠȚ ȖȡĮµµȑȢ İȓȞĮȚ ȠȚ ıIJȒȜİȢ țĮȚ ȠȚ ıIJȒȜİȢ İȓȞĮȚ ȠȚ ȖȡĮµµȑȢ IJȠȣ ʌȡȫIJȠȣ. ȉȠ ʌȡȩȖȡĮµµĮ ȞĮ ݵijĮȞȓȗİȚ ıIJȘȞ ȠșȩȞȘ IJȩıȠ IJȠȞ ĮȡȤȚțȩ ʌȓȞĮțĮ ȩıȠ țĮȚ IJȠȞ ĮȞİıIJȡĮµµȑȞȠ.
5.
īȡȐȥIJİ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ IJĮ ıIJȠȚȤİȓĮ ȖȚĮ įȪȠ µȠȞȠįȚȐıIJĮIJȠȣȢ ʌȓȞĮțİȢ ĮțİȡĮȓȦȞ 10 șȑıİȦȞ Ƞ țĮșȑȞĮȢ țĮȚ ȞĮ ȣʌȠȜȠȖȓȗİȚ IJȠ ȐșȡȠȚıµĮ ĮȣIJȫȞ IJȦȞ įȪȠ ʌȚȞȐțȦȞ. DZșȡȠȚıµĮ įȪȠ µȠȞȠįȚȐıIJĮIJȦȞ ʌȚȞȐțȦȞ İȓȞĮȚ ȑȞĮȢ IJȡȓIJȠȢ ʌȓȞĮțĮȢ, IJȠ țȐșİ ıIJȠȚȤİȓȠ IJȠȣ ȠʌȠȓȠȣ İȓȞĮȚ IJȠ ȐșȡȠȚıµĮ IJȦȞ ĮȞIJȓıIJȠȚȤȦȞ ıIJȠȚȤİȓȦȞ IJȦȞ įȪȠ ʌȚȞȐțȦȞ ʌȠȣ ʌȡȠıIJȓșİȞIJĮȚ.
6.
ȃĮ įȠșȠȪȞ ȠȚ IJȚµȑȢ ʌȠȣ șĮ ʌȐȡȠȣȞ IJĮ ıIJȠȚȤİȓĮ IJȠȣ ʌȓȞĮțĮ p, µİIJȐ IJȘȞ İțIJȑȜİıȘ IJȠȣ ʌĮȡĮțȐIJȦ ȕȡȩȤȠȣ: main() { int p[31],i=0;
} 7.
p[0]=0; while(i<15) { p[30-i]=p[0]-1; i++; p[i]=p[31-i]+1 }
īȡȐȥIJİ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ țĮșȠȡȓȗİȚ IJȘȞ IJȚµȒ IJȦȞ ıIJȠȚȤİȓȦȞ IJȠȣ įȚįȚȐıIJĮIJȠȣ ʌȓȞĮțĮ a, ʌȠȣ įȘȜȫȞİIJĮȚ ȦȢ İȟȒȢ:
int a[20][20]; ıȪµijȦȞĮ µİ IJȠȞ ʌĮȡĮțȐIJȦ țĮȞȩȞĮ: a[i][j]=1, ȩIJĮȞ IJȠ ȐșȡȠȚıµĮ i+j İȓȞĮȚ ȐȡIJȚȠ țĮȚ
a[i][j]=-1, ȩIJĮȞ IJȠ ȐșȡȠȚıµĮ i+j İȓȞĮȚ ʌİȡȚIJIJȩ. ȈIJȠ IJȑȜȠȢ IJȠ ʌȡȩȖȡĮµµĮ ʌȡȑʌİȚ ȞĮ IJȣʌȫȞİȚ IJĮ ıIJȠȚȤİȓĮ IJȠȣ ʌȓȞĮțĮ a. 8.
DzıIJȦ IJȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ. ǻȫıIJİ IJȚȢ IJȚµȑȢ ʌȠȣ șĮ ʌȐȡȠȣȞ IJĮ ıIJȠȚȤİȓĮ IJȠȣ ʌȓȞĮțĮ p, µİIJȐ IJȘȞ İțIJȑȜİıȒ IJȠȣ: #define N 10 main(); { int p[N],x,i;
}
puts("ǻȍȈǼ x= "); scanf("%d",&x); p[0]=x; for(i=1;i<N;i++) p[i]=p[i-1]*x;
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
108
9.
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ȅ įȚįȚȐıIJĮIJȠȢ ʌȓȞĮțĮȢ a įȘȜȫȞİIJĮȚ ȦȢ İȟȒȢ:
int a[20][20]; īȡȐȥIJİ ȑȞĮ IJµȒµĮ ʌȡȠȖȡȐµµĮIJȠȢ ʌȠȣ ȞĮ µȘįİȞȓȗİȚ IJĮ ıIJȠȚȤİȓĮ IJȠȣ ʌȓȞĮțĮ, İțIJȩȢ Įʌȩ ĮȣIJȐ ʌȠȣ ȕȡȓıțȠȞIJĮȚ ıIJȘ įȚĮȖȫȞȚȩ IJȠȣ țĮȚ ıIJȚȢ "ȖİȚIJȠȞȚțȑȢ" įȚĮȖȦȞȓȠȣȢ IJȠȣ. 10. īȡȐȥIJİ ȑȞĮ ʌȡȩȖȡĮµµĮ, ʌȠȣ ȞĮ įȑȤİIJĮȚ ȦȢ İȓıȠįȠ n (n=10) ĮțȑȡĮȚȠȣȢ ĮȡȚșµȠȪȢ țĮȚ ȞĮ ȣʌȠȜȠȖȓȗİȚ țĮȚ IJȣʌȫȞİȚ IJȘ µȑıȘ IJȚµȒ IJȠȣȢ: _
x
a1 a2 ... an n
țĮȚ IJȘȞ IJȣʌȚțȒ IJȠȣȢ ĮʌȩțȜȚıȘ: _
s
_
_
(a1 x)2 (a2 x)2 ... (a n x)2 n
11. ǼȟȘȖȒıIJİ IJȚ țȐȞİȚ IJȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ: #define SIZE 10 main() { int i,s=0,a[SIZE];
}
for(i=0;i<SIZE;i++) a[i]=i+1; for(i=0;i<SIZE;i++) s+=a[i]*a[i]; printf("\n%d",s); getch();
12. īȡȐȥIJİ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ ȑȞĮ ĮȜijĮȡȚșµȘIJȚțȩ µİ İȜȜȘȞȚțȠȪȢ ȤĮȡĮțIJȒȡİȢ țĮȚ ȞĮ IJȠ µİIJĮIJȡȑʌİȚ µİ țİijĮȜĮȓȠȣȢ ȤĮȡĮțIJȒȡİȢ. ȈȣµȕȠȣȜİȣIJİȓIJİ IJȠȞ ʌȓȞĮțĮ ASCII. 13. īȡȐȥIJİ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ ȑȞĮ ĮȜijĮȡȚșµȘIJȚțȩ țĮȚ ȞĮ İȟİIJȐȗİȚ ĮȞ İȓȞĮȚ ʌĮȜȚȞįȡȠµȚțȩ (țĮȡțȚȞȚțȩ). DzȞĮ ĮȜijĮȡȚșµȘIJȚțȩ İȓȞĮȚ ʌĮȜȚȞįȡȠµȚțȩ ĮȞ įȚĮȕȐȗİIJĮȚ IJȠ ȓįȚȠ țĮȚ Įʌȩ IJĮ įİȟȚȐ ʌȡȠȢ IJĮ ĮȡȚıIJİȡȐ, ȩʌȦȢ ʌ.Ȥ. IJȠ "radar" țĮȚ IJȠ "ǹȃȃǹ".
109
ȀǼĭǹȁǹǿȅ 9
ǹȆǹȇǿĬȂǾȈǼǿȈ, ǻȅȂǼȈ Ȁǹǿ ǼȃȍȈǼǿȈ ȈIJȠ ȀİijȐȜĮȚȠ ĮȣIJȩ șĮ įȠȪµİ ʌȫȢ µʌȠȡİȓ Ƞ ʌȡȠȖȡĮµµĮIJȚıIJȒȢ IJȘȢ C ȞĮ ȠȡȓȗİȚ IJȠȣȢ įȚțȠȪȢ IJȠȣ IJȪʌȠȣȢ įİįȠµȑȞȦȞ. ǻȘȜĮįȒ IJȪʌȠȣȢ ʌȠȣ șĮ ȑȤȠȣȞ ȩ,IJȚ ȠȞȩµĮIJĮ İʌȚșȣµİȓ Ƞ ʌȡȠȖȡĮµµĮIJȚıIJȒȢ țĮȚ IJȠ ıȪȞȠȜȠ IJȦȞ įȣȞĮIJȫȞ IJȚµȫȞ IJȠȣȢ șĮ țĮșȠȡȓȗİIJĮȚ Įʌȩ IJȠȞ ȓįȚȠ. ǼʌȓıȘȢ șĮ įȠȪµİ įȪȠ ĮțȩµȘ įȠµȘµȑȞȠȣȢ IJȪʌȠȣȢ, İțIJȩȢ Įʌȩ IJȠȞ ȆȓȞĮțĮ ʌȠȣ İȟİIJȐıĮµİ ıIJȠ ȀİijȐȜĮȚȠ 8. ǹȣIJȠȓ İȓȞĮȚ ȠȚ ǻȠµȑȢ țĮȚ ȠȚ ǼȞȫıİȚȢ.
9.1 ǹȆǹȇǿĬȂǾȈǼǿȈ ȊʌȐȡȤȠȣȞ ʌȠȜȜȑȢ ʌİȡȚʌIJȫıİȚȢ ʌȠȣ ıİ ȑȞĮ ʌȡȩȖȡĮµµĮ, µȓĮ µȘ-ĮȡȚșµȘIJȚțȒ µİIJĮȕȜȘIJȒ ʌĮȓȡȞİȚ IJȚµȑȢ Įʌȩ ȑȞĮ µȚțȡȩ ıȪȞȠȜȠ įȚĮțȡȚIJȫȞ IJȚµȫȞ. Ǿ ȤȡȘıȚµȠʌȠȓȘıȘ ĮȡȚșµȫȞ ȖȚĮ IJȘȞ ĮȞĮʌĮȡȐıIJĮıȘ µȘ-ĮȡȚșµȘIJȚțȫȞ įİįȠµȑȞȦȞ, µʌȠȡİȓ ıİ ȠȡȚıµȑȞİȢ ʌİȡȚʌIJȫıİȚȢ ȞĮ ʌȡȠțĮȜȑıİȚ ıȪȖȤȣıȘ. Ǿ C İʌȚIJȡȑʌİȚ ıIJȠȞ ʌȡȠȖȡĮµµĮIJȚıIJȒ ȞĮ ȠȡȓȗİȚ IJȠȣȢ įȚțȠȪȢ IJȠȣ, ȞȑȠȣȢ, IJȪʌȠȣȢ įİįȠµȑȞȦȞ, µİ ĮȞĮȖȡĮijȒ IJȦȞ ıIJȠȚȤİȓȦȞ IJȠȣ ıȣȞȩȜȠȣ IJȚµȫȞ IJȠȣȢ. ȅȚ IJȪʌȠȚ ĮȣIJȠȓ ȠȞȠµȐȗȠȞIJĮȚ ĮʌĮȡȚșµȒıİȚȢ (enumerations) Ȓ ĮʌĮȡȚșµȘIJȠȓ IJȪʌȠȚ. Ǿ ȖİȞȚțȒ µȠȡijȒ IJȘȢ İȞIJȠȜȒȢ įȒȜȦıȘȢ µȓĮȢ ĮʌĮȡȓșµȘıȘȢ, İȓȞĮȚ:
enum ĮȞĮȖȞȦȡȚıIJȚțȩ_IJȪʌȠȣ_ĮʌĮȡȓșµȘıȘȢ {ȜȓıIJĮ_IJȚµȫȞ}; ȩʌȠȣ ıIJȘ ȜȓıIJĮ_IJȚµȫȞ ĮȞĮȖȡȐijȠȞIJĮȚ ȩȜİȢ ȠȚ įȣȞĮIJȑȢ IJȚµȑȢ IJȠȣ IJȪʌȠȣ µİ ȩȞȠµĮ ĮȞĮȖȞȦȡȚıIJȚțȩ_IJȪʌȠȣ_ĮʌĮȡȓșµȘıȘȢ. DzȞĮ ʌĮȡȐįİȚȖµĮ įȒȜȦıȘȢ İȞȩȢ IJȪʌȠȣ ĮʌĮȡȓșµȘıȘȢ, İȓȞĮȚ:
enum colour{red, green, yellow}; Ȃİ IJȘȞ ʌĮȡĮʌȐȞȦ įȒȜȦıȘ, ȠȡȓıĮµİ ȑȞĮ įȚțȩ µĮȢ IJȪʌȠ µİ ȩȞȠµĮ colour țĮȚ ıȪȞȠȜȠ IJȚµȫȞ {red,green,yellow}. ȈIJȘ ıȣȞȑȤİȚĮ µʌȠȡȠȪµİ ȞĮ ȠȡȓıȠȣµİ µİIJĮȕȜȘIJȑȢ ĮȣIJȠȪ IJȠȣ IJȪʌȠȣ, İȓIJİ ĮµȑıȦȢ µİIJȐ IJȠ įİȟȚȩ ȐȖțȚıIJȡȠ ʌȠȣ IJİȡµĮIJȓȗİȚ IJȘ ȜȓıIJĮ IJȦȞ IJȚµȫȞ:
enum colour{red, green, yellow} a,b,c; İȓIJİ µİIJȐ IJȘ įȒȜȦıȘ IJȘȢ ĮʌĮȡȓșµȘıȘȢ țĮȚ ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ IJȠ ȩȞȠµȐ IJȘȢ:
enum colour a,b,c; ȂȓĮ µİIJĮȕȜȘIJȒ ĮʌĮȡȓșµȘıȘȢ µʌȠȡİȓ ȞĮ ʌȐȡİȚ ȠʌȠȚĮįȒʌȠIJİ IJȚµȒ Įʌȩ IJȘ ȜȓıIJĮ_IJȚµȫȞ. DzIJıȚ ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ IJȘ µİIJĮȕȜȘIJȒ c ʌȠȣ ȠȡȓıIJȘțİ ʌĮȡĮʌȐȞȦ, ȠȚ ʌĮȡĮțȐIJȦ İȞIJȠȜȑȢ İȓȞĮȚ ıȦıIJȑȢ:
c=green; if(c==red) printf("ǼȓȞĮȚ țȩțțȚȞȠ\n"); Ǿ ʌĮȡĮțȐIJȦ İȞIJȠȜȒ, ȩµȦȢ:
c=blue;
110
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
įİȞ İȓȞĮȚ ıȦıIJȒ, ȖȚĮIJȓ Ș IJȚµȒ blue įİȞ ĮȞȒțİȚ ıIJȘ ȜȓıIJĮ IJȦȞ IJȚµȫȞ IJȠȣ IJȪʌȠȣ enum colour. ȅ µİIJĮȖȜȦIJIJȚıIJȒȢ IJȘȢ C ȤİȚȡȓȗİIJĮȚ IJȚȢ IJȚµȑȢ IJȘȢ ȜȓıIJĮȢ_IJȚµȫȞ ȦȢ ĮțȑȡĮȚȠȣȢ ĮȡȚșµȠȪȢ. ȀȐșİ IJȚµȒ IJȘȢ ȜȓıIJĮȢ ĮȞIJȚıIJȠȚȤİȓ ıİ ȑȞĮȞ ĮțȑȡĮȚȠ, ĮȡȤȓȗȠȞIJĮȢ Įʌȩ IJȠ µȘįȑȞ. DzIJıȚ ıIJȠ ʌĮȡĮʌȐȞȦ ʌĮȡȐįİȚȖµĮ, ıIJȘȞ IJȚµȒ red ĮȞIJȚıIJȠȚȤİȓ IJȠ 0, ıIJȘȞ green IJȠ 1 țĮȚ ıIJȘȞ yellow IJȠ 2. ǹȣIJȩȢ Ƞ IJȡȩʌȠȢ ĮȞȐșİıȘȢ IJȚµȫȞ µʌȠȡİȓ ȞĮ ʌĮȡĮțĮµijșİȓ Įʌȩ IJȠȞ ʌȡȠȖȡĮµµĮIJȚıIJȒ, șȑIJȠȞIJĮȢ ıIJȚȢ IJȚµȑȢ IJȘȢ ȜȓıIJĮȢ įȚĮijȠȡİIJȚțȑȢ ĮțȑȡĮȚİȢ IJȚµȑȢ:
enum colour{red=10, green=20, yellow=30}; ǹȞ įİ șȑıȠȣµİ ıİ ȩȜİȢ IJȚȢ IJȚµȑȢ IJȘȢ ȜȓıIJĮȢ ĮțȑȡĮȚİȢ IJȚµȑȢ, IJȩIJİ Ƞ µİIJĮȖȜȦIJIJȚıIJȒȢ ĮʌȠįȓįİȚ ıIJȚȢ IJȚµȑȢ IJȘȢ ȜȓıIJĮȢ ʌȠȣ ĮțȠȜȠȣșȠȪȞ IJȘȞ IJİȜİȣIJĮȓĮ IJȚµȒ ıIJȘȞ ȠʌȠȓĮ ȑȤȠȣµİ șȑıİȚ ĮțȑȡĮȚĮ IJȚµȒ, ĮțȑȡĮȚİȢ IJȚµȑȢ µİȖĮȜȪIJİȡİȢ Įʌȩ ĮȣIJȒȞ. īȚĮ ʌĮȡȐįİȚȖµĮ Ș ʌĮȡĮțȐIJȦ İȞIJȠȜȒ șȑIJİȚ IJȘȞ IJȚµȒ 50 ıIJȠ green:
enum colour{red, green=50, yellow}; ȂİIJȐ Įʌȩ ĮȣIJȒ IJȘȞ İȞIJȠȜȒ, ıIJȚȢ IJȚµȑȢ IJȘȢ ȜȓıIJĮȢ ĮȞIJȚıIJȠȚȤȠȪȞ ȠȚ İȟȒȢ ĮțȑȡĮȚȠȚ: ıIJȠ red IJȠ 1, ıIJȠ green IJȠ 50 țĮȚ ıIJȠ yellow IJȠ 51. ȉȠ ȩIJȚ țȐșİ IJȚµȒ IJȘȢ ȜȓıIJĮȢ_IJȚµȫȞ µȓĮȢ ĮʌĮȡȓșµȘıȘȢ ȤİȚȡȓȗİIJĮȚ Įʌȩ IJȠ µİIJĮȖȜȦIJIJȚıIJȒ IJȘȢ C ȦȢ ĮțȑȡĮȚȠȢ ĮȡȚșµȩȢ, ıȘµĮȓȞİȚ ȩIJȚ µʌȠȡȠȪµİ ȞĮ ȤȡȘıȚµȠʌȠȚȠȪµİ IJȚȢ IJȚµȑȢ IJȘȢ ȜȓıIJĮȢ_IJȚµȫȞ ıİ ʌȡȐȟİȚȢ ȩʌȦȢ șĮ ȤȡȘıȚµȠʌȠȚȠȪıĮµİ IJȠȣȢ ĮțİȡĮȓȠȣȢ ĮȡȚșµȠȪȢ. īȚĮ ʌĮȡȐįİȚȖµĮ ĮȢ șİȦȡȒıȠȣµİ IJȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ: /* enums1.c */ /* ǼʌȓįİȚȟȘ ĮʌĮȡȚșµȒıİȦȞ */ main() { enum colour {red,green,yellow}; /* ȠȡȚıµȩȢ IJȪʌȠȣ */ enum colour a,b,c; /* įȒȜȦıȘ µİIJĮȕȜȘIJȫȞ */ int i; a=red; b=green; c=yellow; i=a+b; printf("%d\n",i); if(a<c) printf("Ǿ IJȚµȒ red İȓȞĮȚ µȚțȡȩIJİȡȘ Įʌȩ IJȘȞ IJȚµȒ yellow\n");
} Ǿ ȑȟȠįȠȢ ĮȣIJȠȪ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ, İȓȞĮȚ Ș ʌĮȡĮțȐIJȦ (ȖȚĮIJȓ;):
1 Ǿ IJȚµȒ red İȓȞĮȚ µȚțȡȩIJİȡȘ Įʌȩ IJȘȞ IJȚµȒ yellow ȉȠ ıȘµĮȞIJȚțȩIJİȡȠ ȓıȦȢ µİȚȠȞȑțIJȘµĮ IJȦȞ ĮʌĮȡȚșµȒıİȦȞ İȓȞĮȚ ȩIJȚ įİ µʌȠȡİȓ țĮȞİȓȢ ȞĮ įȚĮȕȐıİȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ Ȓ ȞĮ ݵijĮȞȓıİȚ ıIJȘȞ ȠșȩȞȘ Įʌ'İȣșİȓĮȢ IJȚȢ IJȚµȑȢ IJȘȢ ȜȓıIJĮȢ_IJȚµȫȞ. īȚĮ ȞĮ ȖȓȞİȚ țĮIJĮȞȠȘIJȩ ĮȣIJȩ, ĮȢ ȣʌȠșȑıȠȣµİ ȩIJȚ ȑȤȠȣµİ IJȠ ʌĮȡĮțȐIJȦ IJµȒµĮ țȫįȚțĮ:
enum day{kyr,dey,tri,tet,pem,par,sab}; enum day d; d=kyr; ȉȩIJİ Ș ʌĮȡĮțȐIJȦ İȞIJȠȜȒ İȓȞĮȚ, ʌȡȠijĮȞȫȢ, ȜȐșȠȢ:
printf("%s",d);
ǹʌĮȡȚșµȒıİȚȢ, ǻȠµȑȢ țĮȚ ǼȞȫıİȚȢ
111
įȚȩIJȚ Ș IJȚµȒ IJȘȢ µİIJĮȕȜȘIJȒȢ d, ʌȠȣ İȓȞĮȚ kyr, įİȞ İȓȞĮȚ ĮȜijĮȡȚșµȘIJȚțȩ ĮȜȜȐ ȑȞĮȢ ĮțȑȡĮȚȠȢ (ıIJȘ ıȣȖțİțȡȚµȑȞȘ ʌİȡȓʌIJȦıȘ IJȠ 0). DzIJıȚ Ș ʌĮȡĮʌȐȞȦ İȞIJȠȜȒ șĮ ȑʌȡİʌİ ȞĮ ȖȡĮijIJİȓ:
printf("%d",d); Ș ȠʌȠȓĮ șĮ IJȪʌȦȞİ ıIJȘȞ ȠșȩȞȘ IJȠȞ ĮȡȚșµȩ 0. ǹȞ įİ șȑȜȠȣµİ ȞĮ IJȣʌȫȞİIJĮȚ ıIJȘȞ ȠșȩȞȘ Ƞ ĮțȑȡĮȚȠȢ ʌȠȣ ĮȞIJȚıIJȠȚȤİȓ ıIJȘȞ IJȚµȒ µȓĮȢ µİIJĮȕȜȘIJȒȢ ĮʌĮȡȓșµȘıȘȢ, ĮȜȜȐ IJȠ ĮȞĮȖȞȦȡȚıIJȚțȩ IJȘȢ IJȚµȒȢ ĮȣIJȒȢ, șĮ ʌȡȑʌİȚ ȞĮ ȤȡȘıȚµȠʌȠȚȒıȠȣµİ țȐʌȠȚĮ Įʌȩ IJȚȢ İȞIJȠȜȑȢ İʌȚȜȠȖȒȢ if Ȓ switch. DzIJıȚ ĮȞ șȑȜȠȣµİ ıIJȠ ʌĮȡĮʌȐȞȦ ʌĮȡȐįİȚȖµĮ ȞĮ ݵijĮȞȓȗȠȞIJĮȚ ıIJȘȞ ȠșȩȞȘ IJĮ ȠȞȩµĮIJĮ IJȦȞ ȘµİȡȫȞ țĮȚ ȩȤȚ ȠȚ ĮțȑȡĮȚȠȚ ʌȠȣ ĮȞIJȚıIJȠȚȤȠȪȞ ıIJȚȢ IJȚµȑȢ ʌȠȣ µʌȠȡİȓ ȞĮ ʌȐȡİȚ Ș µİIJĮȕȜȘIJȒ d, șĮ ȑʌȡİʌİ ȞĮ ȖȡȐȥȠȣµİ:
switch(d) { case kyr: case dey: case tri: case tet: case pem: case par: case sab: }
printf("ȀȣȡȚĮțȒ"); printf("ǻİȣIJȑȡĮ"); printf("ȉȡȓIJȘ"); printf("ȉİIJȐȡIJȘ"); printf("ȆȑµʌIJȘ"); printf("ȆĮȡĮıțİȣȒ"); printf("ȈȐȕȕĮIJȠ");
break; break; break; break; break; break; break;
9.2 ǻȅȂǼȈ ǵʌȦȢ İȓįĮµİ ıIJȠ ȀİijȐȜĮȚȠ 8, IJĮ ıIJȠȚȤİȓĮ İȞȩȢ ʌȓȞĮțĮ ʌȡȑʌİȚ ȞĮ İȓȞĮȚ ȩȜĮ IJȠȣ ȓįȚȠȣ IJȪʌȠȣ. ǵIJĮȞ ȩµȦȢ șȑȜȠȣµİ ȞĮ ȠµĮįȠʌȠȚȒıȠȣµİ ȑȞĮȞ ĮȡȚșµȩ µİIJĮȕȜȘIJȫȞ ȠȚ ȠʌȠȓİȢ İȓȞĮȚ įȚĮijȠȡİIJȚțȠȪ IJȪʌȠȣ țĮȚ ȞĮ ĮȞĮijİȡȩµĮıIJİ ı'ĮȣIJȑȢ, ȖȚĮ İȣțȠȜȓĮ, µİ ȑȞĮ ȩȞȠµĮ, IJȩIJİ Ƞ ʌȓȞĮțĮȢ İȓȞĮȚ ĮțĮIJȐȜȜȘȜȠȢ. īȚ'ĮȣIJȑȢ IJȚȢ ʌİȡȚʌIJȫıİȚȢ Ș ȖȜȫııĮ C µĮȢ ʌĮȡȑȤİȚ ȑȞĮ įȠµȘµȑȞȠ IJȪʌȠ įİįȠµȑȞȦȞ ʌȠȣ ȠȞȠµȐȗİIJĮȚ įȠµȒ (structure). Ȉİ µİȡȚțȑȢ ȖȜȫııİȢ ʌȡȠȖȡĮµµĮIJȚıµȠȪ, ȚįȚĮȓIJİȡĮ ıIJȘȞ Pascal, ȠȚ įȠµȑȢ ȠȞȠµȐȗȠȞIJĮȚ İȖȖȡĮijȑȢ (records). DzȞĮ țȜĮıȚțȩ ʌĮȡȐįİȚȖµĮ įȠµȒȢ İȓȞĮȚ Ș ȠµĮįȠʌȠȓȘıȘ ıIJȠȚȤİȓȦȞ ȣʌĮȜȜȒȜȦȞ ȖȚĮ µȓĮ İijĮȡµȠȖȒ µȚıșȠįȠıȓĮȢ. Ȉİ țȐșİ ȣʌȐȜȜȘȜȠ ĮȞIJȚıIJȠȚȤİȓ ȑȞĮ ıȪȞȠȜȠ ıIJȠȚȤİȓȦȞ, ȩʌȦȢ: ȅȞȠµĮIJİʌȫȞȣµȠ ǻȚİȪșȣȞıȘ ǺĮșµȩȢ ȋȡȩȞȚĮ ȊʌȘȡİıȓĮȢ ȅȚțȠȖİȞİȚĮțȒ ȀĮIJȐıIJĮıȘ ț.Ȝ.ʌ. ȀĮșȑȞĮ Įʌ'IJĮ ıIJȠȚȤİȓĮ ĮȣIJȐ ȠȞȠµȐȗİIJĮȚ µȑȜȠȢ (member) IJȘȢ įȠµȒȢ. ȂİȡȚțȐ Įʌȩ IJĮ µȑȜȘ șĮ µʌȠȡȠȪıĮȞ ȞĮ İȓȞĮȚ țȚ ĮȣIJȐ µİ IJȘ ıİȚȡȐ IJȠȣȢ įȠµȑȢ, ȩʌȦȢ IJȠ ȠȞȠµĮIJİʌȫȞȣµȠ, Ș įȚİȪșȣȞıȘ ț.Ȝ.ʌ.
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
112
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
9.2.1 ǻǾȁȍȈǾ ǻȅȂǾȈ Ǿ ȖİȞȚțȒ µȠȡijȒ IJȘȢ İȞIJȠȜȒȢ įȒȜȦıȘȢ İȞȩȢ IJȪʌȠȣ įȠµȒȢ İȓȞĮȚ:
struct ĮȞĮȖȞȦȡȚıIJȚțȩ_IJȪʌȠȣ_įȠµȒȢ { IJȪʌȠȢ_µȑȜȠȣȢ1 ĮȞĮȖȞȦȡȚıIJȚțȩ_µȑȜȠȣȢ1; IJȪʌȠȢ_µȑȜȠȣȢ2 ĮȞĮȖȞȦȡȚıIJȚțȩ_µȑȜȠȣȢ2; ... IJȪʌȠȢ_µȑȜȠȣȢn ĮȞĮȖȞȦȡȚıIJȚțȩ_µȑȜȠȣȢn; }; Ǿ įİıµİȣµȑȞȘ ȜȑȟȘ struct ȟİțȚȞȐ IJȘ įȒȜȦıȘ IJȘȢ įȠµȒȢ, ʌȠȣ İȓȞĮȚ µȓĮ ȜȓıIJĮ įȘȜȫıİȦȞ țȜİȚıµȑȞȦȞ ıİ ȐȖțȚıIJȡĮ. ȉȠ ĮȞĮȖȞȦȡȚıIJȚțȩ_IJȪʌȠȣ_įȠµȒȢ țĮȜİȓIJĮȚ țĮȚ İIJȚțȑIJĮ įȠµȒȢ (structure tag). Ǿ İIJȚțȑIJĮ įȓȞİȚ ȩȞȠµĮ ıIJȘ įȠµȒ țĮȚ ıIJȘ ıȣȞȑȤİȚĮ ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ȦȢ ıȣȞIJȠµȠȖȡĮijȓĮ ȖȚĮ IJȘ ȜȓıIJĮ IJȦȞ įȘȜȫıİȦȞ ʌȠȣ ȣʌȐȡȤȠȣȞ µȑıĮ ıIJĮ ȐȖțȚıIJȡĮ. ȉĮ ĮȞĮȖȞȦȡȚıIJȚțȐ IJȦȞ µİȜȫȞ IJȘȢ ȓįȚĮȢ įȠµȒȢ ʌȡȑʌİȚ ȞĮ İȓȞĮȚ įȚĮijȠȡİIJȚțȐ µİIJĮȟȪ IJȠȣȢ. ȍıIJȩıȠ ȑȞĮ ĮȞĮȖȞȦȡȚıIJȚțȩ µȑȜȠȣȢ Ȓ Ș İIJȚțȑIJĮ IJȘȢ įȠµȒȢ, µʌȠȡİȓ ȞĮ İȓȞĮȚ IJȠ ȓįȚȠ µİ IJȠ ĮȞĮȖȞȦȡȚıIJȚțȩ µȓĮȢ ȐȜȜȘȢ µİIJĮȕȜȘIJȒȢ ʌȠȣ įİȞ İȓȞĮȚ µȑȜȠȢ ĮȣIJȒȢ IJȘȢ įȠµȒȢ. DzȞĮ ʌĮȡȐįİȚȖµĮ įȒȜȦıȘȢ įȠµȒȢ İȓȞĮȚ:
struct date { int day; /* ȘµȑȡĮ */ char mon_name[13]; /* µȒȞĮȢ */ int year; /* ȑIJȠȢ */ }; ǹȣIJȒ Ș įȠµȒ ȠµĮįȠʌȠȚİȓ IJȡİȚȢ µİIJĮȕȜȘIJȑȢ ʌȠȣ ȤȡȘıȚµȠʌȠȚȠȪȞIJĮȚ ȖȚĮ IJȘȞ ʌİȡȚȖȡĮijȒ µȓĮȢ ȘµİȡȠµȘȞȓĮȢ IJȘȢ µȠȡijȒȢ: 10 ȃȠݵȕȡȓȠȣ 1996. ȂȓĮ įȒȜȦıȘ struct ȠȡȓȗİȚ ȑȞĮȞ IJȪʌȠ. DzIJıȚ IJȠ įİȟȚȩ ȐȖțȚıIJȡȠ ʌȠȣ IJİȡµĮIJȓȗİȚ IJȘ ȜȓıIJĮ IJȦȞ µİȜȫȞ, µʌȠȡİȓ ȞĮ ĮțȠȜȠȣșİȓIJĮȚ Įʌȩ µȓĮ ȜȓıIJĮ µİIJĮȕȜȘIJȫȞ, ȩʌȦȢ ȐȜȜȦıIJİ ıȣµȕĮȓȞİȚ țĮȚ µİ IJȠȣȢ ȕĮıȚțȠȪȢ IJȪʌȠȣȢ. ǻȘȜĮįȒ, Ș:
struct date { int day; /* ȘµȑȡĮ */ char mon_name[13]; /* µȒȞĮȢ */ int year; /* ȑIJȠȢ */ } a,b,c; İȓȞĮȚ ıȣȞIJĮțIJȚțȐ ȚıȠįȪȞĮµȘ µİ IJȘȞ:
int a,b,c; µİ IJȘȞ ȑȞȞȠȚĮ ȩIJȚ țĮșݵȚȐ Įʌȩ IJȚȢ ʌĮȡĮʌȐȞȦ İȞIJȠȜȑȢ ȠȡȓȗİȚ IJĮ a, b, c ȦȢ µİIJĮȕȜȘIJȑȢ IJȠȣ țĮIJȠȞȠµĮȗȩµİȞȠȣ IJȪʌȠȣ, ʌȡȠțĮȜȫȞIJĮȢ įȑıµİȣıȘ µȞȒµȘȢ ȖȚ'ĮȣIJȑȢ. ȂȓĮ įȒȜȦıȘ įȠµȒȢ ʌȠȣ įİȞ ĮțȠȜȠȣșİȓIJĮȚ Įʌȩ ȜȓıIJĮ µİIJĮȕȜȘIJȫȞ, įİ įİıµİȪİȚ ȤȫȡȠ ıIJȘ µȞȒµȘ, ĮʌȜȐ ȠȡȓȗİȚ ȑȞĮȞ IJȪʌȠ. īȚĮ ȞĮ ȠȡȓıȠȣµİ µİIJȐ µİIJĮȕȜȘIJȑȢ ĮȣIJȠȪ
ǹʌĮȡȚșµȒıİȚȢ, ǻȠµȑȢ țĮȚ ǼȞȫıİȚȢ
113
IJȠȣ IJȪʌȠȣ, ȤȡȘıȚµȠʌȠȚȠȪµİ IJȘȞ İIJȚțȑIJĮ IJȘȢ įȠµȒȢ. DzIJıȚ ȖȚĮ ʌĮȡȐįİȚȖµĮ, µİ įİįȠµȑȞȘ IJȘȞ ʌĮȡĮʌȐȞȦ įȒȜȦıȘ IJȘȢ date, Ș İȞIJȠȜȒ:
struct date d1; ȠȡȓȗİȚ µȓĮ µİIJĮȕȜȘIJȒ d1 IJȪʌȠȣ struct İʌĮȞĮȜȘijșİȓ Ș ȜȓıIJĮ IJȦȞ µİȜȫȞ.
date ȤȦȡȓȢ ȞĮ ȤȡİȚȐȗİIJĮȚ ȞĮ
9.2.2 ǹȃǹĭȅȇǹ Ȉȉǹ ȂǼȁǾ ȂǿǹȈ ǻȅȂǾȈ ȂʌȠȡȠȪµİ ȞĮ ĮȞĮijİȡȩµĮıIJİ ıİ ıȣȖțİțȡȚµȑȞĮ µȑȜȘ µȓĮȢ įȠµȒȢ ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ IJȠȞ IJİȜİıIJȒ '.', Ƞ ȠʌȠȓȠȢ țĮȜİȓIJĮȚ IJİȜİıIJȒȢ IJİȜİȓĮ, ȦȢ İȟȒȢ:
ĮȞĮȖȞȦȡȚıIJȚțȩ_įȠµȒȢ.ĮȞĮȖȞȦȡȚıIJȚțȩ_µȑȜȠȣȢ DzIJıȚ Ș İȞIJȠȜȒ:
d1.year=1996; țĮIJĮȤȦȡİȓ ıIJȠ µȑȜȠȢ year IJȘȢ d1 IJȘȞ IJȚµȒ 1996. ȈIJȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ ȠȡȓȗȠȣµİ IJȠȞ IJȪʌȠ įȠµȒȢ person ȞĮ įȚĮșȑIJİȚ įȪȠ µȑȜȘ: name țĮȚ salary. ǹțȠȜȠȪșȦȢ įȘȜȫȞȠȣµİ įȪȠ µİIJĮȕȜȘIJȑȢ, person1 țĮȚ person2, ıIJȚȢ ȠʌȠȓİȢ țĮIJĮȤȦȡȠȪµİ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ IJĮ ȠȞȩµĮIJĮ țĮȚ IJȠȣȢ µȚıșȠȪȢ įȪȠ ȣʌĮȜȜȒȜȦȞ. ȈIJȘ ıȣȞȑȤİȚĮ ݵijĮȞȓȗȠȣµİ ıIJȘȞ ȠșȩȞȘ IJĮ ıIJȠȚȤİȓĮ IJȦȞ įȪȠ ȣʌĮȜȜȒȜȦȞ țĮȚ IJȑȜȠȢ ȕȡȓıțȠȣµİ țĮȚ IJȣʌȫȞȠȣµİ IJȠ ȩȞȠµĮ IJȠȣ ȣʌĮȜȜȒȜȠȣ µİ IJȠ µİȖĮȜȪIJİȡȠ µȚıșȩ. /* struct1.c */ /* ȋȡȒıȘ įȠµȫȞ */ #include <stdlib.h> /* ȖȚĮ ȤȡȒıȘ IJȘȢ ıȣȞȐȡIJȘıȘȢ atof() */ main() { struct person /* ȠȡȚıµȩȢ IJȪʌȠȣ */ { char name[40]; float salary; }; struct person person1,person2; /* įȒȜȦıȘ µİIJĮȕȜȘIJȫȞ */ char numstr[10];
}
printf("ǻȫıİ IJȠ ȩȞȠµĮ IJȠȣ 1Ƞȣ ȣʌĮȜȜȒȜȠȣ: "); gets(person1.name); printf("ǻȫıİ IJȠ µȚıșȩ IJȠȣ 1Ƞȣ ȣʌĮȜȜȒȜȠȣ: "); gets(numstr); person1.salary=atof(numstr); printf("ǻȫıİ IJȠ ȩȞȠµĮ IJȠȣ 2Ƞȣ ȣʌĮȜȜȒȜȠȣ: "); gets(person2.name); printf("ǻȫıİ IJȠ µȚıșȩ IJȠȣ 2Ƞȣ ȣʌĮȜȜȒȜȠȣ: "); gets(numstr); person2.salary=atof(numstr); clrscr(); printf("1ȠȢ: %s : %f įȡȤ\n",person1.name,person1.salary); printf("2ȠȢ: %s : %f įȡȤ\n",person2.name,person2.salary); if(person1.salary>person2.salary) printf("ȉĮ ʌİȡȚııȩIJİȡĮ ȤȡȒµĮIJĮ ʌĮȓȡȞİȚ Ƞ 1ȠȢ\n"); else if(person2.salary>person1.salary) printf("ȉĮ ʌİȡȚııȩIJİȡĮ ȤȡȒµĮIJĮ ʌĮȓȡȞİȚ Ƞ 2ȠȢ\n"); else printf("ȆĮȓȡȞȠȣȞ IJȠȞ ȓįȚȠ µȚıșȩ\n");
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
114
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ȈIJȠ ʌĮȡĮʌȐȞȦ ʌȡȩȖȡĮµµĮ ȤȡȘıȚµȠʌȠȚȒșȘțĮȞ ȠȚ ıȣȞĮȡIJȒıİȚȢ gets() țĮȚ atof() ȖȚĮ ȞĮ įȚĮȕĮıIJİȓ Ƞ µȚıșȩȢ IJȦȞ ȣʌĮȜȜȒȜȦȞ (ʌȡĮȖµĮIJȚțȩȢ ĮȡȚșµȩȢ) Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ. Ǿ ıȣȞȐȡIJȘıȘ atof() (ASCII to float) įȑȤİIJĮȚ ȦȢ ȩȡȚıµĮ ȑȞĮ ĮȜijĮȡȚșµȘIJȚțȩ țĮȚ IJȠ µİIJĮIJȡȑʌİȚ ıİ ĮȡȚșµȩ țȚȞȘIJȒȢ ȣʌȠįȚĮıIJȠȜȒȢ. ȉȠ ĮȜijĮȡȚșµȘIJȚțȩ ʌȡȑʌİȚ ȞĮ ʌİȡȚȑȤİȚ ȑȖțȣȡȠ ĮȡȚșµȩ țȚȞȘIJȒȢ ȣʌȠįȚĮıIJȠȜȒȢ. ǹȞ įİ ıȣµȕĮȓȞİȚ ĮȣIJȩ, Ș ıȣȞȐȡIJȘıȘ İʌȚıIJȡȑijİȚ µȘįȑȞ. DzIJıȚ Ș İȞIJȠȜȒ:
x=atof("1.23"); țĮIJĮȤȦȡİȓ ıIJȘ x (ʌȠȣ ʌȡȑʌİȚ ȞĮ İȓȞĮȚ IJȪʌȠȣ float) IJȘȞ IJȚµȒ 1.23. ȈȤİIJȚțȒ ıȣȞȐȡIJȘıȘ İȓȞĮȚ Ș atoi() (ASCII to integer) Ș ȠʌȠȓĮ µİIJĮIJȡȑʌİȚ IJȠ ĮȜijĮȡȚșµȘIJȚțȩ ʌȠȣ įȑȤİIJĮȚ ȦȢ ȩȡȚıµĮ, ıİ ĮțȑȡĮȚȠ ĮȡȚșµȩ. ȆȐȜȚ IJȠ ĮȜijĮȡȚșµȘIJȚțȩ ʌȡȑʌİȚ ȞĮ ʌİȡȚȑȤİȚ ȑȖțȣȡȠ ĮțȑȡĮȚȠ ĮȡȚșµȩ. ȉĮ ʌȡȩIJȣʌĮ ĮȣIJȫȞ IJȦȞ ıȣȞĮȡIJȒıİȦȞ ȣʌȐȡȤȠȣȞ ıIJȠ ĮȡȤİȓȠ-İʌȚțİijĮȜȓįĮȢ stdlib.h. ȅ ȜȩȖȠȢ ʌȠȣ ȤȡȘıȚµȠʌȠȚȒșȘțİ Ƞ ıȣȞįȣĮıµȩȢ IJȦȞ gets() țĮȚ atof() ĮȞIJȓ IJȘȢ scanf() ȖȚĮ ȞĮ įȚĮȕĮıIJİȓ ȑȞĮȢ ĮȡȚșµȩȢ float, İȓȞĮȚ µȓĮ ȚįȚȠµȠȡijȓĮ ʌȠȣ ʌĮȡȠȣıȚȐȗİȚ Ș scanf(). ȈȣȖțİțȡȚµȑȞĮ ȩIJĮȞ Ș scanf() įȚĮȕȐȗİȚ ȑȞĮȞ ĮȡȚșµȩ ʌȠȣ ʌȜȘțIJȡȠȜȠȖİȓ Ƞ ȤȡȒıIJȘȢ ʌĮIJȫȞIJĮȢ ıIJȠ IJȑȜȠȢ IJȠ ʌȜȒțIJȡȠ ENTER, ĮijĮȚȡİȓ Įʌȩ IJȠ buffer IJȠȣ ʌȜȘțIJȡȠȜȠȖȓȠȣ IJȠȞ ĮȡȚșµȩ, ĮȜȜȐ ȩȤȚ țĮȚ IJȠ ȤĮȡĮțIJȒȡĮ ȞȑĮȢ ȖȡĮµµȒȢ. DzIJıȚ ĮȞ µİIJȐ IJȘȞ scanf() ĮțȠȜȠȣșİȓ µȓĮ gets(), ȕȡȓıțİȚ ıIJȠ buffer IJȠ ȤĮȡĮțIJȒȡĮ ȞȑĮȢ ȖȡĮµµȒȢ țĮȚ, ijȣıȚțȐ, IJȠ įȚĮȕȐȗİȚ ȞȠµȓȗȠȞIJĮȢ ȩIJȚ Ƞ ȤȡȒıIJȘȢ ȑȤİȚ İȚıȐȖİȚ ȑȞĮ țİȞȩ ĮȜijĮȡȚșµȘIJȚțȩ. īİȞȚțȐ Ș scanf() İȓȞĮȚ µȓĮ µȐȜȜȠȞ ȠȖțȫįȘȢ ıȣȞȐȡIJȘıȘ, ȩıȠȞ ĮijȠȡȐ IJȠ ʌȜȒșȠȢ IJȦȞ bytes ʌȠȣ ʌȡȠıșȑIJİȚ ıIJȠ µİIJĮȖȜȦIJIJȚıµȑȞȠ ʌȡȩȖȡĮµµȐ µĮȢ țȚ ȑIJıȚ țĮȜȩ İȓȞĮȚ ȞĮ ĮʌȠijİȪȖİIJĮȚ. Ǿ ıȣȞȐȡIJȘıȘ gets() ʌȡȠIJȚµȐIJĮȚ ȖȚĮ IJĮ ĮȜijĮȡȚșµȘIJȚțȐ țĮȚ Ƞ ıȣȞįȣĮıµȩȢ gets() țĮȚ atoi() Ȓ atof() ȖȚĮ IJȠȣȢ ĮȡȚșµȠȪȢ. Ǽįȫ ȞĮ ıȘµİȚȫıȠȣµİ țĮȚ µȓĮ įȣȞĮIJȩIJȘIJĮ IJȘȢ Turbo C ıİ ıȤȑıȘ µİ IJȠ ʌȡȩIJȣʌȠ IJȘȢ C ȩʌȦȢ țĮșȠȡȓıIJȘțİ Įʌȩ IJȠȣȢ K&R. ȈIJȠ ʌȡȩIJȣʌȠ, İȓȞĮȚ ĮįȪȞĮIJȠ ȞĮ țĮIJĮȤȦȡȘșȠȪȞ ȠȚ IJȚµȑȢ IJȦȞ µİȜȫȞ µȓĮȢ įȠµȒȢ ıİ µȓĮ ȐȜȜȘ µİIJĮȕȜȘIJȒ IJȠȣ ȓįȚȠȣ IJȪʌȠȣ įȠµȒȢ, µİ IJȘ ȤȡȒıȘ µȓĮȢ ĮʌȜȒȢ İȞIJȠȜȒȢ țĮIJĮȤȫȡȘıȘȢ. ȈIJȘȞ Turbo C ĮȣIJȩ İȓȞĮȚ įȣȞĮIJȩ. ǻȘȜĮįȒ ĮȞ ȠȚ d1 țĮȚ d2 İȓȞĮȚ įȠµȑȢ IJȠȣ ȓįȚȠȣ IJȪʌȠȣ, µʌȠȡİȓ ȞĮ ȤȡȘıȚµȠʌȠȚȘșİȓ Ș İȞIJȠȜȒ:
d1=d2; Ș ȠʌȠȓĮ ȑȤİȚ ȦȢ ĮʌȠIJȑȜİıµĮ IJĮ µȑȜȘ IJȘȢ įȠµȒȢ d1 ȞĮ ʌȐȡȠȣȞ IJȚȢ ȓįȚİȢ IJȚµȑȢ µİ ĮȣIJȐ IJȘȢ d2.
9.2.3 ǼȃĬǼȉǼȈ ǻȅȂǼȈ ȅȚ įȠµȑȢ µʌȠȡȠȪȞ ȞĮ ʌİȡȚȑȤȠȣȞ ȦȢ µȑȜȘ ȐȜȜİȢ įȠµȑȢ. īȚĮ ʌĮȡȐįİȚȖµĮ, ĮȢ șİȦȡȒıȠȣµİ IJȚȢ ʌĮȡĮțȐIJȦ įȘȜȫıİȚȢ įȠµȫȞ, ʌȠȣ µʌȠȡȠȪȞ ȞĮ ȤȡȘıȚµȠʌȠȚȘșȠȪȞ ȖȚĮ ĮʌȠșȒțİȣıȘ IJȠȣ ȠȞȩµĮIJȠȢ, IJȘȢ ȘµİȡȠµȘȞȓĮȢ ȖȑȞȞȘıȘȢ țĮȚ IJȘȢ įȚİȪșȣȞıȘȢ İȞȩȢ ĮIJȩµȠȣ:
struct name { char fname[10]; char lname[20]; };
/* ȩȞȠµĮ */ /* İʌȫȞȣµȠ */
ǹʌĮȡȚșµȒıİȚȢ, ǻȠµȑȢ țĮȚ ǼȞȫıİȚȢ
115
struct date { int day; /* ȘµȑȡĮ */ char mon_name[13]; /* µȒȞĮȢ */ int year; /* ȑIJȠȢ */ }; struct address { char street[15]; int number; };
/* ȠįȩȢ */ /* ĮȡȚșµȩȢ */
struct person { struct name persname; /* ȠȞȠµĮIJİʌȫȞȣµȠ */ struct date birth; /* ȘµİȡȠµȘȞȓĮ ȖȑȞȞȘıȘȢ */ struct address house; /* įȚİȪșȣȞıȘ */ }; struct person fred; ȉȩIJİ Ș İȞIJȠȜȒ:
fred.birth.year=1966; ĬȑIJİȚ ıIJȠ ʌİįȓȠ ȤȡȠȞȠȜȠȖȓĮȢ ȖȑȞȞȘıȘȢ IJȘȢ µİIJĮȕȜȘIJȒȢ fred, IJȘȞ IJȚµȒ 1966.
9.2.4 ǹȆȅǻȅȈǾ ǹȇȋǿȀȍȃ ȉǿȂȍȃ ȈǼ ǻȅȂǼȈ ǵʌȦȢ țĮȚ ȠȚ µİIJĮȕȜȘIJȑȢ IJȦȞ ȕĮıȚțȫȞ IJȪʌȦȞ țĮȚ ȠȚ ʌȓȞĮțİȢ, ȑIJıȚ țĮȚ ȠȚ µİIJĮȕȜȘIJȑȢ įȠµȒȢ µʌȠȡȠȪȞ ȞĮ ʌȐȡȠȣȞ ĮȡȤȚțȑȢ IJȚµȑȢ. Ǿ ȖİȞȚțȒ µȠȡijȒ IJȘȢ İȞIJȠȜȒȢ ĮʌȩįȠıȘȢ ĮȡȤȚțȫȞ IJȚµȫȞ ıİ µȓĮ įȠµȒ, İȓȞĮȚ ʌĮȡȩµȠȚĮ µ'ĮȣIJȒ ʌȠȣ ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ȖȚĮ IJȠȣȢ ʌȓȞĮțİȢ. ȀȐșİ µİIJĮȕȜȘIJȒ ĮțȠȜȠȣșİȓIJĮȚ Įʌȩ IJȠ ıȘµİȓȠ = țĮȚ µİIJȐ µȓĮ ȜȓıIJĮ ĮȡȤȚțȫȞ IJȚµȫȞ, țȜİȚıµȑȞȘ ıİ ĮȖțȪȜİȢ. ȀȐșİ ĮȡȤȚțȒ IJȚµȒ ʌȡȑʌİȚ ȞĮ İȓȞĮȚ IJȠȣ ȓįȚȠȣ IJȪʌȠȣ µİ IJȠȞ IJȪʌȠ IJȠȣ µȑȜȠȣȢ ıIJȠ ȠʌȠȓȠ ĮȞIJȚıIJȠȚȤİȓ. DzIJıȚ ʌ.Ȥ. Ș ʌĮȡĮțȐIJȦ İȞIJȠȜȒ:
struct date d1={28,"ǹʌȡȚȜȓȠȣ",1989}; șȑIJİȚ ĮȡȤȚțȑȢ IJȚµȑȢ ıIJĮ µȑȜȘ IJȘȢ d1 ʌȠȣ İȓȞĮȚ IJȪʌȠȣ struct date ʌȠȣ ȠȡȓıĮµİ ıIJȘȞ § 9.2.1.
9.2.5 ǻȅȂǼȈ ȍȈ ȆǹȇǹȂǼȉȇȅǿ ȈǼ ȈȊȃǹȇȉǾȈǼǿȈ ǵʌȦȢ µİIJĮȕȚȕȐȗȠȣµİ ıİ µȓĮ ıȣȞȐȡIJȘıȘ IJȘȞ IJȚµȒ µȓĮȢ ĮʌȜȒȢ µİIJĮȕȜȘIJȒȢ, µİ IJȠȞ ȓįȚȠ IJȡȩʌȠ µʌȠȡȠȪµİ ȞĮ µİIJĮȕȚȕȐıȠȣµİ IJȘȞ IJȚµȒ İȞȩȢ µȑȜȠȣȢ µȓĮȢ įȠµȒȢ Ȓ ĮțȩµĮ țĮȚ IJȚȢ IJȚµȑȢ ȩȜȦȞ IJȦȞ µİȜȫȞ IJȘȢ (ȠȜȩțȜȘȡȘ IJȘ įȠµȒ). ȍȢ ʌĮȡȐįİȚȖµĮ șĮ ȟĮȞĮȖȡȐȥȠȣµİ IJȠ ʌȡȩȖȡĮµµĮ struct1.c IJȘȢ § 9.2.2 ȫıIJİ ȞĮ ȤȡȘıȚµȠʌȠȚȒıȠȣµİ ıȣȞĮȡIJȒıİȚȢ ȖȚĮ IJȘȞ İȚıĮȖȦȖȒ IJȦȞ įİįȠµȑȞȦȞ Įʌȩ IJȠ ȤȡȒıIJȘ, IJȘȞ ݵijȐȞȚıȒ IJȠȣȢ ıIJȘȞ ȠșȩȞȘ țĮȚ IJȘȞ İȪȡİıȘ ĮȣIJȠȪ µİ IJȠ µİȖĮȜȪIJİȡȠ µȚıșȩ.
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
116
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
/* struct2.c */ /* ǻȠµȑȢ ȦȢ ʌĮȡȐµİIJȡȠȚ ıȣȞĮȡIJȒıİȦȞ */ #include <stdlib.h> /* ȖȚĮ ȤȡȒıȘ IJȘȢ ıȣȞȐȡIJȘıȘȢ atof() */ struct person { char name[40]; float salary; }; struct person newname(int); void list(struct person,struct person); void maxim(float,float); main() { struct person person1,person2;
}
clrscr(); person1=newname(1); person2=newname(2); list(person1,person2); maxim(person1.salary,person2.salary);
/* newname */ /* ǼȚıȐȖİȚ ıIJȠȚȤİȓĮ ȖȚĮ ȑȞĮȞ ȣʌȐȜȜȘȜȠ */ struct person newname(int x) { char numstr[10]; struct person p;
}
printf("ǻȫıİ IJȠ ȩȞȠµĮ IJȠȣ %dȠȣ ȣʌĮȜȜȒȜȠȣ: ",x); gets(p.name); printf("ǻȫıİ IJȠ µȚıșȩ IJȠȣ %dȠȣ ȣʌĮȜȜȒȜȠȣ: ",x); gets(numstr); p.salary=atof(numstr); return(p);
/* list() */ /* ȉȣʌȫȞİȚ IJĮ ıIJȠȚȤİȓĮ IJȦȞ įȪȠ ȣʌĮȜȜȒȜȦȞ */ void list(struct person p1,struct person p2) { clrscr(); printf("1ȠȢ: %s : %f įȡȤ\n",p1.name,p1.salary); printf("2ȠȢ: %s : %f įȡȤ\n",p2.name,p2.salary); } /* maxim() */ /* ǺȡȓıțİȚ țĮȚ IJȣʌȫȞİȚ ʌȠȚȠȢ ʌĮȓȡȞİȚ IJȠ µİȖĮȜȪIJİȡȠ µȚıșȩ */ void maxim(float p1s,float p2s) { if(p1s>p2s) printf("ȉĮ ʌİȡȚııȩIJİȡĮ ȤȡȒµĮIJĮ ʌĮȓȡȞİȚ Ƞ 1ȠȢ\n"); else if(p2s>p1s) printf("ȉĮ ʌİȡȚııȩIJİȡĮ ȤȡȒµĮIJĮ ʌĮȓȡȞİȚ Ƞ 2ȠȢ\n"); else printf("ȆĮȓȡȞȠȣȞ IJȠȞ ȓįȚȠ µȚıșȩ\n");
ǹʌĮȡȚșµȒıİȚȢ, ǻȠµȑȢ țĮȚ ǼȞȫıİȚȢ
117
}
9.2.6 ȆǿȃǹȀǼȈ ǻȅȂȍȃ ȂȓĮ µȑșȠįȠȢ İȪțȠȜȠȣ ȤİȚȡȚıµȠȪ İȞȩȢ µİȖȐȜȠȣ ĮȡȚșµȠȪ įȠµȫȞ IJȠȣ ȓįȚȠȣ IJȪʌȠȣ, İȓȞĮȚ ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ ȑȞĮȞ ʌȓȞĮțĮ µİ ıIJȠȚȤİȓĮ įȠµȑȢ. ȀȐșİ įȠµȒ șĮ µʌȠȡİȓ ȞĮ ʌȡȠıʌİȜĮıIJİȓ µİ ȤȡȒıȘ IJȠȣ įİȓțIJȘ-ʌȓȞĮțĮ. ȉȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ ȤȡȘıȚµȠʌȠȚİȓ ȑȞĮȞ ʌȓȞĮțĮ ȚțĮȞȩ ȞĮ ĮʌȠșȘțİȪıİȚ 25 įȠµȑȢ. ȀȐșİ įȠµȒ İȓȞĮȚ IJȪʌȠȣ person. Ǿ İȚıĮȖȦȖȒ ıIJȠȚȤİȓȦȞ țĮșȫȢ țĮȚ Ș ݵijȐȞȚıȘ ĮȣIJȫȞ ıIJȘȞ ȠșȩȞȘ, ʌȡĮȖµĮIJȠʌȠȚȠȪȞIJĮȚ µİ ȕȠȒșİȚĮ İȞȩȢ menu İʌȚȜȠȖȫȞ: /* arstr.c */ /* ȆȓȞĮțĮȢ įȠµȫȞ */ #include <stdlib.h> struct person { char name[40]; float salary; }; struct person array[25]; int n=0; main() { char select; do {
}
clrscr(); puts("1. ǼȚıĮȖȦȖȒ ıIJȠȚȤİȓȦȞ ȣʌĮȜȜȒȜȠȣ"); puts("2. ǼµijȐȞȚıȘ ȜȓıIJĮȢ ȣʌĮȜȜȒȜȦȞ"); puts("3. ǼȟȠįȠȢ"); printf("ǻȫıİ İʌȚȜȠȖȒ: "); select=getche(); switch(select) { case '1': newname(); break; case '2': list(); break; }
} while(select!='3');
/* newname */ /* ǼȚıȐȖİȚ ıIJȠȚȤİȓĮ ȖȚĮ ȑȞĮȞ ȣʌȐȜȜȘȜȠ */ newname() { char numstr[10]; float temp; clrscr(); printf("ǻȫıİ IJȠ ȩȞȠµĮ IJȠȣ %dȠȣ ȣʌĮȜȜȒȜȠȣ: ",n+1); gets(array[n].name); printf("ǻȫıİ IJȠ µȚıșȩ IJȠȣ %dȠȣ ȣʌĮȜȜȒȜȠȣ: ",n+1); gets(numstr); array[n++].salary=atof(numstr);
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
118
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
} /* list() */ /* ȉȣʌȫȞİȚ IJĮ ıIJȠȚȤİȓĮ IJȦȞ ȣʌĮȜȜȒȜȦȞ */ list() { int i;
}
clrscr(); if(n<1) printf("Ǿ ȜȓıIJĮ İȓȞĮȚ ȐįİȚĮ"); for(i=0;i<n;i++) printf("%d %s %f\n",i+1,array[i].name,array[i].salary); getch();
9.3 ǼȃȍȈǼǿȈ ȉĮ µȑȜȘ µȓĮȢ įȠµȒȢ ȕȡȓıțȠȞIJĮȚ ĮʌȠșȘțİȣµȑȞĮ ıIJȘ µȞȒµȘ IJȠȣ Ǿ/Ȋ IJĮȣIJȩȤȡȠȞĮ. ǵµȦȢ µİȡȚțȑȢ ijȠȡȑȢ ĮȣIJȩ įİȞ İȓȞĮȚ ĮʌĮȡĮȓIJȘIJȠ įȚȩIJȚ Ș ijȪıȘ IJȠȣ ʌȡȠȕȜȒµĮIJȠȢ İȓȞĮȚ IJȑIJȠȚĮ, ȫıIJİ țȐșİ ȤȡȠȞȚțȒ ıIJȚȖµȒ µȩȞȠ ȑȞĮ Įʌ'ĮȣIJȐ ȞĮ ʌİȡȚȑȤİȚ ȤȡȒıȚµȘ ʌȜȘȡȠijȠȡȓĮ. ǻȘȜĮįȒ șĮ șȑȜĮµİ Ƞ ȓįȚȠȢ ȤȫȡȠȢ µȞȒµȘȢ ȞĮ ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ıİ įȚĮijȠȡİIJȚțȑȢ ıIJȚȖµȑȢ Įʌȩ ʌȠȜȜȑȢ įȚĮijȠȡİIJȚțȑȢ µİIJĮȕȜȘIJȑȢ, ȠȚ ȠʌȠȓİȢ µʌȠȡİȓ ȞĮ µȘȞ İȓȞĮȚ țĮȞ IJȠȣ ȓįȚȠȣ IJȪʌȠȣ. ǹȣIJȩ İʌȚIJȣȖȤȐȞİIJĮȚ µİ IJȘ ȤȡȘıȚµȠʌȠȓȘıȘ IJȦȞ İȞȫıİȦȞ (unions). ȅȚ İȞȫıİȚȢ İȓȞĮȚ ĮȞȐȜȠȖİȢ µİ IJȚȢ µİIJĮȕĮȜȜȩµİȞİȢ İȖȖȡĮijȑȢ (variant records) IJȘȢ Pascal. Ǿ ȖİȞȚțȒ µȠȡijȒ IJȘȢ İȞIJȠȜȒȢ įȒȜȦıȘȢ İȞȩȢ IJȪʌȠȣ ȑȞȦıȘȢ İȓȞĮȚ ĮȞȐȜȠȖȘ µİ ĮȣIJȒ IJȘȢ įȠµȒȢ:
union ĮȞĮȖȞȦȡȚıIJȚțȩ_IJȪʌȠȣ_ȑȞȦıȘȢ { IJȪʌȠȢ_µȑȜȠȣȢ1 ĮȞĮȖȞȦȡȚıIJȚțȩ_µȑȜȠȣȢ1; IJȪʌȠȢ_µȑȜȠȣȢ2 ĮȞĮȖȞȦȡȚıIJȚțȩ_µȑȜȠȣȢ2; ... IJȪʌȠȢ_µȑȜȠȣȢn ĮȞĮȖȞȦȡȚıIJȚțȩ_µȑȜȠȣȢn; }; Ǿ įȒȜȦıȘ µİIJĮȕȜȘIJȫȞ IJȪʌȠȣ ȑȞȦıȘȢ ȖȓȞİIJĮȚ ĮțȡȚȕȫȢ µİ IJȠȞ ȓįȚȠ IJȡȩʌȠ ȩʌȦȢ ȖȚĮ IJȚȢ įȠµȑȢ. Ǿ ĮȞĮijȠȡȐ ıIJĮ µȑȜȘ µȓĮȢ ȑȞȦıȘȢ ȖȓȞİIJĮȚ µİ IJȠȞ ȓįȚȠ IJȡȩʌȠ ȩʌȦȢ țĮȚ ıIJȚȢ įȠµȑȢ. ȅ ȤȫȡȠȢ µȞȒµȘȢ ʌȠȣ țĮIJĮȜĮµȕȐȞİȚ µȓĮ ȑȞȦıȘ İȓȞĮȚ IJȩıȠ µİȖȐȜȠȢ, ȫıIJİ ȞĮ ȤȦȡȐİȚ IJȠ µİȖĮȜȪIJİȡȠ Įʌȩ IJȠȣȢ IJȪʌȠȣȢ IJȦȞ µİȜȫȞ IJȘȢ. ǼȓȞĮȚ İȣșȪȞȘ IJȠȣ ʌȡȠȖȡĮµµĮIJȚıIJȒ ȞĮ ʌĮȡĮțȠȜȠȣșİȓ ʌȠȚȠȢ IJȪʌȠȢ İȓȞĮȚ ĮʌȠșȘțİȣµȑȞȠȢ țȐșİ ȤȡȠȞȚțȒ ıIJȚȖµȒ ıİ µȓĮ µİIJĮȕȜȘIJȒ IJȪʌȠȣ ȑȞȦıȘȢ. ǹȞ țȐIJȚ ĮʌȠșȘțİȣIJİȓ µİ țȐʌȠȚȠ IJȪʌȠ țĮȚ ĮȞĮțIJȘșİȓ µİ ȐȜȜȠ, IJĮ ĮʌȠIJİȜȑıµĮIJĮ İȓȞĮȚ ĮʌȡȠıįȚȩȡȚıIJĮ. ȈIJȠ ʌĮȡĮțȐIJȦ ʌĮȡȐįİȚȖµĮ įȘȜȫȞȠȣµİ ȑȞĮȞ IJȪʌȠ ȑȞȦıȘȢ (intfloat) țĮȚ µȓĮ µİIJĮȕȜȘIJȒ ȑȞȦıȘȢ (x). ȋȡȘıȚµȠʌȠȚİȓIJĮȚ ıIJȠ ʌȡȩȖȡĮµµĮ Ƞ µȠȞĮįȚțȩȢ (unary) IJİȜİıIJȒȢ sizeof Ƞ ȠʌȠȓȠȢ İijĮȡµȠȗȩµİȞȠȢ ıİ µȓĮ µİIJĮȕȜȘIJȒ Ȓ ıİ ȑȞĮȞ IJȪʌȠ, įȓȞİȚ IJȠȞ ĮȡȚșµȩ IJȦȞ bytes ʌȠȣ țĮIJĮȜĮµȕȐȞȠȞIJĮȚ Įʌȩ IJȘ µİIJĮȕȜȘIJȒ Ȓ Įʌȩ IJȠȞ IJȪʌȠ.
ǹʌĮȡȚșµȒıİȚȢ, ǻȠµȑȢ țĮȚ ǼȞȫıİȚȢ
/* union.c */ /* ȋȡȒıȘ İȞȫıİȦȞ */ main() { union intflȠ { int intnum; float floatnum; }; union intflo x;
119
/* ȠȡȚıµȩȢ IJȪʌȠȣ */
/* įȒȜȦıȘ µİIJĮȕȜȘIJȒȢ */
printf("Bytes ʌȠȣ țĮIJĮȜĮµȕȐȞİȚ Ș ȑȞȦıȘ: %d\n",sizeof(union intflo)); x.intnum=321; printf("x.intnum=%d\n",x.intnum); x.floatnum=123.456; printf("x.floatnum=%.3f\n",x.floatnum);
} Ǿ ȑȟȠįȠȢ ĮȣIJȠȪ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ İȓȞĮȚ:
Bytes ʌȠȣ țĮIJĮȜĮµȕȐȞİȚ Ș ȑȞȦıȘ: 4 x.intnum=321 x.floatnum=123.456 ȆĮȡȩȜȠ ʌȠȣ Ș ȑȞȦıȘ ȑȤİȚ ȦȢ µȑȜȘ ȑȞĮȞ ĮțȑȡĮȚȠ țĮȚ ȑȞĮȞ ʌȡĮȖµĮIJȚțȩ ĮȡȚșµȩ, IJȠ µȑȖİșȩȢ IJȘȢ İȓȞĮȚ µȩȞȠ 4 bytes. DzIJıȚ İȓȞĮȚ ĮȡțİIJȐ µİȖȐȜȘ ȖȚĮ ȞĮ ȤȦȡȑıİȚ IJȠ ȑȞĮ Ȓ IJȠ ȐȜȜȠ µȑȜȠȢ, ĮȜȜȐ ȩȤȚ țĮȚ IJĮ įȪȠ IJĮȣIJȩȤȡȠȞĮ.
9.4 Ǿ ǻǾȁȍȈǾ typedef Ǿ C µĮȢ ʌĮȡȑȤİȚ IJȘ įȣȞĮIJȩIJȘIJĮ ȞĮ İʌĮȞĮțĮșȠȡȓıȠȣµİ IJȠ ȩȞȠµĮ İȞȩȢ ȒįȘ ȣʌȐȡȤȠȞIJȠȢ IJȪʌȠȣ įİįȠµȑȞȦȞ, ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ IJȘ įȒȜȦıȘ typedef. ȂȓĮ įȒȜȦıȘ typedef İȓȞĮȚ IJȘȢ µȠȡijȒȢ:
typedef ĮȞĮȖȞȦȡȚıIJȚțȩ_IJȪʌȠȣ
ȞȑȠ_ĮȞĮȖȞȦȡȚıIJȚțȩ_IJȪʌȠȣ;
ȋȡȘıȚµȠʌȠȚȫȞIJĮȢ IJȘ įȒȜȦıȘ typedef, ıIJȘȞ ʌȡĮȖµĮIJȚțȩIJȘIJĮ įİ įȘµȚȠȣȡȖȠȪµİ ȑȞĮȞ țĮȚȞȠȪȡȖȚȠ IJȪʌȠ, ĮȜȜȐ ȠȡȓȗȠȣµİ ȑȞĮ țĮȚȞȠȪȡȖȚȠ ȩȞȠµĮ (ıȣȞȫȞȣµȠ) ȖȚĮ ȑȞĮȞ ȣʌȐȡȤȠȞIJĮ IJȪʌȠ. Ǿ ȤȡȒıȘ IJȘȢ typedef µʌȠȡİȓ ȞĮ ıȣȞIJİȜȑıİȚ ıIJȠ ȞĮ ȖȓȞȠȣȞ IJĮ ʌȡȠȖȡȐµµĮIJĮ ʌȚȠ ȟİțȐșĮȡĮ ȖȚĮIJȓ IJȠ ȩȞȠµĮ İȞȩȢ IJȪʌȠȣ µʌȠȡİȓ ȞĮ ȖȓȞİȚ ʌȚȠ µȚțȡȩ țĮȚ ʌȚȠ ȞȠȘµĮIJȚțȩ. ȍȢ ʌĮȡȐįİȚȖµĮ, ĮȢ șİȦȡȒıȠȣµİ IJȘȞ İʌȩµİȞȘ İȞIJȠȜȒ µİ IJȘȞ ȠʌȠȓĮ İʌĮȞĮțĮșȠȡȓȗİIJĮȚ Ƞ IJȪʌȠȢ unsigned char (ȕȜȑʌİ ȆȓȞĮțĮ 4.1) ıİ IJȪʌȠ µİ ȩȞȠµĮ BYTE:
typedef unsigned char BYTE; ȈIJȘ ıȣȞȑȤİȚĮ µʌȠȡȠȪµİ ȞĮ įȘȜȫıȠȣµİ µİIJĮȕȜȘIJȑȢ IJȪʌȠȣ unsigned char ȖȡȐijȠȞIJĮȢ:
BYTE b1,b2; ĮȞIJȓ ȖȚĮ:
unsigned char b1,b2;
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
120
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ȉȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ İȓȞĮȚ IJȠ ʌȡȩȖȡĮµµĮ enums1.c IJȘȢ § 9.1. Ǿ ĮȜȜĮȖȒ ʌȠȣ țȐȞȠȣµİ İȓȞĮȚ ȞĮ µİIJȠȞȠµȐıȠȣµİ IJȠȞ IJȪʌȠ enum colour ıİ COLOURS, ȖȚĮ İȣțȠȜȓĮ ıIJȘ įȒȜȦıȘ µİIJĮȕȜȘIJȫȞ: /* enums1.c */ /* ǼʌȓįİȚȟȘ ĮʌĮȡȚșµȒıİȦȞ țĮȚ typedef */ main() { enum colour {red,green,yellow}; /* ȠȡȚıµȩȢ IJȪʌȠȣ enum colour */ typedef enum colour COLOURS; /* İʌĮȞĮțĮșȠȡȚıµȩȢ IJȠȣ IJȪʌȠȣ enum colour ıİ COLOURS */ COLOURS a,b,c; /* įȒȜȦıȘ µİIJĮȕȜȘIJȫȞ IJȪʌȠȣ COLOURS */ int i;
}
a=red; b=green; c=yellow; i=a+b; printf("%d\n",i); if(a<c) printf("Ǿ IJȚµȒ red İȓȞĮȚ µȚțȡȩIJİȡȘ Įʌȩ IJȘȞ IJȚµȒ yellow\n");
9.5 ȆǹȇǹǻǼǿīȂǹȉǹ 1. ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ IJȠ ȠʌȠȓȠ șĮ įȑȤİIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ IJȘȞ ȦȡȚĮȓĮ ĮȞIJȚµȚıșȓĮ țĮȚ IJȚȢ ȫȡİȢ İȡȖĮıȓĮȢ ȖȚĮ țȐșİ ȘµȑȡĮ IJȘȢ İȕįȠµȐįĮȢ țĮȚ ȞĮ ȣʌȠȜȠȖȓȗİȚ IJȠȞ İȕįȠµĮįȚĮȓȠ µȚıșȩ İȞȩȢ ȦȡȠµȚıșȓȠȣ ȣʌĮȜȜȒȜȠȣ. ȊʌȠșȑıIJİ ȩIJȚ Ƞ ȣʌȐȜȜȘȜȠȢ ȜĮµȕȐȞİȚ ȑȞĮ İʌȚʌȜȑȠȞ İʌȓįȠµĮ 500 įȡȤ ȖȚĮ țȐșİ ȫȡĮ İȡȖĮıȓĮȢ țĮȚ ȩIJȚ ȠȚ ȫȡİȢ İȡȖĮıȓĮȢ IJȠȣ ȈĮȕȕȐIJȠȣ ȣʌȠȜȠȖȓȗȠȞIJĮȚ ĮȣȟȘµȑȞİȢ țĮIJȐ IJȠ ȒµȚıȣ İȞȫ IJȚȢ ȀȣȡȚĮțȒȢ ȣʌȠȜȠȖȓȗȠȞIJĮȚ įȚʌȜȑȢ. /* enums2.c */ /* ȊʌȠȜȠȖȚıµȩȢ İȕįȠµĮįȚĮȓȠȣ µȚıșȠȪ ȦȡȠµȚıșȓȠȣ ȣʌĮȜȜȒȜȠȣ */ #define BONUS 500 main() { typedef enum day {dey,tri,tet,pem,par,sab,kyr} DAYS; DAYS workday; float hour_salary,hours,salary=0.0,bonus=0.0; printf("ǻȫıİ IJȠ ȦȡȠµȓıșȚȠ: "); scanf("%f",&hour_salary); printf("ǻȫıİ ȫȡİȢ İȡȖĮıȓĮȢ, Įʌȩ ǻİȣIJȑȡĮ ȦȢ ȀȣȡȚĮțȒ\n"); for(workday=dey;workday<=kyr;workday++) { switch(workday) { case dey: printf("ǻİȣIJȑȡĮ : "); scanf("%f",&hours); case tri: printf("ȉȡȓIJȘ : "); scanf("%f",&hours); case tet: printf("ȉİIJȐȡIJȘ : "); scanf("%f",&hours); case pem: printf("ȆȑµʌIJȘ : "); scanf("%f",&hours); case par: printf("ȆĮȡĮıțİȣȒ: "); scanf("%f",&hours);
break; break; break; break; break;
ǹʌĮȡȚșµȒıİȚȢ, ǻȠµȑȢ țĮȚ ǼȞȫıİȚȢ
case sab: printf("ȈȐȕȕĮIJȠ case kyr: printf("ȀȣȡȚĮțȒ
121
: "); scanf("%f",&hours); hours*=1.5; break; : "); scanf("%f",&hours); hours*=2; break;
} bonus =bonus+hours*BONUS; salary=salary+hours*hour_salary;
}
} salary=salary+bonus; printf("ȅ İȕįȠµĮįȚĮȓȠȢ µȚıșȩȢ İȓȞĮȚ %6.2f", salary);
2. ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ IJȠ ȠʌȠȓȠ µİ IJȘ ȕȠȒșİȚĮ İȞȩȢ menu ȞĮ İʌȚIJİȜİȓ IJȚȢ ʌĮȡĮțȐIJȦ İȡȖĮıȓİȢ: Į) ȃĮ įȑȤİIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ țĮȚ ȞĮ țĮIJĮȤȦȡİȓ ıIJȘ µȞȒµȘ IJĮ ıIJȠȚȤİȓĮ (ȠȞȠµĮIJİʌȫȞȣµȠ, ijȪȜȠ, ȕĮșµȩ) IJȠ ʌȠȜȪ 50 µĮșȘIJȫȞ. ȕ) ȃĮ ʌĮȡȑȤİȚ IJȘ įȣȞĮIJȩIJȘIJĮ ĮȞĮȗȒIJȘıȘȢ ȠʌȠȚȠȣįȒʌȠIJİ µĮșȘIJȒ µİ ȕȐıȘ IJȠ ȠȞȠµĮIJİʌȫȞȣµȠ ĮȣIJȠȪ. Ȗ) ȃĮ įȓȞİȚ IJȘ įȣȞĮIJȩIJȘIJĮ IJĮȟȚȞȩµȘıȘȢ IJȘȢ ȜȓıIJĮȢ ȩȜȦȞ IJȦȞ µĮșȘIJȫȞ, µİ ȕȐıȘ IJȠ ȕĮșµȩ IJȠȣȢ (Įʌȩ IJȠ µȚțȡȩIJİȡȠ ʌȡȠȢ IJȠ µİȖĮȜȪIJİȡȠ). į) ȃĮ ʌĮȡȠȣıȚȐȗİȚ ıIJȘȞ ȠșȩȞȘ ȩȜȠȣȢ IJȠȣȢ µĮșȘIJȑȢ IJȘȢ ȜȓıIJĮȢ µİ ȩȜĮ IJȠȣȢ IJĮ ıIJȠȚȤİȓĮ. /* struct.c */ /* ȆȓȞĮțĮȢ įȠµȫȞ */ #define LIM 50 #include <stdlib.h> #include <stdio.h> struct person /* ȠȡȚıµȩȢ įȠµȒȢ */ { char name[40]; char sex; float score; }; typedef struct person STUDENT; STUDENT array[LIM]; /* ʌȓȞĮțĮȢ įȠµȫȞ */ int n=0; /* IJȠ n µİIJȡȐİȚ IJȠ ʌȜȒșȠȢ IJȦȞ µĮșȘIJȫȞ ʌȠȣ ȑȤȠȣȞ İȚıĮȤșİȓ ıIJȠȞ ʌȓȞĮțĮ */ main() { char select, student[40]; do {
clrscr(); puts("1. ǼȚıĮȖȦȖȒ µĮșȘIJȒ"); puts("2. ǹȞĮȗȒIJȘıȘ µĮșȘIJȒ"); puts("3. ȉĮȟȚȞȩµȘıȘ µĮșȘIJȫȞ µİ ȕȐıȘ IJȠ ȕĮșµȩ"); puts("4. ǼµijȐȞȚıȘ ȜȓıIJĮȢ µĮșȘIJȫȞ"); puts("5. ǼȟȠįȠȢ"); printf("ǻȫıİ İʌȚȜȠȖȒ: ");
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
122
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
select=getche(); switch(select) { case '1': clrscr(); puts("ǼǿȈǹīȍīǾ ȂǹĬǾȉǾ"); newname(); break; case '2': clrscr(); puts("ǹȃǹǽǾȉǾȈǾ ȂǹĬǾȉǾ"); if(n<1) puts("Ǿ ȜȓıIJĮ İȓȞĮȚ ȐįİȚĮ"); else { printf("ǻȫıİ ȠȞȠµĮIJİʌȫȞȣµȠ: "); gets(student); search(student); } getch(); break; case '3': clrscr(); puts("ȉǹȄǿȃȅȂǾȈǾ ȁǿȈȉǹȈ"); sort(); puts("Ǿ IJĮȟȚȞȩµȘıȘ ȑȖȚȞİ"); getch(); break; case '4': clrscr(); puts("ǼȂĭǹȃǿȈǾ ȁǿȈȉǹȈ"); list(); getch(); break; }
}
} while(select!='5');
/* newname */ /* ǼȚıĮȖȦȖȒ ıIJȠȚȤİȓȦȞ ȖȚĮ ȑȞĮ µĮșȘIJȒ */ newname() { char numstr[81]; if(n<LIM) { printf("ǻȫıİ IJȠ ȩȞȠµĮ IJȠȣ %dȠȣ µĮșȘIJȒ: ",n+1); gets(array[n].name); printf("ǻȫıİ IJȠ ijȪȜȜȠ (ǹ/ī) IJȠȣ %dȠȣ µĮșȘIJȒ: ",n+1); array[n].sex=getche(); getch(); printf("\nǻȫıİ IJȠ ȕĮșµȩ IJȠȣ %dȠȣ µĮșȘIJȒ: ",n+1); gets(numstr); array[n].score=atof(numstr); n++; }
ǹʌĮȡȚșµȒıİȚȢ, ǻȠµȑȢ țĮȚ ǼȞȫıİȚȢ
}
123
else { puts("Ǿ ȜȓıIJĮ İȓȞĮȚ ʌȜȒȡȘȢ"); getch(); }
/* search */ /* ǹȞĮȗȒIJȘıȘ µĮșȘIJȒ */ search(char str[]) { int found=0,i=0; if(n<1) puts("Ǿ ȜȓıIJĮ İȓȞĮȚ ȐįİȚĮ"); else { while(i<n && !found) { if(strcmp(array[i].name,str)==0) found=1; else i++; } if(found) { puts("ȅ µĮșȘIJȒȢ ȕȡȑșȘțİ"); printf("%s %c %0.2f",array[i].name,array[i].sex,array[i].score); } else puts("ȅ µĮșȘIJȒȢ įİ ȕȡȑșȘțİ"); } } /* sort */ /* ȉĮȟȚȞȩµȘıȘ ȜȓıIJĮȢ µĮșȘIJȫȞ µİ IJȘ µȑșȠįȠ IJȘȢ İʌȚȜȠȖȒȢ */ sort() { int i,j,k,min; STUDENT temp;
}
for(i=0;i<n-1;i++) { min=i; for(j=i+1;j<n;j++) if(array[j].score<array[min].score) min=j; if(i!=min) { temp=array[i]; array[i]=array[min]; array[min]=temp; } }
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
124
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
/* list() */ /* ǼțIJȪʌȦıȘ ıIJȠȚȤİȓȦȞ ȩȜȦȞ IJȦȞ µĮșȘIJȫȞ */ list() { int i;
}
if(n<1) printf("Ǿ ȜȓıIJĮ İȓȞĮȚ ȐįİȚĮ"); for(i=0;i<n;i++) printf("%d %s %c %0.2f\n",i+1,array[i].name,array[i].sex, array[i].score);
3. ǻȘµȚȠȣȡȖİȓıIJİ ȑȞĮȞ IJȪʌȠ ȑȞȦıȘȢ ȖȚĮ IJȑııİȡĮ ȖİȦµİIJȡȚțȐ ıȤȒµĮIJĮ: țȪțȜȠ, IJİIJȡȐȖȦȞȠ, ȠȡșȠȖȫȞȚȠ țĮȚ IJȡȓȖȦȞȠ. īȚĮ IJȠȞ țȪțȜȠ Ș ȑȞȦıȘ șĮ ʌȡȑʌİȚ ȞĮ ĮʌȠșȘțİȪİȚ IJȘȞ ĮțIJȓȞĮ IJȠȣ, ȖȚĮ IJȠ IJİIJȡȐȖȦȞȠ IJȠ µȒțȠȢ IJȘȢ ʌȜİȣȡȐȢ IJȠȣ, ȖȚĮ IJȠ ȠȡșȠȖȫȞȚȠ IJĮ µȒțȘ IJȦȞ įȪȠ ʌȜİȣȡȫȞ IJȠȣ țĮȚ ȖȚĮ IJȠ IJȡȓȖȦȞȠ IJĮ µȒțȘ IJȦȞ IJȡȚȫȞ ʌȜİȣȡȫȞ IJȠȣ. ȈIJȘ ıȣȞȑȤİȚĮ ȖȡȐȥIJİ ʌȡȩȖȡĮµµĮ IJȠ ȠʌȠȓȠ: Į) ȃĮ įȚĮȕȐȗİȚ ȑȞĮ Įʌȩ IJĮ ȖȡȐµµĮIJĮ Ȁ (țȪțȜȠȢ), ȉ (IJİIJȡȐȖȦȞȠ), ȅ (ȠȡșȠȖȫȞȚȠ), R (IJȡȓȖȦȞȠ) țĮȚ IJȚȢ țĮIJȐȜȜȘȜİȢ ĮȡȚșµȘIJȚțȑȢ IJȚµȑȢ ȖȚĮ IJȠ İțȐıIJȠIJİ ıȤȒµĮ țĮȚ ȕ) ȃĮ ȣʌȠȜȠȖȓȗİȚ țĮȚ IJȣʌȫȞİȚ IJȠ µȒțȠȢ IJȘȢ ʌİȡȚµȑIJȡȠȣ IJȠȣ ıȤȒµĮIJȠȢ. /* union1.c */ /* ȋȡȒıȘ ȑȞȦıȘȢ ȖȚĮ ȣʌȠȜȠȖȚıµȩ ʌİȡȚµȑIJȡȦȞ ȖİȦµİIJȡȚțȫȞ ıȤȘµȐIJȦȞ */ #include <math.h> struct two { float a,b; }; struct three { float a,b,c; }; union values { float r; struct two twod; struct three thrd; }; main() { union values s; char c; printf("ȀȪțȜȠȢ Ȁ\nȉİIJȡȐȖȦȞȠ T\nȅȡșȠȖȫȞȚȠ O\nȉȡȓȖȦȞȠ R\n ǼʌȚȜȠȖȒ: "); scanf("%c",&c); switch(c) { case 'K' : printf("ǻȫıİ ĮțIJȓȞĮ: "); scanf("%f",&s.r); printf("ȆİȡȓµİIJȡȠȢ=%f",2*M_PI*s.r); break;
ǹʌĮȡȚșµȒıİȚȢ, ǻȠµȑȢ țĮȚ ǼȞȫıİȚȢ
}
}
125
case 'T' : printf("ǻȫıİ IJȠ µȒțȠȢ IJȘȢ ʌȜİȣȡȐȢ: "); scanf("%f",&s.r); printf("ȆİȡȓµİIJȡȠȢ=%f",4*s.r); break; case 'O' : printf("ǻȫıİ IJĮ µȒțȘ IJȦȞ ʌȜİȣȡȫȞ: "); scanf("%f %f",&s.twod.a,&s.twod.b); printf("ȆİȡȓµİIJȡȠȢ=%f",2*(s.twod.a+s.twod.b)); break; case 'R' : printf("ǻȫıİ IJĮ µȒțȘ IJȦȞ ʌȜİȣȡȫȞ: "); scanf("%f %f %f",&s.thrd.a,&s.thrd.b,&s.thrd.c); printf("ȆİȡȓµİIJȡȠȢ=%f",s.thrd.a+s.thrd.b+s.thrd.c); break;
9.6 ǹȈȀǾȈǼǿȈ 1.
ȂȓĮ įȠµȒ µİ µȑȜȘ: DzIJȠȢ, ȂȒȞĮȢ, ǾµȑȡĮ, µʌȠȡİȓ ȞĮ ȤȡȘıȚµȠʌȠȚȘșİȓ ȖȚĮ IJȘȞ țĮIJĮȤȫȡȚıȘ ȘµİȡȠµȘȞȚȫȞ. īȡȐȥIJİ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ ȤȡȘıȚµȠʌȠȚİȓ IJȑIJȠȚȠȣ İȓįȠȣȢ įȠµȑȢ țĮȚ ȞĮ țȐȞİȚ IJĮ İȟȒȢ: ȞĮ įȑȤİIJĮȚ IJȘ ıȘµİȡȚȞȒ ȘµİȡȠµȘȞȓĮ țĮȚ IJȘȞ ȘµİȡȠµȘȞȓĮ ȖȑȞȞȘıȘȢ țȐʌȠȚȠȣ ĮIJȩµȠȣ țĮȚ ȞĮ ȣʌȠȜȠȖȓȗİȚ țĮȚ ݵijĮȞȓȗİȚ ıIJȘȞ ȠșȩȞȘ IJȘȞ ȘȜȚțȓĮ IJȠȣ.
2.
ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ IJȠ ȠʌȠȓȠ ȞĮ įȑȤİIJĮȚ ȑȞĮ ıȪȞȠȜȠ ȠȞȠµȐIJȦȞ (ʌ.Ȥ. 10) ȖȚĮ IJȠ țĮșȑȞĮ Įʌ'IJĮ ȠʌȠȓĮ ȣʌȐȡȤİȚ İʌȚʌȜȑȠȞ Ș ʌȜȘȡȠijȠȡȓĮ ȖȚĮ IJȠ ijȪȜȠ, ȘȜȚțȓĮ țĮȚ ȤȡȫµĮ µĮȜȜȚȫȞ. ǻȠșȑȞIJȦȞ IJȠȣ ijȪȜȜȠȣ, IJȠȣ ȤȡȫµĮIJȠȢ µĮȜȜȚȫȞ țĮȚ µȚĮȢ ʌİȡȚȠȤȒȢ ȘȜȚțȓĮȢ, IJȠ ʌȡȩȖȡĮµµĮ ȞĮ IJȣʌȫȞİȚ IJĮ ȠȞȩµĮIJĮ ĮȣIJȫȞ ʌȠȣ ʌȜȘȡȠȪȞ IJȚȢ ʌȡȠȨʌȠșȑıİȚȢ.
3.
ǻȘµȚȠȣȡȖȒıIJİ ȑȞĮȞ țĮIJȐȜȜȘȜȠ IJȪʌȠ įİįȠµȑȞȦȞ ȚțĮȞȩ ȞĮ ĮʌȠșȘțİȪİȚ ȑȞĮ µȚȖĮįȚțȩ ĮȡȚșµȩ (a+ib). ȈIJȘ ıȣȞȑȤİȚĮ ȖȡȐȥIJİ țĮIJȐȜȜȘȜİȢ ıȣȞĮȡIJȒıİȚȢ ȠȚ ȠʌȠȓİȢ ȞĮ įȑȤȠȞIJĮȚ ȦȢ ʌĮȡĮµȑIJȡȠȣȢ įȪȠ µȚȖĮįȚțȠȪȢ ĮȡȚșµȠȪȢ țĮȚ ȞĮ İʌȚıIJȡȑijȠȣȞ IJĮ ĮʌȠIJİȜȑıµĮIJĮ IJȘȢ ʌȡȩıșİıȘȢ, ĮijĮȓȡİıȘȢ, ʌȠȜȜĮʌȜĮıȚĮıµȠȪ țĮȚ įȚĮȓȡİıȘȢ ĮȣIJȫȞ, ȩʌȦȢ İʌȓıȘȢ țĮȚ IJȠ ĮʌȠIJȑȜİıµĮ IJȘȢ ȪȥȦıȘȢ ıİ İțșȑIJȘ İȞȩȢ µȚȖĮįȚțȠȪ:
(a (a (a a c
ib) (c id) (a c) i(b d) ib) (c id) (a c) i(b d) ib) * (c id) (ac bd) i(ad bc) ac bd bc ad ib ĮȞ c2 d 2 z 0 i 2 2 2 2 c d c d id
(a ib)n
4.
p n(cos n ș i sin n ș) ȩʌȠȣ
p
a2 b2
ș
tan 1(b / a)
Ǿ İȟȓıȦıȘ İȣșİȓĮȢ ʌȠȣ įȚȑȡȤİIJĮȚ Įʌȩ įȪȠ ıȘµİȓĮ P1(x1,y1) țĮȚ P2(x2,y2)İȓȞĮȚ:
y y1
m(x x1) ȩʌȠȣ m
(y 2 y1)/(x2 x1)
(ĮȞ x1=x2 IJȩIJİ Ș İȣșİȓĮ İȓȞĮȚ țȐșİIJȘ ıIJȠȞ ȐȟȠȞĮ Ox țĮȚ ȑȤİȚ İȟȓıȦıȘ: x=x1).
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
126
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ȉȠ µȒțȠȢ IJȠȣ İȣșȪȖȡĮµµȠȣ IJµȒµĮIJȠȢ P1 P2 įȓȞİIJĮȚ Įʌȩ IJȠȞ IJȪʌȠ:
L
(x2 x1)2 (y 2 y1)2
īȡȐȥIJİ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ IJȣʌȫȞİȚ IJȘȞ İȟȓıȦıȘ IJȘȢ İȣșİȓĮȢ țĮșȫȢ țĮȚ IJȠ µȒțȠȢ IJȠȣ İȣșȪȖȡĮµµȠȣ IJµȒµĮIJȠȢ ʌȠȣ įȚȑȡȤİIJĮȚ Įʌȩ IJĮ ıȘµİȓĮ P1 țĮȚ P2 , ȩʌȠȣ ȠȚ ıȣȞIJİIJĮȖµȑȞİȢ ĮȣIJȫȞ șĮ įȓȞȠȞIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ. 5.
ȃĮ ȖȡĮijȠȪȞ ıȣȞĮȡIJȒıİȚȢ ʌȠȣ ȞĮ µİIJĮIJȡȑʌȠȣȞ IJȚȢ țĮȡIJİıȚĮȞȑȢ ıȣȞIJİIJĮȖµȑȞİȢ ıİ ʌȠȜȚțȑȢ țĮȚ ĮȞIJȓıIJȡȠijĮ. ȅȚ IJȪʌȠȚ µİIJĮIJȡȠʌȒȢ Įʌȩ ʌȠȜȚțȑȢ ıİ țĮȡIJİıȚĮȞȑȢ ıȣȞIJİIJĮȖµȑȞİȢ İȓȞĮȚ:
x
r cos ș,
y
r sin ș
țĮȚ ȠȚ IJȪʌȠȚ µİIJĮIJȡȠʌȒȢ Įʌȩ țĮȡIJİıȚĮȞȑȢ ıİ ʌȠȜȚțȑȢ, İȓȞĮȚ:
r
x2 y 2
țĮȚ
ș
tan 1(y / x) ĮȞ
x z 0
ȈIJȘ ıȣȞȑȤİȚĮ ȤȡȘıȚµȠʌȠȚİȓıIJİ ĮȣIJȑȢ IJȚȢ ıȣȞĮȡIJȒıİȚȢ ı'ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ IJȚȢ ıȣȞIJİIJĮȖµȑȞİȢ İȞȩȢ ıȘµİȓȠȣ țĮșȫȢ țĮȚ ȑȞĮ ȤĮȡĮțIJȒȡĮ ʌȠȣ įȘȜȫȞİȚ IJȠ İȓįȠȢ IJȠȣȢ (Ȁ: țĮȡIJİıȚĮȞȑȢ, P: ʌȠȜȚțȑȢ) țĮȚ ȞĮ IJȚȢ µİIJĮIJȡȑʌİȚ Įʌȩ țĮȡIJİıȚĮȞȑȢ ıİ ʌȠȜȚțȑȢ Ȓ ĮȞIJȓıIJȡȠijĮ.
127
ȀǼĭǹȁǹǿȅ 10
ǻǼǿȀȉǼȈ DzȞĮȢ įİȓțIJȘȢ (pointer) İȓȞĮȚ µȓĮ µİIJĮȕȜȘIJȒ ʌȠȣ ʌİȡȚȑȤİȚ µȓĮ įȚİȪșȣȞıȘ µȞȒµȘȢ. ȈIJȚȢ ʌİȡȚııȩIJİȡİȢ ʌİȡȚʌIJȫıİȚȢ, ĮȣIJȒ Ș įȚİȪșȣȞıȘ İȓȞĮȚ Ș șȑıȘ ıIJȘ µȞȒµȘ µȓĮȢ ȐȜȜȘȢ µİIJĮȕȜȘIJȒȢ. ǵIJĮȞ µȓĮ µİIJĮȕȜȘIJȒ ʌİȡȚȑȤİȚ IJȘ įȚİȪșȣȞıȘ µȓĮȢ ȐȜȜȘȢ µİIJĮȕȜȘIJȒȢ, IJȩIJİ Ȝȑµİ ȩIJȚ Ș ʌȡȫIJȘ µİIJĮȕȜȘIJȒ įİȓȤȞİȚ IJȘ įİȪIJİȡȘ. ȅȚ įİȓțIJİȢ ȤȡȘıȚµȠʌȠȚȠȪȞIJĮȚ ıIJȠȞ ʌȡȠȖȡĮµµĮIJȚıµȩ ȖȚĮ ʌȠȜȜȠȪȢ ȜȩȖȠȣȢ. ȅȚ ıȘµĮȞIJȚțȩIJİȡȠȚ Įʌ'ĮȣIJȠȪȢ İȓȞĮȚ: x
īȚĮ IJȘȞ İʌȚıIJȡȠijȒ ʌİȡȚııȩIJİȡȦȞ IJȘȢ µȓĮȢ IJȚµȫȞ Įʌȩ µȓĮ ıȣȞȐȡIJȘıȘ.
x
īȚĮ IJȘ µİIJĮȕȓȕĮıȘ ʌȚȞȐțȦȞ țĮȚ ĮȜijĮȡȚșµȘIJȚțȫȞ ıİ ıȣȞĮȡIJȒıİȚȢ.
x
īȚĮ İȪțȠȜȠ țĮȚ ȖȡȒȖȠȡȠ ȤİȚȡȚıµȩ ʌȚȞȐțȦȞ.
x
īȚĮ IJȘ įȘµȚȠȣȡȖȓĮ ʌȠȜȪʌȜȠțȦȞ įȠµȫȞ įİįȠµȑȞȦȞ, ȩʌȦȢ ıȣȞįİįݵȑȞİȢ ȜȓıIJİȢ țĮȚ įȑȞįȡĮ.
x
īȚĮ ȐµİıȘ ʌȡȩıȕĮıȘ ıİ ıȣȖțİțȡȚµȑȞİȢ șȑıİȚȢ µȞȒµȘȢ.
ǵʌȦȢ țĮIJĮȜĮȕĮȓȞȠȣµİ Įʌȩ IJĮ ʌĮȡĮʌȐȞȦ, ȒįȘ ȑȤȠȣµİ ȤȡȘıȚµȠʌȠȚȒıİȚ įİȓțIJİȢ ıIJĮ ʌȡȠȖȡȐµµĮIJĮ ʌȠȣ ȑȤȠȣµİ ȖȡȐȥİȚ ȑȦȢ IJȫȡĮ. ȈIJȠ ȀİijȐȜĮȚȠ 8, ȩIJĮȞ ȤȡȘıȚµȠʌȠȚȠȪıĮµİ ʌȓȞĮțİȢ ȦȢ ʌĮȡĮµȑIJȡȠȣȢ ıİ ıȣȞĮȡIJȒıİȚȢ, ıIJȘȞ ȠȣıȓĮ µİIJĮȕȚȕȐȗĮµİ ıIJȘ ıȣȞȐȡIJȘıȘ IJȘ įȚİȪșȣȞıȘ IJȠȣ ʌȓȞĮțĮ. ǹȣIJȒ Ș įȚİȪșȣȞıȘ İȓȞĮȚ ȑȞĮ ʌĮȡȐįİȚȖµĮ µȓĮȢ ıIJĮșİȡȐȢ įİȓțIJȘ. Ǿ ıIJĮșİȡȐ įİȓțIJȘ İȓȞĮȚ µȓĮ įȚİȪșȣȞıȘ, Ș µİIJĮȕȜȘIJȒ įİȓțIJȘ İȓȞĮȚ µȓĮ șȑıȘ µȞȒµȘȢ ʌȠȣ ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ȖȚĮ ĮʌȠșȒțİȣıȘ įȚİȣșȪȞıİȦȞ.
10.1 ǻǾȁȍȈǾ ȂǼȉǹǺȁǾȉǾȈ ǻǼǿȀȉǾ ǵʌȦȢ țȐșİ µİIJĮȕȜȘIJȒ, µȓĮ µİIJĮȕȜȘIJȒ įİȓțIJȘ ʌȡȑʌİȚ ȞĮ įȘȜȫȞİIJĮȚ ʌȡȚȞ ȤȡȘıȚµȠʌȠȚȘșİȓ. Ǿ ȖİȞȚțȒ µȠȡijȒ IJȘȢ İȞIJȠȜȒȢ įȒȜȦıȘȢ µȓĮȢ µİIJĮȕȜȘIJȒȢ įİȓțIJȘ İȓȞĮȚ:
IJȪʌȠȢ
*ĮȞĮȖȞȦȡȚıIJȚțȩ;
ȩʌȠȣ IJȪʌȠȢ İȓȞĮȚ Ƞ IJȪʌȠȢ IJȦȞ įİįȠµȑȞȦȞ ʌȠȣ șĮ įİȓȤȞİȚ Ƞ įİȓțIJȘȢ. ȂȓĮ µİIJĮȕȜȘIJȒ įİȓțIJȘ įİıµİȪİȚ 2 bytes µȞȒµȘȢ. DzȞĮ ʌĮȡȐįİȚȖµĮ įȒȜȦıȘȢ įİȚțIJȫȞ İȓȞĮȚ:
int *px, *py; Ǿ įȒȜȦıȘ ĮȣIJȒ įİıµİȪİȚ 2 bytes ıIJĮ ȠʌȠȓĮ µʌȠȡİȓ ȞĮ ĮʌȠșȘțİȣIJİȓ Ș įȚİȪșȣȞıȘ µȓĮȢ µİIJĮȕȜȘIJȒȢ ĮțİȡĮȓȠȣ IJȪʌȠȣ țĮȚ įȓȞİȚ ı'ĮȣIJȐ IJĮ 2 bytes IJȠ ȩȞȠµĮ px. ǻİıµİȪİȚ İʌȓıȘȢ ȐȜȜĮ 2 bytes ȖȚĮ ĮʌȠșȒțİȣıȘ įȚİȪșȣȞıȘȢ µİIJĮȕȜȘIJȒȢ ĮțİȡĮȓȠȣ IJȪʌȠȣ țĮȚ įȓȞİȚ ı'ĮȣIJȐ IJȠ ȩȞȠµĮ py.
128
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
10.2 ȉǼȁǼȈȉǼȈ ǻǼǿȀȉȍȃ Ǿ C µĮȢ ʌĮȡȑȤİȚ įȪȠ IJİȜİıIJȑȢ ıȤİIJȚțȠȪȢ µİ IJȠȣȢ įİȓțIJİȢ, IJȠ IJİȜİıIJȒ & țĮȚ IJȠȞ *. ȅ & ȜȑȖİIJĮȚ IJİȜİıIJȒȢ įȚİȪșȣȞıȘȢ țĮȚ İȓȞĮȚ Ƞ µȠȞĮįȚțȩȢ (unary) IJİȜİıIJȒȢ ʌȠȣ İʌȚıIJȡȑijİȚ IJȘ įȚİȪșȣȞıȘ IJȠȣ IJİȜİıIJȑȠȣ IJȠȣ, ȩʌȦȢ ȑȤȠȣµİ įİȚ țĮȚ ıİ ʌȡȠȘȖȠȪµİȞĮ țİijȐȜĮȚĮ. īȚĮ ʌĮȡȐįİȚȖµĮ Ș İȞIJȠȜȒ:
px=&i; (ȩʌȠȣ ȣʌȠșȑIJȠȣµİ ȩIJȚ Ș µİIJĮȕȜȘIJȒ i ȑȤİȚ įȘȜȦșİȓ ȦȢ ĮțİȡĮȓȠȣ IJȪʌȠȣ) țĮIJĮȤȦȡİȓ ıIJȘȞ px (ʌȠȣ ȑȤİȚ įȘȜȦșİȓ ʌĮȡĮʌȐȞȦ ȦȢ įİȓțIJȘȢ ıİ ĮțȑȡĮȚȠ) IJȘ įȚİȪșȣȞıȘ IJȘȢ µİIJĮȕȜȘIJȒȢ i. DzIJıȚ Ș px "įİȓȤȞİȚ" IJȘȞ i, ȈȤȒµĮ 10.1.
px
pointer
i
int
ȈȤȒµĮ 10.1: ǻİȓțIJȘȢ ıİ ĮțȑȡĮȚȠ
ȅ įİȪIJİȡȠȢ IJİȜİıIJȒȢ, *, İȓȞĮȚ țĮȚ ĮȣIJȩȢ µȠȞĮįȚțȩȢ țĮȚ İȓȞĮȚ ıȣµʌȜȘȡȦµĮIJȚțȩȢ IJȠȣ &. ȁȑȖİIJĮȚ IJİȜİıIJȒȢ ȑµµİıȘȢ ĮȞĮijȠȡȐȢ Ȓ ĮȞĮțĮIJİȪșȣȞıȘȢ (indirection Ȓ dereference) țĮȚ ȩIJĮȞ İijĮȡµȩȗİIJĮȚ ıİ µȓĮ µİIJĮȕȜȘIJȒ įİȓțIJȘ, İʌȚıIJȡȑijİȚ IJȘȞ IJȚµȒ IJȘȢ µİIJĮȕȜȘIJȒȢ ʌȠȣ įİȓȤȞİȚ Ƞ įİȓțIJȘȢ. īȚĮ ʌĮȡȐįİȚȖµĮ Ș İȞIJȠȜȒ:
j=*px; țĮIJĮȤȦȡİȓ ıIJȘ µİIJĮȕȜȘIJȒ j (ʌȠȣ ȣʌȠșȑIJȠȣµİ ȩIJȚ İȓȞĮȚ ĮțİȡĮȓȠȣ IJȪʌȠȣ) IJȠ ʌİȡȚİȤȩµİȞȠ IJȘȢ µİIJĮȕȜȘIJȒȢ ʌȠȣ įİȓȤȞİȚ Ș px, įȘȜĮįȒ IJȘȞ IJȚµȒ IJȘȢ i. ǻȣıIJȣȤȫȢ, ıIJȘ C, IJȠ ıȪµȕȠȜȠ IJȠȣ ʌȠȜȜĮʌȜĮıȚĮıµȠȪ țĮȚ Ƞ įİȪIJİȡȠȢ IJİȜİıIJȒȢ İȓȞĮȚ ȓįȚĮ. ǵµȦȢ IJȩıȠ Ƞ * ȩıȠ țĮȚ Ƞ & ȑȤȠȣȞ µİȖĮȜȪIJİȡȘ ʌȡȠIJİȡĮȚȩIJȘIJĮ Įʌȩ IJȠȣȢ ĮȡȚșµȘIJȚțȠȪȢ IJİȜİıIJȑȢ İțIJȩȢ Įʌȩ IJȠ µȠȞĮįȚțȩ µİȓȠȞ, µİ IJȠ ȠʌȠȓȠ ȑȤȠȣȞ IJȘȞ ȓįȚĮ ʌȡȠIJİȡĮȚȩIJȘIJĮ, (ȆȓȞĮțĮȢ 4.5). ǼʌȓıȘȢ IJȠ * ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ıİ İȞIJȠȜȑȢ įȒȜȦıȘȢ µİIJĮȕȜȘIJȫȞ įİȚțIJȫȞ:
int *ptr; ȩıȠ țĮȚ ıİ ȐȜȜİȢ İȞIJȠȜȑȢ:
*ptr=3; µİ įȚĮijȠȡİIJȚțȒ ıȘµĮıȓĮ ıİ țĮșݵȚȐ Įʌ'ĮȣIJȑȢ IJȚȢ įȪȠ ȠµȐįİȢ İȞIJȠȜȫȞ. ǵIJĮȞ IJȠ * ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ıİ µȓĮ įȒȜȦıȘ µİIJĮȕȜȘIJȒȢ ıȘµĮȓȞİȚ "µİIJĮȕȜȘIJȒ IJȪʌȠȣ įİȓțIJȘ ıİ...", İȞȫ ıİ ȐȜȜİȢ İȞIJȠȜȑȢ ıȘµĮȓȞİȚ "IJȚµȒ IJȘȢ µİIJĮȕȜȘIJȒȢ ʌȠȣ įİȓȤȞİIJĮȚ Įʌȩ IJȠ įİȓțIJȘ...". īȚĮ ȞĮ ȖȓȞȠȣȞ țĮIJĮȞȠȘIJȐ IJĮ ʌĮȡĮʌȐȞȦ, ĮȢ įȠȪµİ IJȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ ıİ ıȣȞįȣĮıµȩ µİ IJȠ ȈȤȒµĮ 10.2: main() { int x,y,*pint; /*įȘȜȫȞȠȣµİ IJȠȣȢ ĮțȑȡĮȚȠȣȢ x,y țĮȚ IJȠ įİȓțIJȘ ıİ ĮțȑȡĮȚȠ pint*/ char str[7],*pchar; /*įȘȜȫȞȠȣµİ IJȠȞ ʌȓȞĮțĮ str țĮȚ IJȠ įİȓțIJȘ ıİ ȤĮȡĮțIJȒȡĮ pchar*/ /* ȈȤȒµĮ 10.2 Į */
ǻİȓțIJİȢ
129
x=3; pint=&x;
/*įȓȞȠȣµİ ıIJȠ x IJȘȞ IJȚµȒ 3*/ /*įȓȞȠȣµİ ıIJȠ pint IJȘ įȚİȪșȣȞıȘ IJȠȣ x*/ /* ȈȤȒµĮ 10.2 ȕ */
y=*pint;
/*Ƞ y ʌĮȓȡȞİȚ IJȠ ʌİȡȚİȤȩµİȞȠ IJȘȢ șȑıȘȢ µȞȒµȘȢ ʌȠȣ įİȓȤȞİȚ Ƞ pint*/ /* ȈȤȒµĮ 10.2 Ȗ */
*pint=10;
/*Ș µİIJĮȕȜȘIJȒ ʌȠȣ įİȓȤȞİȚ Ƞ pint, įȘȜĮįȒ Ƞ x, ʌĮȓȡȞİȚ IJȘȞ IJȚµȒ 10*/ /* ȈȤȒµĮ 10.2 į */
*pint+=20; /*ʌȡȠıIJȓșİIJĮȚ 20 ıIJȘ µİIJĮȕȜȘIJȒ ʌȠȣ įİȓȤȞİȚ Ƞ pint*/ pchar=str; /*o pchar įİȓȤȞİȚ IJȠ str*/ /* ȈȤȒµĮ 10.2 İ */ strcpy(str,"ǹȁĭǹ"); /*IJȠ str ʌĮȓȡȞİȚ IJȚµȒ IJȠ "ǹȁĭǹ"*/ puts(str); /*IJȠ ȠʌȠȓȠ țĮȚ IJȣʌȫȞİIJĮȚ*/ /* ȈȤȒµĮ 10.2 ıIJ */ printf("%p",pint); }
printf("\n%d",x);
/*IJȣʌȫȞİIJĮȚ Ș IJȚµȒ IJȠȣ įİȓțIJȘ pint, įȘȜĮįȒ Ș įȚİȪșȣȞıȘ IJȠȣ x țĮȚ ȩȤȚ Ș IJȚµȒ IJȠȣ x*/ /*IJȣʌȫȞİIJĮȚ Ș IJȚµȒ IJȠȣ x, įȘȜĮįȒ 30*/
10.3 ȆǹȇǹȈȉǹȈǼǿȈ - ǻǼǿȀȉǼȈ ȅȚ ʌĮȡĮıIJȐıİȚȢ ʌȠȣ ʌİȡȚȜĮµȕȐȞȠȣȞ įİȓțIJİȢ, ȣʌĮțȠȪȠȣȞ ıIJȠȣȢ ȓįȚȠȣȢ țĮȞȩȞİȢ µİ ĮȣIJȠȪȢ ʌȠȣ ȣʌĮțȠȪȠȣȞ ȩȜİȢ ȠȚ ʌĮȡĮıIJȐıİȚȢ IJȘȢ C. ȈIJȘ ıȣȞȑȤİȚĮ İȟİIJȐȗȠȣµİ µİȡȚțȑȢ İȚįȚțȑȢ ʌȜİȣȡȑȢ IJȦȞ ʌĮȡĮıIJȐıİȦȞ - įİȚțIJȫȞ.
10.3.1 ǹȆȅǻȅȈǾ ȉǿȂȍȃ ȈǼ ǻǼǿȀȉǼȈ ǵʌȦȢ țĮȚ µİ ȠʌȠȚĮįȒʌȠIJİ ȐȜȜȘ µİIJĮȕȜȘIJȒ, µʌȠȡȠȪµİ ȞĮ ĮʌȠįȫıȠȣµİ IJȘȞ IJȚµȒ İȞȩȢ įİȓțIJȘ ıİ țȐʌȠȚȠȞ ȐȜȜȠ įİȓțIJȘ, µİ µȓĮ ʌĮȡȐıIJĮıȘ țĮIJĮȤȫȡȘıȘȢ, ʌ.Ȥ.:
int x,*p1,*p2; p1=&x; /* Ƞ p1 įİȓȤȞİȚ IJȘȞ x */ p2=p1; /* Ƞ p2 įİȓȤȞİȚ İțİȓ ʌȠȣ įİȓȤȞİȚ țĮȚ Ƞ p1 */
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
130
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
x y pint
str
pchar
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
10
x
3
y
100 ? ? ? ? ? ? ? ? ?
x
? ?
y
100 ? ? ? ? ? ? ? ? ?
pint
str
pchar
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
(‚)
(·)
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
3
pint
str
pchar
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
(‰)
x
3
y
? ? ? ? ? ? ? 106 (Â)
x
3
y
100 ? ? ? ? ? ? ? ? ?
pint
str
pchar
(„)
30
100
3
pint
str
pchar
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
30
x
3
y
100
pint
ǹ ȁ ĭ ǹ \0 ? ?
str
106
pchar
(ÛÙ)
ȈȤȒµĮ 10.2: Ǿ țĮIJȐıIJĮıȘ ıIJȘ µȞȒµȘ țĮIJȐ IJȘ įȚȐȡțİȚĮ İțIJȑȜİıȘȢ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ
10.3.2 ǹȇǿĬȂǾȉǿȀǾ ǻǼǿȀȉȍȃ ǼijȩıȠȞ ȠȚ įȚİȣșȪȞıİȚȢ ʌȠȣ ʌİȡȚȑȤȠȞIJĮȚ ıIJȠȣȢ įİȓțIJİȢ İȓȞĮȚ ĮțȑȡĮȚİȢ IJȚµȑȢ, µʌȠȡȠȪµİ ȞĮ țȐȞȠȣµİ µ'ĮȣIJȑȢ ʌȡȐȟİȚȢ. ȅȚ ʌȡȐȟİȚȢ ĮȣIJȑȢ İȓȞĮȚ Ș ĮȪȟȘıȘ țĮȚ Ș µİȓȦıȘ țĮIJȐ ȑȞĮ (++, --), Ș ʌȡȩıșİıȘ țĮȚ Ș ĮijĮȓȡİıȘ (+, -). īȚĮ ȞĮ țĮIJĮȜȐȕȠȣµİ IJȚ ıȣµȕĮȓȞİȚ ıIJȘȞ ĮȡȚșµȘIJȚțȒ IJȦȞ įİȚțIJȫȞ, ĮȢ șİȦȡȒıȠȣµİ ȩIJȚ Ƞ ptr İȓȞĮȚ ȑȞĮȢ įİȓțIJȘȢ ıİ ȑȞĮȞ ĮțȑȡĮȚȠ µİ IJȡȑȤȠȣıĮ IJȚµȒ 1000. ȂİIJȐ IJȘȞ İȞIJȠȜȒ:
ptr++; Ș IJȚµȒ IJȠȣ ptr įİ șĮ İȓȞĮȚ 1001 ĮȜȜȐ 1002 !. ȀȐșİ ijȠȡȐ ʌȠȣ Ƞ ptr ȣijȓıIJĮIJĮȚ µȓĮ µȠȞĮįȚĮȓĮ ĮȪȟȘıȘ Ȓ µİȓȦıȘ, įİȓȤȞİȚ IJȠȞ İʌȩµİȞȠ Ȓ IJȠȞ ʌȡȠȘȖȠȪµİȞȠ ĮțȑȡĮȚȠ țĮȚ İijȩıȠȞ ȠȚ ĮțȑȡĮȚȠȚ țĮIJĮȜĮµȕȐȞȠȣȞ 2 bytes µȞȒµȘȢ, Ș IJȚµȒ IJȠȣ ptr șĮ ĮȣȟȐȞİIJĮȚ Ȓ șĮ µİȚȫȞİIJĮȚ țĮIJȐ 2. ǻİȞ ʌİȡȚȠȡȚȗȩµĮıIJİ µȩȞȠ ıİ µȠȞĮįȚĮȓİȢ
ǻİȓțIJİȢ
131
ĮȣȟȒıİȚȢ Ȓ µİȚȫıİȚȢ. ȂʌȠȡȠȪµİ ȞĮ ʌȡȠıșȑıȠȣµİ Ȓ ȞĮ ĮijĮȚȡȑıȠȣµİ ĮțȑȡĮȚȠȣȢ ıİ įİȓțIJİȢ. DzIJıȚ µİIJȐ IJȘȞ İȞIJȠȜȒ:
ptr+=9; Ș IJȚµȒ IJȠȣ ptr ȖȓȞİIJĮȚ 1018. īİȞȚțȐ, ȜȠȚʌȩȞ, ĮȞ ptr İȓȞĮȚ įİȓțIJȘȢ țĮȚ i ĮțȑȡĮȚȠȢ, IJȩIJİ Ș ʌȡȐȟȘ:
ptr ± i İȓȞĮȚ ȚıȠįȪȞĮµȘ µİ IJȘȞ:
(char*)ptr ± sizeof(*ptr)*i įȘȜĮįȒ: µİIJĮIJȡȠʌȒ IJȠȣ įİȓțIJȘ ıİ įİȓțIJȘ-ıİ-ȤĮȡĮțIJȒȡĮ (1 byte) țĮȚ ʌȡȩıșİıȘ Ȓ ĮijĮȓȡİıȘ i ijȠȡȑȢ IJȠ µȑȖİșȠȢ (ıİ bytes) IJȘȢ µİIJĮȕȜȘIJȒȢ ʌȠȣ įİȓȤȞİȚ Ƞ ptr. ȂʌȠȡȠȪµİ ȞĮ ʌȡȠıșȑIJȠȣµİ įİȓțIJİȢ µİIJĮȟȪ IJȠȣȢ, țĮșȫȢ țĮȚ ȞĮ ĮijĮȚȡȠȪµİ. ǼȚįȚțȐ Ș ĮijĮȓȡİıȘ įȪȠ įİȚțIJȫȞ, ʌȠȣ įİȓȤȞȠȣȞ µİIJĮȕȜȘIJȑȢ IJȠȣ ȓįȚȠȣ IJȪʌȠȣ, ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ȖȚĮ ȞĮ ȕȡȠȪµİ IJȘȞ ĮʌȩıIJĮıȘ IJȦȞ įȪȠ µİIJĮȕȜȘIJȫȞ ıIJȘ µȞȒµȘ.
10.3.3 ȈȊīȀȇǿȈǾ ǻǼǿȀȉȍȃ ȂʌȠȡȠȪµİ ȞĮ ıȣȖțȡȓȞȠȣµİ įȪȠ įİȓțIJİȢ ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ IJȠȣȢ ıȣıȤİIJȚıIJȚțȠȪȢ IJİȜİıIJȑȢ IJȠȣ ȆȓȞĮțĮ 4.3. īȚĮ ʌĮȡȐįİȚȖµĮ, ĮȞ ȑȤȠȣµİ įȪȠ įİȓțIJİȢ, ptr1 țĮȚ ptr2, Ș ʌĮȡĮțȐIJȦ İȞIJȠȜȒ İȓȞĮȚ ĮʌȠįİțIJȒ:
if(ptr1<ptr2) printf("ȅ ptr1 įİȓȤȞİȚ ıİ ȤĮµȘȜȩIJİȡȘ įȚİȪșȣȞıȘ Įʌȩ IJȠȞ ptr2"); ȂȓĮ İȞįȚĮijȑȡȠȣıĮ ȤȡȒıȘ IJȦȞ įİȚțIJȫȞ ijĮȓȞİIJĮȚ ıIJȠ ʌĮȡĮțȐIJȦ ʌĮȡȐįİȚȖµĮ, IJȠ ȠʌȠȓȠ İȟİIJȐȗİȚ IJĮ ʌİȡȚİȤȩµİȞĮ IJȘȢ µȞȒµȘȢ RAM IJȠȣ Ǿ/Ȋ µĮȢ. ȉȠ ʌȡȩȖȡĮµµĮ įȑȤİIJĮȚ Įʌȩ ݵȐȢ IJȘȞ ĮȡȤȚțȒ įȚİȪșȣȞıȘ µȞȒµȘȢ Įʌ'ȩʌȠȣ șȑȜȠȣµİ ȞĮ ĮȡȤȓıİȚ IJȘȞ İȟȑIJĮıȘ țĮȚ ıIJȘ ıȣȞȑȤİȚĮ ݵijĮȞȓȗİȚ IJĮ ʌİȡȚİȤȩµİȞĮ IJȠȣ țȐșİ byte IJȘȢ µȞȒµȘȢ ıİ įİțĮİȟĮįȚțȒ µȠȡijȒ. ȈIJȠ ʌȡȩȖȡĮµµĮ ȑȤİȚ ȜȘijșİȓ ʌȡȩȞȠȚĮ ȫıIJİ ȩIJĮȞ ȖݵȓıİȚ µȓĮ ȠșȩȞȘ µİ 23 ȖȡĮµµȑȢ (ıİ țȐșİ ȖȡĮµµȒ ݵijĮȞȓȗȠȞIJĮȚ IJĮ ʌİȡȚİȤȩµİȞĮ 8 bytes), ȞĮ ĮȞĮµȑȞİIJĮȚ IJȠ ʌȐIJȘµĮ țȐʌȠȚȠȣ ʌȜȒțIJȡȠȣ Įʌȩ IJȠ ȤȡȒıIJȘ, ĮȞ IJȠ ʌȜȒțIJȡȠ İȓȞĮȚ IJȠ 'x' IJȠ ʌȡȩȖȡĮµµĮ ıIJĮµĮIJȐ, įȚĮijȠȡİIJȚțȐ ıȣȞİȤȓȗİȚ. ȈIJȠ ʌȡȩȖȡĮµµĮ ȕȜȑʌȠȣµİ İʌȓıȘȢ IJȘ ȤȡȒıȘ IJȘȢ įİıµİȣµȑȞȘȢ ȜȑȟȘȢ far, ȠʌȠȓĮ İʌȚIJȡȑʌİȚ ıIJȠȣȢ įİȓțIJİȢ ȞĮ ĮȞĮijȑȡȠȞIJĮȚ ıİ șȑıİȚȢ ʌȠȣ įİ ȕȡȓıțȠȞIJĮȚ ıIJȠ ȓįȚȠ IJµȒµĮ µȞȒµȘȢ (segment) ʌȠȣ ȕȡȓıțȠȞIJĮȚ țĮȚ ȠȚ įİȓțIJİȢ. /* dispmem.c */ /* ȆĮȡȠȣıȓĮıȘ IJȦȞ ʌİȡȚİȤȠµȑȞȦȞ IJȘȢ µȞȒµȘȢ, ĮȡȤȓȗȠȞIJĮȢ Įʌȩ țȐʌȠȚĮ įȚİȪșȣȞıȘ ʌȠȣ įȓȞİȚ Ƞ ȤȡȒıIJȘȢ */ main() { unsigned long int start;
}
printf("ǻȫıİ IJȘȞ ĮȡȤȚțȒ įȚİȪșȣȞıȘ: "); scanf("%U",&start); dump(start);
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
132
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
dump(unsigned long int st) { char far *p; int c,l; char ch;
}
p=(char far *) st; do { for(l=1;l<24;l++) { for(c=1;c<=8;c++,p++) printf("%5x",*p); printf("\n"); } ch=getch(); } while(ch!='x'); /* įȓȞȠȞIJĮȢ x ıIJĮµĮIJȐµİ IJȘȞ İțIJȑȜİıȘ */
10.4 ǻǼǿȀȉǼȈ Ȁǹǿ ȈȊȃǹȇȉǾȈǼǿȈ ǼȓįĮµİ ıIJȠ ȀİijȐȜĮȚȠ 7 ȩIJȚ ȩIJĮȞ țĮȜȠȪµİ µȓĮ ıȣȞȐȡIJȘıȘ µİ ʌȡĮȖµĮIJȚțȑȢ ʌĮȡĮµȑIJȡȠȣȢ, ȠȚ IJȚµȑȢ IJȦȞ ʌȡĮȖµĮIJȚțȫȞ ĮȞIJȚȖȡȐijȠȞIJĮȚ ıIJȚȢ ĮȞIJȓıIJȠȚȤİȢ IJȣʌȚțȑȢ ʌĮȡĮµȑIJȡȠȣȢ IJȘȢ ıȣȞȐȡIJȘıȘȢ (țȜȒıȘ țĮIJ'ĮȟȓĮ: call by value). DzIJıȚ Ș ıȣȞȐȡIJȘıȘ įİ µʌȠȡİȓ ȞĮ ĮȜȜȐȟİȚ IJȚȢ IJȚµȑȢ IJȦȞ ʌȡĮȖµĮIJȚțȫȞ ʌĮȡĮµȑIJȡȦȞ țĮȚ µʌȠȡİȓ ȞĮ İʌȚıIJȡȑȥİȚ µȩȞȠ µȓĮ IJȚµȒ ıIJȘȞ țĮȜȠȪıĮ ıȣȞȐȡIJȘıȘ. ǵµȦȢ ĮȞ șȑȜȠȣµİ µȓĮ ıȣȞȐȡIJȘıȘ ȞĮ ĮȜȜȐȗİȚ IJȚȢ IJȚµȑȢ țȐʌȠȚȦȞ µİIJĮȕȜȘIJȫȞ IJȘȢ țĮȜȠȪıĮȢ ıȣȞȐȡIJȘıȘȢ, IJȩIJİ ĮȞIJȓ ȞĮ µİIJĮȕȚȕȐıȠȣµİ IJȚȢ µİIJĮȕȜȘIJȑȢ ĮȣIJȑȢ ȦȢ ʌȡĮȖµĮIJȚțȑȢ (ıIJȘȞ ʌİȡȓʌIJȦıȘ ĮȣIJȒ Ș ıȣȞȐȡIJȘıȘ įİ µʌȠȡİȓ ȞĮ ĮȜȜȐȟİȚ IJȚȢ IJȚµȑȢ IJȠȣȢ) µİIJĮȕȚȕȐȗȠȣµİ IJȚȢ įȚİȣșȪȞıİȚȢ ĮȣIJȫȞ. DzIJıȚ Ș ıȣȞȐȡIJȘıȘ įİ µʌȠȡİȓ ȞĮ ĮȜȜȐȟİȚ IJȚȢ įȚİȣșȪȞıİȚȢ, ʌȡȐȖµĮ ʌȠȣ įİȞ ȑȤİȚ ȐȜȜȦıIJİ ȞȩȘµĮ, ĮȜȜȐ µʌȠȡİȓ ȞĮ IJȚȢ ȤȡȘıȚµȠʌȠȚȒıİȚ ȖȚĮ ȑµµİıȘ ʌȡȠıʌȑȜĮıȘ ıIJȚȢ µİIJĮȕȜȘIJȑȢ țȚ ȑIJıȚ ȞĮ ĮȜȜȐȟİȚ IJȚȢ IJȚµȑȢ IJȠȣȢ. Ȃİ IJȠȞ IJȡȩʌȠ ĮȣIJȩ Ș țĮȜȠȪµİȞȘ ıȣȞȐȡIJȘıȘ İʌȚțȠȚȞȦȞİȓ µİ IJȘȞ țĮȜȠȪıĮ µİ ʌİȡȚııȩIJİȡİȢ Įʌȩ µȓĮ IJȚµȑȢ. ȈIJȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ ȤȡȘıȚµȠʌȠȚİȓIJĮȚ µȓĮ ıȣȞȐȡIJȘıȘ, swap(), Ș ȠʌȠȓĮ įȑȤİIJĮȚ ȦȢ ʌȡĮȖµĮIJȚțȑȢ ʌĮȡĮµȑIJȡȠȣȢ IJȚȢ įȚİȣșȪȞıİȚȢ įȪȠ µİIJĮȕȜȘIJȫȞ țĮȚ ĮȜȜȐȗİȚ ĮµȠȚȕĮȓĮ IJȚȢ IJȚµȑȢ IJȠȣȢ: /* swap.c */ /* ȂİIJĮȕȓȕĮıȘ įȚİȣșȪȞıİȦȞ ıİ ıȣȞȐȡIJȘıȘ */ main() { int x,y;
}
scanf("%d %d",&x,&y); swap(&x,&y); /* µİIJĮȕȚȕȐȗȠȣµİ ıIJȘ ıȣȞȐȡIJȘıȘ IJȚȢ įȚİȣșȪȞıİȚȢ IJȦȞ x,y */ printf("x=%d, y=%d\n",x,y);
ǻİȓțIJİȢ
133
/* swap() */ /* ǼȞĮȜȜȐııİȚ IJȚȢ IJȚµȑȢ įȪȠ µİIJĮȕȜȘIJȫȞ */ swap(int *px, int *py) { int temp; temp=*px; *px=*py; *py=temp; }
10.5 ǻǼǿȀȉǼȈ Ȁǹǿ ȆǿȃǹȀǼȈ ȈIJȘ ȖȜȫııĮ C ȣʌȐȡȤİȚ µȓĮ ȚıȤȣȡȒ ıȤȑıȘ µİIJĮȟȪ IJȦȞ ʌȚȞȐțȦȞ țĮȚ IJȦȞ įİȚțIJȫȞ. ǵʌȦȢ ȒįȘ İȓįĮµİ ıIJȠ ȀİijȐȜĮȚȠ 8, IJȠ ĮȞĮȖȞȦȡȚıIJȚțȩ İȞȩȢ ʌȓȞĮțĮ İȓȞĮȚ IJȠ ȩȞȠµĮ µȓĮȢ įȚİȪșȣȞıȘ (IJȘȢ įȚİȪșȣȞıȘȢ IJȠȣ ʌȡȫIJȠȣ ıIJȠȚȤİȓȠȣ IJȠȣ ʌȓȞĮțĮ) µİ ȐȜȜĮ ȜȩȖȚĮ ȑȞĮȢ įİȓțIJȘȢ (pointer). DzIJıȚ Ș įȒȜȦıȘ:
int a[10]; ıȘµĮȓȞİȚ ȩIJȚ IJȠ a İȓȞĮȚ IJȠ ȩȞȠµĮ IJȘȢ įȚİȪșȣȞıȘȢ IJȘȢ ʌȡȫIJȘȢ, Įʌȩ 10, µİIJĮȕȜȘIJȒȢ IJȪʌȠȣ int. ȀĮIJȐ ıȣȞȑʌİȚĮ, µİ ȜȓȖȘ ıțȑȥȘ ʌȡȠțȪʌIJİȚ ȩIJȚ: x x x x x
ȉȠ ȉȠ ȉȠ ȉȠ ȉȠ
a *a a+1 a+n a[n]
ȚıȠįȣȞĮµİȓ µİ IJȠ ȚıȠįȣȞĮµİȓ µİ IJȠ ȚıȠįȣȞĮµİȓ µİ IJȠ ȚıȠįȣȞĮµİȓ µİ IJȠ ȚıȠįȣȞĮµİȓ µİ IJȠ
&a[0] a[0] &a[1] &a[n] (ȩʌȠȣ n: ĮțȑȡĮȚȠȢ) *(a+n) (ȩʌȠȣ n: ĮțȑȡĮȚȠȢ)
Ȃİ ȕȐıȘ IJĮ ʌĮȡĮʌȐȞȦ, IJĮ įȪȠ ʌȡȠȖȡȐµµĮIJĮ ʌȠȣ ĮțȠȜȠȣșȠȪȞ țȐȞȠȣȞ IJȘȞ ȓįȚĮ įȠȣȜİȚȐ: IJȣʌȫȞȠȣȞ IJȚȢ IJȚµȑȢ İȞȩȢ ʌȓȞĮțĮ. ȉȠ ʌȡȫIJȠ ȤȡȘıȚµȠʌȠȚİȓ IJȘ ȖȞȦıIJȒ ıİ µĮȢ µȑșȠįȠ ʌȡȠıʌȑȜĮıȘȢ ıIJĮ ıIJȠȚȤİȓĮ İȞȩȢ ʌȓȞĮțĮ µİ IJȘ ȤȡȒıȘ IJȠȣ įİȓțIJȘʌȓȞĮțĮ (subscript) İȞȫ IJȠ įİȪIJİȡȠ ȤȡȘıȚµȠʌȠȚİȓ IJȠ ȖİȖȠȞȩȢ ȩIJȚ IJȠ ĮȞĮȖȞȦȡȚıIJȚțȩ İȞȩȢ ʌȓȞĮțĮ İȓȞĮȚ įİȓțIJȘȢ (pointer): /* array.c */ /* ǼțIJȪʌȦıȘ IJȦȞ IJȚµȫȞ İȞȩȢ ʌȓȞĮțĮ */ main() { static int nums[]={10,13,8,7,15}; int i; for(i=0;i<5;i++) printf("%d ",nums[i]); } /* ***************************************************** */ /* parray.c */ /* ǼțIJȪʌȦıȘ IJȦȞ IJȚµȫȞ İȞȩȢ ʌȓȞĮțĮ, µİ ȤȡȒıȘ įİȚțIJȫȞ (pointers) */ main() { static int nums[]={10,13,8,7,15}; int i; for(i=0;i<5;i++) printf("%d ",*(nums+i)); }
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
134
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
10.6 ǻǼǿȀȉǼȈ Ȁǹǿ ǹȁĭǹȇǿĬȂǾȉǿȀǹ ǹijȠȪ IJĮ ĮȜijĮȡȚșµȘIJȚțȐ İȓȞĮȚ ʌȓȞĮțİȢ țĮȚ ȠȚ ʌȓȞĮțİȢ, ȩʌȦȢ İȓįĮµİ, ıȣȞįȑȠȞIJĮȚ ıIJİȞȐ µİ IJȠȣȢ įİȓțIJİȢ, İȓȞĮȚ ijȣıȚțȩ țĮȚ IJĮ ĮȜijĮȡȚșµȘIJȚțȐ ȞĮ ȑȤȠȣȞ µȓĮ ıIJİȞȒ ıȤȑıȘ µİ IJȠȣȢ įİȓțIJİȢ. ȈIJȘȞ ȠȣıȓĮ IJȠ ȩȞȠµĮ İȞȩȢ ĮȜijĮȡȚșµȘIJȚțȠȪ İȓȞĮȚ įİȓțIJȘȢ ıİ ȤĮȡĮțIJȒȡĮ. DzȤȠȣµİ įİȚ ıIJȘȞ § 8.2 ʌȫȢ ʌĮȓȡȞȠȣȞ ĮȡȤȚțȑȢ IJȚµȑȢ IJĮ ĮȜijĮȡȚșµȘIJȚțȐ ȦȢ ʌȓȞĮțİȢ ȤĮȡĮțIJȒȡȦȞ, ʌ.Ȥ. Ș İȞIJȠȜȒ:
static char message[]="string"; ȠȡȓȗİȚ ȑȞĮ ĮȜijĮȡȚșµȘIJȚțȩ µİ ȩȞȠµĮ message ȦȢ ʌȓȞĮțĮ țĮȚ IJȠȣ įȓȞİȚ ĮȡȤȚțȒ IJȚµȒ. ǵµȦȢ İijȩıȠȞ IJȠ ȩȞȠµĮ İȞȩȢ ĮȜijĮȡȚșµȘIJȚțȠȪ İȓȞĮȚ įİȓțIJȘȢ ıİ ȤĮȡĮțIJȒȡĮ, İȟȓıȠȣ țĮȜȐ µʌȠȡȠȪµİ ȞĮ ȠȡȓıȠȣµİ ȑȞĮ ĮȜijĮȡȚșµȘIJȚțȩ țĮȚ ȞĮ IJȠȣ įȫıȠȣµİ ĮȡȤȚțȒ IJȚµȒ ȦȢ İȟȒȢ:
char *message="string"; ȅʌȠȚĮįȒʌȠIJİ Įʌȩ IJȚȢ ʌĮȡĮʌȐȞȦ įȪȠ µȠȡijȑȢ țȚ ĮȞ ȤȡȘıȚµȠʌȠȚȒıȠȣµİ ı'ȑȞĮ ʌȡȩȖȡĮµµĮ, µȓĮ İȞIJȠȜȒ:
puts(message); șĮ ȑȤİȚ ȦȢ ĮʌȠIJȑȜİıµĮ ȞĮ IJȣʌȦșİȓ ıIJȘȞ ȠșȩȞȘ Ș ȜȑȟȘ string. ǵµȦȢ ȠȚ įȪȠ µȠȡijȑȢ ȑȤȠȣȞ µȓĮ ȜİʌIJȒ įȚĮijȠȡȐ. Ǿ µȠȡijȒ IJȠȣ ʌȓȞĮțĮ ijȣȜȐİȚ ıIJȘ µȞȒµȘ ȑȞĮȞ ʌȓȞĮțĮ ĮȡțİIJȐ µİȖȐȜȠ (ıIJȘȞ ʌİȡȓʌIJȦıȘ ĮȣIJȒ 7 bytes) ȖȚĮ ȞĮ IJȠʌȠșİIJȘșİȓ Ș ȜȑȟȘ țĮȚ Ƞ ȤĮȡĮțIJȒȡĮȢ IJİȡµĮIJȚıµȠȪ '\0'. ȈIJȘ įȚİȪșȣȞıȘ IJȠȣ ʌȡȫIJȠȣ ȤĮȡĮțIJȒȡĮ, ȑȤİȚ įȠșİȓ ȦȢ ȩȞȠµĮ IJȠ ȩȞȠµĮ IJȠȣ ʌȓȞĮțĮ, message. ȈIJȘ µȠȡijȒ IJȠȣ įİȓțIJȘ, ijȣȜȐııİIJĮȚ µİ IJȠȞ ȓįȚȠ IJȡȩʌȠ ȑȞĮȢ ʌȓȞĮțĮȢ, µȩȞȠ ʌȠȣ ijȣȜȐııİIJĮȚ İʌȓıȘȢ țĮȚ µȓĮ µİIJĮȕȜȘIJȒ įİȓțIJȘ, Ș µİIJĮȕȜȘIJȒ ĮȣIJȒ ȑȤİȚ IJȠ ȩȞȠµĮ message țĮȚ įİȓȤȞİȚ ıIJȠȞ ʌȓȞĮțĮ. ȉȠ ȈȤȒµĮ 10.3 įİȓȤȞİȚ IJȚȢ įȪȠ ʌİȡȚʌIJȫıİȚȢ. ǵIJĮȞ șȑIJȠȣµİ ĮȡȤȚțȑȢ IJȚµȑȢ µİ IJȘ µȠȡijȒ ʌȓȞĮțĮ Ș message İȓȞĮȚ ıIJĮșİȡȐ įİȓțIJȘ, įȘȜĮįȒ µȓĮ įȚİȪșȣȞıȘ ʌȠȣ įİ µʌȠȡİȓ ȞĮ ĮȜȜĮȤșİȓ. ȈIJȘ µȠȡijȒ IJȠȣ įİȓțIJȘ ȩµȦȢ, Ș message İȓȞĮȚ µȓĮ µİIJĮȕȜȘIJȒ įİȓțIJȘ. īȚĮ ʌĮȡȐįİȚȖµĮ Ș İȞIJȠȜȒ:
puts(++message); șĮ IJȣʌȫıİȚ IJȠ ĮȜijĮȡȚșµȘIJȚțȩ ʌȠȣ ĮȡȤȓȗİȚ Įʌȩ IJȠ įİȪIJİȡȠ ȤĮȡĮțIJȒȡĮ IJȠȣ ĮȜijĮȡȚșµȘIJȚțȠȪ: tring. ǹȣIJȒ Ș İʌȚʌȜȑȠȞ İȣİȜȚȟȓĮ ʌȠȣ ȑȤİȚ Ș ʌȡȠıȑȖȖȚıȘ µİ įİȓțIJȘ, µʌȠȡİȓ ıȣȤȞȐ ȞĮ ĮʌȠIJİȜȑıİȚ ʌȜİȠȞȑțIJȘµĮ, ȩʌȦȢ șĮ įȠȪµİ.
ȈIJȘȞ § 8.2.1 İȓįĮµİ µİȡȚțȑȢ ıȣȞĮȡIJȒıİȚȢ ȕȚȕȜȚȠșȒțȘȢ ȖȚĮ ĮȜijĮȡȚșµȘIJȚțȐ. ȉȫȡĮ ʌȠȣ İȓįĮµİ IJȘ ıȤȑıȘ IJȦȞ įİȚțIJȫȞ țĮȚ IJȦȞ ĮȜijĮȡȚșµȘIJȚțȫȞ, șĮ µʌȠȡȠȪıĮµİ ȞĮ ȖȡȐȥȠȣµİ ĮȣIJȑȢ IJȚȢ ıȣȞĮȡIJȒıİȚȢ µȩȞȠȚ µĮȢ. DzIJıȚ, ȖȚĮ ʌĮȡȐįİȚȖµĮ, Ș ıȣȞȐȡIJȘıȘ strlen() ʌȠȣ ȣʌȠȜȠȖȓȗİȚ IJȠ µȒțȠȢ İȞȩȢ ĮȜijĮȡȚșµȘIJȚțȠȪ șĮ µʌȠȡȠȪıİ ȞĮ ȖȡĮijİȓ ȦȢ İȟȒȢ:
ǻİȓțIJİȢ
135
int strlen(char *s) { int i=0; while(*s++) i++; /* ȩıȠ įİ ȕȡȓıțȠȣµİ IJȠ ȤĮȡĮțIJȒȡĮ IJİȡµĮIJȚıµȠȪ... */ return(i); }
¢
message
¢ ¢+1 ¢+2 ¢+3 ¢+4 ¢+5 ¢+6
s t r i n g \0
message
¢ ¢+1 ¢+2 ¢+3 ¢+4 ¢+5 ¢+6
s t r i n g \0
char *message="string"; static char message[ ]="string"; Á message ÂflÌ·È ÏÂÙ·‚ÎÁÙfi ‰ÂflÍÙÁ Á message ÂflÌ·È ÛÙ·ËÂÒ‹ ‰ÂflÍÙÁ ȈȤȒµĮ 10.3: ǹȜijĮȡȚșµȘIJȚțȩ ȦȢ įİȓțIJȘȢ țĮȚ ȦȢ ʌȓȞĮțĮȢ
Ǿ strcpy() ʌȠȣ ĮȞIJȚȖȡȐijİȚ ȑȞĮ ĮȜijĮȡȚșµȘIJȚțȩ ıİ ȑȞĮ ȐȜȜȠ, șĮ µʌȠȡȠȪıİ ȞĮ ȖȡĮijİȓ:
void strcpy(char *s1,char *s2) { while(*s1++=*s2++); } ǼȞȫ Ș strcat() șĮ µʌȠȡȠȪıİ ȞĮ ȒIJĮȞ:
void strcat(char *s1,char *s2) { while(*s1) s1++; /* ȕȡȓıțȠȣµİ IJȠ IJȑȜȠȢ IJȠȣ s1 */ while(*s1++=*s2++); } ȀĮȚ Ș strcmp():
int strcmp(char *s1,char *s2) { for( ;*s1==*s2;s1++,s2++) if(*s1=='\0') return(0); return(*s1-*s2); }
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
136
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ȂȓĮ ĮțȩµȘ ıȣȞȐȡIJȘıȘ ȕȚȕȜȚȠșȒțȘȢ IJȘȢ C ʌȠȣ įȠȣȜİȪİȚ µİ ĮȜijĮȡȚșµȘIJȚțȐ İȓȞĮȚ Ș strchr() Ș ȠʌȠȓĮ ȠȡȓȗİIJĮȚ ıIJȠ ĮȡȤİȓȠ-İʌȚțİijĮȜȓįĮȢ string.h. Ǿ țȜȒıȘ IJȘȢ ıȣȞȐȡIJȘıȘȢ ĮȣIJȒȢ ȑȤİȚ IJȘ µȠȡijȒ strchr(s,c) țĮȚ İʌȚıIJȡȑijİȚ ȑȞĮ įİȓțIJȘ ıIJȘȞ ʌȡȫIJȘ ݵijȐȞȚıȘ IJȠȣ ȤĮȡĮțIJȒȡĮ c µȑıĮ ıIJȠ ĮȜijĮȡȚșµȘIJȚțȩ s. ǹȞ Ƞ ȤĮȡĮțIJȒȡĮȢ įİ ȕȡİșİȓ, IJȩIJİ Ƞ įİȓțIJȘȢ ʌĮȓȡȞİȚ ȦȢ IJȚµȒ IJȘ ıIJĮșİȡȐ NULL, Ș ȠʌȠȓĮ ȠȡȓȗİIJĮȚ ıIJȠ ĮȡȤİȓȠ-İʌȚțİijĮȜȓįĮȢ stdio.h. ȉȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ ȤȡȘıȚµȠʌȠȚİȓ IJȘ ıȣȞȐȡIJȘıȘ strchr(), ȗȘIJȐ Įʌȩ IJȠ ȤȡȒıIJȘ ȞĮ ʌȜȘțIJȡȠȜȠȖȒıİȚ µȓĮ ʌȡȩIJĮıȘ țĮȚ IJȠ ȤĮȡĮțIJȒȡĮ ȖȚĮ IJȠȞ ȠʌȠȓȠ șĮ ȥȐȟİȚ. ȈIJȘ ıȣȞȑȤİȚĮ IJȣʌȫȞİȚ IJȘ įȚİȪșȣȞıȘ IJȘȢ ĮȡȤȒȢ IJȘȢ ʌȡȩIJĮıȘȢ, IJȘ įȚİȪșȣȞıȘ IJȠȣ ȤĮȡĮțIJȒȡĮ țĮȚ IJȘ șȑıȘ IJȠȣ ȤĮȡĮțIJȒȡĮ ıİ ıȤȑıȘ µİ IJȘȞ ĮȡȤȒ IJȘȢ ʌȡȩIJĮıȘȢ. ǹȣIJȒ ıȤİIJȚțȒ șȑıȘ İȓȞĮȚ ĮʌȜȐ Ș įȚĮijȠȡȐ ĮȞȐµİıĮ ıIJȚȢ įȪȠ įȚİȣșȪȞıİȚȢ: /* search.c */ /* ǹȞĮȗȒIJȘıȘ ȤĮȡĮțIJȒȡĮ ıİ ĮȜijĮȡȚșµȘIJȚțȩ */ #include <string.h> /* ȖȚĮ ȤȡȒıȘ IJȘȢ strchr() */ #include <stdio.h> /* ȖȚĮ ȤȡȒıȘ IJȘȢ NULL */ main() { char ch, line[81], *ptr;
}
puts("\nǻȫıİ µȚĮ ʌȡȩIJĮıȘ"); gets(line); puts("ǻȫıİ IJȠ ȤĮȡĮțIJȒȡĮ ʌȠȣ șȑȜİȚȢ ȞĮ ȥȐȟȦ"); ch=getche(); ptr=strchr(line,ch); if(ptr!=NULL) { printf("\nǾ ʌȡȩIJĮıȘ ĮȡȤȓȗİȚ ıIJȘ įȚİȪșȣȞıȘ %p",line); printf("\nȆȡȫIJȘ ݵijȐȞȚıȘ IJȠȣ ȤĮȡĮțIJȒȡĮ ıIJȘ įȚİȪșȣȞıȘ %p",ptr); printf("\nǹʌȩıIJĮıȘ IJȠȣ ȤĮȡĮțIJȒȡĮ Įʌȩ IJȘȞ ĮȡȤȒ %d",ptr-line); } else puts("\nȅ ȤĮȡĮțIJȒȡĮȢ įİȞ ȣʌȐȡȤİȚ ıIJȘȞ ʌȡȩIJĮıȘ");
10.7 ȆǿȃǹȀǼȈ ǻǼǿȀȉȍȃ Ȁǹǿ ǻǼǿȀȉǼȈ ȈǼ ǻǼǿȀȉǼȈ ǹijȠȪ ȠȚ įİȓțIJİȢ İȓȞĮȚ µİIJĮȕȜȘIJȑȢ, µʌȠȡȠȪȞ țȚ ĮȣIJȠȓ ȞĮ ĮʌȠșȘțİȪȠȞIJĮȚ ıİ ʌȓȞĮțİȢ ȩʌȦȢ ȠȚ ȐȜȜİȢ µİIJĮȕȜȘIJȑȢ. Ǿ įȒȜȦıȘ ʌ.Ȥ. İȞȩȢ ʌȓȞĮțĮ 10 șȑıİȦȞ ʌȠȣ ʌİȡȚȑȤİȚ ȦȢ ıIJȠȚȤİȓĮ įİȓțIJİȢ ıİ ĮțİȡĮȓȠȣȢ, ȖȓȞİIJĮȚ ȦȢ İȟȒȢ:
int *ar[10]; īȚĮ ȞĮ țĮIJĮȤȦȡȒıȠȣµİ IJȘ įȚİȪșȣȞıȘ µȓĮȢ ĮțȑȡĮȚĮȢ µİIJĮȕȜȘIJȒȢ µİ ȩȞȠµĮ var ıIJȠ IJȡȓIJȠ ıIJȠȚȤİȓȠ IJȠȣ ʌȓȞĮțĮ, șĮ ȖȡȐȥȠȣµİ:
ar[2]=&var; țĮȚ ȖȚĮ ȞĮ ĮȞĮijİȡșȠȪµİ ıIJȘȞ IJȚµȒ IJȘȢ var șĮ ȖȡȐȥȠȣµİ:
*ar[2] ȅȚ ʌȓȞĮțİȢ įİȚțIJȫȞ ȤȡȘıȚµȠʌȠȚȠȪȞIJĮȚ ıȣȞȒșȦȢ ȖȚĮ ȞĮ țȡĮIJȠȪȞ įȚİȣșȪȞıİȚȢ ıİ ĮȜijĮȡȚșµȘIJȚțȐ. īȚĮ ȞĮ ȖȓȞİȚ țĮIJĮȞȠȘIJȩ ĮȣIJȩ, ĮȢ șİȦȡȒıȠȣµİ IJȘȞ ʌĮȡĮțȐIJȦ İȞIJȠȜȒ ĮʌȩįȠıȘȢ ĮȡȤȚțȫȞ IJȚµȫȞ ı'ȑȞĮȞ ʌȓȞĮțĮ ĮȜijĮȡȚșµȘIJȚțȫȞ:
ǻİȓțIJİȢ
137
static char name[5][8]={"ȂĮȡȓĮ", "īȚȐȞȞȘȢ", "ǽȦȒ", "ǿȦȞ", "ǹȞȞĮ"}; Ȉ'ĮȣIJȒ IJȘȞ ʌİȡȓʌIJȦıȘ IJ'ĮȜijĮȡȚșµȘIJȚțȐ ĮʌȠșȘțİȪȠȞIJĮȚ ıIJȘ µȞȒµȘ ı'ȑȞĮȞ ʌȓȞĮțĮ µİ 5 ȖȡĮµµȑȢ țĮȚ 8 ıIJȒȜİȢ, ȩʌȦȢ ijĮȓȞİIJĮȚ ıIJȠ ȈȤȒµĮ 10.4 Į. ĬĮ µʌȠȡȠȪıĮµİ İȟȓıȠȣ țĮȜȐ ȞĮ șȑıȠȣµİ ĮȡȤȚțȑȢ IJȚµȑȢ ı'ȑȞĮȞ ʌȓȞĮțĮ įİȚțIJȫȞ ıİ ĮȜijĮȡȚșµȘIJȚțȐ, ȦȢ İȟȒȢ:
static char *name[]={"ȂĮȡȓĮ", "īȚȐȞȞȘȢ", "ǽȦȒ", "ǿȦȞ", "ǹȞȞĮ"}; Ȉ'ĮȣIJȒ IJȘȞ ʌİȡȓʌIJȦıȘ IJ'ĮȜijĮȡȚșµȘIJȚțȐ ĮʌȠșȘțİȪȠȞIJĮȚ ıȣȞİȤȩµİȞĮ ıIJȘ µȞȒµȘ, įİ ıȤȘµĮIJȓȗȠȣȞ ʌȓȞĮțĮ țĮȚ ȑIJıȚ įİȞ ȣʌȐȡȤİȚ ȤĮµȑȞȠȢ ȤȫȡȠȢ ĮȞȐµİıȐ IJȠȣȢ. DzȤİȚ ȩµȦȢ įȘµȚȠȣȡȖȘșİȓ ȑȞĮȢ ʌȓȞĮțĮȢ Įʌȩ įİȓțIJİȢ ı'ĮȣIJȐ IJĮ ĮȜijĮȡȚșµȘIJȚțȐ, ȈȤȒµĮ 10.4 ȕ. —flÌ·Í·Ú ·Îˆ·ÒÈËÏÁÙÈͲÌ
name[0] name[1] name[2] name[3] name[4]
0
1
1000 Ȃ
Į
1008 ī
2
3
4
5
ȡ ȓ
Į
\0
Ț
Ȑ
Ȟ
Ȟ
Ș
1016 ǽ
Ȧ
Ȓ
\0
1024 ǿ
Ȧ
Ȟ
\0
1032 ǹ
Ȟ
Ȟ
Į
6
7
Ȣ
\0 (·)
\0
1039 —flÌ·Í·Ú ‰ÂÈÍÙ˛Ì Û ·Îˆ·ÒÈËÏÁÙÈÍ‹
name[0]
1000
1000 Ȃ
Į
ȡ ȓ
Į
\0
name[1]
1006
1006 ī
Ț
Ȑ
Ȟ
Ȟ
Ș
name[2] name[3]
1014
1014 ǽ
Ȧ
Ȓ
\0
1018
1018 ǿ
Ȧ
Ȟ
\0
1022
1022 ǹ
Ȟ
Ȟ
Į
name[4]
Ȣ
\0 (‚)
\0
1026
ȈȤȒµĮ 10.4: ȆȓȞĮțĮȢ ĮȜijĮȡȚșµȘIJȚțȫȞ țĮȚ ʌȓȞĮțĮȢ įİȚțIJȫȞ ıİ ĮȜijĮȡȚșµȘIJȚțȐ
ǵʌȦȢ ȕȜȑʌȠȣµİ Įʌȩ IJȠ ȈȤȒµĮ 10.4, Ș ʌİȡȓʌIJȦıȘ ĮʌȩįȠıȘȢ ĮȡȤȚțȫȞ IJȚµȫȞ ıİ ʌȓȞĮțĮ įİȚțIJȫȞ ıİ ĮȜijĮȡȚșµȘIJȚțȐ țĮIJĮȜĮµȕȐȞİȚ ȜȚȖȩIJİȡȠ ȤȫȡȠ ıIJȘ µȞȒµȘ. DzIJıȚ
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
138
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ȑȞĮȢ Įʌȩ IJȠȣȢ ȜȩȖȠȣȢ ʌȠȣ șȑIJȠȣµİ ĮȡȤȚțȑȢ IJȚµȑȢ ıIJĮ ĮȜijĮȡȚșµȘIJȚțȐ ıĮȞ įİȓțIJİȢ İȓȞĮȚ Ș ĮʌȠIJİȜİıµĮIJȚțȩIJİȡȘ ȤȡȒıȘ IJȘȢ µȞȒµȘȢ. DzȞĮȢ ȐȜȜȠȢ ȜȩȖȠȢ İȓȞĮȚ ȖȚĮ ȞĮ ĮʌȠțIJȒıȠȣµİ µİȖĮȜȪIJİȡȘ İȣİȜȚȟȓĮ ıIJȠ ȤİȚȡȚıµȩ IJȦȞ ĮȜijĮȡȚșµȘIJȚțȫȞ ıIJȠȞ ʌȓȞĮțĮ, ȩʌȦȢ șĮ ijĮȞİȓ Įʌȩ IJȠ İʌȩµİȞȠ ʌĮȡȐįİȚȖµĮ. ȈIJȘȞ § 8.1.6 ʌĮȡȠȣıȚȐıĮµİ ȑȞĮ ʌȡȩȖȡĮµµĮ IJĮȟȚȞȩµȘıȘȢ (sortsel.c) ʌȠȣ µʌȠȡȠȪıİ ȞĮ IJĮȟȚȞȠµİȓ ȑȞĮȞ ʌȓȞĮțĮ ĮțİȡĮȓȦȞ. ĬĮ ȤȡȘıȚµȠʌȠȚȒıȠȣµİ IJȫȡĮ IJȠȞ ȓįȚȠ ĮȜȖȩȡȚșµȠ ȖȚĮ ȞĮ IJĮȟȚȞȠµȒıȠȣµİ ȑȞĮȞ ʌȓȞĮțĮ ĮȜijĮȡȚșµȘIJȚțȫȞ. ǵµȦȢ įİȞ ʌȡȩțİȚIJĮȚ ȞĮ µİIJĮțȚȞȒıȠȣµİ IJĮ ȓįȚĮ IJĮ ĮȜijĮȡȚșµȘIJȚțȐ µȑıĮ ıIJȠȞ ʌȓȞĮțĮ, ĮȜȜȐ șĮ IJĮȟȚȞȠµȒıȠȣµİ ȑȞĮȞ ʌȓȞĮțĮ Įʌȩ įİȓțIJİȢ ıİ ĮȜijĮȡȚșµȘIJȚțȐ, ȕȜȑʌİ ȈȤȒµĮ 10.5. /* sortstr.c */ /* ȉĮȟȚȞȩµȘıȘ ĮȜijĮȡȚșµȘIJȚțȫȞ */ #define MAXNUM 30 #define MAXLEN 81 main() { char name[MAXNUM][MAXLEN]; /* ʌȓȞĮțĮȢ ĮȜijĮȡȚșµȘIJȚțȫȞ */ char *ptr[MAXNUM]; /* ʌȓȞĮțĮȢ įİȚțIJȫȞ ıİ ĮȜijĮȡȚșµȘIJȚțȐ */ int count=0;
}
while(count<MAXNUM) { printf("%do ĮȜijĮȡȚșµȘIJȚțȩ: ",count+1); gets(name[count]); if(strlen(name[count])==0) break; /* Ș İȚıĮȖȦȖȒ ıIJĮµĮIJȐ įȓȞȠȞIJĮȢ*/ ptr[count++]=name[count]; /* țİȞȩ ĮȜijĮȡȚșµȘIJȚțȩ */ } sort(ptr,count); display(ptr,count);
/* sort() */ /* ȉĮȟȚȞȠµİȓ IJȠȞ ʌȓȞĮțĮ įİȚțIJȫȞ µİ IJȘ µȑșȠįȠ IJȘȢ İʌȚȜȠȖȒȢ */ sort(char *p[],int c) { int i,j,min; char *temp;
}
for(i=0;i<c-1;i++) { min=i; for(j=i+1;j<c;j++) if(strcmp(p[min],p[j])>0) min=j; if(i!=min) { temp=p[i]; p[i]=p[min]; p[min]=temp; } }
ǻİȓțIJİȢ
139
/* display() */ /* ǼµijĮȞȓȗİȚ IJĮ ĮȜijĮȡȚșµȘIJȚțȐ IJĮȟȚȞȠµȘµȑȞĮ */ display(char *p[],int c) { int i; for(i=0;i<c;i++)printf("\n%do ĮȜijĮȡȚșµȘIJȚțȩ: %s",i+1,p[i]); }
Ȃ ǽ ī ǿ ǹ œÈ ‰ÂflÍÙÂÚ ðÒÈÌ ÙÁÌ Ù·ÓÈ̸ÏÁÛÁ
Į Ȧ Ț Ȧ Ȟ
ȡ Ȓ Ȑ Ȟ Ȟ
ȓ Į \0 \0 Ȟ Ȟ Ș Ȣ \0 Į \0
\0
Ȃ ǽ ī ǿ ǹ œÈ ‰ÂflÍÙÂÚ ÏÂÙ‹ ÙÁÌ Ù·ÓÈ̸ÏÁÛÁ
Į Ȧ Ț
ȡ Ȓ Ȑ Ȟ Ȟ
ȓ Į \0 \0 Ȟ Ȟ Ș ò \0 Į \0
\0
Ȧ Ȟ
ȈȤȒµĮ 10.5: ȉĮȟȚȞȩµȘıȘ ʌȓȞĮțĮ įİȚțIJȫȞ ıİ ĮȜijĮȡȚșµȘIJȚțȐ
ȈIJȠ ʌĮȡĮʌȐȞȦ ʌȡȩȖȡĮµµĮ ȤȡȘıȚµȠʌȠȚȒıĮµİ IJȘȞ İȞIJȠȜȒ:
ptr[count++]=name[count]; ıIJȘȞ ȠʌȠȓĮ, ĮȞĮijİȡȩµİȞȠȚ ıIJȠȞ ʌȓȞĮțĮ name ȤȡȘıȚµȠʌȠȚȠȪµİ µȩȞȠ ȑȞĮ įİȓțIJȘʌȓȞĮțĮ (subscript) ʌĮȡȩȜȠ ʌȠȣ Ƞ ʌȓȞĮțĮȢ ĮȣIJȩȢ İȓȞĮȚ įȚįȚȐıIJĮIJȠȢ. ȉȚ ıȘµĮȓȞİȚ ȜȠȚʌȩȞ IJȠ name[count], ĮȞ Ƞ ʌȓȞĮțĮȢ name İȓȞĮȚ įȚįȚȐıIJĮIJȠȢ; ǹȢ șȣµȘșȠȪµİ ȩIJȚ µʌȠȡȠȪµİ ȞĮ ĮȞIJȚȜȘijșȠȪµİ ȑȞĮ įȚįȚȐıIJĮIJȠ ʌȓȞĮțĮ ıĮȞ ȑȞĮ µȠȞȠįȚȐıIJĮIJȠ ʌȓȞĮțĮ Įʌȩ µȠȞȠįȚȐıIJĮIJȠȣȢ ʌȓȞĮțİȢ. Ȉ'ĮȣIJȒ IJȘȞ ʌİȡȓʌIJȦıȘ Ș įȒȜȦıȘ
char name[MAXNUM][MAXLEN]; µʌȠȡİȓ ȞĮ İȡµȘȞİȣIJİȓ ȦȢ įȒȜȦıȘ µȠȞȠįȚȐıIJĮIJȠȣ ʌȓȞĮțĮ µİ MAXNUM ıIJȠȚȤİȓĮ, IJȠ țĮșȑȞĮ İț IJȦȞ ȠʌȠȓȦȞ İȓȞĮȚ ȑȞĮȢ µȠȞȠįȚȐıIJĮIJȠȢ ʌȓȞĮțĮȢ ȤĮȡĮțIJȒȡȦȞ, µȒțȠȣȢ MAXLEN. DzIJıȚ, ĮȞĮijİȡȩµİȞȠȚ ıIJĮ ıIJȠȚȤİȓĮ IJȠȣ ʌȓȞĮțĮ name µİ ȑȞĮ µȩȞȠ įİȓțIJȘʌȓȞĮțĮ (subscript) n, ıIJȘȞ ȠȣıȓĮ ĮȞĮijİȡȩµĮıIJİ ıIJȘ įȚİȪșȣȞıȘ IJȠȣ n+1 ĮȜijĮȡȚșµȘIJȚțȠȪ, įȘȜĮįȒ ıIJȘ įȚİȪșȣȞıȘ IJȠȣ ʌȡȫIJȠȣ ȤĮȡĮțIJȒȡĮ IJȠȣ n+1 ĮȜijĮȡȚșµȘIJȚțȠȪ. Ǿ ȚțĮȞȩIJȘIJĮ IJȘȢ ȖȜȫııĮȢ C ȞĮ ȤİȚȡȓȗİIJĮȚ IJµȒµĮIJĮ İȞȩȢ ʌȓȞĮțĮ ȦȢ ʌȓȞĮțİȢ, İȓȞĮȚ ıIJȘȞ ʌȡĮȖµĮIJȚțȩIJȘIJĮ µȓĮ İȚįȚțȒ µȠȡijȒ İȞȩȢ ȐȜȜȠȣ șȑµĮIJȠȢ IJȘȢ C, ʌȠȣ ȜȑȖİIJĮȚ ʌȠȜȜĮʌȜȒ ݵµİıȩIJȘIJĮ Ȓ įȚʌȜȒ ĮȞĮțĮIJİȪșȣȞıȘ Ȓ "įİȓțIJİȢ ıİ įİȓțIJİȢ". īȚĮ ȞĮ ȖȓȞİȚ țĮIJĮȞȠȘIJȩ ĮȣIJȩ ĮȢ įȠȪµİ ʌȫȢ µʌȠȡȠȪµİ ȞĮ ĮȞĮijİȡșȠȪµİ µİ ȑțijȡĮıȘ įİȚțIJȫȞ (pointer) ıİ țȐʌȠȚȠ ıIJȠȚȤİȓȠ İȞȩȢ įȚįȚȐıIJĮIJȠȣ ʌȓȞĮțĮ. DzıIJȦ Ƞ ʌȓȞĮțĮȢ:
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
140
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
int table[L][C]; /* ʌȓȞĮțĮȢ µİ L ȖȡĮµµȑȢ țĮȚ C ıIJȒȜİȢ */ IJȩIJİ ȖȚĮ ȞĮ ĮȞĮijİȡșȠȪµİ ıIJȠ ıIJȠȚȤİȓȠ ʌȠȣ ȕȡȓıțİIJĮȚ ıIJȘȞ i ȖȡĮµµȒ țĮȚ j ıIJȒȜȘ ĮȣIJȠȪ IJȠȣ ʌȓȞĮțĮ șĮ ȖȡȐȥȠȣµİ:
table[i][j]
(1)
ǵµȦȢ Ƞ ʌȓȞĮțĮȢ table µʌȠȡİȓ ȞĮ İȡµȘȞİȣIJİȓ țĮȚ ȦȢ İȟȒȢ: DzȞĮȢ µȠȞȠįȚȐıIJĮIJȠȢ ʌȓȞĮțĮȢ µİ L ıIJȠȚȤİȓĮ, IJȠ țĮșȑȞĮ Įʌ'IJĮ ȠʌȠȓĮ İȓȞĮȚ ȑȞĮȢ µȠȞȠįȚȐıIJĮIJȠȢ ʌȓȞĮțĮȢ µİ C ĮțȑȡĮȚȠȣȢ:
IJȪʌȠȢ table[L]; ȩʌȠȣ IJȪʌȠȢ: int list[C] īȚĮ ȞĮ ĮȞĮijİȡșȠȪµİ IJȫȡĮ µİ įİȓțIJȘ (pointer) ıIJȠ ıIJȠȚȤİȓȠ i IJȠȣ ʌȓȞĮțĮ table, ȖȡȐijȠȣµİ, ȩʌȦȢ ȑȤȠȣµİ įİȚ ıIJȘȞ § 10.5:
*(table+i) ȩµȦȢ IJȠ ıIJȠȚȤİȓȠ i IJȠȣ ʌȓȞĮțĮ table İȓȞĮȚ ȑȞĮȢ ȠȜȩțȜȘȡȠȢ ʌȓȞĮțĮȢ µİ ȩȞȠµĮ IJȠ ȩȞȠµĮ IJȘȢ įȚİȪșȣȞıȘȢ IJȠȣ ʌȡȫIJȠȣ ıIJȠȚȤİȓȠȣ IJȠȣ, įȘȜĮįȒ: ȩȞȠµĮ==*(table+i). īȚĮ ȞĮ ĮȞĮijİȡșȠȪµİ IJȫȡĮ ıIJȠ j ıIJȠȚȤİȓȠ ĮȣIJȠȪ IJȠȣ ʌȓȞĮțĮ ȖȡȐijȠȣµİ: *(ȩȞȠµĮ+j), įȘȜĮįȒ:
*(*(table+i)+j)
(2)
ȩµȦȢ ĮȣIJȩ İȓȞĮȚ IJȠ ıIJȠȚȤİȓȠ table[i][j]. DzIJıȚ ȠȚ ʌĮȡĮıIJȐıİȚȢ (1) țĮȚ (2) İȓȞĮȚ ȚıȠįȪȞĮµİȢ:
table[i][j]==*(*(table+i)+j) ʌȡȐȖµĮ ʌȠȣ µĮȢ ȜȑİȚ ȩIJȚ: ȑȞĮ ıIJȠȚȤİȓȠ İȞȩȢ įȚįȚȐıIJĮIJȠȣ ʌȓȞĮțĮ µʌȠȡİȓ ȞĮ ĮȞĮijİȡșİȓ µ'ȑȞĮ įİȓțIJȘ ı'ȑȞĮȞ ȐȜȜȠ įİȓțIJȘ. DzIJıȚ ȜȠȚʌȩȞ, ȕȜȑʌȠȣµİ ȩIJȚ ȣʌȐȡȤȠȣȞ įȪȠ IJȡȩʌȠȚ ȖȚĮ ȞĮ ĮȞĮijİȡșȠȪµİ ıIJĮ ıIJȠȚȤİȓĮ İȞȩȢ įȚįȚȐıIJĮIJȠȣ ʌȓȞĮțĮ: (i)
Ȃİ IJȘ ȤȡȒıȘ ʌĮȡȐıIJĮıȘȢ ʌȓȞĮțĮ: table[i][j]
(ii) Ȃİ IJȘ ȤȡȒıȘ ʌĮȡȐıIJĮıȘȢ įİȚțIJȫȞ (pointer): *(*(table+i)+j)
10.8 ȅȇǿȈȂǹȉǹ īȇǹȂȂǾȈ ǻǿǹȉǹīȍȃ Ǿ main() İȓȞĮȚ µȓĮ ıȣȞȐȡIJȘıȘ țĮȚ ȦȢ IJȑIJȠȚĮ µʌȠȡİȓ ȞĮ įȑȤİIJĮȚ ʌĮȡĮµȑIJȡȠȣȢ. ȅȚ ʌȡĮȖµĮIJȚțȑȢ ʌĮȡȐµİIJȡȠȚ ıIJȘ ıȣȞȐȡIJȘıȘ main() įȓȞȠȞIJĮȚ ȩIJĮȞ İțIJİȜȠȪµİ IJȠ ʌȡȩȖȡĮµµȐ µĮȢ, Įʌȩ IJȠ ʌİȡȚȕȐȜȜȠȞ IJȠȣ ȁİȚIJȠȣȡȖȚțȠȪ ȈȣıIJȒµĮIJȠȢ. īȚĮ ȞĮ ȖȓȞİȚ ĮȣIJȩ, įȘµȚȠȣȡȖȠȪµİ ʌȡȫIJĮ IJȠ İțIJİȜȑıȚµȠ ĮȡȤİȓȠ IJȠȣ ʌȡȠȖȡȐµµĮIJȩȢ µĮȢ țĮȚ ıIJȘ ıȣȞȑȤİȚĮ, ıİ ʌİȡȚȕȐȜȜȠȞ ȁİȚIJȠȣȡȖȚțȠȪ ȈȣıIJȒµĮIJȠȢ ʌȜȘțIJȡȠȜȠȖȠȪµİ IJȠ ȩȞȠµĮ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ țĮȚ, ȤȦȡȚıµȑȞİȢ µİ țİȞȐ, IJȚȢ ʌĮȡĮµȑIJȡȠȣȢ ʌȠȣ șȑȜȠȣµİ ȞĮ µİIJĮȕȚȕȐıȠȣµİ ıIJȘ main(). ǹȣIJȑȢ ȠȚ ʌĮȡȐµİIJȡȠȚ ȜȑȖȠȞIJĮȚ ȠȡȓıµĮIJĮ ȖȡĮµµȒȢ įȚĮIJĮȖȫȞ. Ǿ main() įȑȤİIJĮȚ įȪȠ ʌĮȡĮµȑIJȡȠȣȢ, ʌȠȣ ıȣȞȒșȦȢ IJȠȣȢ įȓȞȠȣµİ IJĮ ʌĮȡĮțȐIJȦ ȠȞȩµĮIJĮ:
argc (Įʌȩ IJȠ arguments counter - µİIJȡȘIJȒȢ ȠȡȚıµȐIJȦȞ) ʌȠȣ İȓȞĮȚ IJȪʌȠȣ ĮțİȡĮȓȠȣ țĮȚ ı'ĮȣIJȒȞ ĮʌȠșȘțİȪİIJĮȚ Ƞ ĮȡȚșµȩȢ IJȦȞ ȠȡȚıµȐIJȦȞ IJȘȢ ȖȡĮµµȒȢ įȚĮIJĮȖȫȞ. Ǿ IJȚµȒ IJȘȢ șĮ İȓȞĮȚ ʌȐȞIJĮ IJȠȣȜȐȤȚıIJȠȞ 1, ȖȚĮIJȓ IJȠ ȩȞȠµĮ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ İȓȞĮȚ IJȠ ʌȡȫIJȠ ȩȡȚıµĮ.
ǻİȓțIJİȢ
141
argv (Įʌȩ IJȠ arguments vector - įȚȐȞȣıµĮ ȠȡȚıµȐIJȦȞ) ʌȠȣ İȓȞĮȚ ȑȞĮȢ ʌȓȞĮțĮȢ įİȚțIJȫȞ ıIJĮ ȠȡȓıµĮIJĮ IJȘȢ ȖȡĮµµȒȢ įȚĮIJĮȖȫȞ, įȘȜĮįȒ ȑȞĮȢ ʌȓȞĮțĮȢ įİȚțIJȫȞ ıİ ĮȜijĮȡȚșµȘIJȚțȐ, ȩʌȠȣ țȐșİ ĮȜijĮȡȚșµȘIJȚțȩ İȓȞĮȚ ȑȞĮ ȩȡȚıµĮ. īȚĮ ȞĮ ȖȓȞȠȣȞ țĮIJĮȞȠȘIJȐ IJĮ ʌĮȡĮʌȐȞȦ, ĮȢ șİȦȡȒıȠȣµİ IJȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ: /* name.c */ /* ȅȡȓıµĮIJĮ ȖȡĮµµȒȢ įȚĮIJĮȖȫȞ */ main(int argc,char *argv[]) { if(argc!=2) puts("ȄȑȤĮıİȢ ȞĮ įȫıİȚȢ IJȠ ȩȞȠµȐ ıȠȣ"); else printf("īİȚĮ ıȠȣ %s",argv[1]); } īȚĮ ȞĮ IJȡȑȟȠȣµİ ĮȣIJȩ IJȠ ʌȡȩȖȡĮµµĮ, IJȠ µİIJĮȖȜȦIJIJȓȗȠȣµİ, IJȠ įȚĮıȣȞįȑȠȣµİ țĮȚ Įʌȩ IJȠ ʌİȡȚȕȐȜȜȠȞ IJȠȣ ȁİȚIJȠȣȡȖȚțȠȪ ȈȣıIJȒµĮIJȠȢ IJȠ IJȡȑȤȠȣµİ, įȓȞȠȞIJĮȢ ıĮȞ ȩȡȚıµĮ IJȠ ȩȞȠµȐ µĮȢ, ʌ.Ȥ.
name ȃȓțȠ ȉȠ ĮʌȠIJȑȜİıµĮ ʌȠȣ șĮ įȠȪµİ İȓȞĮȚ: īİȚĮ ıȠȣ ȃȓțȠ ȆĮȡĮțȐIJȦ įȓȞȠȣµİ ȑȞĮ İȞįȚĮijȑȡȠȞ țĮȚ ȤȡȒıȚµȠ ʌȡȩȖȡĮµµĮ, ʌȠȣ ȤȡȘıȚµȠʌȠȚİȓ ȠȡȓıµĮIJĮ ȖȡĮµµȒȢ įȚĮIJĮȖȫȞ ȖȚĮ ȞĮ İțIJİȜİȓ įȚĮįȠȤȚțȐ įȚȐijȠȡİȢ įȚĮIJĮȖȑȢ IJȠȣ DOS. ȉȠ ʌȡȩȖȡĮµµĮ țȐȞİȚ ȤȡȒıȘ IJȘȢ ıȣȞȐȡIJȘıȘȢ system() (ʌȠȣ ȠȡȓȗİIJĮȚ ıIJȠ ĮȡȤİȓȠ-İʌȚțİijĮȜȓįĮȢ stdlib.h) Ș ȠʌȠȓĮ įȑȤİIJĮȚ ȦȢ ʌĮȡȐµİIJȡȠ ȑȞĮ ĮȜijĮȡȚșµȘIJȚțȩ țĮȚ IJȠ µİIJĮȕȚȕȐȗİȚ, ıĮȞ įȚĮIJĮȖȒ, ıIJȠȞ İʌİȟİȡȖĮıIJȒ įȚĮIJĮȖȫȞ IJȠȣ DOS (įȘȜĮįȒ ıIJȠ COMMAND.COM). /* comline.c */ /* ǻȚĮįȠȤȚțȒ İțIJȑȜİıȘ įȚĮIJĮȖȫȞ IJȠȣ DOS ʌȠȣ įȓȞȠȞIJĮȚ ıIJȘ ȖȡĮµµȒ įȚĮIJĮȖȫȞ */ #include <stdlib.h> main(int argc, char *argv[]) { int i; if(argc<2) puts("ȄȑȤĮıİȢ ȞĮ įȫıİȚȢ ȠȡȓıµĮIJĮ"); else for(i=1;i<argc;i++) system(argv[i]);
} ǹijȠȪ įȘµȚȠȣȡȖȒıȠȣµİ IJȠ İțIJİȜȑıȚµȠ ĮȡȤİȓȠ, įȓȞȠȣµİ Įʌȩ IJȠ ʌİȡȚȕȐȜȜȠȞ IJȠȣ ȁİȚIJȠȣȡȖȚțȠȪ ȈȣıIJȒµĮIJȠȢ DOS, IJȘȞ ʌĮȡĮțȐIJȦ ȖȡĮµµȒ įȚĮIJĮȖȫȞ, ʌȠȣ İțIJİȜİȓ IJȚȢ įȚĮIJĮȖȑȢ VER, CHKDSK țĮȚ DIR IJȠȣ DOS µİ IJȘ ıİȚȡȐ:
comline ver chkdsk dir
10.9 ǻǼǿȀȉǼȈ Ȁǹǿ ǻȅȂǼȈ Ǿ C İʌȚIJȡȑʌİȚ įİȓțIJİȢ ıİ IJȪʌȠȣȢ įȠµȫȞ, ȩʌȦȢ İʌȚIJȡȑʌİȚ įİȓțIJİȢ ıİ ȠʌȠȚȠȣįȒʌȠIJİ IJȪʌȠȣ įİįȠµȑȞĮ. Ǿ ȖİȞȚțȒ µȠȡijȒ IJȘȢ İȞIJȠȜȒȢ įȒȜȦıȘȢ İȞȩȢ įİȓțIJȘ ıİ įȠµȒ İȓȞĮȚ:
struct ĮȞĮȖȞȦȡȚıIJȚțȩ_IJȪʌȠȣ_įȠµȒȢ *ĮȞĮȖȞȦȡȚıIJȚțȩ;
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
142
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ȩʌȠȣ ĮȞĮȖȞȦȡȚıIJȚțȩ İȓȞĮȚ IJȠ ĮȞĮȖȞȦȡȚıIJȚțȩ IJȠȣ įİȓțIJȘ. ȅ IJȪʌȠȢ IJȘȢ įȠµȒȢ ʌȡȑʌİȚ ȞĮ ȑȤİȚ ȠȡȚıIJİȓ ʌȡȠȘȖȠȣµȑȞȦȢ. īȚĮ ʌĮȡȐįİȚȖµĮ, ĮȞ ȑȤȠȣµİ IJȚȢ ʌĮȡĮțȐIJȦ įȘȜȫıİȚȢ:
struct date { int day; char mon_name[13]; int year; }; struct date d1; IJȩIJİ Ș İȞIJȠȜȒ:
struct date *ptr; įȘȜȫȞİȚ ȑȞĮ įİȓțIJȘ µİ ȩȞȠµĮ ptr ıİ įȠµȒ IJȪʌȠȣ struct date. Ǿ İȞIJȠȜȒ:
ptr=&d1;
țĮIJĮȤȦȡİȓ ıIJȠ įİȓțIJȘ ptr IJȘ įȚİȪșȣȞıȘ IJȘȢ µİIJĮȕȜȘIJȒȢ įȠµȒȢ d1. īȚĮ ȞĮ ĮȞĮijİȡșȠȪµİ ıIJȠ µȑȜȠȢ year IJȘȢ µİIJĮȕȜȘIJȒȢ d1 µʌȠȡȠȪµİ ȞĮ ȖȡȐȥȠȣµİ:
d1.year
ȩʌȦȢ ȟȑȡȠȣµİ, Ȓ
(*ptr).year
ıİ ȑțijȡĮıȘ įİȓțIJȘ. ǵʌȠȣ ȠȚ ʌĮȡİȞșȑıİȚȢ ȖȪȡȦ Įʌȩ IJȠ įİȓțIJȘ İȓȞĮȚ ĮʌĮȡĮȓIJȘIJİȢ ȖȚĮIJȓ Ƞ IJİȜİıIJȒȢ IJİȜİȓĮ ȑȤİȚ µİȖĮȜȪIJİȡȘ ʌȡȠIJİȡĮȚȩIJȘIJĮ Įʌȩ IJȠȞ IJİȜİıIJȒ * (ȕȜȑʌİ ȆȓȞĮțĮ 4.5). ǼʌȓıȘȢ µʌȠȡȠȪµİ ĮȞIJȓ IJȘȢ IJİȜİȣIJĮȓĮȢ ʌĮȡȐıIJĮıȘȢ, ȞĮ ĮȞĮijİȡșȠȪµİ ıIJȠ µȑȜȠȢ year ȦȢ İȟȒȢ:
ptr->year
ȩʌȠȣ ȤȡȘıȚµȠʌȠȚȠȪµİ IJȠȞ IJİȜİıIJȒ ->, ʌȠȣ ȜȑȖİIJĮȚ țĮȚ IJİȜİıIJȒȢ-ȕȑȜȠȢ.
10.10 ȆǹȇǹǻǼǿīȂǹȉǹ 1. ȃĮ ȖȡĮijİȓ ıȣȞȐȡIJȘıȘ ʌȠȣ ȞĮ įȑȤİIJĮȚ ȦȢ ʌĮȡĮµȑIJȡȠȣȢ IJȚȢ įȚİȣșȪȞıİȚȢ IJȡȚȫȞ µİIJĮȕȜȘIJȫȞ ĮțİȡĮȓȠȣ IJȪʌȠȣ țĮȚ ȞĮ IJȠʌȠșİIJİȓ ıIJȘȞ ʌȡȫIJȘ µİIJĮȕȜȘIJȒ IJȘ µȑȖȚıIJȘ IJȚµȒ IJȦȞ IJȡȚȫȞ, ıIJȘȞ įİȪIJİȡȘ IJȘȞ ĮµȑıȦȢ µȚțȡȩIJİȡȘ IJȚµȒ țĮȚ ıIJȘȞ IJȡȓIJȘ ȞĮ IJȠʌȠșİIJİȓ IJȘȞ İȜȐȤȚıIJȘ. /* sort() */ /* ǹµȠȚȕĮȓĮ ĮȜȜĮȖȒ IJȦȞ IJȚµȫȞ IJȡȚȫȞ µİIJĮȕȜȘIJȫȞ */ sort(int *a,int *b,int *c) { int max,mid,min; if(*a>*b) if(*b>*c) { max=*a; mid=*b; min=*c; } else if(*a>*c) { max=*a; mid=*c; min=*b; } else { max=*c; mid=*a; min=*b; } else
ǻİȓțIJİȢ
}
143
if(*b>*c) if(*a>*c) { max=*b; mid=*a; min=*c; } else { max=*b; mid=*c; min=*a; } else { max=*c; mid=*b; min=*a; } *a=max; *b=mid; *c=min;
ȉȠ ʌȡȩȖȡĮµµĮ ʌȠȣ șĮ țĮȜȠȪıİ ĮȣIJȒ IJȘ ıȣȞȐȡIJȘıȘ, șĮ ȒIJĮȞ țȐʌȦȢ ȑIJıȚ: main() { int x,y,z;
}
scanf("%d %d %d",&x,&y,&z); sort(&x,&y,&z); printf("%d %d %d",x,y,z);
2. ȈIJȘȞ § 9.2.2 İȓȤĮµİ ĮȞĮijȑȡİȚ IJȘ ıȣȞȐȡIJȘıȘ İȓȞĮȚ Ș atoi() (ASCII to integer) Ș ȠʌȠȓĮ µİIJĮIJȡȑʌİȚ IJȠ ĮȜijĮȡȚșµȘIJȚțȩ ʌȠȣ įȑȤİIJĮȚ ȦȢ ʌĮȡȐµİIJȡȠ, ıİ ĮțȑȡĮȚȠ ĮȡȚșµȩ. īȡȐȥIJİ µȓĮ įȚțȒ ıĮȢ İțįȠȤȒ ĮȣIJȒȢ IJȘȢ ıȣȞȐȡIJȘıȘȢ, µİ ȩȞȠµĮ my_atoi(). /* my_atoi */ /* ȂİIJĮIJȡȠʌȒ string ıİ ĮțȑȡĮȚȠ */ long int my_atoi(char *s) { long int result=0; int sign; char *p;
}
p=s; while(*p==' ') p++; /* ĮȖȞȠȠȪµİ IJĮ ʌȚșĮȞȐ țİȞȐ ıIJȘȞ ĮȡȤȒ sign=(*p=='-')?-1:1; /* ȕȡȓıțȠȣµİ IJȠ ʌȡȩıȘµȠ if(*p=='+' || *p=='-') p++; while(*p>='0' && *p<='9') /* ȩıȠ ȣʌȐȡȤȠȣȞ ȥȘijȓĮ... { result=10*result+(*p-'0'); /* ıȤȘµĮIJȓȗİIJĮȚ Ƞ ĮțȑȡĮȚȠȢ p++; } return(result*sign);
*/ */ */ */
3. ȃĮ ȖȡĮijİȓ µȓĮ ıȣȞȐȡIJȘıȘ Ș ȠʌȠȓĮ ȞĮ įȑȤİIJĮȚ ȦȢ ʌĮȡȐµİIJȡȠ ȑȞĮȞ ĮțȑȡĮȚȠ ĮȡȚșµȩ țĮȚ ȞĮ İʌȚıIJȡȑijİȚ IJȠ ȩȞȠµĮ IJȠȣ µȒȞĮ ʌȠȣ ĮȞIJȚıIJȠȚȤİȓ ı'ĮȣIJȩȞ (1: ǿĮȞȠȣȐȡȚȠȢ, 2: ĭİȕȡȠȣȐȡȚȠȢ ț.Ȝ.ʌ.).
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
144
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
/* month_name() */ /* ǼʌȚıIJȡȑijİȚ IJȠ ȩȞȠµĮ IJȠȣ n-ȠıIJȠȪ µȒȞĮ */ char *month_name(int n) { static char *name[]={"ǹʌĮȡȐįİțIJȠȢ µȒȞĮȢ", "ǿĮȞȠȣȐȡȚȠȢ","ĭİȕȡȠȣȐȡȚȠȢ","ȂȐȡIJȚȠȢ", "ǹʌȡȓȜȚȠȢ","ȂȐȚȠȢ","ǿȠȪȞȚȠȢ", "ǿȠȪȜȚȠȢ","ǹȪȖȠȣıIJȠȢ","ȈİʌIJȑµȕȡȚȠȢ", "ȅțIJȫȕȡȚȠȢ","ȃȠȑµȕȡȚȠȢ","ǻİțȑµȕȡȚȠȢ" }; return(n<1 || n>12)?name[0]:name[n]; } 4. ȈIJȠ ĮȡȤİȓȠ-İʌȚțİijĮȜȓįĮȢ dos.h įȘȜȫȞȠȞIJĮȚ ȠȚ ʌĮȡĮțȐIJȦ įȠµȑȢ: struct date { int da_year; /* ȑIJȠȢ */ int da_mon; /* µȒȞĮȢ */ int da_day; /* ȘµȑȡĮ */ } struct time { int ti_hour; int ti_min; int ti_sec; int ti_hund; }
/* /* /* /*
ȫȡİȢ ȜİʌIJȐ įİȣIJİȡȩȜİʌIJĮ İțĮIJȠıIJȐ IJȠȣ įİȣIJİȡȠȜȑʌIJȠȣ
*/ */ */ */
ǼʌȓıȘȢ ȠȡȓȗȠȞIJĮȚ ȠȚ ıȣȞĮȡIJȒıİȚȢ getdate() țĮȚ gettime() ȦȢ İȟȒȢ: void getdate(struct date *d) void gettime(struct time *t) ȠȚ ȠʌȠȓİȢ įȑȤȠȞIJĮȚ Įʌȩ IJȠ ıȪıIJȘµĮ IJȘȞ ȘµİȡȠµȘȞȓĮ țĮȚ IJȘȞ ȫȡĮ țĮȚ IJȚȢ IJȠʌȠșİIJȠȪȞ ıIJȚȢ įȠµȑȢ ʌȠȣ įİȓȤȞȠȞIJĮȚ Įʌȩ IJȠ d țĮȚ IJȠ t ĮȞIJȓıIJȠȚȤĮ. ǹțȩµĮ, ȠȡȓȗȠȞIJĮȚ ȠȚ ıȣȞĮȡIJȒıİȚȢ setdate() țĮȚ settime() ȦȢ İȟȒȢ: void setdate(struct date *d) void settime(struct time *t) ȠȚ ȠʌȠȓİȢ șȑIJȠȣȞ IJȘȞ ȘµİȡȠµȘȞȓĮ țĮȚ IJȘȞ ȫȡĮ IJȠȣ ıȣıIJȒµĮIJȠȢ, ȩʌȦȢ țĮșȠȡȓȗȠȞIJĮȚ Įʌȩ IJȚȢ įȠµȑȢ ʌȠȣ įİȓȤȞȠȞIJĮȚ Įʌȩ IJȠ d țĮȚ IJȠ t ĮȞIJȓıIJȠȚȤĮ. īȡȐȥIJİ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ ݵijĮȞȓȗİȚ ıIJȘȞ ȠșȩȞȘ IJȘȞ ȘµİȡȠµȘȞȓĮ țĮȚ IJȘȞ ȫȡĮ IJȠȣ ıȣıIJȒµĮIJȠȢ. ȈIJȘ ıȣȞȑȤİȚĮ ȞĮ İʌȚIJȡȑʌİȚ ıIJȠ ȤȡȒıIJȘ (ĮȞ İʌȚșȣµİȓ) ȞĮ ĮȜȜȐȟİȚ IJȘȞ ȘµİȡȠµȘȞȓĮ țĮȚ IJȘȞ ȫȡĮ. /* timedate.c */ /* ǼµijȐȞȚıȘ țĮȚ ĮȜȜĮȖȒ ȘµİȡȠµȘȞȓĮȢ țĮȚ ȫȡĮȢ IJȠȣ ıȣıIJȒµĮIJȠȢ */ #include <dos.h> main() { int h,m,s,hu; struct date *dp,d; struct time *tp,t; char ch;
ǻİȓțIJİȢ
}
145
dp=&d; tp=&t; getdate(dp); printf("ǾµİȡȠµȘȞȓĮ: %d-%d-%d\n", d.da_day,d.da_mon,d.da_year); printf("ǹȜȜĮȖȒ ȘµİȡȠµȘȞȓĮȢ (Y/N) "); ch=getche(); if(ch=='Y' || ch=='y') { printf("\nǻȫıİ ȘµİȡȠµȘȞȓĮ (dd-mm-yy) "); scanf("%d-%d-%d",&d.da_day, &d.da_mon, &d.da_year); setdate(dp); } gettime(tp); printf("\nȍȡĮ : %d:%d:%d:%d\n", t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund); printf("ǹȜȜĮȖȒ ȫȡĮȢ (Y/N) "); ch=getche(); if(ch=='Y' || ch=='y') { printf("\nǻȫıİ ȫȡĮ (hh:mm:ss:hu) "); scanf("%d:%d:%d:%d",&h,&m,&s,&hu); t.ti_hour=h; t.ti_min=m; t.ti_sec=s; t.ti_hund=hu; settime(tp); }
10.11 ǹȈȀǾȈǼǿȈ 1.
ǻİȓȟIJİ IJĮ ʌİȡȚİȤȩµİȞĮ IJȘȢ µȞȒµȘȢ µİIJȐ Įʌȩ țȐșİ İȞIJȠȜȒ. ȅȚ İȞIJȠȜȑȢ İțIJİȜȠȪȞIJĮȚ µİ IJȘ ıİȚȡȐ ʌȠȣ ijĮȓȞȠȞIJĮȚ ʌĮȡĮțȐIJȦ țĮȚ Ș țĮșݵȓĮ ȜİȚIJȠȣȡȖİȓ µİ IJĮ ĮʌȠIJİȜȑıµĮIJĮ IJȘȢ ʌȡȠȘȖȠȪµİȞȘȢ. int i,j,*pi; char s[6]; ¢ i=0; pi=&i; j=*pi; strcpy(s,"AK"); pi=&pi; pi++; j=3; *pi=0; pi=&j; i=*pi; puts(s);
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
¢+1 ¢+2 ¢+3 ¢+4 ¢+5 ¢+6 ¢+7 ¢+8 ¢+9 ¢+10 ¢+11
146
2.
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ǻȫıIJİ IJȠ ĮʌȠIJȑȜİıµĮ IJȘȢ İțIJȑȜİıȘȢ IJȠȣ ʌĮȡĮțȐIJȦ ʌȡȠȖȡȐµµĮIJȠȢ: main() { static int arr[]={4,5,6}; int j;
} 3.
ǻȫıIJİ IJȠ ĮʌȠIJȑȜİıµĮ IJȠȣ ʌĮȡĮțȐIJȦ ʌȡȠȖȡȐµµĮIJȠȢ: main() { static int arr[]={4,5,6}; int j;
} 4.
for(j=0;j<3;j++) printf("%d",arr+j);
ȆȠȚȠ İȓȞĮȚ IJȠ ĮʌȠIJȑȜİıµĮ IJȠȣ ʌĮȡĮțȐIJȦ ʌȡȠȖȡȐµµĮIJȠȢ: main() { static int arr[]={4,5,6}; int j,*ptr;
} 5.
for(j=0;j<3;j++) printf("%d",*arr+j);
ptr=arr; for(j=0;j<3;j++) printf("%d",*ptr++);
ȆȠȚĮ İȓȞĮȚ Ș ȑȟȠįȠȢ IJȠȣ ʌĮȡĮțȐIJȦ ʌȡȠȖȡȐµµĮIJȠȢ; main() { char str[10];
}
strcpy(str,"ABC"); printf("%c\n",str[2]); printf("%d\n",str[3]); printf("%s\n",str); printf("%c\n",*(str+1)); printf("%s\n",str+1); printf("%c\n",(str+1)[1]);
147
ȀǼĭǹȁǹǿȅ 11
ǹȇȋǼǿǹ ǵIJĮȞ ȑȞĮȢ ĮȡȚșµȩȢ įİįȠµȑȞȦȞ ĮʌĮȚIJİȓIJĮȚ ȞĮ įȚĮIJȘȡȘșİȓ ȖȚĮ µİȜȜȠȞIJȚțȒ ȤȡȒıȘ Įʌȩ įȚȐijȠȡĮ ʌȡȠȖȡȐµµĮIJĮ Ȓ İȓȞĮȚ µİȖȐȜȠȣ µİȖȑșȠȣȢ țĮȚ ĮʌĮȚIJİȓ µİȖĮȜȪIJİȡȘ ʌȠıȩIJȘIJĮ Įʌȩ IJȘ įȚĮșȑıȚµȘ țȪȡȚĮ µȞȒµȘ IJȠȣ Ǿ/Ȋ, IJȩIJİ ȖȚĮ IJȘȞ ĮʌȠșȒțİȣıȒ IJȠȣȢ ȤȡȘıȚµȠʌȠȚİȓIJĮȚ Ș ʌİȡȚijİȡİȚĮțȒ µȞȒµȘ IJȠȣ Ǿ/Ȋ, ʌ.Ȥ. įȓıțȠȢ. ȀȐșİ ȠȡȖĮȞȦµȑȞȘ ıȣȜȜȠȖȒ įİįȠµȑȞȦȞ, ʌȠȣ ĮʌȠșȘțİȪİIJĮȚ ıİ țȐʌȠȚȠ ʌİȡȚijİȡİȚĮțȩ µȑıȠ ĮʌȠșȒțİȣıȘȢ, ȠȞȠµȐȗİIJĮȚ ĮȡȤİȓȠ (file). Ǿ C șİȦȡİȓ ȩȜĮ IJĮ ĮȡȤİȓĮ ıĮȞ ıİȚȡȑȢ Įʌȩ bytes ȤȦȡȓȢ țĮµȓĮ įȠµȒ. DzȞĮ ʌȡȩȖȡĮµµĮ ȩµȦȢ, µʌȠȡİȓ ȞĮ șİȦȡİȓ ȩIJȚ ȑȞĮ ĮȡȤİȓȠ ȑȤİȚ țȐʌȠȚĮ ȜȠȖȚțȒ įȠµȒ, ʌ.Ȥ. ȩIJȚ ĮʌȠIJİȜİȓIJĮȚ Įʌȩ ĮȜijĮȡȚșµȘIJȚțȐ Ȓ ĮʌȠIJİȜİȓIJĮȚ Įʌȩ įȠµȑȢ. Ǿ ʌĮȡĮʌȐȞȦ șİȫȡȘıȘ ȩµȦȢ, ȖȓȞİIJĮȚ µȩȞȠ ıİ İʌȓʌİįȠ ȜȠȖȚțȒȢ IJȠȣ ıȣȖțİțȡȚµȑȞȠȣ ʌȡȠȖȡȐµµĮIJȠȢ, ȠȚ ıȣȞĮȡIJȒıİȚȢ İȚıȩįȠȣ țĮȚ İȟȩįȠȣ IJȘȢ C ȤİȚȡȓȗȠȞIJĮȚ µȩȞȠ ıİȚȡȑȢ Įʌȩ bytes. ǹȣIJȩ İȓȞĮȚ ʌȠȜȪ ȕȠȜȚțȩ ȖȚĮIJȓ ȑIJıȚ ȠȚ ʌȜȘȡȠijȠȡȓİȢ IJȠȣ ȓįȚȠȣ ĮȡȤİȓȠȣ µʌȠȡȠȪȞ ȞĮ ȤȡȘıȚµȠʌȠȚȘșȠȪȞ Įʌȩ įȚĮijȠȡİIJȚțȐ ʌȡȠȖȡȐµµĮIJĮ -IJĮ ȠʌȠȓĮ įİ ȤȡİȚȐȗİIJĮȚ ȞĮ ȖȞȦȡȓȗȠȣȞ IJȘ įȠµȒ IJȠȣ ĮȡȤİȓȠȣ- țĮȚ ȖȚĮ įȚĮijȠȡİIJȚțȠȪȢ ıțȠʌȠȪȢ țȐșİ ijȠȡȐ. īİȞȚțȐ įȚĮțȡȓȞȠȣµİ įȪȠ İȓįȘ ĮȡȤİȓȦȞ, IJĮ ĮȡȤİȓĮ țİȚµȑȞȠȣ (text files) țĮȚ IJĮ įȣĮįȚțȐ ĮȡȤİȓĮ (binary files). ȉĮ ĮȡȤİȓĮ țİȚµȑȞȠȣ ĮʌȠIJİȜȠȪȞIJĮȚ µȩȞȠȞ Įʌȩ ȤĮȡĮțIJȒȡİȢ ASCII țĮȚ ȑIJıȚ İȓȞĮȚ ȐµİıĮ ĮȞĮȖȞȫıȚµĮ Įʌȩ IJȠȞ ȐȞșȡȦʌȠ. ȉĮ įİįȠµȑȞĮ İȞȩȢ ĮȡȤİȓȠȣ țİȚµȑȞȠȣ ȤȦȡȓȗȠȞIJĮȚ ıİ ȖȡĮµµȑȢ µİ IJȘ ȤȡȒıȘ IJȠȣ ȤĮȡĮțIJȒȡĮ ȞȑĮȢ ȖȡĮµµȒȢ '\n'. ȉĮ įȣĮįȚțȐ ĮȡȤİȓĮ ʌİȡȚȑȤȠȣȞ ĮȡȚșµȘIJȚțȑȢ IJȚµȑȢ ıİ įȣĮįȚțȒ µȠȡijȒ țĮȚ țĮIJȐ ıȣȞȑʌİȚĮ įİȞ İȓȞĮȚ ȐµİıĮ ĮȞĮȖȞȫıȚµĮ Įʌȩ IJȠȞ ȐȞșȡȦʌȠ. ȅȚ ȤĮȡĮțIJȒȡİȢ ʌȠȣ ʌİȡȚȑȤȠȞIJĮȚ ı'ȑȞĮ įȣĮįȚțȩ ĮȡȤİȓȠ ĮȞĮȖȞȦȡȓȗȠȞIJĮȚ, ȩʌȦȢ țĮȚ ıIJȠ ĮȡȤİȓȠ țİȚµȑȞȠȣ, ȠȚ ĮȡȚșµȠȓ ȩµȦȢ ĮʌȠșȘțİȪȠȞIJĮȚ ȩʌȦȢ İȓȞĮȚ ıIJȘȞ țȪȡȚĮ µȞȒµȘ: ıİ įȣĮįȚțȒ µȠȡijȒ. DzIJıȚ IJĮ įȣĮįȚțȐ ĮȡȤİȓĮ İȓȞĮȚ ıȣȞȒșȦȢ µȚțȡȩIJİȡĮ ıİ µȑȖİșȠȢ Įʌȩ IJĮ ĮȡȤİȓĮ țİȚµȑȞȠȣ, ĮijȠȪ ȖȚĮ ȑȞĮȞ ĮțȑȡĮȚȠ ʌ.Ȥ. IJȠȞ 12345 ȤȡİȚȐȗȠȞIJĮȚ µȩȞȠ 2 bytes, ĮȞIJȓ 5 bytes ʌȠȣ șĮ ȤȡİȚȐȗȠȞIJĮȞ ı'ȑȞĮ ĮȡȤİȓȠ țİȚµȑȞȠȣ (1 ȤĮȡĮțIJȒȡĮȢ = 1 byte).
11.1 ǹȃȅǿīȂǹ Ȁǹǿ ȀȁǼǿȈǿȂȅ ǹȇȋǼǿȅȊ Ǿ ʌȡȫIJȘ İȡȖĮıȓĮ ʌȠȣ ʌȡȑʌİȚ ȞĮ ȖȓȞİȚ țĮIJȐ IJȠ ȤİȚȡȚıµȩ IJȦȞ ĮȡȤİȓȦȞ, İȓȞĮȚ IJȠ ȐȞȠȚȖµĮ (opening). ȉȠ ȐȞȠȚȖµĮ ȑȤİȚ IJȘȞ ȑȞȞȠȚĮ IJȘȢ ʌȡȠİIJȠȚµĮıȓĮȢ IJȠȣ ĮȡȤİȓȠȣ ȖȚĮ İȓıȠįȠ țĮȚ ȑȟȠįȠ ıIJȠȚȤİȓȦȞ. ȀĮIJȐ IJȠ ȐȞȠȚȖµĮ, IJȠ ĮȡȤİȓȠ ʌȠȣ İȓȞĮȚ ȖȞȦıIJȩ µİ ȑȞĮ ȩȞȠµĮ ıIJȠ ȁİȚIJȠȣȡȖȚțȩ ȈȪıIJȘµĮ, ıȣȞįȑİIJĮȚ µİ µȓĮ µİIJĮȕȜȘIJȒ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ (ʌȠȣ ıIJȘ ıȣȞȑȤİȚĮ șĮ ȠȞȠµȐȗȠȣµİ įİȓțIJȘ-ĮȡȤİȓȠȣ). ȈIJȘ ıȣȞȑȤİȚĮ ĮȣIJȒ Ș µİIJĮȕȜȘIJȒ ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ȦȢ ȩȡȚıµĮ ıIJȚȢ ıȣȞĮȡIJȒıİȚȢ ȤİȚȡȚıµȠȪ IJȠȣ ĮȡȤİȓȠȣ. Ǿ µİIJĮȕȜȘIJȒ ĮȣIJȒ ʌȡȑʌİȚ ȞĮ İȓȞĮȚ IJȪʌȠȣ įİȓțIJȘ ıİ FILE. ȅ IJȪʌȠȢ FILE ȠȡȓȗİIJĮȚ ıIJȠ ĮȡȤİȓȠ-İʌȚțİijĮȜȓįĮȢ stdio.h.
148
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ȉȠ ȐȞȠȚȖµĮ İȞȩȢ ĮȡȤİȓȠȣ ȖȓȞİIJĮȚ µİ IJȘ ıȣȞȐȡIJȘıȘ fopen() IJȘȢ ȠʌȠȓĮȢ IJȠ ʌȡȩIJȣʌȠ ȣʌȐȡȤİȚ ıIJȠ ĮȡȤİȓȠ-İʌȚțİijĮȜȓįĮȢ stdio.h:
FILE *fopen(char *path, char *mode); ȩʌȠȣ IJȠ path ʌȡȠıįȚȠȡȓȗİȚ IJȠ ʌȜȒȡİȢ ȩȞȠµĮ IJȠȣ ĮȡȤİȓȠȣ ʌȠȣ șȑȜȠȣµİ ȞĮ ĮȞȠȓȟȠȣµİ, ȩʌȦȢ ĮȣIJȩ İȓȞĮȚ ȖȞȦıIJȩ ıIJȠ ȁİȚIJȠȣȡȖȚțȩ ȈȪıIJȘµĮ țĮȚ IJȠ mode țĮșȠȡȓȗİȚ IJȠȞ IJȡȩʌȠ µİ IJȠȞ ȠʌȠȓȠ șĮ ĮȞȠȚȤIJİȓ IJȠ ĮȡȤİȓȠ. Ǿ ıȣȞȐȡIJȘıȘ fopen() İʌȚıIJȡȑijİȚ µȓĮ IJȚµȒ IJȪʌȠȣ įİȓțIJȘ ıİ FILE, Ș ȠʌȠȓĮ ʌȡȑʌİȚ ȞĮ ĮʌȠșȘțİȣIJİȓ ıİ ȑȞĮ įİȓțIJȘ-ĮȡȤİȓȠȣ. ǹȞ ȖȚĮ ȠʌȠȚȠįȒʌȠIJİ ȜȩȖȠ IJȠ ĮȡȤİȓȠ įİ µʌȠȡİȓ ȞĮ ĮȞȠȚȤIJİȓ, Ș fopen() İʌȚıIJȡȑijİȚ IJȚµȒ µȘįȑȞ (țĮșȠȡȚıµȑȞȘ ıIJȠ stdio.h ȦȢ NULL). ȅȚ ʌĮȡĮțȐIJȦ İȞIJȠȜȑȢ įȘȜȫȞȠȣȞ ȑȞĮ įİȓțIJȘ-ĮȡȤİȓȠȣ, µİ ȩȞȠµĮ fptr, țĮȚ ĮȞȠȓȖȠȣȞ ȑȞĮ ĮȡȤİȓȠ µİ ȩȞȠµĮ TEXTFILE.TXT ȖȚĮ İȖȖȡĮijȒ (įȘȜȫȞİIJĮȚ µİ IJȠ "w"):
FILE *fptr; fptr=fopen("textfile.txt","w"); ȅ IJȡȩʌȠȢ µİ IJȠȞ ȠʌȠȓȠ șĮ ĮȞȠȚȤIJİȓ ȑȞĮ ĮȡȤİȓȠ µʌȠȡİȓ ȞĮ İȓȞĮȚ ȖȚĮ ĮȞȐȖȞȦıȘ (read), ȖȚĮ İȖȖȡĮijȒ (write), ȖȚĮ ʌȡȠıșȒțȘ (append) ț.Ȝ.ʌ. ǹȣIJȩ țĮșȠȡȓȗİIJĮȚ Įʌȩ IJȘȞ IJȚµȒ IJȠȣ įİȪIJİȡȠȣ ȠȡȓıµĮIJȠȢ IJȘȢ fopen(), ȠȚ įȣȞĮIJȑȢ IJȚµȑȢ ĮȣIJȠȪ IJȠȣ ȠȡȓıµĮIJȠȢ ijĮȓȞȠȞIJĮȚ ıIJȠȞ ȆȓȞĮțĮ 11.1. ȉȚµȒ "r" "w" "a" "rb" "wb" "ab" "r+" "w+" "a+" "r+b" "w+b" "a+b"
ȈȘµĮıȓĮ DZȞȠȚȖµĮ ĮȡȤİȓȠȣ țİȚµȑȞȠȣ ȖȚĮ ĮȞȐȖȞȦıȘ. ȉȠ ĮȡȤİȓȠ ʌȡȑʌİȚ ȞĮ ʌȡȠȨʌȐȡȤİȚ. DZȞȠȚȖµĮ ĮȡȤİȓȠȣ țİȚµȑȞȠȣ ȖȚĮ İȖȖȡĮijȒ. ǹȞ IJȠ ĮȡȤİȓȠ ȣʌȐȡȤİȚ IJĮ ʌİȡȚİȤȩµİȞȐ IJȠȣ țĮIJĮıIJȡȑijȠȞIJĮȚ, ĮȞ įİȞ ȣʌȐȡȤİȚ įȘµȚȠȣȡȖİȓIJĮȚ. DZȞȠȚȖµĮ ĮȡȤİȓȠȣ țİȚµȑȞȠȣ ȖȚĮ ʌȡȠıșȒțȘ ıIJȠ IJȑȜȠȢ IJȠȣ. ǹȞ IJȠ ĮȡȤİȓȠ įİȞ ȣʌȐȡȤİȚ, įȘµȚȠȣȡȖİȓIJĮȚ. DZȞȠȚȖµĮ įȣĮįȚțȠȪ ĮȡȤİȓȠȣ ȖȚĮ ĮȞȐȖȞȦıȘ. ȉȠ ĮȡȤİȓȠ ʌȡȑʌİȚ ȞĮ ʌȡȠȨʌȐȡȤİȚ. DZȞȠȚȖµĮ įȣĮįȚțȠȪ ĮȡȤİȓȠȣ ȖȚĮ İȖȖȡĮijȒ. ǹȞ IJȠ ĮȡȤİȓȠ ȣʌȐȡȤİȚ IJĮ ʌİȡȚİȤȩµİȞȐ IJȠȣ țĮIJĮıIJȡȑijȠȞIJĮȚ, ĮȞ įİȞ ȣʌȐȡȤİȚ įȘµȚȠȣȡȖİȓIJĮȚ. DZȞȠȚȖµĮ įȣĮįȚțȠȪ ĮȡȤİȓȠȣ ȖȚĮ ʌȡȠıșȒțȘ ıIJȠ IJȑȜȠȢ IJȠȣ. ǹȞ IJȠ ĮȡȤİȓȠ įİȞ ȣʌȐȡȤİȚ, įȘµȚȠȣȡȖİȓIJĮȚ. DZȞȠȚȖµĮ ĮȡȤİȓȠȣ țİȚµȑȞȠȣ ȖȚĮ ĮȞȐȖȞȦıȘ țĮȚ İȖȖȡĮijȒ. ȉȠ ĮȡȤİȓȠ ʌȡȑʌİȚ ȞĮ ʌȡȠȨʌȐȡȤİȚ. DZȞȠȚȖµĮ ĮȡȤİȓȠȣ țİȚµȑȞȠȣ ȖȚĮ İȖȖȡĮijȒ țĮȚ ĮȞȐȖȞȦıȘ. ǹȞ IJȠ ĮȡȤİȓȠ įİȞ ȣʌȐȡȤİȚ, įȘµȚȠȣȡȖİȓIJĮȚ. DZȞȠȚȖµĮ ĮȡȤİȓȠȣ țİȚµȑȞȠȣ ȖȚĮ ʌȡȠıșȒțȘ ıIJȠ IJȑȜȠȢ IJȠȣ țĮȚ ĮȞȐȖȞȦıȘ. ǹȞ IJȠ ĮȡȤİȓȠ įİȞ ȣʌȐȡȤİȚ, įȘµȚȠȣȡȖİȓIJĮȚ. DZȞȠȚȖµĮ įȣĮįȚțȠȪ ĮȡȤİȓȠȣ ȖȚĮ ĮȞȐȖȞȦıȘ țĮȚ İȖȖȡĮijȒ. ȉȠ ĮȡȤİȓȠ ʌȡȑʌİȚ ȞĮ ʌȡȠȨʌȐȡȤİȚ. DZȞȠȚȖµĮ įȣĮįȚțȠȪ ĮȡȤİȓȠȣ ȖȚĮ İȖȖȡĮijȒ țĮȚ ĮȞȐȖȞȦıȘ. ǹȞ IJȠ ĮȡȤİȓȠ įİȞ ȣʌȐȡȤİȚ, įȘµȚȠȣȡȖİȓIJĮȚ. DZȞȠȚȖµĮ įȣĮįȚțȠȪ ĮȡȤİȓȠȣ ȖȚĮ ʌȡȠıșȒțȘ ıIJȠ IJȑȜȠȢ IJȠȣ țĮȚ ĮȞȐȖȞȦıȘ. ǹȞ IJȠ ĮȡȤİȓȠ įİȞ ȣʌȐȡȤİȚ, įȘµȚȠȣȡȖİȓIJĮȚ. ȆȓȞĮțĮȢ 11.1: ǹʌȠįİțIJȑȢ IJȚµȑȢ IJȠȣ IJȡȩʌȠȣ ĮȞȠȓȖµĮIJȠȢ İȞȩȢ ĮȡȤİȓȠȣ
ǵIJĮȞ IJİȜİȚȫıİȚ Ș µİIJĮijȠȡȐ IJȦȞ įİįȠµȑȞȦȞ Įʌȩ țĮȚ ʌȡȠȢ IJȠ ĮȡȤİȓȠ, IJȩIJİ IJȠ ĮȡȤİȓȠ ʌȡȑʌİȚ ȞĮ țȜİȓıİȚ (close). ȉȠ țȜİȓıȚµȠ ȑȤİȚ IJȘȞ ȑȞȞȠȚĮ IJȠȣ ȞĮ ȠȡȚıIJȚțȠʌȠȚȒıİȚ (ıȫıİȚ) IJȚȢ ĮȜȜĮȖȑȢ ʌȠȣ ȑȖȚȞĮȞ ıIJȠ ĮȡȤİȓȠ țĮȚ ȞĮ ĮʌȠįİıµİȪıİȚ IJȠ ĮȡȤİȓȠ Įʌȩ IJȠ ʌȡȩȖȡĮµµĮ. Ǿ ıȣȞȐȡIJȘıȘ Ș ȠʌȠȓĮ țȜİȓȞİȚ ȑȞĮ ĮȡȤİȓȠ İȓȞĮȚ Ș IJȠ ʌȡȩIJȣʌȠ IJȘȢ ȠʌȠȓĮȢ ȣʌȐȡȤİȚ ıIJȠ ĮȡȤİȓȠ-İʌȚțİijĮȜȓįĮȢ fclose(), stdio.h țĮȚ İȓȞĮȚ:
ǹȡȤİȓĮ
149
int fclose(FILE *fptr); ȩʌȠȣ fptr İȓȞĮȚ Ƞ įİȓțIJȘȢ-ĮȡȤİȓȠȣ ʌȠȣ İʌȚıIJȡȑijİIJĮȚ Įʌȩ IJȘȞ țȜȒıȘ IJȘȢ fopen(). ȉȠ µȘįȑȞ ȦȢ İʌȚıIJȡİijȩµİȞȘ IJȚµȒ ıȘµĮȓȞİȚ İʌȚIJȣȤȑȢ țȜİȓıȚµȠ, ȠʌȠȚĮįȒʌȠIJİ ȐȜȜȘ IJȚµȒ įȘȜȫȞİȚ IJȘȞ ȪʌĮȡȟȘ țȐʌȠȚȠȣ ȜȐșȠȣȢ (ʌ.Ȥ. įİȞ ȣʌȐȡȤİȚ ĮȡțİIJȩȢ ȤȫȡȠȢ ıIJȠ įȓıțȠ).
11.2 ȆȇȅȈȆǼȁǹȈǾ ǹȇȋǼǿȅȊ 11.2.1 ǼǿȈȅǻȅȈ Ȁǹǿ ǼȄȅǻȅȈ ȋǹȇǹȀȉǾȇȍȃ Ǿ ıȣȞȐȡIJȘıȘ putc() ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ȖȚĮ IJȠ ȖȡȐȥȚµȠ İȞȩȢ ȤĮȡĮțIJȒȡĮ ı'ȑȞĮ ĮȡȤİȓȠ IJȠ ȠʌȠȓȠ ȑȤİȚ ʌȡȠȘȖȠȣµȑȞȦȢ ĮȞȠȚȤIJİȓ ȖȚĮ İȖȖȡĮijȒ µȑıȦ IJȘȢ ıȣȞȐȡIJȘıȘȢ fopen(). ȉȠ ʌȡȩIJȣʌȠ IJȘȢ putc(), IJȠ ȠʌȠȓȠ ȣʌȐȡȤİȚ ıIJȠ ĮȡȤİȓȠİʌȚțİijĮȜȓįĮȢ stdio.h , İȓȞĮȚ:
int putc(int ch, FILE *fptr); ȩʌȠȣ fptr İȓȞĮȚ Ƞ įİȓțIJȘȢ-ĮȡȤİȓȠȣ ʌȠȣ İʌȚıIJȡȑijİIJĮȚ Įʌȩ IJȘȞ fopen(), țĮȚ ch İȓȞĮȚ Ƞ ʌȡȠȢ ȑȟȠįȠ ȤĮȡĮțIJȒȡĮȢ. ȅ įİȓțIJȘȢ-ĮȡȤİȓȠȣ țĮșȠȡȓȗİȚ ıİ ʌȠȚȠ ĮȡȤİȓȠ įȓıțȠȣ șĮ ȖȓȞİȚ Ș İȖȖȡĮijȒ. ǹȞ Ș putc() İȓȞĮȚ İʌȚIJȣȤȒȢ șĮ İʌȚıIJȡȑȥİȚ IJȠ ȤĮȡĮțIJȒȡĮ ʌȠȣ ȖȡȐijIJȘțİ. ǹȞ ĮʌȠIJȪȤİȚ șĮ İʌȚıIJȡȑȥİȚ IJȘȞ IJȚµȒ EOF (țĮșȠȡȓȗİIJĮȚ ıIJȠ stdio.h µİ IJȚµȒ -1 țĮȚ ĮȞIJȚʌȡȠıȦʌİȪİȚ IJȠ IJȑȜȠȢ ĮȡȤİȓȠȣ - End Of File). ȉȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ įȘµȚȠȣȡȖİȓ ȑȞĮ ĮȡȤİȓȠ µİ ȩȞȠµĮ CHARTEXT.TXT țĮȚ ȖȡȐijİȚ ı'ĮȣIJȩ ȤĮȡĮțIJȒȡİȢ ʌȠȣ įȓȞȠȞIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ, ȑȦȢ ȩIJȠȣ įȫıȠȣµİ ENTER: /* writec.c */ /* ǼȖȖȡĮijȒ ȤĮȡĮțIJȒȡȦȞ ıİ ĮȡȤİȓȠ */ #include <stdio.h> main() { FILE *fptr; int ch;
}
if((fptr=fopen("chartext.txt","w"))==NULL) { puts("ǻİ µʌȠȡȫ ȞĮ ĮȞȠȓȟȦ IJȠ ĮȡȤİȓȠ CHARTEXT.TXT"); exit(0); } while((ch=getche())!='\r') putc(ch,fptr); fclose(fptr);
ȀȐșİ byte µȑıĮ ıİ ȑȞĮ ĮȡȤİȓȠ ĮȞIJȚıIJȠȚȤİȓ ıİ µȓĮ șȑıȘ Ș ȠʌȠȓĮ įİȓȤȞİIJĮȚ Įʌȩ ȑȞĮ įİȓțIJȘ ʌȠȣ ȜȑȖİIJĮȚ įİȓțIJȘȢ-șȑıȘȢ IJȠȣ ĮȡȤİȓȠȣ. ȅ įİȓțIJȘȢ-șȑıȘȢ įİȓȤȞİȚ ıIJȠ byte IJȠȣ ĮȡȤİȓȠȣ ȩʌȠȣ șĮ ȖȓȞİȚ Ș İʌȩµİȞȘ ʌȡȠıʌȑȜĮıȘ. ȀȐșİ ijȠȡȐ ʌȠȣ ȖȡȐijȠȣµİ (Ȓ įȚĮȕȐȗȠȣµİ) ȑȞĮ ĮȞIJȚțİȓµİȞȠ ıİ (Ȓ Įʌȩ) ȑȞĮ ĮȡȤİȓȠ, Ƞ įİȓțIJȘȢ-șȑıȘȢ įİȓȤȞİȚ µİIJȐ
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
150
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
IJȠ IJȑȜȠȢ ĮȣIJȠȪ IJȠȣ ĮȞIJȚțİȚµȑȞȠȣ, ȑIJıȚ ȫıIJİ Ș İʌȩµİȞȘ İȖȖȡĮijȒ Ȓ ĮȞȐȖȞȦıȘ ȞĮ ıȣȞİȤȚıIJİȓ Įʌȩ İțİȓȞȠ IJȠ ıȘµİȓȠ țĮȚ µİIJȐ. ǵIJĮȞ ĮȞȠȓȖȠȣµİ ȑȞĮ ĮȡȤİȓȠ ȖȚĮ İȖȖȡĮijȒ Ȓ ĮȞȐȖȞȦıȘ, Ƞ įİȓțIJȘȢ-șȑıȘȢ IJȓșİIJĮȚ ıIJȘȞ ĮȡȤȒ IJȠȣ ĮȡȤİȓȠȣ. ǵIJĮȞ ĮȞȠȓȖȠȣµİ ȑȞĮ ĮȡȤİȓȠ ȖȚĮ ʌȡȠıșȒțȘ (append) IJȩIJİ Ƞ įİȓțIJȘȢ-șȑıȘȢ IJȓșİIJĮȚ ıIJȠ IJȑȜȠȢ IJȠȣ ĮȡȤİȓȠȣ. īȚĮ ȞĮ įȚĮȕȐıȠȣµİ ȤĮȡĮțIJȒȡİȢ Įʌȩ ȑȞĮ ĮȡȤİȓȠ ʌȠȣ ʌȡȠȘȖȠȣµȑȞȦȢ IJȠ ȑȤȠȣµİ ĮȞȠȓȟİȚ ȖȚĮ įȚȐȕĮıµĮ µȑıȦ IJȘȢ fopen(), ȤȡȘıȚµȠʌȠȚȠȪµİ IJȘ ıȣȞȐȡIJȘıȘ getc(), IJȘȢ ȠʌȠȓĮȢ IJȠ ʌȡȩIJȣʌȠ, IJȠ ȠʌȠȓȠ ȣʌȐȡȤİȚ ıIJȠ ĮȡȤİȓȠ-İʌȚțİijĮȜȓįĮȢ stdio.h , İȓȞĮȚ:
int getc(FILE *fptr); ȩʌȠȣ fptr İȓȞĮȚ Ƞ įİȓțIJȘȢ-ĮȡȤİȓȠȣ ʌȠȣ İʌȚıIJȡȑijİIJĮȚ Įʌȩ IJȘȞ fopen(). Ǿ getc() İʌȚıIJȡȑijİȚ IJȠȞ İʌȩµİȞȠ ȤĮȡĮțIJȒȡĮ Įʌȩ IJȠ ĮȡȤİȓȠ Ȓ EOF ȩIJĮȞ ijIJȐıİȚ ıIJȠ IJȑȜȠȢ IJȠȣ, Ȓ ıȣµȕİȓ țȐʌȠȚȠ ȜȐșȠȢ țĮIJȐ IJȘȞ ĮȞȐȖȞȦıȘ. ȉȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ įȚĮȕȐȗİȚ Įʌȩ ȑȞĮ ĮȡȤİȓȠ, ȩȜȠȣȢ IJȠȣȢ ȤĮȡĮțIJȒȡİȢ țĮȚ IJȠȣȢ ݵijĮȞȓȗİȚ ıIJȘȞ ȠșȩȞȘ: /* readc.c */ /* ǹȞȐȖȞȦıȘ ȤĮȡĮțIJȒȡȦȞ Įʌȩ ĮȡȤİȓȠ */ #include <stdio.h> main(int argc, char *argv[]) { FILE *fptr; int ch;
}
if(argc!=2) { puts("ǻȫıİ: readc ȩȞȠµĮ_ĮȡȤİȓȠȣ"); exit(0); } if((fptr=fopen(argv[1],"r"))==NULL) { printf("ǻİ µʌȠȡȫ ȞĮ ĮȞȠȓȟȦ IJȠ ĮȡȤİȓȠ %s",argv[1]); exit(0); } while((ch=getc(fptr))!=EOF) printf("%c",ch); fclose(fptr);
ȈIJȠ ʌĮȡĮʌȐȞȦ ʌȡȩȖȡĮµµĮ IJȠ ȩȞȠµĮ IJȠȣ ĮȡȤİȓȠȣ IJȠȣ ȠʌȠȓȠȣ IJĮ ʌİȡȚİȤȩµİȞĮ șȑȜȠȣµİ ȞĮ įȠȪµİ, įȓȞİIJĮȚ ȦȢ ȩȡȚıµĮ ıIJȘ ȖȡĮµµȒ įȚĮIJĮȖȫȞ (§ 10.8). DzIJıȚ ĮȞ ʌ.Ȥ. șȑȜȠȣµİ ȞĮ įȠȪµİ IJĮ ʌİȡȚİȤȩµİȞĮ IJȠȣ ĮȡȤİȓȠȣ CHARTEXT.TXT ʌȠȣ įȘµȚȠȣȡȖȒıĮµİ µİ IJȠ ʌȡȩȖȡĮµµĮ writec.c, ʌȡȑʌİȚ ĮijȠȪ µİIJĮȖȜȦIJIJȓıȠȣµİ țĮȚ įȚĮıȣȞįȑıȠȣµİ IJȠ readc.c, Įʌȩ IJȠ ʌİȡȚȕȐȜȜȠȞ IJȠȣ ȁİȚIJȠȣȡȖȚțȠȪ ȈȣıIJȒµĮIJȠȢ ȞĮ įȫıȠȣµİ:
readc chartext.txt DzIJıȚ İȓȞĮȚ ʌȡȠijĮȞȑȢ ȩIJȚ IJȠ ʌȡȩȖȡĮµµĮ readc.c ʌȡȠıȠµȠȚȐȗİȚ IJȘȞ İȞIJȠȜȒ TYPE IJȠȣ DOS. ǵIJĮȞ ĮȞȠȓȖȠȣµİ ȑȞĮ ĮȡȤİȓȠ ȖȚĮ įȣĮįȚțȒ İȓıȠįȠ, İȓȞĮȚ ʌȚșĮȞȩȞ Ș getc() ȞĮ įȚĮȕȐıİȚ µȚĮȞ ĮțȑȡĮȚĮ IJȚµȒ ȓıȘ µİ IJȠ EOF (įȘȜĮįȒ -1). ǹȞ ıȣµȕİȓ țȐIJȚ IJȑIJȠȚȠ Ș
ǹȡȤİȓĮ
151
getc() șĮ ıIJĮµĮIJȒıİȚ IJȠ įȚȐȕĮıµĮ ȞȠµȓȗȠȞIJĮȢ ȩIJȚ ȑȤİȚ ijIJȐıİȚ ıIJȠ IJȑȜȠȢ IJȠȣ ĮȡȤİȓȠȣ. īȚĮ ȞĮ ȜȪıİȚ ĮȣIJȩ IJȠ ʌȡȩȕȜȘµĮ Ș C ʌĮȡȑȤİȚ IJȘ ıȣȞȐȡIJȘıȘ feof(), Ș ȠʌȠȓĮ țĮșȠȡȓȗİȚ ʌȠȪ ȕȡȓıțİIJĮȚ IJȠ ıȘµȐįȚ IJȑȜȠȣȢ ĮȡȤİȓȠȣ ȩIJĮȞ įȚĮȕȐȗȠȞIJĮȚ įȣĮįȚțȐ įİįȠµȑȞĮ. Ǿ ıȣȞȐȡIJȘıȘ feof() įȑȤİIJĮȚ ȦȢ ȩȡȚıµĮ ȑȞĮ įİȓțIJȘ-ĮȡȤİȓȠȣ țĮȚ İʌȚıIJȡȑijİȚ 1 ĮȞ ȑȤȠȣµİ ijIJȐıİȚ ıIJȠ IJȑȜȠȢ IJȠȣ ĮȡȤİȓȠȣ țĮȚ 0 ĮȞ įİȞ ȑȤȠȣµİ ijIJȐıİȚ. DzIJıȚ Ș ʌĮȡĮțȐIJȦ İȞIJȠȜȒ įȚĮȕȐȗİȚ ȑȞĮ įȣĮįȚțȩ ĮȡȤİȓȠ µȑȤȡȚ IJȠ IJȑȜȠȢ IJȠȣ: while(!feof(fptr)) ch=getc(fptr); Ǿ feof() µʌȠȡİȓ İʌȓıȘȢ ȞĮ ȤȡȘıȚµȠʌȠȚȘșİȓ țĮȚ ıİ ĮȡȤİȓĮ țİȚµȑȞȠȣ. 11.2.2 ǼǿȈȅǻȅȈ Ȁǹǿ ǼȄȅǻȅȈ ǹȁĭǹȇǿĬȂǾȉǿȀȍȃ Ǿ İȖȖȡĮijȒ țĮȚ ĮȞȐȖȞȦıȘ ĮȜijĮȡȚșµȘIJȚțȫȞ ıİ ĮȡȤİȓĮ İʌȚIJȣȖȤȐȞİIJĮȚ µİ ȤȡȒıȘ IJȦȞ ıȣȞĮȡIJȒıİȦȞ fputs() țĮȚ fgets() ĮȞIJȓıIJȠȚȤĮ. ȉĮ ʌȡȩIJȣʌȐ IJȠȣȢ, ʌȠȣ ȣʌȐȡȤȠȣȞ ıIJȠ ĮȡȤİȓȠ-İʌȚțİijĮȜȓįĮȢ stdio.h, İȓȞĮȚ:
int
fputs(char *str, FILE *fptr);
char *fgets(char *str, int n, FILE *fptr); Ǿ ıȣȞȐȡIJȘıȘ fputs() įȠȣȜİȪİȚ ĮțȡȚȕȫȢ ȩʌȦȢ țĮȚ Ș ȖȞȦıIJȒ ıȣȞȐȡIJȘıȘ puts() (ȕȜȑʌİ § 5.2), µİ IJȘ įȚĮijȠȡȐ ȩIJȚ Ș fputs() ȖȡȐijİȚ IJȠ ĮȜijĮȡȚșµȘIJȚțȩ ıIJȠ ĮȡȤİȓȠ ʌȠȣ țĮșȠȡȓȗİIJĮȚ Įʌȩ IJȠ fptr. Ǿ ıȣȞȐȡIJȘıȘ fputs(), ȩIJĮȞ İȓȞĮȚ İʌȚIJȣȤȒȢ İʌȚıIJȡȑijİȚ IJȠȞ IJİȜİȣIJĮȓȠ ȤĮȡĮțIJȒȡĮ IJȠȣ ĮȜijĮȡȚșµȘIJȚțȠȪ ʌȠȣ ȖȡȐijIJȘțİ, İȞȫ ȩIJĮȞ ĮʌȠIJȣȖȤȐȞİȚ İʌȚıIJȡȑijİȚ EOF. Ǿ ıȣȞȐȡIJȘıȘ fgets() įȚĮȕȐȗİȚ IJȠ İʌȩµİȞȠ ĮȜijĮȡȚșµȘIJȚțȩ Įʌȩ IJȠ țĮșȠȡȚȗȩµİȞȠ ĮȡȤİȓȠ µȑȤȡȚ ȞĮ įȚĮȕȐıİȚ İȓIJİ ȑȞĮ ȤĮȡĮțIJȒȡĮ ȞȑĮȢ ȖȡĮµµȒȢ İȓIJİ n1 ȤĮȡĮțIJȒȡİȢ țĮȚ IJȠ IJȠʌȠșİIJİȓ ıIJȠȞ ʌȓȞĮțĮ ȤĮȡĮțIJȒȡȦȞ ʌȠȣ įİȓȤȞİIJĮȚ Įʌȩ IJȠ str. ǹijȠȪ įȚĮȕĮıIJȠȪȞ ȠȚ ȤĮȡĮțIJȒȡİȢ, IJȠʌȠșİIJİȓIJĮȚ ıIJȠȞ ʌȓȞĮțĮ ȑȞĮȢ ȤĮȡĮțIJȒȡĮȢ IJİȡµĮIJȚıµȠȪ '\0'. ǵIJĮȞ Ș fgets() İȓȞĮȚ İʌȚIJȣȤȒȢ İʌȚıIJȡȑijİȚ IJȘȞ IJȚµȒ IJȠȣ ĮȜijĮȡȚșµȘIJȚțȠȪ ʌȠȣ įȚĮȕȐıIJȘțİ, İȞȫ ȩIJĮȞ ĮʌȠIJȣȖȤȐȞİȚ İʌȚıIJȡȑijİȚ IJȚµȒ NULL. ȉĮ ʌĮȡĮțȐIJȦ įȪȠ ʌȡȠȖȡȐµµĮIJĮ writes.c țĮȚ reads.c ȖȡȐijȠȣȞ țĮȚ įȚĮȕȐȗȠȣȞ ĮȜijĮȡȚșµȘIJȚțȐ ıİ ĮȡȤİȓȠ, ĮȞIJȓıIJȠȚȤĮ: /* writes.c */ /* ǼȖȖȡĮijȒ ĮȜijĮȡȚșµȘIJȚțȫȞ ıİ ĮȡȤİȓȠ */ #include <stdio.h> main(int argc, char *argv[]) { FILE *fptr; char string[81]; if(argc!=2) { puts("ǻȫıİ: writes ȩȞȠµĮ_ĮȡȤİȓȠȣ"); exit(0); } if((fptr=fopen(argv[1],"w"))==NULL) { printf("ǻİ µʌȠȡȫ ȞĮ ĮȞȠȓȟȦ IJȠ ĮȡȤİȓȠ %s",argv[1]); exit(0);
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
152
}
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
} while(strlen(gets(string))>0) { fputs(string,fptr); fputs("\n",fptr); } fclose(fptr);
/* reads.c */ /* ǹȞȐȖȞȦıȘ ĮȜijĮȡȚșµȘIJȚțȫȞ Įʌȩ ĮȡȤİȓȠ */ #include <stdio.h> main(int argc, char *argv[]) { FILE *fptr; char string[81];
}
if(argc!=2) { puts("ǻȫıİ: reads ȩȞȠµĮ_ĮȡȤİȓȠȣ"); exit(0); } if((fptr=fopen(argv[1],"r"))==NULL) { printf("ǻİ µʌȠȡȫ ȞĮ ĮȞȠȓȟȦ IJȠ ĮȡȤİȓȠ %s",argv[1]); exit(0); } while(fgets(string,81,fptr)!=NULL) printf("%s",string); fclose(fptr);
11.2.3 ȂȅȇĭȅȆȅǿǾȂǼȃǾ ǼǿȈȅǻȅȈ Ȁǹǿ ǼȄȅǻȅȈ ȅȚ ĮȞIJȓıIJȠȚȤİȢ ıȣȞĮȡIJȒıİȚȢ IJȦȞ printf() țĮȚ scanf() ʌȠȣ ȤȡȘıȚµȠʌȠȚȠȪȞIJĮȚ ȖȚĮ µȠȡijȠʌȠȚȘµȑȞȘ İȓıȠįȠ țĮȚ ȑȟȠįȠ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ țĮȚ ıIJȘȞ ȠșȩȞȘ ĮȞIJȓıIJȠȚȤĮ (ȕȜȑʌİ § 5.3), İȓȞĮȚ ȠȚ fprintf() țĮȚ fscanf() ȖȚĮ İȓıȠįȠ țĮȚ ȑȟȠįȠ Įʌȩ ĮȡȤİȓȠ. ȉĮ ʌȡȩIJȣʌĮ ĮȣIJȫȞ IJȦȞ ıȣȞĮȡIJȒıİȦȞ ȣʌȐȡȤȠȣȞ ıIJȠ ĮȡȤİȓȠİʌȚțİijĮȜȓįĮȢ stdio.h. ȅȚ fprintf() țĮȚ fscanf() ȜİȚIJȠȣȡȖȠȪȞ ĮțȡȚȕȫȢ ȩµȠȚĮ ȩʌȦȢ ȠȚ printf() țĮȚ scanf(), µȩȞȠ ʌȠȣ įȑȤȠȞIJĮȚ ȑȞĮ İʌȚʌȜȑȠȞ ȩȡȚıµĮ ʌȠȣ İȓȞĮȚ Ƞ įİȓțIJȘȢ-ĮȡȤİȓȠȣ ıIJȠ ȠʌȠȓȠ șĮ ȖȡȐȥȠȣµİ Ȓ Įʌȩ IJȠ ȠʌȠȓȠ șĮ įȚĮȕȐıȠȣµİ:
fprintf(fptr, ĮȜijĮȡȚșµȘIJȚțȩ_İȜȑȖȤȠȣ, ȜȓıIJĮ_ȠȡȚıµȐIJȦȞ); fscanf(fptr, ĮȜijĮȡȚșµȘIJȚțȩ_İȜȑȖȤȠȣ, ȜȓıIJĮ_ȠȡȚıµȐIJȦȞ); Ǿ fprintf() İʌȚıIJȡȑijİȚ IJȠȞ ĮȡȚșµȩ IJȦȞ ȤĮȡĮțIJȒȡȦȞ ʌȠȣ ȖȡȐijIJȘțĮȞ, Ȓ ȑȞĮȞ ĮȡȞȘIJȚțȩ ĮȡȚșµȩ ıİ ʌİȡȓʌIJȦıȘ ıijȐȜµĮIJȠȢ. Ǿ fscanf() İʌȚıIJȡȑijİȚ IJȠȞ ĮȡȚșµȩ IJȦȞ ĮȞIJȚțİȚµȑȞȦȞ ʌȠȣ įȚĮȕȐıIJȘțĮȞ, Ȓ EOF ȩIJĮȞ ıȣȞĮȞIJȒıİȚ IJȠ IJȑȜȠȢ ĮȡȤİȓȠȣ Ȓ ıȣµȕİȓ țȐʌȠȚȠ ıijȐȜµĮ. ȉȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ įȑȤİIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ ȠȞȠµĮIJİʌȫȞȣµȠ țĮȚ µȚıșȩ țĮȚ IJĮ țĮIJĮȤȦȡİȓ ıIJȠ ĮȡȤİȓȠ IJȠ ȩȞȠµĮ IJȠȣ ȠʌȠȓȠȣ įȓȞȠȣµİ ıIJȘ ȖȡĮµµȒ
ǹȡȤİȓĮ
153
įȚĮIJĮȖȫȞ. Ǿ İȚıĮȖȦȖȒ ıIJȠȚȤİȓȦȞ ıIJĮµĮIJȐİȚ ĮȞ įȫıȠȣµİ ȦȢ ȩȞȠµĮ ȑȞĮ țİȞȩ ĮȜijĮȡȚșµȘIJȚțȩ (ĮʌȜȫȢ ENTER): /* writef.c */ /* ǼȖȖȡĮijȒ µȠȡijȠʌȠȚȘµȑȞȦȞ įİįȠµȑȞȦȞ ıİ ĮȡȤİȓȠ */ #include <stdio.h> #include <stdlib.h> /* ȖȚĮ ȤȡȒıȘ IJȘȢ ıȣȞȐȡIJȘıȘȢ atof() */ main(int argc, char *argv[]) { FILE *fptr; char name[40],numstr[10]; float salary;
}
if(argc!=2) { puts("ǻȫıİ: writef ȩȞȠµĮ_ĮȡȤİȓȠȣ"); exit(0); } if((fptr=fopen(argv[1],"w"))==NULL) { printf("ǻİ µʌȠȡȫ ȞĮ ĮȞȠȓȟȦ IJȠ ĮȡȤİȓȠ %s",argv[1]); exit(0); } do { printf("\nȅȞȠµĮ : "); gets(name); printf("ȂȚıșȩȢ: "); gets(numstr); salary=atof(numstr); if(strlen(name)>0) fprintf(fptr,"%s %f",name,salary); } while(strlen(name)>0); fclose(fptr);
ȉȠ İʌȩµİȞȠ ʌȡȩȖȡĮµµĮ įȚĮȕȐȗİȚ µȠȡijȠʌȠȚȘµȑȞĮ įİįȠµȑȞĮ Įʌȩ ĮȡȤİȓȠ, ʌȠȣ įȘµȚȠȣȡȖȒșȘțİ Įʌȩ IJȠ ʌĮȡĮʌȐȞȦ ʌȡȩȖȡĮµµĮ țĮȚ IJĮ ݵijĮȞȓȗİȚ ıIJȘȞ ȠșȩȞȘ: /* readf.c */ /* ǹȞȐȖȞȦıȘ µȠȡijȠʌȠȚȘµȑȞȦȞ įİįȠµȑȞȦȞ Įʌȩ ĮȡȤİȓȠ */ #include <stdio.h> main(int argc, char *argv[]) { FILE *fptr; char name[40]; float salary; if(argc!=2) { puts("ǻȫıİ: readf ȩȞȠµĮ_ĮȡȤİȓȠȣ"); exit(0); } if((fptr=fopen(argv[1],"r"))==NULL) {
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
154
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
printf("ǻİ µʌȠȡȫ ȞĮ ĮȞȠȓȟȦ IJȠ ĮȡȤİȓȠ %s",argv[1]); exit(0);
}
} while(fscanf(fptr,"%s %f",&name,&salary)!=EOF) printf("%s %f\n",name,salary); fclose(fptr);
11.2.4 ǼǿȈȅǻȅȈ Ȁǹǿ ǼȄȅǻȅȈ ǻȅȂȍȃ ǻǼǻȅȂǼȃȍȃ ȊʌȐȡȤȠȣȞ įȪȠ ıȣȞĮȡIJȒıİȚȢ ȠȚ ȠʌȠȓİȢ µĮȢ İʌȚIJȡȑʌȠȣȞ ȞĮ ȖȡȐijȠȣµİ țĮȚ ȞĮ įȚĮȕȐȗȠȣµİ (ıİ țĮȚ Įʌȩ ȑȞĮ ĮȡȤİȓȠ) țĮIJİȣșİȓĮȞ ȠȜȩțȜȘȡİȢ įȠµȑȢ įİįȠµȑȞȦȞ (ʌ.Ȥ. İȖȖȡĮijȑȢ (įȠµȑȢ), ʌȓȞĮțİȢ ț.Ȝ.ʌ.). ȅȚ ıȣȞĮȡIJȒıİȚȢ ĮȣIJȑȢ İȓȞĮȚ ȠȚ fwrite() țĮȚ fread(), IJȦȞ ȠʌȠȓȦȞ IJĮ ʌȡȩIJȣʌĮ ȕȡȓıțȠȞIJĮȚ ıIJȠ stdio.h:
int fwrite(void *buffer, int size, int n, FILE *fptr); int fread(void *buffer, int size, int n, FILE *fptr); ȈIJȘȞ ʌİȡȓʌIJȦıȘ IJȘȢ fread(), Ƞ buffer İȓȞĮȚ ȑȞĮȢ įİȓțIJȘȢ (pointer) ıİ µȓĮ ʌİȡȚȠȤȒ IJȘȢ µȞȒµȘȢ Ș ȠʌȠȓĮ șĮ įİȤIJİȓ IJĮ įİįȠµȑȞĮ ʌȠȣ įȚĮȕȐȗȠȞIJĮȚ Įʌȩ IJȠ ĮȡȤİȓȠ. ȈIJȘȞ fwrite(), Ƞ buffer İȓȞĮȚ ȑȞĮȢ įİȓțIJȘȢ (pointer) ıIJȚȢ ʌȜȘȡȠijȠȡȓİȢ ʌȠȣ șĮ ȖȡĮijIJȠȪȞ ıIJȠ ĮȡȤİȓȠ. ȀĮȚ ıIJȚȢ įȪȠ ıȣȞĮȡIJȒıİȚȢ IJȠ size țĮșȠȡȓȗİȚ IJȠȞ ĮȡȚșµȩ IJȦȞ bytes ʌȠȣ șĮ įȚĮȕĮıIJȠȪȞ Ȓ șĮ ȖȡĮijIJȠȪȞ. ȉȠ ȩȡȚıµĮ n țĮșȠȡȓȗİȚ IJȠ ʌȜȒșȠȢ IJȦȞ ıIJȠȚȤİȓȦȞ (IJȠ țĮșȑȞĮ µİȖȑșȠȣȢ size) ʌȠȣ șĮ įȚĮȕĮıIJȠȪȞ Ȓ șĮ ȖȡĮijIJȠȪȞ. ȉȑȜȠȢ IJȠ fptr İȓȞĮȚ ȑȞĮȢ įİȓțIJȘȢ-ĮȡȤİȓȠȣ ʌȠȣ ȒįȘ ȑȤİȚ ĮȞȠȚȤIJİȓ. ȅȚ ıȣȞĮȡIJȒıİȚȢ İʌȚıIJȡȑijȠȣȞ IJȠȞ ĮȡȚșµȩ IJȦȞ ıIJȠȚȤİȓȦȞ ʌȠȣ ʌȡĮȖµĮIJȚțȐ ȖȡȐijIJȘțĮȞ Ȓ įȚĮȕȐıIJȘțĮȞ. DzIJıȚ ʌ.Ȥ. IJȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ įȘµȚȠȣȡȖİȓ ıIJȠ įȓıțȠ ȑȞĮ ĮȡȤİȓȠ ıIJȠ ȠʌȠȓȠ țĮIJĮȤȦȡȠȪȞIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ ȠȞȠµĮIJİʌȫȞȣµȠ țĮȚ µȚıșȩȢ țȐʌȠȚȦȞ ȣʌĮȜȜȒȜȦȞ: /* writer.c */ /* īȡȐȥȚµȠ İȖȖȡĮijȫȞ ıİ ĮȡȤİȓȠ */ #include <stdio.h> #include <stdlib.h> main(int argc, char *argv[]) { struct record { char name[40]; float salary; } empl; char numstr[10]; FILE *fptr; char select; if(argc!=2) { puts("ǻȫıİ: writer ȩȞȠµĮ_ĮȡȤİȓȠȣ"); exit(0); } if((fptr=fopen(argv[1],"wb"))==NULL)
ǹȡȤİȓĮ
{ } do {
}
155
printf("ǻİ µʌȠȡȫ ȞĮ ĮȞȠȓȟȦ IJȠ ĮȡȤİȓȠ %s",argv[1]); exit(0);
printf("\nǻȫıİ ȩȞȠµĮ: "); gets(empl.name); printf("ǻȫıİ µȚıșȩ: "); gets(numstr); empl.salary=atof(numstr); fwrite(&empl,sizeof(empl),1,fptr); printf("ĬĮ įȫıİȚȢ ȐȜȜȠȞ ȣʌȐȜȜȘȜȠ (ȃ/ȅ)"); select=getche();
} while(select=='ȃ'||select=='Ȟ'||select=='N'||select=='n'); fclose(fptr);
ȉȠ İʌȩµİȞȠ ʌȡȩȖȡĮµµĮ įȚĮȕȐȗİȚ IJĮ įİįȠµȑȞĮ Įʌȩ țȐʌȠȚȠ ĮȡȤİȓȠ İȖȖȡĮijȫȞ ʌȠȣ įȘµȚȠȣȡȖȒșȘțİ µİ IJȠ ʌȡȠȘȖȠȪµİȞȠ ʌȡȩȖȡĮµµĮ țĮȚ IJĮ ݵijĮȞȓȗİȚ ıIJȘȞ ȠșȩȞȘ: /* readr.c */ /* ǹȞȐȖȞȦıȘ İȖȖȡĮijȫȞ Įʌȩ ĮȡȤİȓȠ */ #include <stdio.h> main(int argc, char *argv[]) { struct record { char name[40]; float salary; }; struct record empl; char numstr[10]; FILE *fptr;
}
if(argc!=2) { puts("ǻȫıİ: readr ȩȞȠµĮ_ĮȡȤİȓȠȣ"); exit(0); } if((fptr=fopen(argv[1],"rb"))==NULL) { printf("ǻİ µʌȠȡȫ ȞĮ ĮȞȠȓȟȦ IJȠ ĮȡȤİȓȠ %s",argv[1]); exit(0); } while(fread(&empl,sizeof(empl),1,fptr)==1) printf("\nȅȞȠµĮ: %s ȂȚıșȩȢ: %f",empl.name,empl.salary); fclose(fptr);
ȉȑȜȠȢ ĮȢ įȠȪµİ ȑȞĮ ʌĮȡȐįİȚȖµĮ ıIJȠ ȠʌȠȓȠ ȑȞĮȢ ȠȜȩțȜȘȡȠȢ ʌȓȞĮțĮȢ ȖȡȐijİIJĮȚ ı'ȑȞĮ ĮȡȤİȓȠ:
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
156
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
/* warray.c */ /* ǼȖȖȡĮijȒ ʌȓȞĮțĮ ıİ ĮȡȤİȓȠ */ #include <stdio.h> #include <stdlib.h> main(int argc, char *argv[]) { static table[]={1,2,3,4,5,6,7,8,9,10}; FILE *fptr;
}
if(argc!=2) { puts("ǻȫıİ: warray ȩȞȠµĮ_ĮȡȤİȓȠȣ"); exit(0); } if((fptr=fopen(argv[1],"wb"))==NULL) { printf("ǻİ µʌȠȡȫ ȞĮ ĮȞȠȓȟȦ IJȠ ĮȡȤİȓȠ %s",argv[1]); exit(0); } fwrite(table,sizeof(table),1,fptr); fclose(fptr);
11.3 ǹȁȁǼȈ ȈȊȃǹȇȉǾȈǼǿȈ ȋǼǿȇǿȈȂȅȊ ǹȇȋǼǿȍȃ ȂİȡȚțȑȢ ĮțȩµȘ ıȣȞĮȡIJȒıİȚȢ ʌȠȣ ȤȡȘıȚµȠʌȠȚȠȪȞIJĮȚ µİ IJĮ ĮȡȤİȓĮ, ʌİȡȚȖȡȐijȠȞIJĮȚ ʌĮȡĮțȐIJȦ. ȉĮ ʌȡȩIJȣʌȐ IJȠȣȢ ȕȡȓıțȠȞIJĮȚ ıIJȠ ĮȡȤİȓȠ-İʌȚțİijĮȜȓįĮȢ stdio.h.
fseek() ȂȑȤȡȚ IJȫȡĮ ȩȜİȢ µĮȢ ȠȚ ĮȞĮȖȞȫıİȚȢ țĮȚ İȖȖȡĮijȑȢ ıİ ĮȡȤİȓȠ, ȖȓȞȠȞIJĮȞ ıİȚȡȚĮțȐ. ǻȘȜĮįȒ ȩIJĮȞ ȖȡȐijĮµİ ıİ ȑȞĮ ĮȡȤİȓȠ, ʌĮȓȡȞĮµİ µȓĮ ȠµȐįĮ Įʌȩ ıIJȠȚȤİȓĮ ȤĮȡĮțIJȒȡİȢ, ĮȜijĮȡȚșµȘIJȚțȐ, įȠµȑȢ ț.Ȝ.ʌ.- țĮȚ IJĮ IJȠʌȠșİIJȠȪıĮµİ ĮȞȐ ȑȞĮ țȐșİ ijȠȡȐ ıİ įȚĮįȠȤȚțȑȢ șȑıİȚȢ İȞIJȩȢ IJȠȣ ĮȡȤİȓȠȣ. ǹȞIJȓıIJȠȚȤĮ ȩIJĮȞ įȚĮȕȐȗĮµİ, ĮȡȤȓȗĮµİ Įʌȩ IJȘȞ ĮȡȤȒ IJȠȣ ĮȡȤİȓȠȣ țĮȚ ıȣȞİȤȓȗĮµİ µȑȤȡȚ ȞĮ ijIJȐıȠȣµİ ıIJȠ IJȑȜȠȢ IJȠȣ. ǼȓȞĮȚ įȣȞĮIJȩȞ İʌȓıȘȢ ȞĮ ʌȡȠıʌİȜȐıȠȣµİ ȐµİıĮ ȠʌȠȚȠįȒʌȠIJİ ıIJȠȚȤİȓȠ įİįȠµȑȞȦȞ IJȠȣ ĮȡȤİȓȠȣ, ȠʌȠȣįȒʌȠIJİ µȑıĮ ıIJȠ ĮȡȤİȓȠ țȚ ĮȞ ȕȡȓıțİIJĮȚ ĮȣIJȩ. ǹȣIJȩ ȖȓȞİIJĮȚ IJȠʌȠșİIJȫȞIJĮȢ țĮIJȐȜȜȘȜĮ IJȠ įİȓțIJȘ-șȑıȘȢ IJȠȣ ĮȡȤİȓȠȣ ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ IJȘ ıȣȞȐȡIJȘıȘ fseek(). ȉȠ ʌȡȩIJȣʌȠ ĮȣIJȒȢ İȓȞĮȚ:
int fseek(FILE *fptr, long int offset, int whence); ȩʌȠȣ fptr İȓȞĮȚ ȑȞĮȢ įİȓțIJȘȢ-ĮȡȤİȓȠȣ ʌȠȣ İʌȚıIJȡȑijİIJĮȚ µİ µȓĮ țȜȒıȘ ıIJȘȞ fopen(), offset İȓȞĮȚ Ƞ ĮȡȚșµȩȢ IJȦȞ bytes ʌȠȣ įȘȜȫȞİȚ IJȘȞ ĮʌȩıIJĮıȘ IJȘȢ ȞȑĮȢ șȑıȘȢ IJȠȣ įİȓțIJȘ-șȑıȘȢ Įʌȩ IJȘȞ whence. H whence µʌȠȡİȓ ȞĮ İȓȞĮȚ 0 ʌȠȣ ȣʌȠįȘȜȫȞİȚ IJȘȞ ĮȡȤȒ IJȠȣ ĮȡȤİȓȠȣ, 1 ʌȠȣ ȣʌȠįȘȜȫȞİȚ IJȘȞ IJȡȑȤȠȣıĮ șȑıȘ Ȓ 2 ʌȠȣ ȣʌȠįȘȜȫȞİȚ IJȠ IJȑȜȠȢ IJȠȣ ĮȡȤİȓȠȣ, Ȓ İȞĮȜȜĮțIJȚțȐ ȑȞĮ Įʌȩ IJĮ ȠȞȩµĮIJĮ SEEK_SET, SEEK_CUR, SEEK_END ĮȞIJȓıIJȠȚȤĮ, țĮșȩıȠȞ ıIJȠ stdio.h ȣʌȐȡȤȠȣȞ ȠȚ ĮțȩȜȠȣșİȢ ȠįȘȖȓİȢ:
ǹȡȤİȓĮ
#define SEEK_SET #define SEEK_CUR #define SEEK_END
157
0 1 2
ȉȚµȒ İʌȚıIJȡȠijȒȢ µȘįȑȞ ıȘµĮȓȞİȚ ȩIJȚ Ș fseek() ʌȑIJȣȤİ. ȂȘ-µȘįİȞȚțȒ IJȚµȒ ıȘµĮȓȞİȚ ĮʌȠIJȣȤȓĮ. ȆȡȠıȠȤȒ: Ǿ fseek() įİȞ ʌȡȑʌİȚ ȞĮ ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ıİ ĮȡȤİȓĮ țİȚµȑȞȠȣ.
ftell() ǼʌȚıIJȡȑijİȚ IJȘȞ IJȡȑȤȠȣıĮ IJȚµȒ IJȠȣ įİȓțIJȘ-șȑıȘȢ ĮȡȤİȓȠȣ (ıİ bytes µİIJȡȘµȑȞĮ Įʌ'IJȘȞ ĮȡȤȒ IJȠȣ ĮȡȤİȓȠȣ) ȖȚĮ IJȠ țĮșȠȡȚıµȑȞȠ ĮȡȤİȓȠ. ǵIJĮȞ ıȣµȕİȓ țȐʌȠȚȠ ıijȐȜµĮ İʌȚıIJȡȑijİȚ -1L. ȉȠ ʌȡȩIJȣʌȩ IJȘȢ İȓȞĮȚ:
long ftell(FILE *fptr); rewind() ȉȠʌȠșİIJİȓ IJȠ įİȓțIJȘ-șȑıȘȢ IJȠȣ ĮȡȤİȓȠȣ ʌȠȣ įȑȤİIJĮȚ ȦȢ ȩȡȚıµĮ, ıIJȘȞ ĮȡȤȒ IJȠȣ ĮȡȤİȓȠȣ. ȉȠ ʌȡȩIJȣʌȩ IJȘȢ İȓȞĮȚ:
void rewind(FILE *fptr); ǼȓȞĮȚ ʌȡȠijĮȞȑȢ ȩIJȚ Ș ıȣȞȐȡIJȘıȘ rewind() İȓȞĮȚ ȚıȠįȪȞĮµȘ IJȘȢ:
fseek(FILE *fptr, 0L, SEEK_SET); remove() ǻȚĮȖȡȐijİȚ Įʌȩ IJȠ įȓıțȠ IJȠ ĮȡȤİȓȠ ʌȠȣ įȑȤİIJĮȚ ȦȢ ȩȡȚıµĮ (name). ȉȠ ʌȡȩIJȣʌȩ IJȘȢ İȓȞĮȚ:
int remove(char *name); ǼʌȚıIJȡȑijİȚ 0 ĮȞ IJȠ ĮȡȤİȓȠ įȚĮȖȡȐijIJȘțİ µİ İʌȚIJȣȤȓĮ țĮȚ -1 ĮȞ ȑȤİȚ ıȣµȕİȓ ıijȐȜµĮ.
rename() ȂİIJȠȞȠµȐȗİȚ ȑȞĮ ĮȡȤİȓȠ (ʌĮȜĮȚȩ ȩȞȠµĮ old_name, ȞȑȠ ȩȞȠµĮ new_name). ȉȠ ʌȡȩIJȣʌȩ IJȘȢ İȓȞĮȚ:
int rename(char *old_name, char *new_name); ǼʌȚıIJȡȑijİȚ 0 ȩIJĮȞ İȓȞĮȚ İʌȚIJȣȤȒȢ țĮȚ -1 ĮȞ ȑȤİȚ ıȣµȕİȓ ıijȐȜµĮ.
11.4 ȆǹȇǹǻǼǿīȂǹȉǹ
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
158
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
1. ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ µİIJȡȐ IJĮ ȖȡȐµµĮIJĮ, IJȚȢ ȜȑȟİȚȢ, IJȚȢ ʌȡȠIJȐıİȚȢ țĮȚ IJȘ µȑıȘ IJȚµȒ IJȦȞ ȖȡĮµµȐIJȦȞ ĮȞȐ ȜȑȟȘ, ȖȚĮ ȑȞĮ ĮȡȤİȓȠ țİȚµȑȞȠȣ IJȠ ȩȞȠµĮ IJȠȣ ȠʌȠȓȠȣ șĮ įȓȞİIJĮȚ ȦȢ ȩȡȚıµĮ ıIJȘ ȖȡĮµµȒ įȚĮIJĮȖȫȞ. /* wordcntf.c */ /* ȀĮIJĮµȑIJȡȘıȘ ȜȑȟİȦȞ țĮȚ ȖȡĮµµȐIJȦȞ ıİ ĮȡȤİȓȠ țİȚµȑȞȠȣ */ #include <stdio.h> main(int argc, char *argv[]) { FILE *fptr; char ch; int alfa=0,white=1,word=0;
}
if(argc!=2) { puts("ǻȫıİ: wordcntf ȩȞȠµĮ_ĮȡȤİȓȠȣ"); exit(0); } if((fptr=fopen(argv[1],"r"))==NULL) { printf("ǻİ µʌȠȡȫ ȞĮ ĮȞȠȓȟȦ IJȠ ĮȡȤİȓȠ %s", argv[1]); exit(0); } while((ch=getc(fptr))!=EOF) switch(ch) { case ' ' : /* ĮȞ Ƞ ȤĮȡĮțIJȒȡĮȢ İȓȞĮȚ țİȞȩ, tab */ case '\t': /* ȞȑĮ ȖȡĮµµȒ, µİIJȡȐIJĮȚ ȦȢ ȜİȣțȩȢ */ case '\n': white++; break; default : if(ch>='A' && ch<='Z' || ch>='a' && ch<='z' || ch>='ǹ' && ch<='ȥ' || ch>='Ȧ' && ch<='ȫ') alfa++; /* ȕȜȑʌİ ʌȓȞĮțĮ ASCII */ if(white) { white=0; word++;} } fclose(fptr); if(alfa==0) puts("ȉȠ ĮȡȤİȓȠ įİȞ ʌİȡȚȑȤİȚ ȜȑȟİȚȢ"); else printf("ȁȑȟİȚȢ: %d\nīȡȐµµĮIJĮ: %d\nȂȑıȘ IJȚµȒ ȖȡĮµµȐIJȦȞ ĮȞȐ ȜȑȟȘ: %f",word,alfa,1.0*alfa/word);
2. ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ µİIJĮIJȡȑʌİȚ ȩȜȠȣȢ IJȠȣȢ ʌİȗȠȪȢ İȜȜȘȞȚțȠȪȢ ȤĮȡĮțIJȒȡİȢ İȞȩȢ ĮȡȤİȓȠȣ țİȚµȑȞȠȣ (ĮȡȤİȓȠ-ʌȘȖȒ) ıİ țİijĮȜĮȓȠȣȢ țĮȚ ȞĮ IJȠȣȢ ȖȡȐijİȚ ıİ ȐȜȜȠ ĮȡȤİȓȠ (ĮȡȤİȓȠ-ʌȡȠȠȡȚıµȠȪ). īȚĮ IJȘ µİIJĮIJȡȠʌȒ IJȦȞ ȤĮȡĮțIJȒȡȦȞ ıȣµȕȠȣȜİȣIJİȓIJİ IJȠȞ ʌȓȞĮțĮ ASCII. ȉĮ ȠȞȩµĮIJĮ IJȦȞ ĮȡȤİȓȦȞ ʌȘȖȒȢ țĮȚ ʌȡȠȠȡȚıµȠȪ, ȞĮ įȓȞȠȞIJĮȚ ȦȢ ȠȡȓıµĮIJĮ ıIJȘ ȖȡĮµµȒ įȚĮIJĮȖȫȞ.
/* fconvert.c */ /* ȂİIJĮIJȡȠʌȒ ĮȡȤİȓȠȣ µİ İȜȜȘȞȚțȠȪȢ ȤĮȡĮțIJȒȡİȢ ıİ țİijĮȜĮȓȠȣȢ */ #include <stdio.h>
ǹȡȤİȓĮ
159
main(int argc, char *argv[]) { FILE *fptr1,*fptr2; char ch;
}
if(argc!=3) { puts("ǻȫıİ: fconvert ȩȞȠµĮ_ĮȡȤİȓȠȣ1 ȩȞȠµĮ_ĮȡȤİȓȠȣ2"); exit(0); } if((fptr1=fopen(argv[1],"r"))==NULL) { printf("ǻİ µʌȠȡȫ ȞĮ ĮȞȠȓȟȦ IJȠ ĮȡȤİȓȠ %s", argv[1]); exit(0); } if((fptr2=fopen(argv[2],"w"))==NULL) { printf("ǻİ µʌȠȡȫ ȞĮ ĮȞȠȓȟȦ IJȠ ĮȡȤİȓȠ %s", argv[2]); exit(0); } while((ch=getc(fptr1))!=EOF) { if (ch>='Į' && ch<='ı') ch-=24; /* Į..ı */ else if(ch>='IJ' && ch<='ȥ') ch-=25; /* IJ..ȥ */ else if(ch=='Ȣ') ch='Ȉ'; /* Ȣ */ else if(ch=='Ȧ') ch='ȍ'; /* Ȧ */ else if(ch=='Ȑ') ch='ǹ'; /* IJȠȞȠȪµİȞĮ */ else if(ch=='ȑ') ch='Ǽ'; else if(ch=='Ȓ') ch='Ǿ'; else if(ch=='ȓ') ch='ǿ'; else if(ch=='ȩ') ch='ȅ'; else if(ch=='Ȫ') ch='Ȋ'; else if(ch=='ȫ') ch='ȍ'; putc(ch,fptr2); } fclose(fptr1); fclose(fptr2);
3. Ǿ C ȤİȚȡȓȗİIJĮȚ IJȚȢ įȚȐijȠȡİȢ ʌİȡȚijİȡİȚĮțȑȢ ıȣıțİȣȑȢ ȦȢ ĮȡȤİȓĮ. ȉĮ ĮȡȤİȓĮ ĮȣIJȐ ĮȞȠȓȖȠȣȞ ĮȣIJȩµĮIJĮ ıIJȘȞ ĮȡȤȒ țȐșİ ʌȡȠȖȡȐµµĮIJȠȢ țĮȚ țȜİȓȞȠȣȞ ıIJȠ IJȑȜȠȢ IJȠȣ. ȉĮ ȠȞȩµĮIJĮ IJȦȞ įİȚțIJȫȞ ı'ĮȣIJȐ IJĮ ĮȡȤİȓĮ İȓȞĮȚ ʌȡȠțĮșȠȡȚıµȑȞĮ ıIJȠ ĮȡȤİȓȠİʌȚțİijĮȜȓįĮȢ stdio.h țĮȚ İȓȞĮȚ IJĮ ĮțȩȜȠȣșĮ: ǵȞȠµĮ stdin stdout stderr stdaux stdprn
ȈȣıțİȣȒ standard ıȣıțİȣȒ İȚıȩįȠȣ (ʌȜȘțIJȡȠȜȩȖȚȠ). standard ıȣıțİȣȒ İȟȩįȠȣ (ȠșȩȞȘ). standard ıȣıțİȣȒ ȜȐșȠȣȢ (ȠșȩȞȘ). standard ȕȠȘșȘIJȚțȒ ıȣıțİȣȒ (ıİȚȡȚĮțȒ șȪȡĮ). standard ıȣıțİȣȒ İțIJȪʌȦıȘȢ (İțIJȣʌȦIJȒȢ).
īȡȐȥIJİ ȑȞĮ ʌȡȩȖȡĮµµĮ IJȠ ȠʌȠȓȠ ȞĮ IJȣʌȫȞİȚ ȑȞĮ ĮȡȤİȓȠ țİȚµȑȞȠȣ (IJȠ ȩȞȠµĮ IJȠȣ ȠʌȠȓȠȣ șĮ įȓȞİIJĮȚ ȦȢ ȩȡȚıµĮ ıIJȘȞ ȖȡĮµµȒ įȚĮIJĮȖȫȞ) ıIJȠȞ İțIJȣʌȦIJȒ.
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
160
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
/* fprint.c */ /* ǼțIJȪʌȦıȘ ĮȡȤİȓȠȣ ıIJȠȞ İțIJȣʌȦIJȒ */ #include <stdio.h> main(int argc, char *argv[]) { FILE *fptr; char string[81];
}
if(argc!=2) { puts("ǻȫıİ: fprint ȩȞȠµĮ_ĮȡȤİȓȠȣ"); exit(0); } if((fptr=fopen(argv[1],"r"))==NULL) { printf("ǻİ µʌȠȡȫ ȞĮ ĮȞȠȓȟȦ IJȠ ĮȡȤİȓȠ %s", argv[1]); exit(0); } while(fgets(string,80,fptr)!=NULL) { strcat(string,"\r"); fputs(string,stdprn); } fclose(fptr);
4. ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ IJȠ ȠʌȠȓȠ ȞĮ įȚĮȕȐȗİȚ IJĮ ʌİȡȚİȤȩµİȞĮ İȞȩȢ ĮȡȤİȓȠȣ (IJȠ ȠʌȠȓȠ ȑȤİȚ ĮȞȠȚȤIJİȓ ȖȚĮ įȣĮįȚțȒ ĮȞȐȖȞȦıȘ) byte ʌȡȠȢ byte țĮȚ ȞĮ ݵijĮȞȓȗİȚ IJĮ ʌİȡȚİȤȩµİȞȐ IJȠȣ ıIJȘȞ ȠșȩȞȘ. Ǿ ĮʌİȚțȩȞȚıȘ ȞĮ ĮʌȠIJİȜİȓIJĮȚ Įʌȩ įȪȠ µȑȡȘ: IJȠ įİțĮİȟĮįȚțȩ țȦįȚțȩ țȐșİ ȤĮȡĮțIJȒȡĮ țĮȚ IJȠȞ ȓįȚȠ IJȠ ȤĮȡĮțIJȒȡĮ - ĮȞ İȓȞĮȚ İțIJȣʌȫıȚµȠȢ. ǼȓȞĮȚ ʌȡȠijĮȞȑȢ ȩIJȚ ĮȣIJȩ IJȠ ʌȡȩȖȡĮµµĮ șĮ ʌȡȠıȠµȠȚȐȗİȚ IJȘ ȜİȚIJȠȣȡȖȓĮ dump (-d) IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ DEBUG IJȠȣ DOS. /* dump.c */ /* ȆȡȩȖȡĮµµĮ įȣĮįȚțȒȢ ĮʌİȚțȩȞȚıȘȢ ĮȡȤİȓȠȣ */ #include <stdio.h> #define LENGTH 10 #define TRUE 1 #define FALSE 0 main(int argc, char *argv[]) { FILE *fptr; int ch,i,eof; unsigned char string[LENGTH+1]; /* buffer ȖȚĮ IJȠȣȢ ȤĮȡĮțIJȒȡİȢ
*/
if(argc!=2) { puts("ǻȫıİ: dump ȩȞȠµĮ_ĮȡȤİȓȠȣ"); exit(0); } if((fptr=fopen(argv[1],"rb"))==NULL)/* ȐȞȠȚȖµĮ ȖȚĮ įȣĮįȚțȒ ĮȞȐȖȞȦıȘ*/ { printf("ǻİ µʌȠȡȫ ȞĮ ĮȞȠȓȟȦ IJȠ ĮȡȤİȓȠ %s", argv[1]); exit(0); }
ǹȡȤİȓĮ
}
161
eof=FALSE; do { for(i=0;i<LENGTH;i++) { if((ch=getc(fptr))==EOF) eof=TRUE; printf("%5X",ch); /* İțIJȪʌȦıȘ ȤĮȡĮțIJȒȡĮ ıİ įİțĮİȟĮįȚțȒ µȠȡijȒ if(ch>31) /* ĮȞ Ƞ ȤĮȡĮțIJȒȡĮȢ İȓȞĮȚ İțIJȣʌȫıȚµȠȢ string[i]=ch; /* IJȠʌȠșİIJİȓIJĮȚ ıIJȠȞ buffer ȩʌȦȢ İȓȞĮȚ, else /* įȚĮijȠȡİIJȚțȐ IJȠʌȠșİIJİȓIJĮȚ Ș '.' string[i]='.'; } string[LENGTH]='\0'; printf(" %s\n",string); /* İțIJȪʌȦıȘ IJȠȣ buffer */ } while(eof==FALSE); fclose(fptr);
5. ȉȠ ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ, įȚĮȤİȚȡȓȗİIJĮȚ ʌȜȒȡȦȢ ȑȞĮ ĮȡȤİȓȠ İȖȖȡĮijȫȞ (țȐșİ İȖȖȡĮijȒ ȑȤİȚ įȪȠ ʌİįȓĮ: ȠȞȠµĮIJİʌȫȞȣµȠ țĮȚ IJȘȜȑijȦȞȠ). ȅȚ İȡȖĮıȓİȢ ʌȠȣ İʌȚIJİȜİȓ İȓȞĮȚ: ǼȚıĮȖȦȖȒ, ǼȞȘµȑȡȦıȘ, ǻȚĮȖȡĮijȒ, ǹȞĮȗȒIJȘıȘ, ȉĮȟȚȞȩµȘıȘ țĮȚ ȆĮȡȠȣıȓĮıȘ. ȉȠ ʌȡȩȖȡĮµµĮ ĮʌȠIJİȜİȓIJĮȚ Įʌȩ ıȣȞĮȡIJȒıİȚȢ, µȓĮ ȖȚĮ țȐșİ İȡȖĮıȓĮ, ȑIJıȚ ȠȚ ıȣȞĮȡIJȒıİȚȢ ĮȣIJȑȢ µʌȠȡȠȪȞ ȞĮ ȤȡȘıȚµȠʌȠȚȘșȠȪȞ țĮȚ ıİ ȠʌȠȚȠįȒʌȠIJİ ȐȜȜȠ ʌȡȩȖȡĮµµĮ ʌȠȣ ȤȡİȚȐȗİIJĮȚ µȓĮ Įʌȩ IJȚȢ ʌĮȡĮʌȐȞȦ İȡȖĮıȓİȢ. /* agenda.c */ /* ǻȚĮȤİȓȡȚıȘ IJȘȜİijȦȞȚțȠȪ țĮIJĮȜȩȖȠȣ */ #include <stdio.h> struct record { char name[50]; char phone[10]; } person; int size=sizeof(struct record); FILE *fptr; void add(); void update(); void delete(); long int search(); void sort(); void list(); main() { char select; do { clrscr(); puts("ǻǿǹȋǼǿȇIȈǾ ȉǾȁǼĭȍȃǿȀȅȊ ȀǹȉǹȁȅīȅȊ\n"); puts("1. ǼȚıĮȖȦȖȒ İȖȖȡĮijȒȢ"); puts("2. ǼȞȘµȑȡȦıȘ İȖȖȡĮijȒȢ"); puts("3. ǻȚĮȖȡĮijȒ İȖȖȡĮijȒȢ");
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
*/ */ */ */
162
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
puts("4. ǹȞĮȗȒIJȘıȘ IJȘȜİijȫȞȠȣ"); puts("5. ȉĮȟȚȞȩµȘıȘ țĮIJĮȜȩȖȠȣ"); puts("6. ȆĮȡȠȣıȓĮıȘ țĮIJĮȜȩȖȠȣ"); puts("7. Ǽ Ȅ ȅ ǻ ȅ Ȉ\n"); printf("ǼʌȚȜȠȖȒ: "); select=getche(); switch(select) { case '1': add(); break; case '2': update(); break; case '3': delete(); break; case '4': search(); break; case '5': sort(); break; case '6': list(); break; }
}
} while(select!='7');
/* add */ /* ʌȡȠıșȒțȘ İȖȖȡĮijȒȢ ıIJȠȞ țĮIJȐȜȠȖȠ */ void add() { clrscr(); fptr=fopen("AGENDA.DAT","ab"); printf("ȅȞȠµĮ : "); gets(person.name); printf("ȉȘȜȑijȦȞȠ: "); gets(person.phone); fwrite(&person,size,1,fptr); fclose(fptr); } /* update */ /* İȞȘµȑȡȦıȘ İȖȖȡĮijȒȢ */ void update() { long int pos; pos=search(); if(pos>(long int) 0) { fptr=fopen("AGENDA.DAT","r+b"); printf("ȃȑȠ IJȘȜȑijȦȞȠ: "); gets(person.phone); fseek(fptr,pos-size,SEEK_SET); fwrite(&person,size,1,fptr); fclose(fptr); } } /* delete */ /* įȚĮȖȡĮijȒ İȖȖȡĮijȒȢ */ void delete()
ǹȡȤİȓĮ
{
}
long int pos; FILE *temp; char sname[50]; pos=search(); if(pos>(long int) 0) { strcpy(sname,person.name); fptr=fopen("AGENDA.DAT","rb"); temp=fopen("TEMP.DAT","wb"); fread(&person,size,1,fptr); while(!feof(fptr)) { if(strcmp(sname,person.name)!=0) fwrite(&person,size,1,temp); fread(&person,size,1,fptr); } fclose(fptr); fclose(temp); remove("AGENDA.DAT"); rename("TEMP.DAT","AGENDA.DAT"); remove("TEMP.DAT"); }
/* search */ /* ĮȞĮȗȒIJȘıȘ İȖȖȡĮijȒȢ µİ țȜİȚįȓ IJȠ ȠȞȠµĮIJİʌȫȞȣµȠ */ long int search() { long int pos=0L; int found=0; char sname[50]; clrscr(); if((fptr=fopen("AGENDA.DAT","rb"))==NULL) puts("ǻİ µʌȠȡȫ ȞĮ ĮȞȠȓȟȦ IJȠ ĮȡȤİȓȠ AGENDA"); else { printf("ȅȞȠµĮ : "); gets(sname); fread(&person,size,1,fptr); while(!feof(fptr) && !found) { if(strcmp(person.name,sname)==0) { found=1; printf("%s %s\n",person.name,person.phone); pos=ftell(fptr); } if(!found) fread(&person,size,1,fptr); } fclose(fptr); if(!found) puts("ǹȞȪʌĮȡțIJȠ ȩȞȠµĮ"); } getch();
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
163
164
}
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
return(pos);
/* sort() */ /* IJĮȟȚȞȩµȘıȘ IJȠȣ ĮȡȤİȓȠȣ ȦȢ ʌȡȠȢ IJȠ ȩȞȠµĮ */ /* ȤȡȘıȚµȠʌȠȚİȓIJĮȚ Ș ĮʌȜȒ µȑșȠįȠȢ IJȘȢ İʌȚȜȠȖȒȢ */ void sort() { int fsize=0; long int pos,posmin,pos1; struct record min,temp; clrscr(); if((fptr=fopen("AGENDA.DAT","r+b"))==NULL) puts("ǻİ µʌȠȡȫ ȞĮ ĮȞȠȓȟȦ IJȠ ĮȡȤİȓȠ AGENDA"); else { /* ȕȡȓıțȠȣµİ IJȠ ʌȜȒșȠȢ IJȦȞ İȖȖȡĮijȫȞ IJȠȣ ĮȡȤİȓȠȣ */ while(fread(&person,size,1,fptr)==1) fsize++; for(pos=0;pos<fsize-1;pos++) { fseek(fptr,pos*size,SEEK_SET); fread(&person,size,1,fptr); posmin=pos; min=person; for(pos1=pos+1;pos1<fsize;pos1++) { fseek(fptr,pos1*size,SEEK_SET); fread(&temp,size,1,fptr); if(strcmp(temp.name,min.name)<0) { min=temp; posmin=pos1; } } if (strcmp(min.name,person.name)!=0) { fseek(fptr,pos*size,SEEK_SET); fwrite(&min,size,1,fptr); fseek(fptr,posmin*size,SEEK_SET); fwrite(&person,size,1,fptr); } } fclose(fptr); puts("ȉȠ ĮȡȤİȓȠ IJĮȟȚȞȠµȒșȘțİ"); } getch(); } /* list */ /* ʌĮȡȠȣıȓĮıȘ ȩȜȦȞ IJȦȞ İȖȖȡĮijȫȞ IJȠȣ țĮIJĮȜȩȖȠȣ */ void list() {
ǹȡȤİȓĮ
}
165
int i=0; clrscr(); if((fptr=fopen("AGENDA.DAT","rb"))==NULL) puts("ǻİ µʌȠȡȫ ȞĮ ĮȞȠȓȟȦ IJȠ ĮȡȤİȓȠ AGENDA"); else { fread(&person,size,1,fptr); while(!feof(fptr)) { printf("%3d. %s %s\n",++i,person.name,person.phone); fread(&person,size,1,fptr); } } getch();
11.5 ǹȈȀǾȈǼǿȈ 1.
īȡȐȥIJİ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ µİIJȡȐ IJȘ ıȣȤȞȩIJȘIJĮ IJȦȞ ȖȡĮµµȐIJȦȞ ı'ȑȞĮ ĮȡȤİȓȠ țİȚµȑȞȠȣ, IJȠ ȩȞȠµĮ IJȠȣ ȠʌȠȓȠȣ șĮ įȓȞİIJĮȚ ȦȢ ȩȡȚıµĮ ıIJȘ ȖȡĮµµȒ įȚĮIJĮȖȫȞ. ȆȠȚȠ İȓȞĮȚ IJȠ ʌİȡȚııȩIJİȡȠ ȤȡȘıȚµȠʌȠȚȠȪµİȞȠ ȖȡȐµµĮ ıIJĮ İȜȜȘȞȚțȐ țİȓµİȞĮ țĮȚ ʌȠȚȠ ıIJĮ ĮȖȖȜȚțȐ;
2.
ǹȢ ȣʌȠșȑıȠȣµİ ȩIJȚ ȠȡȓȗȠȣµİ IJȑııİȡȚȢ țĮIJȘȖȠȡȓİȢ ȜȑȟİȦȞ ĮȞȐȜȠȖĮ µİ IJȠ µȒțȠȢ IJȠȣȢ: Į) ȈIJȘȞ ʌȡȫIJȘ țĮIJȘȖȠȡȓĮ ĮȞȒțȠȣȞ ȠȚ ȜȑȟİȚȢ ʌȠȣ ȑȤȠȣȞ 1-3 ȖȡȐµµĮIJĮ ȕ) ȈIJȘ įİȪIJİȡȘ, ĮȣIJȑȢ ʌȠȣ ȑȤȠȣȞ 4-6 ȖȡȐµµĮIJĮ Ȗ) ȈIJȘȞ IJȡȓIJȘ, ĮȣIJȑȢ ʌȠȣ ȑȤȠȣȞ 7-9 ȖȡȐµµĮIJĮ į) ȈIJȘȞ IJȑIJĮȡIJȘ, ȠȚ ȜȑȟİȚȢ ʌȠȣ ȑȤȠȣȞ 10 țĮȚ ʌȜȑȠȞ ȖȡȐµµĮIJĮ. ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȚĮȕȐȗİȚ ȑȞĮ ĮȡȤİȓȠ țİȚµȑȞȠȣ țĮȚ ȞĮ µİIJȡȐ IJȠ ʌȜȒșȠȢ IJȦȞ ȜȑȟİȦȞ ʌȠȣ ĮȞȒțȠȣȞ ıİ țȐșİ țĮIJȘȖȠȡȓĮ.
3.
īȡȐȥIJİ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȚĮȕȐȗİȚ Įʌȩ IJȠ įȓıțȠ ȑȞĮ ĮȡȤİȓȠ ʌȘȖĮȓȠȣ ʌȡȠȖȡȐµµĮIJȠȢ IJȘȢ C țĮȚ ȞĮ İȜȑȖȤİȚ ĮȞ IJȠ ʌȜȒșȠȢ IJȦȞ ĮȡȚıIJİȡȫȞ ĮȖțȓıIJȡȦȞ ({) İȓȞĮȚ ȓıȠ µİ IJȠ ʌȜȒșȠȢ IJȦȞ įİȟȚȫȞ ĮȖțȓıIJȡȦȞ (}). ȉȠ ȩȞȠµĮ IJȠȣ ĮȡȤİȓȠȣ ʌȘȖĮȓȠȣ ʌȡȠȖȡȐµµĮIJȠȢ ȞĮ įȓȞİIJĮȚ ȦȢ ȩȡȚıµĮ ıIJȘ ȖȡĮµµȒ įȚĮIJĮȖȫȞ.
4.
ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ ĮȞIJȚȖȡȐijİȚ ȑȞĮ ĮȡȤİȓȠ ıİ ȑȞĮ ȐȜȜȠ, įȘȜĮįȒ ȞĮ ʌȡȠıȠµȠȚȐȗİȚ IJȘ įȚĮIJĮȖȒ COPY IJȠȣ DOS. ȈIJȘ ıȣȞȑȤİȚĮ IJȠ ʌȡȩȖȡĮµµĮ ȞĮ İȜȑȖȤİȚ ĮȞ Ș ĮȞIJȚȖȡĮijȒ ȑȖȚȞİ ıȦıIJȐ, įȘȜĮįȒ ȞĮ ʌȡȠıȠµȠȚȐȗİȚ IJȘ įȚĮIJĮȖȒ COMP IJȠȣ DOS.
5.
īȡȐȥIJİ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȘµȚȠȣȡȖİȓ ȑȞĮ ĮȡȤİȓȠ ʌȡĮȖµĮIJȚțȫȞ ĮȡȚșµȫȞ IJȠȣȢ ȠʌȠȓȠȣȢ șĮ įȑȤİIJĮȚ Įʌȩ IJȠ ʌȜȘțIJȡȠȜȩȖȚȠ. ȅȚ ĮȡȚșµȠȓ ʌȠȣ șĮ țĮIJĮȤȦȡȠȪȞIJĮȚ ȞĮ İȓȞĮȚ ĮȣIJȠȓ ʌȠȣ șĮ ȕȡȓıțȠȞIJĮȚ ıIJȠ įȚȐıIJȘµĮ [0..10].
6.
ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ ȕȡȓıțİȚ IJȘ µȑıȘ IJȚµȒ IJȦȞ ĮȡȚșµȫȞ ʌȠȣ ȣʌȐȡȤȠȣȞ ıIJȠ ĮȡȤİȓȠ ʌȠȣ įȘµȚȠȣȡȖȒșȘțİ Įʌȩ IJȠ ʌȡȩȖȡĮµµĮ IJȘȢ DZıțȘıȘȢ 5. ȈIJȘ ıȣȞȑȤİȚĮ ȞĮ ȕȡȓıțİȚ IJȠ ʌȜȒșȠȢ IJȦȞ ĮȡȚșµȫȞ ȠȚ ȠʌȠȓȠȚ İȓȞĮȚ µİȖĮȜȪIJİȡȠȚ IJȘȢ µȑıȘȢ IJȚµȒȢ, țĮșȫȢ țĮȚ ĮȣIJȫȞ ʌȠȣ İȓȞĮȚ µȚțȡȩIJİȡȠȚ ĮȣIJȒȢ.
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
166
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
7.
ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ȖȚĮ IJȘ ıȣȞȑȞȦıȘ įȪȠ ĮȡȤİȓȦȞ IJȠȣ ȓįȚȠȣ IJȪʌȠȣ. ȉĮ įȪȠ ĮȡȤİȓĮ ȞĮ įȓȞȠȞIJĮȚ ȦȢ ȠȡȓıµĮIJĮ ıIJȘ ȖȡĮµµȒ įȚĮIJĮȖȫȞ țĮȚ ȞĮ įȘµȚȠȣȡȖİȓIJĮȚ ȑȞĮ IJȡȓIJȠ ĮȡȤİȓȠ µİ IJĮ ıIJȠȚȤİȓĮ IJȠȣ ʌȡȫIJȠȣ țĮȚ ıIJȘ ıȣȞȑȤİȚĮ IJĮ ıIJȠȚȤİȓĮ IJȠȣ įİȪIJİȡȠȣ.
8.
īȡȐȥIJİ ʌȡȩȖȡĮµµĮ, IJȠ ȠʌȠȓȠ µİ IJȘ ȕȠȒșİȚĮ İȞȩȢ menu ȞĮ µĮȢ įȓȞİȚ IJȘ įȣȞĮIJȩIJȘIJĮ ȖȚĮ IJȚȢ İȟȒȢ İʌȚȜȠȖȑȢ: Į) ǻȘµȚȠȣȡȖȓĮ ĮȡȤİȓȠȣ ĮțİȡĮȓȦȞ. ȕ) ȉĮȟȚȞȩµȘıȘ țĮIJȐ ĮȪȟȠȣıĮ ıİȚȡȐ, IJȠȣ ĮȡȤİȓȠȣ ĮțİȡĮȓȦȞ. Ȗ) ȆĮȡȠȣıȓĮıȘ IJȦȞ įİįȠµȑȞȦȞ, IJȠȣ ĮȡȤİȓȠȣ ĮțİȡĮȓȦȞ ıIJȘȞ ȠșȩȞȘ. īȚĮ IJȘȞ IJĮȟȚȞȩµȘıȘ IJȠȣ ĮȡȤİȓȠȣ µʌȠȡİȓIJİ ȞĮ ȤȡȘıȚµȠʌȠȚȒıİIJİ IJȘ µȑșȠįȠ IJȘȢ İʌȚȜȠȖȒȢ, ʌȠȣ ȑȤİȚ ʌİȡȚȖȡĮijİȓ ıIJȘȞ § 8.1.6, Ȓ IJȘ µȑșȠįȠ IJȘȢ ijȣıĮȜȓįĮȢ ʌȠȣ ʌİȡȚȖȡȐijİIJĮȚ ıIJȠ ȆĮȡȐįİȚȖµĮ 2 IJȘȢ § 8.3.
9.
ȊʌȠșȑıIJİ ȩIJȚ µİ IJȘȞ DZıțȘıȘ 8 įȘµȚȠȣȡȖȒıĮµİ țĮȚ IJĮȟȚȞȠµȒıĮµİ įȪȠ ĮȡȤİȓĮ ĮțİȡĮȓȦȞ. īȡȐȥIJİ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȘµȚȠȣȡȖİȓ ȑȞĮ IJȡȓIJȠ ĮȡȤİȓȠ Įʌȩ IJȘ ıȣȞIJĮȟȚȞȩµȘıȘ IJȦȞ įȪȠ ʌȡȠȘȖȠȣµȑȞȦȞ. Ǿ įȚĮįȚțĮıȓĮ IJȘȢ ıȣȞIJĮȟȚȞȩµȘıȘȢ ȑȤİȚ ʌİȡȚȖȡĮijİȓ ıIJȠ ȆĮȡȐįİȚȖµĮ 4 IJȠȣ ȀİijĮȜĮȓȠȣ 8. 10. DzȞĮ ȖȡĮijİȓȠ ıȣȞȠȚțİıȓȦȞ ȑȤİȚ įȘµȚȠȣȡȖȒıİȚ ȑȞĮ ĮȡȤİȓȠ, IJȠ ȠʌȠȓȠ ʌİȡȚȑȤİȚ ıIJȠȚȤİȓĮ IJȦȞ ȣʌȠȥȒijȚȦȞ ȖĮµʌȡȫȞ țĮȚ IJȦȞ ȣʌȠȥȒijȚȦȞ ȞȣijȫȞ. īȚĮ țȐșİ ʌİȜȐIJȘ ȑȤİȚ țĮIJĮȖȡĮijİȓ IJȠ İʌȓșİIJȠ, IJȠ ȩȞȠµĮ, Ș įȚİȪșȣȞıȘ, Ƞ ĮȡȚșµȩȢ IJȘȜİijȫȞȠȣ, IJȠ ijȪȜȜȠ (ǹ Ȓ Ĭ), Ș ȘȜȚțȓĮ, IJȠ ȪȥȠȢ, IJȠ ȕȐȡȠȢ, IJȠ ȤȡȫµĮ IJȦȞ µĮIJȚȫȞ, IJȠ ȤȡȫµĮ IJȦȞ µĮȜȜȚȫȞ, IJȠ İʌȐȖȖİȜµĮ, Ș ʌĮȜȚȐ ȠȚțȠȖİȞİȚĮțȒ țĮIJȐıIJĮıȘ, IJȠ țȪȡȚȠ ȤȩµʌȚ, ȠȚ ĮįȣȞĮµȓİȢ țĮȚ ȠȚ ʌĮȡĮȟİȞȚȑȢ. ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȘµȚȠȣȡȖİȓ țĮȚ ȞĮ İȞȘµİȡȫȞİȚ IJȠ ĮȡȤİȓȠ. ǼʌȓıȘȢ ȞĮ įȑȤİIJĮȚ IJȚȢ ʌȡȠIJȚµȒıİȚȢ İȞȩȢ ȞȑȠȣ ʌİȜȐIJȘ țĮȚ ȞĮ įȓȞİȚ µȓĮ ȜȓıIJĮ ʌȚșĮȞȫȞ ıȣȗȪȖȦȞ. 11. ȃĮ ȖȡĮijİȓ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ įȑȤİIJĮȚ ȦȢ ȩȡȚıµĮ ıIJȘȞ ȖȡĮµµȒ įȚĮIJĮȖȫȞ ȑȞĮ ĮȡȤİȓȠ țİȚµȑȞȠȣ țĮȚ ȞĮ įȘµȚȠȣȡȖİȓ ȑȞĮ ȐȜȜȠ ĮȡȤİȓȠ, ȑIJıȚ ȫıIJİ Ș țȐșİ ȖȡĮµµȒ IJȠȣ ȞĮ µȘȞ İȓȞĮȚ µİȖĮȜȪIJİȡȘ Įʌȩ 40 ȤĮȡĮțIJȒȡİȢ. īȚĮ IJȠ ȜȩȖȠ ĮȣIJȩ șĮ ʌȡȑʌİȚ ȞĮ ʌȡȠıIJȓșİȞIJĮȚ ȜȑȟİȚȢ ıİ țȐșİ ȖȡĮµµȒ ȑȦȢ ȩIJȠȣ ȞĮ ıȣµʌȜȘȡȫȞİIJĮȚ Ƞ ĮȡȚșµȩȢ IJȦȞ 40 ȤĮȡĮțIJȒȡȦȞ, İȞȫ ıİ ʌİȡȓʌIJȦıȘ ʌȠȣ µȓĮ ȜȑȟȘ įİ ȤȦȡȐİȚ ıİ µȓĮ ȖȡĮµµȒ ȞĮ IJȠʌȠșİIJİȓIJĮȚ ıIJȘȞ İʌȩµİȞȘ. 12. īȡȐȥIJİ ʌȡȩȖȡĮµµĮ IJȠ ȠʌȠȓȠ ȞĮ įȘµȚȠȣȡȖİȓ ȑȞĮ ĮȡȤİȓȠ İȖȖȡĮijȫȞ µĮșȘIJȫȞ (țȪȡȚȠ). Ǿ țȐșİ İȖȖȡĮijȒ ȞĮ ʌİȡȚȜĮµȕȐȞİȚ IJȚȢ ʌȜȘȡȠijȠȡȓİȢ: 1. ǹȡȚșµȩȢ µȘIJȡȫȠȣ, 2. ȅȞȠµĮIJİʌȫȞȣµȠ, 3. ĭȪȜȜȠ țĮȚ 4. ǺĮșµȩȢ. ȈIJȘ ıȣȞȑȤİȚĮ ȞĮ ȖȡĮijİȓ ȑȞĮ ȐȜȜȠ ʌȡȩȖȡĮµµĮ, ʌȠȣ ȞĮ įȘµȚȠȣȡȖİȓ įȪȠ ȞȑĮ ĮȡȤİȓĮ ʌĮȓȡȞȠȞIJĮȢ IJȚȢ İȖȖȡĮijȑȢ IJȠȣ țȪȡȚȠȣ ĮȡȤİȓȠȣ, ȑIJıȚ ȫıIJİ ıIJȠ ȑȞĮ ȞĮ ȣʌȐȡȤȠȣȞ ȩȜȠȚ ȠȚ µĮșȘIJȑȢ țĮȚ ıIJȠ ȐȜȜȠ ȩȜİȢ IJȚȢ µĮșȒIJȡȚİȢ.
167
ȀǼĭǹȁǹǿȅ 12
ȅ ȆȇȅǼȆǼȄǼȇīǹȈȉǾȈ ȀȐșİ ʌȘȖĮȓȠ ʌȡȩȖȡĮµµĮ IJȘȢ C ʌȡȚȞ µİIJĮȖȜȦIJIJȚıIJİȓ ʌİȡȞȐ Įʌȩ IJȘ ijȐıȘ IJȘȢ ʌȡȠİʌİȟİȡȖĮıȓĮȢ, ȕȜȑʌİ ȈȤȒµĮ 2.1. ȉȘ įȚĮįȚțĮıȓĮ ĮȣIJȒ IJȘȞ İʌȚIJİȜİȓ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ ȜȑȖİIJĮȚ ʌȡȠİʌİȟİȡȖĮıIJȒȢ IJȘȢ C (C preprocessor). ȅ ʌȡȠİʌİȟİȡȖĮıIJȒȢ ȥȐȤȞİȚ ıIJȠ ʌȘȖĮȓȠ ʌȡȩȖȡĮµµĮ țĮȚ İțIJİȜİȓ ȠįȘȖȓİȢ ʌȠȣ ĮʌİȣșȪȞȠȞIJĮȚ ı'ĮȣIJȩȞ. ȀȐșİ ȠįȘȖȓĮ ʌȡȠȢ IJȠȞ ʌȡȠİʌİȟİȡȖĮıIJȒ (preprocessor directive) ĮȡȤȓȗİȚ µİ IJȠ ıȪµȕȠȜȠ #. Ȉ'ĮȣIJȩ IJȠ ȀİijȐȜĮȚȠ șĮ įȠȪµİ IJȚȢ ıȘµĮȞIJȚțȩIJİȡİȢ ȠįȘȖȓİȢ ʌȡȠȢ IJȠȞ ʌȡȠİʌİȟİȡȖĮıIJȒ. ǹȞ țĮȚ įȪȠ Įʌ'ĮȣIJȑȢ, IJȘȞ #define țĮȚ IJȘȞ #include IJȚȢ ȑȤȠȣµİ ȒįȘ ȤȡȘıȚµȠʌȠȚȒıİȚ ıİ įȚȐijȠȡĮ ʌȡȠȖȡȐµµĮIJĮ, İįȫ șĮ IJȚȢ įȠȪµİ ʌȚȠ ĮȞĮȜȣIJȚțȐ.
12.1 #define țĮȚ #undef H ȖİȞȚțȒ µȠȡijȒ ĮȣIJȒȢ IJȘȢ ȠįȘȖȓĮȢ #define İȓȞĮȚ:
#define ĮȞĮȖȞȦȡȚıIJȚțȩ
ĮțȠȜȠȣșȓĮ_ıȣµȕȩȜȦȞ
ǹȣIJȒ Ș ȠįȘȖȓĮ țȐȞİȚ IJȠȞ ʌȡȠİʌİȟİȡȖĮıIJȒ ȞĮ ĮȞIJȚțĮIJĮıIJȒıİȚ ȩȜİȢ IJȚȢ ݵijĮȞȓıİȚȢ IJȠȣ ĮȞĮȖȞȦȡȚıIJȚțȠȪ ıIJȠ ĮȡȤİȓȠ ʌȘȖĮȓȠȣ țȫįȚțĮ, µİ IJȘȞ țĮșȠȡȚȗȩµİȞȘ ĮțȠȜȠȣșȓĮ_ıȣµȕȩȜȦȞ (ȩʌȦȢ Ș İʌȚȜȠȖȒ "ȕȡİȢ țĮȚ ĮȞIJȚțĮIJȑıIJȘıİ" (find and replace) ıIJȠȣȢ İʌİȟİȡȖĮıIJȑȢ țİȚµȑȞȠȣ). Ǿ ʌȚȠ ĮʌȜȒ ȤȡȒıȘ IJȘȢ ȠįȘȖȓĮȢ #define İȓȞĮȚ Ș ĮȞȐșİıȘ ȠȞȠµȐIJȦȞ ıİ ıIJĮșİȡȑȢ, ȩʌȦȢ ȑȤȠȣµİ įİȚ țĮȚ ıIJȘȞ § 3.3.2. īȚĮ ʌĮȡȐįİȚȖµĮ ȕȜȑʌİ IJȠ ʌȡȩȖȡĮµµĮ sphere.c ıIJȘȞ § 7.3 . Ǿ ĮțȠȜȠȣșȓĮ_ıȣµȕȩȜȦȞ µʌȠȡİȓ ĮțȩµĮ ȞĮ İȓȞĮȚ țĮȚ µȓĮ İȞIJȠȜȒ IJȘȢ C. ǹȢ ȣʌȠșȑıȠȣµİ ȩIJȚ ıIJȠ ʌȡȩȖȡĮµµȐ µĮȢ șȑȜȠȣµİ ȞĮ IJȣʌȫıȠȣµİ IJȠ µȒȞȣµĮ "ȁȐșȠȢ" ıİ įȚȐijȠȡĮ ıȘµİȓĮ. ȋȡȘıȚµȠʌȠȚȫȞIJĮȢ IJȘȢ ȠįȘȖȓĮ:
#define ERROR
printf("\nȁȐșȠȢ\n");
ĮȞ ȑȤȠȣµİ ıIJȠ ʌȡȩȖȡĮµµĮ µȓĮ İȞIJȠȜȒ ıĮȞ țȚ ĮȣIJȒ:
if (input>640) ERROR ʌȡȚȞ IJȘ µİIJĮȖȜȫIJIJȚıȘ, șĮ İʌİțIJĮșİȓ Įʌȩ IJȠȞ ʌȡȠİʌİȟİȡȖĮıIJȒ ıİ:
if (input>640) printf("\nȁȐșȠȢ\n"); ȂȓĮ ȠįȘȖȓĮ #define µʌȠȡİȓ ȞĮ ȑȤİȚ țĮȚ ʌĮȡĮµȑIJȡȠȣȢ:
#define ĮȞĮȖȞȦȡȚıIJȚțȩ(ȜȓıIJĮ_ĮȞĮȖȞȦȡȚıIJȚțȫȞ)
ĮțȠȜȠȣșȓĮ_ıȣµȕȩȜȦȞ
ȩʌȠȣ įİȞ ȣʌȐȡȤİȚ țİȞȩ ĮȞȐµİıĮ ıIJȠ ĮȞĮȖȞȦȡȚıIJȚțȩ țĮȚ ıIJȘȞ ʌĮȡȑȞșİıȘ '('. ȈIJȘȞ ʌİȡȓʌIJȦıȘ ĮȣIJȒ µȚȜȐµİ ȖȚĮ µĮțȡȠİȞIJȠȜȑȢ (macros). To ʌĮȡĮțȐIJȦ ʌȡȩȖȡĮµµĮ ȤȡȘıȚµȠʌȠȚİȓ ĮȣIJȒ IJȘ įȣȞĮIJȩIJȘIJĮ ȖȚĮ ȞĮ IJȣʌȫȞİȚ ȤȦȡȓȢ µʌİȜȐ įȪȠ ĮȡȚșµȠȪȢ țȚȞȘIJȒȢ ȣʌȠįȚĮıIJȠȜȒȢ:
168
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
/* macroprn.c */ /* ȋȡȒıȘ µĮțȡȠİȞIJȠȜȫȞ */ #define PR(n) printf("%.2f\n",n); main() { float num1, num2=455.89; num1=1.0/4.0; PR(num1) PR(num2)
} Ȉ'ĮȣIJȩ IJȠ ʌȡȩȖȡĮµµĮ ȩIJĮȞ Ƞ ʌȡȠİʌİȟİȡȖĮıIJȒȢ ȕȜȑʌİȚ IJȘ ijȡȐıȘ "PR(n)" IJȘȞ İʌİțIJİȓȞİȚ ıIJȘȞ İȞIJȠȜȒ: printf("%.2f\n",n); ȅȚ µĮțȡȠİȞIJȠȜȑȢ ȑȤȠȣȞ țȐʌȠȚĮ Įʌȩ IJĮ ȤĮȡĮțIJȘȡȚıIJȚțȐ IJȦȞ ıȣȞĮȡIJȒıİȦȞ, ȩʌȦȢ șĮ ȖȓȞİȚ ʌȚȠ ıĮijȑȢ ıIJȠ İʌȩµİȞȠ ʌĮȡȐįİȚȖµĮ: /* sphereM.c */ /* ȊʌȠȜȠȖȚıµȩȢ ݵȕĮįȠȪ ıijĮȓȡĮȢ, ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ µĮțȡȠİȞIJȠȜȒ */ #define PI 3.14159 /* țĮșȠȡȚıµȩȢ IJȠȣ "ʌ" */ #define AREA(X) (4*PI*X*X) /* µĮțȡȠİȞIJȠȜȒ ȖȚĮ IJȠ ݵȕĮįȩȞ */ main() { float radius; puts("ǻȫıİ IJȘȞ ĮțIJȓȞĮ IJȘȢ ıijĮȓȡĮȢ:"); scanf("%f",&radius); printf("ȉȠ ǼµȕĮįȩȞ IJȘȢ ıijĮȓȡĮȢ İȓȞĮȚ %.2f\n",AREA(radius));
} ǹȣIJȩ IJȠ ʌȡȩȖȡĮµµĮ țȐȞİȚ IJȠ ȓįȚȠ µİ IJȠ ʌȡȩȖȡĮµµĮ sphere.c IJȘȢ § 7.3, µȩȞȠ ʌȠȣ IJȫȡĮ ĮȞIJȓ ȖȚĮ ıȣȞȐȡIJȘıȘ ȤȡȘıȚµȠʌȠȚİȓ µĮțȡȠİȞIJȠȜȒ. ȈIJȠ ȆĮȡȐįİȚȖµĮ 1 IJȘȢ § 7.10 İȓįĮµİ µȓĮ ıȣȞȐȡIJȘıȘ, IJȘȞ max(), Ș ȠʌȠȓĮ İʌȑıIJȡİijİ IJȠ µİȖĮȜȪIJİȡȠ Įʌȩ įȪȠ ʌȡĮȖµĮIJȚțȠȪȢ ĮȡȚșµȠȪȢ. ĬĮ µʌȠȡȠȪıĮµİ ĮȞIJȓ ĮȣIJȒȢ ȞĮ ȤȡȘıȚµȠʌȠȚȒıȠȣµİ µĮțȡȠİȞIJȠȜȒ:
#define max(n1,n2)
n1>n2?n1:n2
ǹȣIJȒ Ș µĮțȡȠİȞIJȠȜȒ µʌȠȡİȓ ȞĮ ȤȡȘıȚµȠʌȠȚȘșİȓ ȖȚĮ ȠʌȠȚȠȣįȒʌȠIJİ IJȪʌȠȣ µİIJĮȕȜȘIJȑȢ n2 țĮȚ n2, İȞȫ ȩIJĮȞ ȠȡȓȗȠȣµİ µȓĮ ıȣȞȐȡIJȘıȘ ʌȡȑʌİȚ ȞĮ įȘȜȫıȠȣµİ țĮȚ IJȠȣȢ IJȪʌȠȣȢ IJȦȞ ʌĮȡĮµȑIJȡȦȞ IJȠȣȢ. Ǿ ȤȡȒıȘ µĮțȡȠİȞIJȠȜȫȞ ĮȞIJȓ IJȦȞ ıȣȞĮȡIJȒıİȦȞ ȑȤİȚ ȑȞĮ ʌȜİȠȞȑțIJȘµĮ: IJȠ ʌȡȩȖȡĮµµĮ İțIJİȜİȓIJĮȚ IJĮȤȪIJİȡĮ, ȖȚĮIJȓ Ș țȜȒıȘ IJȘȢ ıȣȞȐȡIJȘıȘȢ ĮʌĮȚIJİȓ țȐʌȠȚȠ ȤȡȩȞȠ. ȍıIJȩıȠ IJȠ µİȚȠȞȑțIJȘµĮ IJȦȞ µĮțȡȠİȞIJȠȜȫȞ İȓȞĮȚ ȩIJȚ IJȠ µȑȖİșȠȢ IJȠȣ ʌȡȠȖȡȐµµĮIJȠȢ ĮȣȟȐȞİIJĮȚ İȟ'ĮȚIJȓĮȢ IJȠȣ İʌĮȞĮȜĮµȕĮȞȩµİȞȠȣ țȫįȚțĮ. ǵIJĮȞ ȠȡȓȗȠȣµİ µĮțȡȠİȞIJȠȜȑȢ, ȤȡİȚȐȗİIJĮȚ ʌȡȠıȠȤȒ ıIJȚȢ ʌĮȡİȞșȑıİȚȢ ʌȠȣ ȤȡȘıȚµȠʌȠȚȠȪµİ. ǹȢ ȣʌȠșȑıȠȣµİ ȩIJȚ IJȠ ʌȡȩȖȡĮµµȐ µĮȢ ȑȤİȚ IJȚȢ İȟȒȢ ȖȡĮµµȑȢ:
#define SUM(x,y) x+y ... ans=10*SUM(3,4); ʌȠȚĮ IJȚµȒ șĮ įȠșİȓ ıIJȘȞ ans; ȈțİijIJȩµİȞȠȢ țȐʌȠȚȠȢ İʌȚʌȩȜĮȚĮ șĮ ȞȠµȓıİȚ ȩIJȚ Ș ans șĮ ʌȐȡİȚ IJȘȞ IJȚµȒ 70 (10*(3+4)), ȩµȦȢ ĮȣIJȩ İȓȞĮȚ ȜȐșȠȢ. ȅ ʌȡȠİʌİȟİȡȖĮıIJȒȢ șĮ İʌİțIJİȓȞİȚ IJȘȞ İȞIJȠȜȒ ĮʌȩįȠıȘȢ IJȚµȒȢ ȦȢ İȟȒȢ:
ȅ ȆȡȠİʌİȟİȡȖĮıIJȒȢ
169
ans=10*3+4; Įʌ'ȩʌȠȣ ʌȡȠțȪʌIJİȚ ȩIJȚ Ș ans ʌĮȓȡȞİȚ IJȘȞ IJȚµȒ 34. ǹȞ ȩµȦȢ İȓȤĮµİ IJȘȞ ȠįȘȖȓĮ:
#define SUM(x,y) (x+y) IJȫȡĮ Ș İȞIJȠȜȒ ĮʌȩįȠıȘȢ IJȚµȒȢ İʌİțIJİȓȞİIJĮȚ ıİ
ans=10*(3+4); țĮȚ Ș ans ʌĮȓȡȞİȚ IJȘȞ IJȚµȒ 70. ǹȢ ȣʌȠșȑıȠȣµİ IJȫȡĮ ȩIJȚ ȑȤȠȣµİ IJȚȢ ĮțȩȜȠȣșİȢ ȖȡĮµµȑȢ țȫįȚțĮ:
#define PRODUCT(x,y) (x*y) ... ans=PRODUCT(2+3,4); ʌȠȚĮ IJȚµȒ șĮ ʌȐȡİȚ Ș ans; ǹȞ ȞȠµȓȗȠȣµİ ȩIJȚ șĮ ʌȐȡİȚ IJȘȞ IJȚµȒ 20 țȐȞȠȣµİ ȜȐșȠȢ, įȚȩIJȚ ȑȤȠȣµİ:
ans=(2+3*4) Įʌ'ȩʌȠȣ ʌȡȠțȪʌIJİȚ ȩIJȚ Ș ans ʌĮȓȡȞİȚ IJȘȞ IJȚµȒ 14. ǹȞ ȩµȦȢ İȓȤĮµİ ȖȡȐȥİȚ IJȘȞ ȠįȘȖȓĮ:
#define PRODUCT(x,y) ((x)*(y)) IJȩIJİ șĮ İȓȤĮµİ:
ans=((2+3)*4) įȘȜĮįȒ Ș ans ʌĮȓȡȞİȚ IJȘȞ IJȚµȒ 20. Ǿ ݵȕȑȜİȚĮ İȞȩȢ ĮȞĮȖȞȦȡȚıIJȚțȠȪ Ȓ µȓĮȢ µĮțȡȠİȞIJȠȜȒȢ ʌȠȣ ȑȤİȚ ȠȡȚıIJİȓ µİ µȓĮ
#define İțIJİȓȞİIJĮȚ Įʌȩ IJȠ ıȘµİȓȠ ȠȡȚıµȠȪ IJȠȣ µȑȤȡȚ IJȠ IJȑȜȠȢ IJȠȣ ĮȡȤİȓȠȣ ʌȠȣ µİIJĮȖȜȦIJIJȓȗİIJĮȚ, Ȓ µȑȤȡȚ ȞĮ ıȣȞĮȞIJȘșİȓ Ș ȠįȘȖȓĮ:
#undef ĮȞĮȖȞȦȡȚıIJȚțȩ ǻȘȜĮįȒ Ș ȠįȘȖȓĮ #undef ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ȖȚĮ IJȘȞ ĮțȪȡȦıȘ IJȠȣ ȠȡȚıµȠȪ İȞȩȢ ĮȞĮȖȞȦȡȚıIJȚțȠȪ Ȓ µȓĮȢ µĮțȡȠİȞIJȠȜȒȢ ʌȠȣ ȑȤİȚ ȠȡȚıIJİȓ µİ #define.
12.2 #include H ȠįȘȖȓĮ #include įȓȞİȚ İȞIJȠȜȒ ıIJȠȞ ʌȡȠİʌİȟİȡȖĮıIJȒ ȞĮ ıȣµʌİȡȚȜȐȕİȚ ȑȞĮ ȐȜȜȠ ĮȡȤİȓȠ ʌȘȖĮȓȠȣ țȫįȚțĮ, ı'ĮȣIJȩ ʌȠȣ ʌİȡȚȑȤİȚ IJȘȞ ȠįȘȖȓĮ. Ǿ ȖİȞȚțȒ µȠȡijȒ IJȘȢ İȓȞĮȚ:
#include "ȩȞȠµĮ_ĮȡȤİȓȠȣ" Ȓ
#include <ȩȞȠµĮ_ĮȡȤİȓȠȣ> ǹȞ IJȠ ȩȞȠµĮ_ĮȡȤİȓȠȣ ȕȡȓıțİIJĮȚ µȑıĮ ıİ İȚıĮȖȦȖȚțȐ (" ") Ș ĮȞĮȗȒIJȘıȘ IJȠȣ ĮȡȤİȓȠȣ ĮȣIJȠȪ ȖȓȞİIJĮȚ ıIJȠȞ țĮIJȐȜȠȖȠ (directory) ʌȠȣ ʌİȡȚȑȤİȚ IJȠ ĮȡȤİȓȠ ʌȘȖĮȓȠȣ țȫįȚțĮ. ǹȞ IJȠ ȩȞȠµĮ_ĮȡȤİȓȠȣ ȕȡȓıțİIJĮȚ ıİ ȖȦȞȚȫįİȚȢ ĮȖțȪȜİȢ (< >) Ș ĮȞĮȗȒIJȘıȘ ȖȓȞİIJĮȚ ıIJȠȞ țĮIJȐȜȠȖȠ IJȦȞ ĮȡȤİȓȦȞ-İʌȚțİijĮȜȓįĮȢ (header files) ʌȠȣ ıȣȞȒșȦȢ ȠȞȠµȐȗİIJĮȚ INCLUDE. DzȞĮ ʌĮȡȐįİȚȖµĮ ʌȠȣ įİȓȤȞİȚ ȖȚĮIJȓ ʌȚșĮȞȫȢ șĮ șȑȜĮµİ ȞĮ ıȣµʌİȡȚȜȐȕȠȣµİ ȑȞĮ ĮȡȤİȓȠ ı'ȑȞĮ ȐȜȜȠ, İȓȞĮȚ IJȠ İȟȒȢ: ǹȢ ȣʌȠșȑıȠȣµİ ȩIJȚ ȖȡȐijȠȣµİ ʌȠȜȜȐ
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
170
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ʌȡȠȖȡȐµµĮIJĮ µĮșȘµĮIJȚțȫȞ ʌȠȣ ıȣȞİȤȫȢ ĮȞĮijȑȡȠȞIJĮȚ ıİ ĮȜȖȠȡȓșµȠȣȢ ȖȚĮ IJȠȞ ȣʌȠȜȠȖȚıµȩ IJȦȞ ݵȕĮįȫȞ įȚĮijȩȡȦȞ ıȤȘµȐIJȦȞ. ĬĮ µʌȠȡȠȪıĮµİ ȞĮ IJȠʌȠșİIJȒıȠȣµİ ȩȜȠȣȢ ĮȣIJȠȪȢ IJȠȣȢ ĮȜȖȠȡȓșµȠȣȢ ȦȢ µĮțȡȠİȞIJȠȜȑȢ ı'ȑȞĮ ȟİȤȦȡȚıIJȩ ĮȡȤİȓȠ. ǶıIJİȡĮ ĮȞIJȓ ȞĮ ʌȡȑʌİȚ ȞĮ ȟĮȞĮȖȡȐijȠȣµİ ȩȜİȢ IJȚȢ µĮțȡȠİȞIJȠȜȑȢ țȐșİ ijȠȡȐ ʌȠȣ ȖȡȐijȠȣµİ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ IJȚȢ ȤȡȘıȚµȠʌȠȚİȓ, șĮ µʌȠȡȠȪµİ ȞĮ IJȚȢ İȚıȐȖȠȣµİ ıIJȠ ʌȘȖĮȓȠ ĮȡȤİȓȠ ȤȡȘıȚµȠʌȠȚȫȞIJĮȢ IJȘȞ ȠįȘȖȓĮ #include. DzȞĮ IJȑIJȠȚȠ ȟİȤȦȡȚıIJȩ ĮȡȤİȓȠ șĮ µʌȠȡȠȪıİ ȞĮ ȒIJĮȞ țȐʌȦȢ ȑIJıȚ:
#define #define #define #define #define #define
PI AREA_CIRCLE(radius) AREA_SQUARE(length,width) AREA_TRIANGLE(base,height) AREA_ELLIPSE(radius1,radius2) AREA_TRAPEZOID(height,b1,b2)
3.14159 (PI*radius*redius) (length*width) (base*height/2) (PI*radius1*radius2) (height*(b1+b2)/2)
ĬĮ µʌȠȡȠȪıĮµİ ȞĮ ȠȞȠµȐıȠȣµİ ĮȣIJȩ IJȠ ĮȡȤİȓȠ areas.h. Ǿ ʌȡȠȑțIJĮıȘ 'h' ȤȡȘıȚµȠʌȠȚİȓIJĮȚ ȖȚĮ IJĮ ĮȡȤİȓĮ-İʌȚțİijĮȜȓįĮȢ, IJĮ ȠʌȠȓĮ İȓȞĮȚ µȓĮ ȠµȐįĮ İȞIJȠȜȫȞ ʌȠȣ IJȠʌȠșİIJİȓIJĮȚ ıIJȘȞ ĮȡȤȒ IJȠȣ ʌȡȠȖȡȐµµĮIJȩȢ µĮȢ. Ǿ ȖȜȫııĮ C ʌĮȡȑȤİIJĮȚ µ'ȑȞĮ ʌȜȒșȠȢ Įʌȩ ĮȡȤİȓĮ-İʌȚțİijĮȜȓįĮȢ ȖȚĮ ȩȜİȢ IJȚȢ ıȣȞĮȡIJȒıİȚȢ ȕȚȕȜȚȠșȒțȘȢ. ȀȐșİ ĮȡȤİȓȠ ʌİȡȚȑȤİȚ IJȠȣȢ ȠȡȚıµȠȪȢ țĮȚ IJĮ ʌȡȩIJȣʌĮ ȖȚĮ µȓĮ țĮIJȘȖȠȡȓĮ ıȣȞĮȡIJȒıİȦȞ țĮșȫȢ țĮȚ µĮțȡȠİȞIJȠȜȑȢ. ȉĮ ĮȡȤİȓĮ ĮȣIJȐ ȕȡȓıțȠȞIJĮȚ ȠµĮįȠʌȠȚȘµȑȞĮ ıIJȠȞ țĮIJȐȜȠȖȠ INCLUDE. ȈIJȘȞ ʌȡĮȖµĮIJȚțȩIJȘIJĮ țȐʌȠȚİȢ ʌȠȜȪ ıȣȞȘșȚıµȑȞİȢ "ıȣȞĮȡIJȒıİȚȢ" ȕȚȕȜȚȠșȒțȘȢ IJȘȢ C İȓȞĮȚ µĮțȡȠİȞIJȠȜȑȢ ʌȠȣ ȠȡȓȗȠȞIJĮȚ ıIJĮ ĮȡȤİȓĮ-İʌȚțİijĮȜȓįĮȢ. Ȇ.Ȥ. ȠȚ "ıȣȞĮȡIJȒıİȚȢ" getchar() țĮȚ putchar() ʌȠȣ İȓįĮµİ ıIJȘȞ § 5.1, ıIJȘȞ ȠȣıȓĮ İȓȞĮȚ µĮțȡȠİȞIJȠȜȑȢ ʌȠȣ ȠȡȓȗȠȞIJĮȚ µİ IJȘ ȕȠȒșİȚĮ IJȦȞ ıȣȞĮȡIJȒıİȦȞ getc() țĮȚ putc(), ʌȠȣ İȓįĮµİ ıIJȘȞ § 11.2.1. ȉȠ ĮȡȤİȓȠ stdio.h ʌİȡȚȑȤİȚ ĮȣIJȠȪȢ IJȠȣȢ ȠȡȚıµȠȪȢ:
#define getchar() getc(stdin) #define putchar(c) putc((c),stdout) DzIJıȚ ĮȞ șİȜȒıȠȣµİ ȞĮ ȤȡȘıȚµȠʌȠȚȒıȠȣµİ țȐʌȠȚĮ Įʌ'ĮȣIJȑȢ IJȚȢ ıȣȞĮȡIJȒıİȚȢ ıIJȠ ʌȡȩȖȡĮµµȐ µĮȢ, ʌȡȑʌİȚ ȞĮ ȤȡȘıȚµȠʌȠȚȒıȠȣµİ IJȘȞ ȠįȘȖȓĮ: #include <stdio.h>. ǼʌȓıȘȢ ıIJĮ ĮȡȤİȓĮ-İʌȚțİijĮȜȓįĮȢ ȣʌȐȡȤȠȣȞ țĮȚ IJĮ ʌȡȩIJȣʌĮ (ȕȜȑʌİ § 7.1.1) IJȦȞ ıȣȞĮȡIJȒıİȦȞ ȕȚȕȜȚȠșȒțȘȢ. DzIJıȚ İȓȞĮȚ țĮȜȩ ȞĮ ıȣµʌİȡȚȜĮµȕȐȞȠȣµİ IJĮ țĮIJȐȜȜȘȜĮ ĮȡȤİȓĮ-İʌȚțİijĮȜȓįĮȢ, ʌȡȚȞ ȤȡȘıȚµȠʌȠȚȒıȠȣµİ țȐʌȠȚĮ ıȣȞȐȡIJȘıȘ ȕȚȕȜȚȠșȒțȘȢ.
12.3 #if, #else, #endif, #elif, #ifdef țĮȚ #ifndef Ȉİ ȠȡȚıµȑȞİȢ ʌİȡȚʌIJȫıİȚȢ µʌȠȡİȓ ȞĮ İȓȞĮȚ İʌȚșȣµȘIJȒ Ȓ ȩȤȚ Ș µİIJĮȖȜȫIJIJȚıȘ ȠȡȚıµȑȞȦȞ IJµȘµȐIJȦȞ IJȠȣ țȫįȚțĮ İȞȩȢ ĮȡȤİȓȠȣ. ȅȚ ȠįȘȖȓİȢ #if, #else, #end țĮȚ #elif, ȤȡȘıȚµȠʌȠȚȠȪȞIJĮȚ ȦȢ ȠįȘȖȓİȢ µİIJĮȖȜȫIJIJȚıȘȢ ȣʌȩ ıȣȞșȒțȘ.
ȅ ȆȡȠİʌİȟİȡȖĮıIJȒȢ
171
Ǿ ȖİȞȚțȒ µȠȡijȒ IJȘȢ ȠįȘȖȓĮȢ #if İȓȞĮȚ:
#if ıIJĮșİȡȒ_ʌĮȡȐıIJĮıȘ İȞIJȠȜȒ1 #else İȞIJȠȜȒ2 #endif ȩʌȠȣ IJȠ IJµȒµĮ IJȠȣ #else İȓȞĮȚ ʌȡȠĮȚȡİIJȚțȩ, İȞȫ IJȠ #endif İȓȞĮȚ ȣʌȠȤȡİȦIJȚțȩ. ǹȞ Ș ıIJĮșİȡȒ_ʌĮȡȐıIJĮıȘ ʌȠȣ ĮțȠȜȠȣșİȓ IJȠ #if İȓȞĮȚ ĮȜȘșȒȢ (µȘ-µȘįİȞȚțȒ) IJȩIJİ șĮ µİIJĮȖȜȦIJIJȚıIJİȓ Ș İȞIJȠȜȒ1, İȞȫ ĮȞ İȓȞĮȚ ȥİȣįȒȢ (ȓıȘ µİ µȘįȑȞ) țĮȚ ȣʌȐȡȤİȚ IJȠ IJµȒµĮ #else, șĮ µİIJĮȖȜȦIJIJȚıIJİȓ Ș İȞIJȠȜȒ2. īȚĮ ʌĮȡȐįİȚȖµĮ IJȠ İʌȩµİȞȠ ĮʌȩıʌĮıµĮ ʌȡȠȖȡȐµµĮIJȠȢ, ȤȡȘıȚµȠʌȠȚİȓ IJȘȞ IJȚµȒ IJȘȢ ACTIVE_COUNTRY ȖȚĮ ȞĮ ȠȡȓıİȚ IJȠ ȜİțIJȚțȩ IJȠȣ ȞȠµȓıµĮIJȠȢ: /* if.c */ /* ȂİIJĮȖȜȫIJIJȚıȘ ȣʌȩ ıȣȞșȒțȘ µİ #if #else #endif */ #define US 0 #define ENGLAND 1 #define GREECE 2 #define FRANCE 3 #define ACTIVE_COUNTRY GREECE #if ACTIVE_COUNTRY==US char currency[]="įȠȜȐȡȚȠ"; #else #if ACTIVE_COUNTRY==ENGLAND char currency[]="ȜȓȡĮ"; #else #if ACTIVE_COUNTRY==GREECE char currency[]="įȡĮȤµȒ"; #else #if ACTIVE_COUNTRY==FRANCE char currency[]="ijȡȐȖțȠ"; #endif #endif #endif #endif main() { puts(currency); /* ʌȡȠijĮȞȫȢ IJȣʌȫȞİIJĮȚ Ș ȜȑȟȘ "įȡĮȤµȒ" */ } ȈIJȠ ʌĮȡĮʌȐȞȦ ʌȡȩȖȡĮµµĮ ȕȜȑʌȠȣµİ ȩIJȚ ȠȚ #else ĮțȠȜȠȣșȠȪȞIJĮȚ Įʌȩ #if. ȈIJȘȞ ʌİȡȓʌIJȦıȘ ĮȣIJȒ µʌȠȡȠȪµİ ȞĮ ĮȞIJȚțĮIJĮıIJȒıȠȣµİ IJȚȢ ĮțȠȜȠȣșȓİȢ:
#else #if µİ IJȘȞ ȠįȘȖȓĮ:
#elif DzIJıȚ IJȠ ʌĮȡĮʌȐȞȦ ʌȡȩȖȡĮµµĮ ȖȓȞİIJĮȚ: /* elif.c */
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
172
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
/* ȂİIJĮȖȜȫIJIJȚıȘ ȣʌȩ ıȣȞșȒțȘ µİ #if #elif #endif */ #define US 0 #define ENGLAND 1 #define GREECE 2 #define FRANCE 3 #define ACTIVE_COUNTRY GREECE #if ACTIVE_COUNTRY==US char currency[]="įȠȜȐȡȚȠ"; #elif ACTIVE_COUNTRY==ENGLAND char currency[]="ȜȓȡĮ"; #elif ACTIVE_COUNTRY==GREECE char currency[]="įȡĮȤµȒ"; #elif ACTIVE_COUNTRY==FRANCE char currency[]="ijȡȐȖțȠ"; #endif main() { puts(currency); } ȂȓĮ ȐȜȜȘ µȑșȠįȠȢ µİIJĮȖȜȫIJIJȚıȘȢ ȣʌȩ ıȣȞșȒțȘ, ȤȡȘıȚµȠʌȠȚİȓ IJȚȢ ȠįȘȖȓİȢ
#ifdef țĮȚ #ifndef ʌȠȣ ıȘµĮȓȞȠȣȞ "if defined" (ĮȞ ȑȤİȚ ȠȡȚıIJİȓ) țĮȚ "if not defined" (ĮȞ įİȞ ȑȤİȚ ȠȡȚıIJİȓ).
Ǿ ȖİȞȚțȒ µȠȡijȒ IJȘȢ #ifdef İȓȞĮȚ:
#ifdef ĮȞĮȖȞȦȡȚıIJȚțȩ_µĮțȡȠİȞIJȠȜȒȢ İȞIJȠȜȒ1 #else İȞIJȠȜȒ2 #endif ȩʌȠȣ IJȠ IJµȒµĮ IJȠȣ #else İȓȞĮȚ ʌȡȠĮȚȡİIJȚțȩ. ǵʌȦȢ İȓȞĮȚ ĮȞĮµİȞȩµİȞȠ Ș İȞIJȠȜȒ1 șĮ µİIJĮȖȜȦIJIJȚıIJİȓ ĮȞ țĮȚ µȩȞȠ ĮȞ ȑȤİȚ ʌȡȠȘȖȠȣµȑȞȦȢ ȠȡȚıIJİȓ IJȠ ĮȞĮȖȞȦȡȚıIJȚțȩ_µĮțȡȠİȞIJȠȜȒȢ, µİ µȓĮ #define, įȚĮijȠȡİIJȚțȐ, ĮȞ ȣʌȐȡȤİȚ IJµȒµĮ #else, șĮ İțIJİȜİıIJİȓ Ș İȞIJȠȜȒ2. Ǿ ȖİȞȚțȒ µȠȡijȒ IJȘȢ #ifndef İȓȞĮȚ:
#ifndef ĮȞĮȖȞȦȡȚıIJȚțȩ_µĮțȡȠİȞIJȠȜȒȢ İȞIJȠȜȒ1 #else İȞIJȠȜȒ2 #endif ȩʌȠȣ IJȠ IJµȒµĮ IJȠȣ #else İȓȞĮȚ ʌȡȠĮȚȡİIJȚțȩ. ȈIJȘȞ ʌİȡȓʌIJȦıȘ ĮȣIJȒ Ș İȞIJȠȜȒ1 șĮ µİIJĮȖȜȦIJIJȚıIJİȓ ĮȞ țĮȚ µȩȞȠ ĮȞ įİȞ ȑȤİȚ ȠȡȚıIJİȓ ʌȡȠȘȖȠȣµȑȞȦȢ IJȠ ĮȞĮȖȞȦȡȚıIJȚțȩ_µĮțȡȠİȞIJȠȜȒȢ, ĮȞ ȩµȦȢ ȑȤİȚ ȠȡȚıIJİȓ țĮȚ ȣʌȐȡȤİȚ IJµȒµĮ #else, șĮ İțIJİȜİıIJİȓ Ș İȞIJȠȜȒ2. ȅȚ #ifdef țĮȚ #ifndef µʌȠȡȠȪȞ ȞĮ ȤȡȘıȚµȠʌȠȚȒıȠȣȞ IJȘȞ #else, ȩµȦȢ įİ µʌȠȡȠȪȞ ȞĮ ȤȡȘıȚµȠʌȠȚȒıȠȣȞ IJȘȞ #elif.
ȅ ȆȡȠİʌİȟİȡȖĮıIJȒȢ
173
12.4 ǹȈȀǾȈǼǿȈ 1.
ǼȟȘȖȒıIJİ IJĮ ĮʌȠIJİȜȑıµĮIJĮ IJȠȣ ʌĮȡĮțȐIJȦ ʌȡȠȖȡȐµµĮIJȠȢ: #define SQUARE(x) x*x #define SUM(x,y) x+y #define PRODUCT(x,y) (x*y) #define TYPE(x) printf("%d\n",x) main() { TYPE(SQUARE(3+1)); TYPE(125/SQUARE(5)); TYPE(10*SUM(3,4)); TYPE(PRODUCT(2+3,4)); }
2.
ǻȘµȚȠȣȡȖİȓıIJİ ȑȞĮ ĮȡȤİȓȠ-İʌȚțİijĮȜȓįĮȢ µİ ȩȞȠµĮ embada.h IJȠ ȠʌȠȓȠ ȞĮ ʌİȡȚȑȤİȚ µĮțȡȠİȞIJȠȜȑȢ ȖȚĮ IJȠȞ ȣʌȠȜȠȖȚıµȩ ݵȕĮįȫȞ IJȦȞ İȟȒȢ ıȤȘµȐIJȦȞ: ȠȡșȠȖȦȞȓȠȣ ʌĮȡĮȜȜȘȜȠȖȡȐµµȠȣ, țȪțȜȠȣ, IJȡȚȖȫȞȠȣ țĮȚ IJȡĮʌİȗȓȠȣ. ȈIJȘ ıȣȞȑȤİȚĮ ȖȡȐȥIJİ ȑȞĮ ʌȡȩȖȡĮµµĮ ʌȠȣ ȞĮ ȣʌȠȜȠȖȓȗİȚ IJĮ ݵȕĮįȐ IJȦȞ ʌĮȡĮʌȐȞȦ ıȤȘµȐIJȦȞ, țȐȞȠȞIJĮȢ ȤȡȒıȘ IJȠȣ ĮȡȤİȓȠȣ embada.h.
3.
ȅȡȓıIJİ µȓĮ µĮțȡȠİȞIJȠȜȒ swap(type,x,y) ʌȠȣ ȞĮ İȞĮȜȜȐııİȚ IJȚȢ IJȚµȑȢ IJȦȞ µİIJĮȕȜȘIJȫȞ x țĮȚ y, țĮșݵȚȐ IJȪʌȠȣ type. Ǿ įȩµȘıȘ ıİ µʌȜȠț (ıȪȞșİIJȘ İȞIJȠȜȒ) șĮ ȕȠȘșȒıİȚ.
4.
ȆȠȚȠ İȓȞĮȚ IJȠ ĮʌȠIJȑȜİıµĮ IJȠȣ ʌĮȡĮțȐIJȦ ʌȡȠȖȡȐµµĮIJȠȢ: /* define.c */ int N=100; /* İȟȦIJİȡȚțȒ µİIJĮȕȜȘIJȒ */ main() { printf("%d\n",N); #define N 123 printf("%d\n",N); f(); } f() { printf("%d\n",N); #undef N printf("%d\n",N); }
5.
ǹȢ ȣʌȠșȑıȠȣµİ ȩIJȚ IJȠ ĮȡȤİȓȠ a.h ȑȤİȚ IJĮ İȟȒȢ ʌİȡȚİȤȩµİȞĮ:
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
174
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
/* a.h */ #define N 1000 ǼȞȫ IJȠ ĮȡȤİȓȠ b.c IJĮ ʌĮȡĮțȐIJȦ: /* b.c */ #include <a.h> main() { #ifndef N printf("ǻİȞ ȑȤİȚ ȠȡȚıIJİȓ IJȠ ȃ ıIJȠ ǹ.Ǿ\n"); #else #if N<=100 float matrix[N][N]; ....... ....... #else printf("ȉȠ ȃ İȓȞĮȚ ʌȠȜȪ µİȖȐȜȠ\n"); #endif #endif } ȆȠȚĮ șĮ İȓȞĮȚ IJĮ ĮʌȠIJİȜȑıµĮIJĮ ȩIJĮȞ İțIJİȜȑıȠȣµİ IJȠ ĮȡȤİȓȠ b.c;
175
ȆǹȇǹȇȉǾȂǹ ǹ'
ȉȅ ȈȊȃȅȁȅ ȋǹȇǹȀȉǾȇȍȃ ASCII ǻİțĮįȚțȩȢ ǻİțĮİȟ/țȩȢ ȋĮȡĮțIJȒȡĮȢ 0 1 2 3
00 01 02 03
4
04
5
ȆȜȒțIJȡȠ
ȋĮȡĮțIJȒȡĮȢ İȜȑȖȤȠȣ
j
Ctrl-2 Ctrl-A Ctrl-B Ctrl-C
NUL SOH STX ETX
Null Start Of Heading Start Of Text End Of Text
i
Ctrl-D
EOT
End Of Transmission
05
h
Ctrl-E
ENQ
Enquiry
6
06
k
Ctrl-F
ACK
Acknowledge
7
07
x
Ctrl-G
BEL
Bell
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18
n
Ctrl-H Ctrl-I Ctrl-J Ctrl-K Ctrl-L Ctrl-M Ctrl-N Ctrl-O Ctrl-P Ctrl-Q Ctrl-R Ctrl-S Ctrl-T Ctrl-U Ctrl-V Ctrl-W Ctrl-X
BS HT LF VT FF CR SO SI DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN
Backspace Horizontal Tabulation Line Feed Vertical Tabulation Form Feed Carriage Return Shift Out Shift In Data Link Escape Device Control 1 Device Control 2 Device Control 3 Device Control 4 Negative Acknowledge Synchronous Idle End of Transmission Block Cancel
25
19
p
Ctrl-Y
EM
o
Ctrl-Z
SUB
Substitute
m
Ctrl-[
ESC
Escape
l
Ctrl-\ Ctrl-]
FS GS
File Separator Group Separator
Ctrl-6 Ctrl-_
RS US
Record Separator Unit Separator
26
1A
27
1B
28 29
1C 1D
30 31
1E 1F
Ľ !! ¶ §
Ÿ ź
End Of Medium
176
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ǻİțĮįȚțȩȢ ǻİțĮİȟ/țȩȢ ȋĮȡĮțIJȒȡĮȢ ȆȜȒțIJȡȠ ǻİțĮįȚțȩȢ ǻİțĮİȟ/țȩȢ ȋĮȡĮțIJȒȡĮȢ ȆȜȒțIJȡȠ 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49
! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I
Space ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73
J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s
J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s
ȆĮȡȐȡIJȘµĮ ǹ'
177
ǻİțĮįȚțȩȢ ǻİțĮİȟ/țȩȢ ȋĮȡĮțIJȒȡĮȢ ȆȜȒțIJȡȠ ǻİțĮįȚțȩȢ ǻİțĮİȟ/țȩȢ ȋĮȡĮțIJȒȡĮȢ ȆȜȒțIJȡȠ 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156
ǹș. Ǽ. ȀȠȣIJıȠȞȚțȩȜĮȢ
74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 9B 9C 9D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C
t u v w x y z { | } ~ ¨
ǹ Ǻ ī ǻ Ǽ ǽ Ǿ Ĭ ǿ Ȁ ȁ Ȃ ȃ Ȅ ȅ Ȇ ȇ Ȉ ȉ Ȋ ĭ ȋ Ȍ ȍ Į ȕ Ȗ į İ
t u v w x y z { | } ~ Del ǹ Ǻ ī ǻ Ǽ ǽ Ǿ Ĭ ǿ Ȁ ȁ Ȃ ȃ Ȅ ȅ Ȇ ȇ Ȉ ȉ Ȋ ĭ ȋ Ȍ ȍ Į ȕ Ȗ į İ
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
9D 9E 9F A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5
ȗ Ș ș Ț ț Ȝ µ Ȟ ȟ Ƞ ʌ ȡ ı Ȣ IJ ȣ ij Ȥ ȥ
ȗ Ș ș Ț ț Ȝ µ Ȟ ȟ Ƞ ʌ ȡ ı Ȣ IJ ȣ ij Ȥ ȥ Alt-176 Alt-177 Alt-178 Alt-179 Alt-180 Alt-181 Alt-182 Alt-183 Alt-184 Alt-185 Alt-186 Alt-187 Alt-188 Alt-189 Alt-190 Alt-191 Alt-192 Alt-193 Alt-194 Alt-195 Alt-196 Alt-197
178
H īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C
ǻİțĮįȚțȩȢ ǻİțĮİȟ/țȩȢ ȋĮȡĮțIJȒȡĮȢ ȆȜȒțIJȡȠ ǻİțĮįȚțȩȢ ǻİțĮİȟ/țȩȢ ȋĮȡĮțIJȒȡĮȢ ȆȜȒțIJȡȠ 198 199 200 201 202 203 204 205 206 207 208
C6 C7 C8 C9 CA CB CC CD CE CF D0
Alt-198 Alt-199 Alt-200 Alt-201 Alt-202 Alt-203 Alt-204 Alt-205 Alt-206 Alt-207 Alt-208
227 228 229 230 231 232 233 234 235 236 237
E3 E4 E5 E6 E7 E8 E9 EA EB EC ED
209
D1
Alt-209
238
EE
210 211 212 213 214 215 216 217
D2 D3 D4 D5 D6 D7 D8 D9
Alt-210 Alt-211 Alt-212 Alt-213 Alt-214 Alt-215 Alt-216 Alt-217
239 240 241 242 243 244 245 246
EF F0 F1 F2 F3 F4 F5 F6
y
Alt-239 Alt-240 Alt-241 Alt-242 Alt-243 Alt-244 Alt-245 Alt-246
218
DA
Alt-218
247
F7
|
Alt-247
219
DB
Alt-219
248
F8
220 221 222 223 224 225 226
DC DD DE DF E0 E1 E2
Alt-220 Alt-221 Alt-222 Alt-223 Ȧ Alt-225 Alt-226
249 250 251 252 253 254 255
F9 FA FB FC FD FE FF
q .
Ȧ Ȑ ȑ
Ȓ ȧ ȓ ȩ Ȫ Ȩ ȫ Ù
į
I ŀ Ł ± ń Ņ
.
¥ n 2
Ů
Alt-227 Alt-228 Alt-229 Alt-230 Alt-231 Alt-232 Alt-233 Alt-234 Alt-235 Alt-236 Alt-237 Alt-238
Alt-248 Alt-249 Alt-250 Alt-251 Alt-252 Alt-253 Alt-254 Alt-255
179
ǺǿǺȁǿȅīȇǹĭǿǹ 1.
AMMERAAL LEENDERT, "C for Programmers", John Wiley & Sons Ltd, 1986. ȀĮȚ ıIJĮ İȜȜȘȞȚțȐ: "ȆȡȠȖȡĮµµĮIJȓȗȠȞIJĮȢ ıIJȘ īȜȫııĮ C", ǼțįȩıİȚȢ īțȚȠȪȡįĮ, 1986.
2.
KERNIGHAN BRIAN - RITCHIE DENNIS, "The C Programming Language" (Second Edition), Prentice Hall Inc., 1988. ȀĮȚ ıIJĮ İȜȜȘȞȚțȐ: "Ǿ īȜȫııĮ ȆȡȠȖȡĮµµĮIJȚıµȠȪ C", ȀȜİȚįȐȡȚșµȠȢ, 1990.
3.
LAFORE ROBERT, "Turbo C Programming for PC", The Waite Group Inc., 1987. ȀĮȚ ıIJĮ İȜȜȘȞȚțȐ: "Turbo C ȆȡȠȖȡĮµµĮIJȚıµȩȢ ȖȚĮ PC", ǼțįȩıİȚȢ īțȚȠȪȡįĮ, 1992.
4.
SCHILD HERBERT, "Turbo C: The Pocket Reference", McGraw-Hill, Inc., 1988. ȀĮȚ ıIJĮ İȜȜȘȞȚțȐ: "Turbo C: ȅįȘȖȩȢ DZµİıȘȢ ǹȞĮijȠȡȐȢ", ȀȜİȚįȐȡȚșµȠȢ, 1990.
5.
SCHILD HERBERT, "Using Turbo C", McGraw-Hill, Inc., 1989. ȀĮȚ ıIJĮ İȜȜȘȞȚțȐ: "ǼȖȤİȚȡȓįȚȠ İțµȐșȘıȘȢ Turbo C", ȀȜİȚįȐȡȚșµȠȢ, 1989.
6.
SCHILD HERBERT, "ȂȐșİIJİ İȪțȠȜĮ IJȘ īȜȫııĮ C", ȆĮȡĮIJȘȡȘIJȒȢ, 1988.
7.
WORTMAN L.A. - SIDEBOTTOM T.O., "The C Programming Tutor", Prentice Hall Inc, London, 1984.
8.
īȁǹȂȆǼǻǹȀǾȈ Ȃ. - ǹȉȂǹȉǽǿǻǾȈ ǹ., "Turbo C", ǿȍȃ, 1994.
9.
ȁǿǺǹǻǹȈ Ȁȍȃ/ȃȅȈ, "ǼȚıĮȖȦȖȒ ıIJȘ īȜȫııĮ C", IF-THEN-ELSE, 1992.