9. :آنچه در اين جلسه مي خوانيد
1- چرا ++C؟
2- تاريخچ ۀ ++C
3- آمادهسازي مقدمات
4- شروع کار با ++C
5- عملگر خروجي
6- ليترالها و کاراکترها
7- متغيرها و تعريف آنها
8- مقداردهي اوليه به متغيرها
9- ثابتها
10. هدف کلي:
آشنايي با تاريخچه و مزاياي زبان برنامهنويسي
++Cو بيان مفاهيم بنيادي شيگرايي و عناصر
مهم برنامههاي ++C
11. :هدفهاي رفتاري
انتظار ميرود پس از پايان اين جلسه بتوانيد:
- مزاياي زبان ++Cرا بر زبانهاي مشاب ه ذکر
کرده و تفاوت آن را با زبان Cبيان کنيد.
- شرح مختص ري از رون د پيشرفت زبانهاي
برنامهنويسي را بيان کرده و مشکلت هر دوره را
به اختصار شرح دهيد.
- مزاياي شيگرايي در توليد نرمافزار را برشماريد.
- اصول سهگانۀ شيگرايي را نام برده و هر يک
را به اختصار شرح دهيد.
12. - قال ب کل ي برنامههاي ++Cرا بشناس يد و بتوانيد
برنامههاي کوچک را نوشته و آزمايش کنيد.
- عملگر ورودي و خروجي را در ++Cشناخته و از آنها
در برنامهها استفاده کنيد.
- نحوۀ اعلن متغيره ا و شيوۀ مقدارده ي ب ه آنها را
بدانيد.
- سه موجوديت »ليترال« ، »کاراکتر« و »عدد« را شناخته
و فرق بين آنها را شرح دهيد.
- علت و شيوههاي افزودن توضيح به کد برنامه را شرح
دهيد.
- علت و شيوۀ معرفي ثابتها در برنامه را شرح دهيد.
13. مقدمه
در دهه 0791 در آزمايشگاههاي بل زباني به نام C
ايجاد شد. انحصار اين زبان در اختيار شرکت بل بود
تا اي ن ک ه در س ال 8791 توسط Kernighanو
Richieشرح کامل ي از اي ن زبان منتش ر ش د و به
سرعت نظر برنامهنويسان حرفهاي را جلب نمود.
هنگام ي ک ه بح ث شيگراي ي و مزاياي آن در جهان
نرمافزار رون ق ياف ت، زبان Cکه قابليت شيگرايي
نداشت ناقص به نظر ميرسيد تا اين که در اوايل
ده ۀ 0891 دوباره شرک ت ب ل دس ت ب ه کار شد و
Bjarne Stroustrupزبان ++Cرا طراحي نمود
14. ++Cترکيبي از دو زبان Cو Simulaبود و
قابليتهاي شيگراي ي ني ز داشت. از آ ن زمان به
بع د شرکتهاي زيادي کامپايلرهايي براي ++C
طراحي کردند. اين امر سبب شد تفاوتهايي بين
نس خههاي مختل ف اي ن زبان ب ه وجود بيايد و از
قابليت سازگاري و انتقال آن کاسته شود.
ب ه همين دليل در س ال 8991 زبان ++Cتوسط
موس سۀ اس تانداردهاي مل ي آمريک ا ) (ANSIبه
شکل استاندارد و يکپارچه درآمد.
15. 1- چرا ++C؟
زبان Cيک زبان همه ظوره است
من
در اي ن زبان عملگ هاي ي ت عبيه شده که
ر
برنامه ي طح پاي ين و به زبان ماشين را
نويس س
نيز امکانپذير يسازد
م
هاي فراواني دارد، کد منبع چون Cعملگر
برنام ها در اين زبان بسيار کوتاه است
ه
16. - زبان Cبراي اجراي بسياري از دستوراتش از توابع کتابخانهاي
استفاده ميکند و بيشتر خصوصيات وابسته به سختافزار را به اين
توابع واگذار مينمايد.
برنامۀ مقصدي که توسط کامپايلرهاي Cساخته ميشود بسيار
فشردهتر و کمحجمتر از برنامههاي مشابه در ساير زبانها است.
++Cکه از نسل Cاست، تمام ويژگيهاي جذاب Cرا به ارث
برده است .
و سرانجام آخرين دليل استفاده از ++Cورود به دنياي #Cاست.
17. 2- تاريخچۀ ++C
در ده ه 0791 در آزمايشگاههاي ب ل زبان ي به نام C
ايجاد شد. انحصار اين زبان در اختيار شرکت بل بود تا
اي ن ک ه در س ال 8791 توسط Kernighanو Richie
شرح کاملي از اين زبان منتشر شد و به سرعت نظر
برنامهنويسان حرفهاي را جلب نمود. هنگامي که بحث
شيگرايي و مزاياي آن در جهان نرمافزار رونق يافت،
زبان Cکه قابلي ت شيگراي ي نداش ت ناق ص ب ه نظر
ميرسيد تا اين که در اوايل دهۀ 0891 دوباره شرکت
بل دست به کار شد و Bjarne Stroustrupزبان ++C
را طراحي نمود.
18. ++Cترکيبي از دو زبان Cو Simulaبود و
قابليتهاي شيگرايي نيز داشت از آن زمان به بعد
شرکتهاي زيادي کامپايلرهايي براي ++Cطراحي
کردند. اي ن ام ر س بب ش د تفاوتهاي ي بين
نس خههاي مختل ف اي ن زبان ب ه وجود بيايد و از
قابليت سازگاري و انتقال آن کاسته شود . به همين
دلي ل در س ال 8991 زبان ++Cتوس ط موسسۀ
اس تانداردهاي مل ي آمريک ا ) (ANSIبه شکل
استاندارد و يکپارچه درآمد. کامپايلرهاي کنوني به
اي ن اس تاندارد پايبندند. کتاب حاض ر نيز بر مبناي
همين استاندارد نگارش يافته است.
19. آمادهسازي مقدمات -3
يک »برنامه« دستورالعملهاي متوالي است که
ميتواند توسط يک رايانه اجرا شود. براي نوشتن
و اجراي هر برنامه به يک »ويرايشگر متن« و يک
»کامپايلر« احتياج داريم.
بس تۀ ++Visual Cمحص ول شرکت
ميکروس افت و بس تۀ C++ Builderمحصول
شرکت بورلند نمونههاي جالبي از محيط مجتمع
توليد براي زبان ++Cبه شمار ميروند.
20. 4- شروع کار با ++C
++C نسبت به حروف »حساس به حالت« است يعني Aو
aرا يکي نميداند
مثال : اولين برنامه
اولين برنامهاي که مينويسيم به محض تولد، به شما سلم ميکند و عبارت " "!Hello, my programmerرا
نمايش ميدهد:
#<include <iostream
()int main
} ; "std::cout << "Hello, my programmer!n
0 ;return
{
21. اولين خط از کد بال يک »راهنماي
پيشپردازنده« است. راهنماي پيشپردازنده
شامل اجزاي زير است:
-1 کاراکتر # که نشان ميدهد اين خط، يک
راهنماي پيشپردازنده اس ت. اي ن کاراکت ر بايد
در ابتداي همۀ خطوط راهنماي پيشپردازنده
باشد.
-2 عبارت include
-3 نام يک »فايل کتابخانهاي« که ميان دو
علمت >< محصور شده است.
22. خط دوم برنامه نيز بايد در همه برنامههاي +C
+ وجود داشته باشد.
اين خط به کامپايلر ميگويد که »بدنۀ اصلي برنامه« از کجا شروع
ميشود. اين خط داراي اجزاي زير است:
1 – عبارت intکه يک نوع عددي در ++Cاست.
2 – عبارت mainکه به آن »تابع اصلي« در ++Cميگويند.
3 – دو پرانتز )( که نشان ميدهد عبارت mainيک »تابع« است.
هر برنامه فقط بايد يک تابع
()mainداشته باشد .
23. سه خط آخر برنامه، »بدنۀ اصلي برنامه« را تشکيل
.ميدهند
دستورات برنامه از خط سوم شروع شده است.
دستور خط سوم با علمت سميکولن ; پايان يافته
است.
24. توضيح
توضي ح، متن ي اس ت ک ه به منظور
راهنماي ي و درک بهت ر ب ه برنام ه اضافه
ميشود و تاثيري در اجراي برنامه
ندارد. . کامپايلر توضيحات برنامه را قبل
از اجرا حذف ميکند.
اس تفاده از توضي ح س بب ميشود که
ساير افراد ک د برنام ۀ شم ا را راحتتر
25. به دو صورت ميتوانيم به برنامههاي ++Cتوضيحات اضافه
کنيم:
– 1 با اس تفاده از دو علمت
اس لش // : هر متن ي ک ه بعد از دو
علم ت اس لش بياي د تا پايان همان
سطر يک توضيح تلقي ميشود .
– 2با استفاده از حالت : Cهر متني
که ب ا علم ت /* شروع شود و با
علمت */ پايان يابد يک توضيح تلقي
26. 5- عملگر خروجي
علم ت >> عملگ ر خروج ي در ++Cنام دارد )به آن
عملگر درج نيز ميگويند(.
يک »عملگر« چيزي است که عملياتي را روي يک يا چند
شي انجام ميدهد. عملگر خروجي، مقادير موجود در سمت
راستش را به خروجي سمت چپش ميفرستد.
به اين ترتيب دستور
; 66 <<cout
مقدار 66 را به خروجي coutميفرستد که coutمعمول
به صفحهنمايش اشاره دارد. در نتيجه مقدار 66 روي صفحه
نمايش درج ميشود.
27. 6 -ليترالها و کاراکترها
ي ک »ليترال« رشتهاي از حروف، ارقام ي ا علي م چاپي
اس ت ک ه ميان دو علم ت نق ل قول " " محصور شده
باشد.
يک »کاراکتر« يک حرف، رقم يا علمت قابل چاپ است
که ميان دونشانۀ ' ' محصور شده باشد. پس ' 'wو '!' و
'1' هر کدام يک کاراکتر است.
به تفاوت سه موجوديت »عدد« و »کاراکتر« و »ليترال
رشتهاي« دق ت کني د: 6 يک عدد اس ت، '6' يک کاراکتر
است و "6" يک ليترال رشتهاي است.
28. 7 - متغيرها و تعريف آنها:
»متغيسر« مکانسي در حافظسه اسست کسه چهار مشخصه
دارد: نام، نوع، مقدار، آدرس س . وقتي متغيري را
تعري ف ميکني م، ابتدا ب ا توج ه ب ه نوع متغير،
آدرسي از حافظه در نظر گرفته ميشود، سپس
به آن آدرس يک نام تعلق ميگيرد.
29. در ++Cقبل از اين که بتوانيم از متغيري استفاده
کنيم، بايد آن را اعلن نماييم.
نحو اعلن يک متغير
type name initializer
عبارت typeنوع متغي ر را مشخص ميکند.
نوع متغير به کامپايلر اطلع ميدهد که اين
متغي ر چ ه مقاديري ميتوان د داشت ه باشد و
چه اعمالي ميتوان روي آن انجام داد.
30. name initializer
عبارت nameنام متغي ر را نشان ميدهد. اين نام
حداکث ر ميتوان د 13 کاراکت ر باش د، نباي د با عدد شروع
شود، علي م رياض ي نداشت ه باش د و همچني ن »کلمۀ
کليدي« نيز نباشد.
مقداردهي اوليه
عبارت initializerعبارت »مقداردهي اوليه« نام دارد. با
استفاده از اين عبارت ميتوان مقدار اوليهاي در متغير
مورد نظر قرار داد.
دستور زير تعريف يک متغير صحيح را نشان ميدهد:
;05 = int n
31. 8 - مقداردهي اوليه به متغيرها
در بسياري از موارد بهتر است متغيرها را در همان محلي که
اعلن ميشون د مقدارده ي کنيم. استفاده از متغيرهاي
مقداردهي نشده ممکن است باعث ايجاد دردسرهايي شود.
دردس ر متغيرهاي مقدارده ي نشده وقت ي بزرگ تر ميشود که
سعي کني م متغي ر مقدارده ي نشده را در ي ک محاس به به کار
ببريم. مثل اگر xرا که مقداردهي نشده در عبارت 5 + ;y = x
به کار ب بريم، حاص ل yغي ر قاب ل پيش بيني خواهد بود. براي
اجتناب از چنين مشکلتي عاقلنه است که متغيرها را هميشه
هنگام تعريف، مقداردهي کنيم.
مثال:
;54=int x
;0=int y
32. 9- ثابتها
در بعضي از برنامه ها از متغيري استفاده ميکنيم که فقط يک بار لزم
است آن را مقداردهي کنيم و سپس مقدار آن متغير در سراسر برنامه
بدون تغيير باقي ميماند. مثل در يک برنامۀ محاسبات رياضي، متغيري به
نام PIتعريف ميکنيم و آن را با 41.3 مقداردهي ميکنيم و ميخواهيم
که مقدار اي ن متغي ر در س راسر برنام ه ثاب ت بماند. در چني ن حالتي از
»ثابتها« استفاده ميکنيم.
يک ثابت، يک نوع متغير است که فقط يک بار مقداردهي
ميشود و سپس تغيير دادن مقدار آن در ادامۀ برنامه ممکن
نيست.
تعريف ثابتها مانند تعريف متغيرهاست با اين تفاوت که
کلمه کليدي constبه ابتداي تعريف اضافه ميشود.
33. :مثال تعريف ثابتها
int main()
{ // defines constants; has no output:
const char BEEP ='b';
const int MAXINT=2147483647;
const float DEGREE=23.53;
const double
PI=3.14159265358979323846
return 0;
}
:برنامه فوق خروجي ندارد
34. عملگر ورودي - 01
براي اين که بتوانيم هنگام اجراي برنامه مقاديري را وارد کنيم از
عملگر ورودي << استفاده ميکنيم.
:استفاده از دستور ورودي به شکل زير است
;cin >> variable
variableنام يک متغير است.
35. مثال 101 – استفاده از عملگر ورودي
برنامس ۀزسسسيسر يسک عدد از کاربر گرفته و همان عدد را دوباره در
:خروجي نمايش ميدهد
int main()
{ // reads an integer from input:
int m;
cout << "Enter a number: ";
cin >> m;
cout << "your number is: " << m << endl;
return 0;
}
Enter a number: 52
your number is: 52
36. عملگسر ورودي نيسز ماننسد عملگسر خروجسي بسه شکل
جريانسي رفتار ميکند. يعنسي همان طور کسه در عملگر
خروجي ميتوانستيم چند عبارت را با استفاده از چند
عملگسر >> به صسورت پشست سسر هسم چاپ کنيم، در
عملگر ورودي نيز ميتوانيم با استفاده از چند عملگر
<< چند مقدار را به صورت پشت سر هم دريافت کنيم.
مثل با استفاده از دستور:
;cin >> x >> y >> z
سه مقدار xو yو zبه ترتيب از ورودي دريافت ميشوند.
براي ايسسن کار بايسسد بيسسن هسسر ورودي يسسک فضاي خالي
) (spaceبگذاريد و پس از تايپ کردن هم ۀوسسسروديها، کليد
enterرا بفشاريد. آخرين مثال جلسه، اين موضوع را بهتر
37. مثال 111 – چند ورودي روي يک خط
برنام ۀزسسسير مانند مثال 01 – 2 است با اين تفاوت که سه
عدد را از ورودي گرفته و همان اعداد را دوباره در
:خروجي نمايش ميدهد
int main()
{ // reads 3 integers from input:
int q, r, s;
cout << "Enter three numbers: ";
cin >> q >> r >> s;
cout << "your numbers are: << q << ", " << r
<< ", " << s << endl;
return 0; Enter three numbers: 35 70 9
your numbers are: 35, 70, 9
}
43. هدف کلي:
هدفهاي رفتاري:
انتظار ميرود پ س از وپايان اي بنکارگيري
معرف ي انواع متغييرها نحوۀ ه جلسه
بتوانيد:در برنامههاي ++C
آنها
- انواع عددي صحيح در ++Cرا نام ببريد و
متغيرهاي ي از اي ن نوع ها را در برنامه ها به
کار ببريد.
- انواع عددي مميز شناور در ++Cرا نام
ببري د و متغيرهاي ي از اي ن نوعها را در
<<< برنامهها به کار ببريد.
- نوع بولين را تعريف کرده و متغيرهايي از
44. - نوع شمارشي را شناخته و متغيرهايي از
اين نوع را در برنامهها به کار ببريد.
- مفاهيم »تبديل نوع« و »گسترش نوع« را
شناخته و انواع مختلف را به يکديگر تبديل
نماييد.
- عل ت خطاهاي »سرريزي عددي« و
»گردکردن« را دانسته و بتوانيد محل وقوع
آنها را کشف کنيد.
- عملگرهاي حسابي و افزايشي و کاهشي
45. مقدمه
م ا در زندگ ي روزمره از دادههاي مختلفي
استفاده ميکنيم: اعداد ، تصاوير، نوشتهها
يا حروف الفب ا، ص داها، بوه ا و ... . با
پردازش اي ن داده ها ميتواني م تصميماتي
اتخاذ کنيم، عکسالعملهايي نشان دهيم و
مس الهاي را ح ل کنيم. رايانه ها نيز قرار
اس ت همي ن کار را انجام دهند. يعني
دادههايي را بگيرند، آن ها را به شکلي که
ما تعيين ميکنيم پردازش کنند و در نتيجه
46. 1- انواع دادۀ عددي
در ++Cدو نوع اصلي داده وجود دارد:
»نوع ص حيح« و »نوع مميز شناور«.
همۀ انواع ديگر از روي اين دو ساخته
ميشوند )به شکل زير دقت کنيد(.
انواع اصلي
انواع مميز شناور انواع صحيح
47. نوع صحيح
نوع صحيح براي نگهداري اعداد
صحيح )اعداد 0 و 1 و 2 و ...(
استفاده ميشود. اين اعداد بيشتر
براي شمارش ب ه کار ميروند و
دامنه محدودي دارند.
48. انواع صحيح
نوع نوع نوع نوع
boolean يشمارش کاراکتري عددي صحيح
short
bool enum
char int
long
unsigned Unsigned
char short
Unsigned
wchar_t int
unsigned
long
49. نوع مميز شناور براي نگهداري اعداد اعشاري
اس تفاده ميشود. اعداد اعشاري بيشتر براي
اندازهگيري دقيق به کار ميروند و دامنۀ بزرگتري
دارند . يک عدد اعشاري مثل 781/253 را ميتوان
به شک ل 01×81/2537 يا 201×1/25378
يا01×3781/251-يا01×53781/2 2-و يا ... نوشت.
به اي ن انواع مميز کم و زياد کردن
ترتي ب ب ا شناور
توان عدد 01 مميز عدد نيز جابهجا
ميشود . به همين دليل است که به
اعداد اعشاري »اعداد مميز «float
شناور double long double
ميگويند.
50. متغير عدد صحيح -2
++Cشش نوع متغي ر عدد صحيح دارد
تفاوت اي ن ش ش نوع مربوط به ميزان
حافظ ۀ مورد استفاده و محدودۀ مقاديري
است که هر کدام ميتوانند داشته باشند.
اين ميزان حافظۀ مورد استفاده و محدودۀ
مقادي ر، بس تگي زيادي ب ه سختافزار و
همچني ن س يستم عام ل دارد. يعن ي ممکن
اس ت روي ي ک رايان ه، نوع intدو بايت از
حافظ ه را اشغال کن د در حال ي که روي
رايانهاي از نوع ديگ ر نوع intبه چهار بايت
51. نوع متغيير حداقل مقدار قابل حداكثر مقدار قابل
پذيرش پذيرش
short 86723- 76723
unsigned short
توجسه داشته 0 53556
وقتسي برنامهاي مينويسسيد،
باشيسد کسه از نوع صسحيح مناسسب استفاده
int 7463847412 8463847412-
5927694924 برنامه دچار خطا unsigned int
نشود و هم 0 کنيد تا هم
حافظ ۀسسسسيستم را هدر ندهيد.
long 8463847412- 7463847412
unsigned long 0 5927694924
53. 4 - عملگرهاي افزايشي و کاهشي
++Cبراي دستکاري مقدار متغيرهاي صحيح، دو
عملگر جالب ديگر دارد:
عملگر ++ کدام از ايسن عملگرها دو
امسا هسر :
شکسسسل متفاوت دارنسسسد : شکل
مقدار يک متغير را يک واحد افزايش
»پيشوندي« و شکل »پسوندي«.
ميدهد.
عملگر -- :
54. در شک ل پيشوندي ابتدا متغير،
متناس ب ب ا عملگعملگر قبلش نام
يا در شکل پيشوندي، ر، افزاي از
متغير ميآيد مثل ++ mيا -- . nدر
کاهش مييابد و پس از آن مقدار
شک ل پس وندي، عملگ ر بعد از نام
متغير ميآيد مثل محاس يا . --nديگر
متغي ر براي ++mبات
استفاده ميشود.
در شک ل پسوندي ابتدا مقدار
متغير در محاسبات به کار ميرود
و پس از آن مقدار متغير يک واحد
55. 5 – عملگرهاي مقدارگذاري مرکب
++ Cعملگرهاي ديگري دارد که
مقدارگذاري در متغيره ا را تسهيل
م ي نمايند. مثل با ا ستفاده از عملگر
+= م ي تواني م هش ت واح د به m
اضا فه کن يم ا ما با د ستور کوتا ه تر:
دستور بال معادل دستور 8 + ;m = mاست
با اين تفاوت که کوتاهتر است. به عملگر +=
»عملگ ر مرک ب« ميگوين د زيرا ترکيبي از
56. عملگرهاي مقدارگذاري مرکب -5
براي مقدارگذاري در قبل از عملگر =
متغيرها استفاده کرديم. ++Cعملگرهاي
ديگري دارد ک ه مقدارگذاري در متغيرها را
تسهيل مينمايند.
+= و عملگر مرکب در ++Cعبارتند از:
-= و *= و /= و =%
58. 6 – انواع مميز شناور
عدد مميز شناور به بيان ساده همان عدد اعشاري است. عددي
مثل 54.321 يک عدد اعشاري است. براي اين که مقدار اين
عدد در رايانسه ذخيره شود، ابتدا بايسد بسه شکسل دودويسي تبديل
21001110.1101111 = 54.321 شود:
اکنون براي مشخ ص نمودن محل اعشار در عدد، تمام
رقم ها را به سمت راست مميز منتقل ميکنيم. البته با هر
جابجايي مميز، عدد حاصل بايد در تواني از 2 ضرب شود:
72 ×10011101101111.0 = 54.321
به مقدار 10011101101111 »مانتيس عدد« و به
7 که توان روي دو است، »نماي عدد« گفته ميشود.
59. در ++Cسه نوع مميز شناور وجود
دارد:
انواع مميز شناور
float double long double
نوع doubleاز هشتهشتبراي
نوع long doubleاز بايت
معمول نوع floatاز چهار يا
نگهداري عدد استفاده ميکند.بايت
ده براي نگهداري شانزده بايت
عدد استفاده ي ا دوازده ي ا
برايي نگهداري عدد استفاده
م کند.
61. 7 – تعريف متغير مميز شناور
تعري ف متغي ر ممي ز شناور مانن د تعريف
تفاوت نوع floatبا نوع doubleدر اين
متغي ر ص حيح اس ت . با اي ن تفاوت که از
است که نوع doubleدو برابر floatاز
کلم ۀ کليدي floatيا doubleبراي
حافظ ه اس تفاده ميکند. پس نوع
مشخ ص نمودن نوع متغي ر استفاده
doubleدقت ي بس يار بيشتر از float
ميکنيم.
دارد . به همين دليل محاسبات double
مثال:
وقتگيرتر از محاسبات floatاست.
;float x
62. شکل علمي مقادير مميز شناور -8
اعداد ممي ز شناور ب ه دو صورت در ورودي و
خروج ي نشان داده ميشون د : به شکل
»ساده« و به شکل »علمي«.
علمي -2 ساده -1
401×765432.1 76.54321
مشخ ص اس ت ک ه شک ل علمي براي
نشان دادن اعداد خيل ي کوچک و
همچني ن اعداد خيل ي بزرگ، کارآيي
بيشتري دارد.
63. 9 – نوع بولين bool
نوع boolيک نوع ص حيح اس ت که
متغيرهاي اين نوع فقط ميتوانند مقدار
trueيا falseداشت ه باشند. trueبه
معني درست و falseبه معني نادرست
است.
اما اين مقادير در اصل به صورت 1 و 0
درون رايان ه ذخيره ميشوند: 1 براي
trueو 0 براي .false
64. 01- نوع کاراکتري char
يک کاراکتر يک حرف، رقم يا نشانه است که
يک شمارۀ منحص ر ب ه فرد دارد. به عبارت
عاميان ه، ه ر کليدي ک ه روي صفحهکليد خود
ميبينيد يک کاراکتر را نشان ميدهد.
مثل هر يک از حروف ' ' Aتا ' 'Zو ' 'aتا ' 'zو
هر يک از اعداد '0' تا '9' و يا نشانههاي '~' تا
'+' روي صفحهکليد را يک کاراکتر مينامند.
65. براي تعري ف متغيري از نوع کاراکتر از
کلم ه کليدي charاس تفاده ميکنيم. يک
کاراکتر بايد درون دو علمت آپستروف )'(
محص ور شده باشد . پس ' ' Aيک کاراکتر
است؛ همچنين'8 ' يک کاراکتر است اما 8
يک کاراکت ر نيس ت بلک ه ي ک عدد صحيح
است .
مثال:
;'char c ='A
66. 11 – نوع شمارشي enum
يک نوع شمارشي يک نوع صحيح است که
توسط کاربر مشخص ميشود. نحو تعريف
يک نوع شمارشي به شکل زير است:
}enum typename{enumerator-list
که enumکلمهاي کليدي است، typename
نام نوع جديد است که کاربر مشخص ميکند
و enumerator-listمجموعه مقاديري است
که اين نوع جديد ميتواند داشته باشد.
67. به عنوان مثال به تعريف زير دقت کنيد:
}enum Day{SAT,SUN,MON,TUE,WED,THU,FRI
حال Dayيک نوع جديد است و متغيرهايي که از اين
نوع تعريف جديد ميتوانند يکي از ۀمسسسسقاديرش
وقتي نوعميشوند Dayو محدودمقادير SATو را
تعيين و MONميتوانيم متغيرهايي ازو FRIنوع
SUNکرديم، و TUEو WEDو THUاين را
داشته باشند:
جديسد بسسازيم. در کد بال متغيرهاي 1 dayو
;2Day day1,day
2 dayاز نوع Dayتعريف شدهاند.= آنگاه
;day1 MON
1 dayبا مقدار MONو 2 dayبا = مقدار
;day2 THU
THUمقداردهي شده است.
68. ميتوان مقادير صحيحودلخواهي را به ... هر
SUNو شمارشگرها مقادير SAT
چن د ک ه ب ه همي ن شک ل به کار نسبت داد:
46=enum Day{{SAT=1,SUN=2,MON=4,TUE=8,WED=16,THU=32,FRI
ميهمچنيسن ام ايسا چنسد شمارشگسرهدرشکل
اگسر رون د دو از شمارشگرهسا مقداردهسي يک
شوند، فقسط بعضسي در رايان ه ب
آنگاه سساير ميتواننسد مقاديسر1مقداردهسي داشتهاند
فهرسست شمارشگرهسا وکسه يکسساني ونشده
و 2 ... اعداد: صحيح 0
باشندمتوالي بعدي را خواهند گرفت:
مقادير
Day{{SAT=1,SUN,MON,TUE,WED,THU,FRIدليل
ذخيره ميشوند . به همين enum
1=enum Answer{{NO=0,FALSE=0,YES=1,TRUE=1,OK
دسستورک ه مقاديسره ر تاي 7 را بسه مقادير
ترتيسب به
اس ت بال ب ه 1 ک از
SATهفته SUNو داد.... يک
روزهاي و تخصيص خواهد
69. نحوۀ انتخاب نامشمارشگره ا آزاد اس ت ام ا بيشتر
برنامهنويسان از توافق زير در برنامههايشان استفاده
ميکنند:
نام – براي نام ثاب ت ها از حروف
1 شمارشگر بايد معتبر باشد:
بزرگ استفاده کنيد
يعني:
2 کلمۀ کليدي نباشد. از نام نوع
1- – اولين حرف
2- شمارششروع نشودحرف بزرگ
. با عدد ي را با
بنويسيد.
3- نشانههاي رياض ي ني ز نداشته
3- نشانههاي رياض ي ني ز نداشته
باشد. در هر جاي ديگر از حروف
3 –
کوچک استفاده کنيد.
70. آخسر ايسن کسه همنام نبايد در محدودهعنوان
هاي شمارشگرهاي نام شمارشگرهسا نبايسد به
مشترک استفاده شوند. برايجاهاي ديگسسر برنامه
مثال تعريفهاي زير نام متغيرهاي ديگسسر در
استفاده شود. مثل:
را در نظر بگيريد:
enumScore{{A,B,C,D
}enum Score{A,B,C,D
;float B
enum Group{{AB,B,BC
;char c
دو تعريف بال غيرمجاز است زيرا شمارشگر
در تعريفهاي بال Bو Cرا نبايد به عنوان
Bدر هر دو تعريف Scoreو Groupآمده
نام متغيرهاي ديگر به کار برد زيرا اين نامها
است.
در نوع شمارشي Scoreبه کار رفته است .
71. انواع شمار شي براي تول يد کد » خود
مستند« به کار م ي روند، يعني کدي که
به راحت ي درک شود و نياز به
توضيحات اضافي نداشته باشد.
مثل تعاري ف زي ر خودمس تند هستند
زيرا ب ه راحتي نام و نوع کاربرد و
محدودۀ مقاديرشان درک م ي شود:
}enum Color{RED,GREEN,BLUE,BLACK,ORANGE
}enum Time{SECOND,MINUTE,HOUR
}enum Date{DAY,MONTH,YEAR
}enum Language{C,DELPHI,JAVA,PERL
72. 21 – تبديل نوع، گسترش نوع
در محاس باتي ک ه چن د نوع متغير وجود
دارد، جواب هميش ه ب ه شکل متغيري
است که دقت بالتري دارد. يعني اگر يک
عدد ص حيح را ب ا ي ک عدد مميز شناور
جمعبراي ايسن پاسخ به يسک متغير از شناور
ببنديم، کسه مقدار شکل مميز نوع
مميسز شناور را بسه نوع صسحيح تبديسل کنيم
است به اين عمل گسترش نوع ميگويند.
از عبارت ()intاسستفاده ميکنيسم بسه اين
اسستفاده ميکنيسم بسه اين از عبارت
عمل تبديل نوع گفته مي شود
73. .مثالهاي زير تبديل نوع و گسترش نوع را نشان ميدهند
مثال گسترش نوع
:مثال تبديل نوع
برنام ۀزسسسير يک عدد صحيح را با يک عدد مميز شناور جمع
: تبديل ميکندint را به نوعdouble اينم برنامه، يک نوع
:يکند
int main()
int main()
{ // casts a double value as a double value:
{ // adds an int value with an int:
double 22;
int n = v=1234.987;
int n; p = 3.1415;
double
n = int(v);
p += n;
cout << "v = " << v << ", n = " << n << endl;
cout << "p = " << p << ", n = " << n << endl;
return 0;
return 0;
}
}
74. 31 – برخي از خطاهاي برنامهنويسي
اي ن قبي ل خطاه ا ک ه اغلب خطاهاي نحوي
هستند ، توسط کامپايلر کشف ميشوند و به
راحتي ميتوان آنها را رفع نمود.
»خطاي زمان اجرا«
کشف اينگونه خطاها به راحتي ممکن نيست
و کامپايل ر ني ز چيزي راج ع ب ه آن نميداند.
برخي از خطاهاي زمان اجرا سبب ميشوند
که برنامه به طور کامل متوقف شود و از کار
75. 41- سرريزي عددي
يک متغير هر قدر هم که گنجايش داشته
باش د، بالخره مقداري هس ت که از
گنجايش آن متغير بيشتر باشد. اگر سعي
کنيم در يک متغير مقداري قرار دهيم که
از گنجايش آن متغير فراتر باشد، متغير
»سرريز « ميشود،در چني ن حالتي
ميگويي م ک ه خطاي سرريزي رخ داده
76. ل 21 – 2 سرريزي عدد صحيح مثا
اين برنامه به طور مكرر nرا در 0001 ضرب يكند تا
م
م سرريز شود:سرانجا
وقت ي ي ک عدد صحيح
)(int main
{ ://prints n until it overflowsسرريز
سرريز شود، عدد
شده ب ه ي;cout << "n = " << n << endl
ک مقدار منفي
;0001= int n
»گردانيده« nميشود ;0001 =* n
0001 // multiplies byاما
وقت ي ي ک nعدد مميز شناور
;cout << "n = " << n << endl
;0001 =* n 0001 // multiplies by
; endlنماد<< " = cout << " n
سرريز شود، << inf nبه
معناي بي ; << endlرا به =دست
;0001 =* n
نهايت
0001 // multiplies n by
cout << " n " << n
;0 return ميدهد.
}
77. 51 – خطاي گرد کردن
خطاي گرد كردن نوع ديگري از خطاست كه
اغلب وقتي رايانهها روي اعداد حقيقي
»هيچگاه از متغي ر مميز شناور براي
محاس به ميكنند، رخ ميدهد. براي مثال
مقايس ه برابري اس تفاده نکنيد« زيرا در
عدد 3/1ممكن است به صورت 333333.0
متغيرهاي مميز شناور خطاي گرد کردن
ذخيره شود كه دقيقا معادل 3/1 نيست.
سبب ميشود ک ه پاس خ ب ا آ ن چه مورد
اين خطا از آنجا ناشي ميشود که اعدادي
نظر شماست متفاوت باشد.
مث ل 3/1 مقدار دقي ق ندارن د و رايانه
نميتوان د اي ن مقدار را پيدا کن د، پس
نزديکتري ن عدد قاب ل محاس به را به جاي
78. حوز ۀمسسسستغيرها – 61
انتخاب نامهاي نامفهوم ي ا ناق ص سبب
اص طلح »بلوک« در ++Cواژه
کاهش خوانايي برنامه و افزايش خطاهاي
مناس بي اس ت ک ه ميتوان ب ه وسيلۀ
برنامهنويسي ميشود. استفاده از متغيرها
آن حوزۀ متغير را مشخص نمود. يک
در حوزۀ نامناس ب ه م سبب بروز
بلوک برنامه، قسمتي از برنامه است
خطاهاي ي ميشود. »حوزه متغير«
که درون يک جفت علمت کروشه } {
محدودهاي است که يک متغير خاص اجازه
محدود شده است.
دارد در آن محدوده به کار رود يا فراخواني
شود.
79. حوزۀ يک متغير از محل اعلن آن شروع
ميشود و ت ا پايان همان بلوک ادامه
مييابد. خارج از آ ن بلوک نميتوان به
متغير دسترسي داشت. همچنين قبل از
اين که متغير اعلن شود نميتوان آن را
استفاده نمود.
ميتواني م در ي ک برنام ه، چن د متغير
متفاوت ب ا ي ک نام داشت ه باشي م به
شرطي که در حوزههاي مشترک نباشند.
84. هدفهاي رفتاري:
هدف کلي:
انتظار ميرود پس از پايان اين جلسه بتوانيد:
شناخست تور ifشناخت ه و لهاي انتخاب و شيو ۀ
- نح و دس انواع رادستورالعم آ ن را در برنامه ها به کار
ببريد.
بهکارگيري هر يک
- نحو دستور if..elseرا شناخته و آن را در برنامه ها به
کار ببريد.
- از ساختار else..ifدر تصميمگيريهاي پيچيده استفاده
کنيد.
- نحو دستور switchرا شناخته و خطاي »تلۀ سقوط«
را تشخيص دهيد.
- بلوک دستورالعمل را تعريف کنيد.
- عملگرهاي مقايس هاي و عملگ ر عبارت شرطي را در
<<< دستورات شرطي به کار ببريد.
85. مقدمه
ه مۀ برنام ه ها يي که در دو جلسه اول
بيان ش د، ب ه شک ل ترتيبي اجرا
م ي شون د، يعن ي دس تورات برنام ه به
ترتيب از بال به پايين و هر کدام دقيقا
يک بار اجرا م ي شوند. در اي ن جلسه
نشان داده م ي شود چگونه از
دس تورالعم ل هاي انتخاب 1 جهت
انعطا ف پذيري بيشت ر برنام ه استفاده
86. بسه شکل دسستور ifدستور if
ميشود برنامسهموجسب
است: آن گونسسسس ۀ زير
شرطي اجرا شود. نحو
به شرطي اجرا شود نحو
;If (condition) statement
Conditionکه شرط ناميده م ي شود يك
عبارت صحيح ا ست ) عبار تي که با يک
مقدار صحيح برآورد م ي شود( و
statementم ي توان د ه ر فرمان قابل
اجرا باشد. Statementوقتي اجرا
خواه د ش د ك ه conditionمقدار غير
صفر داش ته باشد. د قت كن يد كه شرط
88. يک آزمون قابليت تقسيم مثال
int main()
{ int n, d;
cout << " Enter two positive integers: ";
cin >> n >> d;
if (n%d) cout << n << " is not divisible by " << d << endl;
else cout << n << " is divisible by " << d << endl;
}
89. هاي مقايسهاي4- عملگر
در ++Cشش عملگر مقايسهاي وجود دارد: >
و < و >= و <= و == و != . هر يک
از ايسسن شسسش عملگسسر بسسه شکسسل زيسسر به کار
ميروند:
xکوچکتر از yاست // x < y
xبزرگتر از yاست // x > y
xکوچکتر يا مساوي yاست // x <= y
xبزرگتر يا مساوي yاست // x >= y
xمساوي با yاست // x == y
90. اين ها ميتوانن د براي مقايسۀ مقدار
عبارات با هر نوع ترتيبي استفاده شوند.
عبارت حاصل به عنوان يك شرط تفسير
ميشود. مقدار اين شرط صفر است اگر
شرط نادرست باشد و غير صفر است اگر
شرط درس ت باشد. براي نمونه، عبارت
7*8> 6*5 برابر با صفر ارزيابي ميشود،
به اين معني كه اين شرط نادرست است.
91. متغير عدد صحيح -2
++Cشش نوع متغي ر عدد صحيح دارد
تفاوت اي ن ش ش نوع مربوط به ميزان
حافظ ۀ مورد استفاده و محدودۀ مقاديري
است که هر کدام ميتوانند داشته باشند.
اين ميزان حافظۀ مورد استفاده و محدودۀ
مقادي ر، بس تگي زيادي ب ه سختافزار و
همچني ن س يستم عام ل دارد. يعن ي ممکن
اس ت روي ي ک رايان ه، نوع intدو بايت از
حافظ ه را اشغال کن د در حال ي که روي
رايانهاي از نوع ديگ ر نوع intبه چهار بايت
92. ي با دقت کنيد كه در ++ Cعملگر جايگزين
ي عملگر برابري فرق دارد. عملگر جايگزين
يک مساوي ي " = " است ي عملگر
ول تک
برابري، دو مساوي " = = " است.
مثل دستور 33;= xمقدار 33 را در xقرار
ي يکند
يدهد ي دستور 33 ;== xبررس مول م
که آيا مقدار xبا 33 برابر است يا خير. درک
اين تفاوت هميت زيادي دارد.
ا
94. ()int main
مثال : يك بلوك دستورالعمل درون
} ;int x, y يك دستور if
;" :cout << "Enter two integers
ا ين برنا مه دو عدد صحيح را xگرفته و
;cin >> >> y
به ترتي ب temp = xآن ها را> چاپ
بزرگ تري، if (x y){ ;int
;x = y م ي كند:
;y = temp
} //swap x and y
;cout << x << " <= " << y << endl
{
95. int main()
{ int n=44;
cout << "n = " << n << endl;
{ int n;
cout << "Enter an integer: ";
cin >> n;
cout << "n = " << n << endl; }
{ cout << " n = " << n << endl; }
{ int n;
cout << "n = " << n << endl; }
cout << "n = " << n << endl; }
96. 5 – شر هاي مركب
ط
ط ي مان ند n%dو x>=yيتوان ند به صورت
م شر هاي
يك ط مركب با م تركيب شوند. اين كار با استفاده
ه شر
هاي من ي && ) (andو || ) (orو ! )(not طق ازعملگر
صورت يپذيرد. ا ين عملگرها به ش ل ز ير تعريف
ک م
يشوند:م
p && qدرست است اگر و تنها اگر هم pو هم qهر دو درست
باشند
نادرست است اگر و تنها اگر هم pو هم qهر دو نادرست p || q
باشند
!pدرست استx>=yتنها n%dنادرست باشد است
براي مثال) اگر و || اگر ( pنادر ست
اگ ر و تنه ا اگ ر n%dبرابر صفر و x
97. !
سسه عملگسر منطقي && ) (andو || ) (orو )( not
معمول بسا اسستفاده از جداول درستي بسه گونس ۀزسسسير بيان
ميشوند:
p q P&&q p q P||q P !P
T T T T T T T F
T F F T F T F T
F T F F T T
طبق جدولهاي فوق اگر pدرست و qنادرست
p||q F F F F
باشسد، عبارت p&&qنادرست و عبارت F F
درست است.
98. 6- ارزيابي ميانبري
عملگرهاي && و || به دو عملوند نياز
دارندت ا مقايسه را روي آن دو انجام دهند.
جداول درس تي نشان ميده د که p&&q
شرط است مرك ب نادرست&& و. در اين
نادرست هاي اگر pكه از باشد ||
اس تفادهنيازيكنن د عملوند دوم راشود.
حالت ديگر مي نيست که qبررسي
همچني ن p||qيكنن دت اس تناگكه pدرست
بررس ي نم درس مگ ر اي ر لزم
باشددر اين حالت هم نيازي نيست که q
باشد و .
بررسي شود. در هر دو حالت گفته شده، با
ارزيابي عملوند اول به سرعت نتيجه معلوم
ميشود. اين كار ارزيا بي ميانبري ناميده
99. 7- عبارات منطقي
ي ك عبارت منطق ي شرط ي اس ت ك ه يا
درس ت اس ت ي ا نادرس ت. قبل ديدي م که
عبارات منطق ي ب ا مقادي ر ص حيح ارزيابي
ميشوند. مقدار صفر به معناي نادرست و
هر مقدار غير صفر به معناي درست است .
به عبارات منطق ي »عبارات بول ي « هم
ميگويند.
100. چون همس ۀمسسسقاديسر صسحيح ناصسفر به معناي
درست تفسير ميشوند، عبارات منطقي اغلب
تغيير قيافه ميدهند. براي مثال دستور
;"if (n) cout << "n is not zero
وقتسي nغيسر صسفر است عبارت
n is not
zeroرا چاپ ميكنسد زيرا عبارت منطقي
) ( nوقتسسي مقدار nغيسسر صسفر اسست به
عنوان درست تفسير ميگردد.
101. کد زير را نگاه کنيد:
if (n%d;") cout << "n is not a multiple of d
دسسستور خروجسسي فقسسط وقتسسي كه n%d
ناصسفر اسست اجرا ميگردد و n%dوقتي
ناصفر است که nبر dبخشپذير نباشد.
گاهسسي ممکسسن اسسست فراموش کنيسسم که
عبارات منطقي مقادير صحيح دارند و اين
فراموشي باعث ايجاد نتايج غير منتظره و
نامتعارف شود.
103. دستورهاي انتخاب تودرتو -8
دس تورهاي انتخاب ميتوانن د مانند
دس تورالعملهاي مرك ب به كار روند .
به اي ن ص ورت ک ه ي ك دستور انتخاب
ميتوان د درون دس تور انتخاب ديگر
اس تفاده شود . به اين روش، جملت
تودرتو ميگويند.
104. مثال 21-3 دستورهاي انتخاب تودرتو
اين برنامه همان اثر مثال 01-3 را دارد:
وقت ي دس تور if..elseبه شکل
)(int main
;{ int n, d
تو در ت و به کار م ي رود،
;" :cout << "Enter two positive integers
كامپايل ر از قانون زي ر )0جهت
;cin >> n >> d
=! if (d
تجزيه nاين دستورالعمل= مركب
;if (n%d = 0) cout << d << " divides " << n << endl
;else cout << d << " does not divide " << << endl
استفاده م ي كند:
;else cout << d << " does not divide " << n << endl
}
» هر elseبا آخريسسن ifتنهسسا جفت
در برنام ۀ بال، دستور if..elseدوم درون
ميشود.«
دستور if..elseاول قرار گرفته است.
106. براي مشخص کردن محدود ۀنسسسمرهelse if استفاده از ساختار
:برنام ۀزسسسير يك نمر ۀاسسسمتحان را به درج ۀحسسسرفي معادل تبديل ميكند
int main()
{ int score;
cout << "Enter your test score: "; cin >> score;
if (score > 100) cout << "Error: that score is out of range.";
else if (score >= 90) cout << "Your grade is an A." << endl;
else if (score >= 80) cout << "Your grade is a B." << endl;
else if (score >= 70) cout << "Your grade is a C." << endl;
else if (score >= 60) cout << "Your grade is a D." << endl;
else if (score >= 0) cout << "Your grade is an F." << endl;
else cout << "Error: that score is out of range.";
}
107. switch 01- دستورالعمل
else ميتواند به جاي ساختارswitch دستور
براي بررسي مجموعهاي از حالتهايif
متناوب و موازي بسسه كار رود. نحسسو دستور
: به شکل زير استswitch
switch (expression)
{ case constant1: statementlist1;
case constant2: statementlist2;
case constant3: statementlist3;
:
:
108. اين دستور ابتدا expressionرا برآورد
ميكند و سپس ميان يکتهاي caseبه دنبال
عبارت اختياري عبارت defaultثاب
مقدار . يعنسي مي . اگر
اسست آن ميگرددتوانيسم مقدار مربوطه از ميان
در دستور switch
ثابتهاي فهرسسست.شده يافسست شسسد، دستور
آن را قيسد نکنيم expressionبايسد به
statementlistمقابسسل ارزيابي caseاجرا
شود و شکسل يسك نوع صسحيح آن
ميشود. اگسر مقدار مورد نظسر ميان caseها
constantها بايسسد ثابتهاي صحيح
يافست نشسد و عبارت defaultوجود داشت، باشند.
دسسستور statementlistمقابسسل آن اجرا
ميشود.
109. لزم اسسست در انتهاي هسسر caseدستور
breakقرار بگيرد. بدون ايسسن دستور،
اجراي برنامسسه پسسس از ايسسن كه case
مربوطسه را اجرا کرد از دستور switch
خارج نميشود، بلکسسه هم ۀ caseهاي
زيريسن را هسم خسط بسه خسط ميپيمايد و
دسستورات مقابسل آنسها را اجرا ميکند. به
اين اتفاق، تلۀ سقوط ميگويند.
;case constant1: statementlist1;break
110. 11- عملگر عبارت شرطي
در اي ن عملگر ابتدا شرط condition
عملگر عبارت شرطي يکي از درست
بررسي ميشود. اگر اين شرط امکاناتي
بود، حاص لسستک ل عبارتدر کدنويسي
برابر با اختصسسار اسسست کسسه جه
تدارک ديده شدهميشود وسسناگر شرط را
1 expressionاسسست. اي عملگر
منادرست بود، حاصل کل if..elseبه کار
يتوانيم به جاي دستور عبارت برابر با
2 expressionميشود.
ببريم. اين عملگر از نشانههاي ? و : به
شکل زير استفاده ميكند:
;2condition ? expression1 : expression
112. 21- كلمات كليدي
اکنون با کلماتي مثل ifو caseو float
آشنا شديم. دانستيم که اين کلمات براي
يك كلممۀ كليدي در يك زبان
برنامهنويس ي كلم دارند. از اين کلمات
هاي اس ت كه از ++Cمعاني خاصي
نميتوان به عنوان نام يک متغير يا هر
قب ل تعريف شده و براي هدف
منظور ديگري استفاده کرد و فقط بايد
براي انجام منظور شده است.
همان کار خاص استفاده
مشخصي
شوند. مثل کلم ۀ floatفق ط بايد براي
معرفي يک نوع اعشاري به کار رود.
113. : استand ++ استاندارد اكنون شامل 47 كلم ۀC
كسسسليدي and_eq asm
auto bitand Bitor
bool break case
catch char class
compl const const_cast
continue default delete
dodouble dynamic_cast else
enum explicit export
extern dfalse float
for friend goto
114. if inline int
long mutable namespace
new not not_eq
operator or or_eq
privat eprotected public
register reinterpret_cast return
short signed sizeof
static static_cast struct
swich template this
throw TRUE try
115. typedef typoid typename
using union unsigned
virtual void volatile
wchar_t while xor
xor_eq
116. دو نوع كلمۀ كليدي وجود دارد:
1- كلم ه هاي رزرو شد ه
2- شناس ه هاي استاندارد.
يك كلم ۀ رزرو شده كلمهاي اس ت ک ه يک
دس تور خاص از آن زبان را نشان ميدهد.
كلمۀ كليدي ifو elseكلمات رزرو شده
يك شناسۀ استاندارد كلمهاي است كه يك نوع
هستند.
دادۀ اس تاندارد از زبان را مشخص ميكند.
كلمات كليدي boolو intشناسههاي
استاندارد هستند
120. هدفهاي رفتاري:
هدف کلي:
انتظار ميرود پس از مطالعۀ اين جلسه بتوانيد:
- نحو دستورانواع را شناخته و از آن براي ايجاد نحو استفاده
شناخت whileساختارهاي تکرار و حلقه آنها
کنيد.تبديل آنها به يکديگر.
و
- نحو دستور do..whileرا شناخته و تفاوت آن با
دستور whileرا بيان کنيد.
- نح و دس تور forرا شناخت ه و ب ا اس تفاده از آن
حلقههاي گوناگون بسازيد.
- حلقههاي فوق را به يکديگر تبديل کنيد.
- علت استفاده از »دستورات پرش« را ذکر کرده
و تفاوت سه دستور breakو continueو gotoرا
بيان کنيد.
121. مقدمه
تكرار، اجراي پي در پي يك دستور يا بلوكي
از دس تورالعملها در ي ك برنام ه اس ت. با
اس تفاده از تکرار ميتواني م کنترل برنامه را
مجبور کنيم تا به خطوط قبلي برگردد و آنها
را دوباره اجرا نمايد.
++Cداراي س ه دس تور تكرار اس ت: دستور
،whileدس تور do_whileو دستور .for
دس تورهاي تکرار ب ه عل ت طبيعت
122. 1- دستور while
نحو دستور whileبه شکل زير است:
;while (condition) statement
به جاي ، conditionيك شرط قرار ميگيرد و به
جاي statementدستوري که بايد تکرار شود قرار
ميگيرد. اگ ر مقدار شرط، ص فر)يعن ي نادرست(
باشد، statementناديده گرفته ميشود و برنامه
به اولي ن دس تور بع د از whileپرش ميكند. اگر
مقدار شرط ناص فر)يعني درس ت( باشد،
statementاجرا شده و دوباره مقدار شرط
بررسي ميشود. اين تکرار آن قدر ادامه مييابد
123. while مثال 1-4 محاسب ۀحسسساصل جمع اعداد صحيح متوالي با حلق ۀ
n را براي عدد وروديn + … + 3 + 2 + 1 ايسن برنامه مقدار
:محاسبه ميكند
int main()
{ int n, i=1;
cout << "Enter a positive integer: ";
cin >> n;
long sum=0;
while (i <= n)
sum += i++;
cout << "The sum of the first " << n << " integers is "
<< sum;
}
124. 2- خاتمه دادن به يك حلقه
)(int main
قبل ديدي م ك ه چگون ه دستور breakبراي {
;1=int n, i
كنترل دس :cout << "Enter a positive integer
;" تورالعمل switchاستفاده
;cin >> n
م يشود )به مثال 471- ;0= .(sumاز
long
نگاه كنيد يك ي از مزيتهاي دستور
breakاين است كهبراي پايان دادن به حلقهها
)while (true دستور breakفورا حلقه
رانيز ميتوان استفاده کرد. ;{ if (i > n) break
خاتمه ميدهد بدون اين که
;++sum += i مابق ي دس تورهاي درون حلقه
} اجرا شوند.
<< " cout << "The sum of the first " << n << " integers is
;sum
}
127. مثال5-4 استفاده از تابع 0((exit
تابع 0( (exitروش ديگري براي خاتمه دادن به يك حلقه است. هرچند که
اين تابع بلفاصله اجراي کل برنامه را پايان ميدهد:
)(int main
;{ long bound
;" :cout << "Enter a positive integer
;cin >> bound
;"1 ,0cout << "Fibonacci numbers < " << bound << ":n
;1=1long f0=0, f
)while (true
;1{ long f2 = f0 + f برنامهنويس ان ترجيح
ميدهند از breakبراي ;)0(if (f2 > bound) exit
;2cout << ", " << f خاتم ه دادن به حلقههاي
;1f0 = f نامتناهي استفاده کنند زيرا
} ;2f1 = f
} قابليت انعطاف بيشتري
دارد.
128. متوقف کردن يك حلقۀ نامتناهي :
با فشردن کليدهاي Ctrl+Cسيستم عامل
يک برنام ه را ب ه اجبار خاتم ه ميدهد. كليد
Ctrlرا پايي ن نگ ه داشت ه و كليد Cروي
صفحهكليد خود را فشار دهيد تا برنامۀ فعلي
خاتمه پيدا کند.
129. 3- دستور do..while
س اختار do..whileروش ديگري براي س اختن حلقه
است. نحو آن به صورت زير است:
;)do statement while (condition
به جاي دستور ابتدا statementرا ميگيرد و
اي ن conditionيك شرط قرار اجرا
به ميكن statementشرطتور ي ا بلوکيراقرار
جاي د و سپس دس condition
ميبررس که قرار استر شرط درست بود
گيرد ي ميكند. اگ تکرار شود.
حلقه دوباره تکرار ميشود وگرنه حلقه
پايان مييابد.
130. دستور do..whileمانند دستور while
است. با اين فرق كه شرط کنترل حلقه
به نتيج ۀ ديگ که اي ن اس تحلقه حلقۀ
ارزيابي جاي اين ر در ابتداي ك ه
do..whileهميش ه بدون توج ه به
گردد، در انتهاي حلقه ارزيابي ميشود.
مقدار شرط كنترل، لاقل يك بار اجرا
ميشود متغيرحلق ۀ whileميتواند كه
يعني هر ام ا كنترلي به جاي اين
قب اصل اجرا نشود. حلق ه تنظيم شود،
ل از شروع
ميتواند درون آن تنظيم گردد.
131. مثال 47- محاسسب ۀحسسساصسل جمسع اعداد صسحيح متوالسي بسا حلق ۀ
do..while
:اين برنامه همان تأثير مثال 51- را دارد
int main()
{ int n, i=0;
cout << "Enter a positive integer: ";
cin >> n;
long sum=0;
do
sum += i++;
while (i <= n);
cout << "The sum of the first " << n << " integers is " << sum;
}
132. * مثال 8-4 اعداد فاكتوريال
اعداد فاكتوريال 0! و 1! و 2! و 3! و … با استفاده از رابطههاي
بازگشتي زير تعريف ميشوند:
1 = !0 , !)1-n! = n(n
براي مثال، به ازاي 1 = nدر معادل ۀدسسسوم داريم:
1 = )1(1 = )!0(1 = )!)1-1((1 = !1
همچنين براي 2 = nداريم:
2 = )1(2 = )!1(2 = )!)1-2((2 = !2
و به ازاي 3 = nداريم:
6 = )2(3 = )!2(3 = )!)1-3((3 = !3
133. ،برنام ۀزسسسيرمسسسس ۀ اعداد فاكتوريال را که از عدد داده شده کوچکترند
ه
:چاپ ميکند
()int main
;long bound }
;" :cout << "Enter a positive integer
;cin >> bound
;"cout << "Factorial numbers < " << bound << ":n1
;long f=1, i=1
do
;cout << ", " << f }
;f *= ++i
{
;(while (f < bound
{
134. 4 - دستور for
نحو دستورالعمل forبه صورت زير است:
;for (initialization; condition; update) statement
سه قسمت داخل پرانتز، حلقه را کنترل ميکنند.
عبارت initializationتعيي ن اعلنمتغير
عبارت updateبراي براي بردن يا
اي ن ک ه آيا عبارت conditionبراي پيش
کنترل حلق ه اولي هکار ياميرود کنترلم عبارت
مقداردهي ب ه به متغي ر . اينحلقه
حلقه بايد تکرار شود خير به کار يرود.
پس تفاده ميشود.اي ن عبارت اولين
اس از اجراي
يعني اين عبارت، statementارزيابي
شرط کنترل حلقه است.
ميگردد.است که ارزيابي ميشود پيشعبارتي
اگ ر اي ن شرط درس ت باش د دستور
از اين که نوبت به تکرارها برسد.
statementاجرا ميشود.
135. بنابرايسن زنجير ۀوسسسسقايعسسي که تکرار را ايجاد
ميکنند عبارتند از:
1 – ارزيابي عبارت initialization
2 – بررسي شرط . conditionاگر نادرست
باشد، حلقه خاتمه مييابد.
3عبارتهاي initialization statementو
– اجراي
4 – ارزيابي عبارت و updateعبارتهاي
update condition
5 – تکرار گامهاي 2 تا ميتوانيسم آنها را در
اختياري هسستند. يعنسي 4
حلقه ذکر نکنيم.
136. مثال 49- اسستفاده از حلقس ۀ forبراي محاسسب ۀمسسسجموع اعداد صحيح
متوالي
اين برنامه همان تأثير مثال 51- را دارد:
)(int main
;{ int n
;" :cout << "Enter a positive integer
;cin >> n
;0=long sum
در ++Cاستاندارد وقتي يك متغير كنترل درون يك حلق ۀ forاعلن
ميشود )ماننسد iدر مثال بال( حوز ۀآسسسسن; <= nبسه همان حلق ۀ for
for
)++ iمتغيسر (int i=1; i
;sum += I
محدود ميگردد. يعنسي آسن متغيسر نميتوانسد بيرون از آسن حلقسه استفاده
شود. ;cout << "The sum of the first " << n << " integers is " << sum
}
نتيج ۀدسسسيگر اين است که ميتوان از نام مشابهي در خارج از حلق ۀ
forبراي يك متغير ديگر استفاده نمود.
137. مثال 421- يك حلق ۀ forنزولي
برنام ۀزسسسير ده عدد صحيح مثبت را به ترتيب نزولي چاپ ميكند:
)(int main
)--{ for (int i=10; i > 0; i
;cout << " " << i
}
138. مثال 51-4 بيشتر از يك متغير كنترل در حلق ۀ for
حلق ۀ forدر برنام ۀزسسسير دو متغير كنترل دارد:
)(int main
)++{ for (int m=95, n=11, m%n > 0; m -= 3, n
;cout << m << "%" << n << " = " << m%n << endl
}
139. تودرتوfor مثال 61-4 حلقههاي
:برنام ۀزسسسير يك جدول ضرب چاپ ميكند
#include <iomanip>
#include <iostream>
int main()
{ for (int x=1; x <= 10; x++)
{ for (int y=1; y <= 10; y++)
cout << setw(4) << x*y;
cout << endl;
}
}
140. 5- دستور break
وقت ي دستور breakدرون
دستور breakيک دستور آشناست. قبل از
آن حلقخاتمه تودرتبهو استفاده
دستور switchو دادن براي ههاي
همچنين حلقه ط روي حلق واي که
do..while شود، فق هاي whileه
اس مس تقيماهدرون از ناي قرار گرفته
ن دستور براي تفاده کرد ايم. آ
خاتم تاثير ميگذارد.
ه دادن ب ه حلق ۀ forني ز ميتوانيم
حلقههاي بيرون ي بدون هيچ
استفاده کنيم.
تغييري ادامه مييابند.
دستور breakدر هر جايي درون حلقه
ميتواند جا بگيرد و در همان جا حلقه را
خاتمه دهد.
141. 6- دستور continue
دس تور breakبقي ۀ دستورهاي درون
بلوك حلق ه را ناديده گرفت ه و ب ه اولين
دستور بيرون حلقه پرش ميكند. دستور
continueاين دستور، ادامۀ
نيز شبيه همين است اما به
جاي اين که حلقهفعلي را لغو
را خاتمه دهد، اجرا را چرخۀ
کرده و اجراي دور
به تكرار بعدي حلقه منتقل ميكند.
بعدي حلقه را آغاز
ميکند.
142. continue وbreak مثال 491- استفاده از دستورهاي
: را شرح ميدهدcontinue وbreak اين برنام ۀكسسسوچك، دستورهاي
int main()
{ int n = 1;
char c;
for( ; ;n++ )
{ cout << "nLoop no: " << n << endl;
cout << "Continue? <y|n> ";
cin >> c;
if (c = = 'y') continue;
break;
}
cout << "nTotal of loops: " << n;
}
143. 7- دستور goto
دستورهاي دسستور gotoنوع ديگري از
توسسسط يك پرش اسسست. مقصسسد ايسسن پرش
برچسب معين ميشود.
برچ سب شناسسهاي اسست كسه جلوي آن
علمست كولسن) : ( ميآيسد و جلوي يك دستور
ديگر قرار ميگيرد.
يک مزيت دستور gotoاين است که با
استفاده از آن ميتوان از همۀ حلقههاي
تودرتو خارج شد و به مکان دلخواهي در
144. براي خارج شدن ازgoto مثال 402- اس تفاده از دستور
حلق ه هاي تودرتو
int main()
{ const int N=5;
for (int i=0; i<N; i++)
{ for (int j=0; j<N; j++)
{ for (int k=0; k<N; k++)
if (i+j+k>N) goto esc;
else cout << i+j+k << " ";
cout << "* ";
}
esc: cout << "." << endl;
}
}