0% found this document useful (0 votes)
30 views

C Language - Basics

يقدم هذا المستند مقدمة موجزة حول لغة البرمجة C. يشرح المفاهيم الأساسية مثل الدوال والمتغيرات والأنواع الأساسية للبيانات. كما يوضح بنية برنامج C البسيط.

Uploaded by

MO COMPANY
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
30 views

C Language - Basics

يقدم هذا المستند مقدمة موجزة حول لغة البرمجة C. يشرح المفاهيم الأساسية مثل الدوال والمتغيرات والأنواع الأساسية للبيانات. كما يوضح بنية برنامج C البسيط.

Uploaded by

MO COMPANY
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 17

‫المرجع السريع للبرمحة بلغة السى ‪:‬‬

‫ليس القصد من هذا المقال التغطية الكاملة للغة السى ‪ ,‬بل تقديم موجز لبناء لغة السى ‪.‬‬
‫أ‬ ‫أ‬
‫حلت لغة السى تدريجيا محل لغة السمبلى فى العديد من التطبيقات المضمنة ‪ embedded‬لنها‬
‫أ‬
‫تحتوى على العديد من المزايا ‪.‬اهم ميزة هى السماح لنا بعمل البرامج بمنطق ذات مستوى مرتفع‬
‫ومن ثم تحسين انتاجية البرمجة بشكل كبير ‪.‬‬

‫برنامج لغة السى ‪ ,‬مهما كان حجمه ‪ ,‬يتكون من ‪:‬‬


‫‪" ‬الدوال" ‪functions‬‬
‫‪ ‬و "المتغيرات" ‪. variables‬‬

‫تحتوى "الدالة" على "عبارات"‪ statements‬والتى تحدد "العمليات" ‪ operations‬المطلوب‬


‫أ‬ ‫أ‬ ‫أ‬ ‫أ‬
‫تنفيذها ‪ .‬نوع "العبارة" بالدالة يمكن ان يكون "تعريف او اعالن" ‪ declaration‬او "تخصيص او‬
‫أ‬ ‫أ‬ ‫أ‬
‫تعيين" ‪ assignment‬او "استدعاء دالة" ‪ function call‬او "تحكم"‪ control‬او "لشىء" ‪. null‬‬

‫"المتغير" يخزن قيمة لستخدامها خالل العمليات الحسابية ‪.‬‬


‫الدالة الرئيسية )(‪ main‬مطلوبة فى جميع برامج لغة السى وهى التى تتحكم فى بدء مسار البرنامج‬
‫عند التنفيذ ‪.‬‬
‫آ‬
‫برنامج لغة السى البسيط يشمل التى ‪:‬‬

‫أ‬ ‫أ‬
‫‪ -1‬ضم او تضمين معلومات بملفات او مك تبات باستخدام التوجيه ‪ #include‬مثال ذلك ‪:‬‬

‫>‪#include <stdio.h‬‬
‫أ‬
‫‪ -2‬الدالة الريئسية حيث يبدا تنفيذ البرنامج )‪ main (void‬وهى دالة باسم ‪ main‬لكنها من‬
‫أ‬
‫النوع الفارغ ‪ void‬اى ل تكون لها نتيجة عائد ‪.‬‬
‫أ‬
‫‪ -3‬يتم احاطة عبارات الدالة الرئيسية باقواس مجعدة }‪. {….‬‬
‫أ‬
‫‪ -4‬اعالن المتغيرات حيث يمكن العالن (تعريف) عن اك ثر من متغير فى سطر واحد ‪ .‬على‬
‫سبيل المثال تعريف ثالثة متغيرات من نوع العدد الصحيح ‪. int a, b, c; :‬‬
‫أ‬
‫‪ -5‬تخصيص او تعيين قيمة لمتغير ‪ .‬مثال ذلك تخصيص القيمة ‪ 3‬للمتغير ‪ a = 3; : a‬والقيمة ‪5‬‬
‫للمتغير ‪. b = 5; : b‬‬
‫آ‬
‫‪ -6‬اجراء عملية على متغيرات وتخصيص النتيجة لمتغير اخر ‪ .‬مثال ذلك جمع ‪ a‬و ‪ b‬معا‬
‫وتخصيص نتيجة الجمع للمتغير ‪. c = a + b ; : c‬‬
‫‪ -7‬استدعاء دالة ‪ .‬مثال ذلك استدعاء الدالة ‪ printf‬لطباعة النتيجة ‪:‬‬

‫‪printf(" a + b = %d \n", c);.‬‬


‫‪ -8‬نهاية الدالة الرئيسية " } " ‪.‬‬

‫التوجيه‪#include <stdio.h> :‬‬


‫يؤدى الى ضم الملف ‪ stdio.h‬الى البرنامج ‪ .‬هذا السطر يظهر فى بداية العديد من برامج لغة السى‬
‫أ‬
‫وهو يحتوى على تعريفات لجميع روتينات المداخل والمخارج التى يمكن ان تستدعى ببرنامج‬
‫المستخدم ‪.‬‬
‫أ أ‬
‫لغة السى تتطلب تعريف الدوال قبل استدعائها اى ان ضم هذا الملف فى بداية البرنامج يؤدة‬
‫أ‬
‫الى انطالق الدالة )‪ printf(. . .‬عند استدعائها فى البرنامج لنها ضمن هذا الملف ‪.‬‬

‫التعليق ‪:‬‬
‫التعليق يشرح ما سوف يتم تنفيذه ولكنه عند ترجمة البرنامج يتم اهماله ‪.‬‬
‫أ‬ ‫أ‬
‫التعليق فى لغة السى يبدا بالرموز " *‪ "/‬وينتهى بالرموز " ‪ " */‬واى شىء بينهما يهمل ‪ .‬التعليق يوفر‬
‫توثيق للبرنامج ويحسن من قابليته للقراءة ‪ .‬التعليف يؤتر على حجم الملف كنص مك توب فقط ول‬
‫يؤدى الى زيادة فى الكود الذى يتم تنفيذه ‪ .‬العديد من برمجيات ترجمة لغة السى تسمح باستخدام‬
‫الشرط المائلة )‪ (//‬فى التعليق الذى ل يتعدى سطر واحد ‪.‬‬

‫الدالة الرئيسية ‪main() :‬‬


‫تحدد بداية تنفيذ البرنامج ‪ .‬القوس المفتوح "{" يدل على بداية كود الدالة )(‪ . main‬كل برنامج بلغة‬
‫أ‬ ‫أ‬
‫السى يجب ان يكون له دالة رئيسية وتكون واحدة فقط ‪ .‬تنفيذ البرنامج ايضا ينتهى بمهاية الدالة‬
‫الرئيسية ‪.‬‬
‫أ‬
‫اعالن او تعريف المتغيرات ‪:‬‬
‫جميع المتغيرات يجب تعريفها قبل استخدامها‬
‫أ‬
‫النواع ‪ Types‬والمعامالت ‪ Operands‬والعبارات (تعبيرات) ‪: Expressions‬‬
‫أ‬
‫المتغيرات والثوابت هى الكائن الساسى الذى يتم تناوله فى البرنامج ‪ .‬يجب تعريف المتغير قبل‬
‫أ‬
‫استخدامة ‪ .‬تعريف المتغير يجب ان يحتوى على اسم ونوع المتغير واختيارى يمكن تخصيص قيمة‬
‫أ‬ ‫أ‬ ‫أ‬
‫ابتدائية له ‪ .‬اسم المتغير قد يبدا بحرف هجاىئ ( من ‪ A‬الى ‪ Z‬او من ‪ a‬الى ‪ ) z‬او بشرطة تحت السطر‬
‫أ‬ ‫أ أ أ أ‬ ‫أ‬
‫ويتبعها صفر او حروف هجائية اخرى او ارقام او شرطة تحت السطر ‪ .‬ل يمكن لسم المتغير ان‬
‫يحتوى على عالمات رياضية ول نقط ول مسافات ول الكلمات المحجوزة للغة السى ول الرموز الخاصة‬
‫أ‬
‫مث @ و ‪ #‬و ؟ ‪...‬الخ ‪ .‬اضافة شرطة تحت السطر )‪ (-‬قد يؤدى الى تحسن وسهولة قراءة اسم‬
‫المتغير الكبير ‪.‬‬
‫أ‬
‫انواع البيانات ‪: Data Types‬‬
‫أ‬ ‫أ‬
‫انواع البيانات الساسية بلغة السى قلية وهى ‪. void,char,int,float,double :‬‬
‫المتغير من النوع ‪ void‬ل يمثل شىء ‪ .‬الستخدام الشائع لهذا النوع مع الدوال ‪.‬‬
‫أ‬ ‫أ‬
‫المتغير من نوع ‪( char‬الحروف او الرموز) يمكن ان يحتفظ (يخزن ) ببايت واحد ‪ single byte‬من‬
‫البيانات‪.‬‬
‫المتغير من نوع ‪( int‬العدد الصحيح) ‪ .‬سعة هذا النوع ‪ 16‬بت ‪ 2( 16-bit‬بايت) ‪.‬‬
‫المتغير من نوع ‪( float‬العدد الحقيقى ذات العالوة العشرية ) ‪ .‬سعة هذا النوع ‪ 32‬بت ‪4( 32-bit‬‬
‫بايت) ‪.‬‬
‫المتغير من نوع ‪( double‬عدد حقيقى ذات عالمة عشرية بدقة مضاعفة) ‪.‬؟‬
‫أ‬ ‫أ‬
‫عالوة على ذلك يوجد عدد من التعريفات اللغوية (الكلمات) يمكن ان تطبق على هذه النواع‬
‫أ‬
‫الساسية ‪ .‬كلمة ‪ short‬وكلمة ‪ long‬تطبق على المتغير من نوع العدد الصحيح ‪ . int‬هذه الكلمات‬
‫أ‬
‫تعدل من طول العداد الصحيحة ‪ .‬كلمة ‪ short‬ل تغير من طول ا لعدد الصحيح ‪ .‬كلمة ‪double‬‬
‫تضاعف طول العدد الصحيح من ‪ 16‬بت الى ‪ 32‬بت ‪.‬‬

‫تعريفات (اعالنات ) المتغير ‪: Variable Declarations‬‬


‫أ‬
‫جميع المتغيرات يجب ان تعرف قبل استخدامها ‪ .‬التعريف يحدد النوع ويحتوى على قائمة مكونة‬
‫أ أ‬
‫من متغير واحد او اك ثر من هذا النوع كما يلى ‪:‬‬
‫;‪Int i,j,k‬‬
‫;‪Char cx,cy‬‬
‫قد يتم تهيئة المتغير عند تعريفه بتخصيص قيمة ابتدائية له كما يلى ‪:‬‬
‫;‪Int i=0‬‬
‫‪Char echo='y'; //‬‬
‫أ‬
‫تخصيص كود اسكى للحرف ‪ y‬للمتغير ‪. echo‬‬

‫الثوابت ‪: Constants‬‬
‫أ‬ ‫أ أ‬
‫توجد اربعة انواع من الثوابت ‪ :‬العداد الصحيحة ‪ integers‬و الحروف (الرموز)‪ characters‬و‬
‫أ‬
‫العداد الحقيقية ‪ float‬والسالسل النصية ‪. strings‬‬
‫الحرف (الرمز) الثابت هو عدد صحيح يك تب كحرف واحد مابين عالمتى تنصيص مثل '‪ . 'x‬يتم‬
‫أ‬
‫تمثيل الحرف (الرمز) الثابت بكود اسكى لهذا الحرف ‪.‬‬
‫أ أ‬
‫السلسلة النصية الثابتة هى تتابع من الحروف (من صفر حرف او اك ثر) محاطة بعالمتى تنصيص‬
‫مزدوجة كما يلى ‪:‬‬

‫"‪"PIC Microcontroller‬‬
‫‪Or‬‬
‫‪" " // empty string‬‬
‫أ‬
‫كل حرف من السلسلة النصية على حدة يتم تمثيله بكود اسكى له ‪.‬‬
‫أ‬
‫العدد الصحيح مثل ‪ 3241‬هو من النوع ‪ . int‬الثابت الطويل يك تب بنهايته حرف "‪ "l‬او "‪ "L‬مثل ‪:‬‬
‫‪. 44332211L‬‬
‫أ‬ ‫أ‬ ‫أ‬
‫يمكن تحديد العداد بلغة السى باى من نظام العداد باضافة بادائة ‪ prefix‬للعدد كما يلى ‪:‬‬
‫النظام العشرى ‪ :‬بدون بادئة مثل ‪. 1357 :‬‬
‫النظام الثناىئ ‪ :‬البادئة ‪ 0b‬مثل ‪0b10101010 :‬‬
‫النظام الثمانى " البادئة هى الصفر مثل ‪. 04723 :‬‬
‫النظام السداسى عشر البادئة ‪ 0x :‬مثل ‪. 0x2A :‬‬
‫العوامل الحسابية ‪: Arithmetic Operators‬‬
‫يوجد سبع عوامل حسابية هى ‪:‬‬
‫‪ ‬عامل الجمع "‪. add "+‬‬
‫‪ ‬عامل الطرح "‪. subtract "-‬‬
‫‪ ‬عامل الضرب "*" ‪. multiply‬‬
‫‪ ‬عامل القسمة "‪. divide "/‬‬
‫‪ ‬عامل الباقى "‪. modulus (or remainder) "%‬‬
‫‪ ‬عامل التزايد "‪. increment "++‬‬
‫‪ ‬عامل التناقص "‪. decrement "--‬‬

‫التعبير ‪: " a%b " :‬‬


‫أ‬
‫ينتج الباقى عند قسمة ‪ a‬على ‪ . b‬العامل ‪ %‬ليمكن تطبيقه مع العداد الحقيقية من النوع ‪float‬‬
‫ول من النوع ‪. double‬‬
‫العامل "‪: "++‬‬
‫يضيف "واحد ‪ " 1‬الى المعامل ‪ operand‬والعامل " ‪ " --‬يطرح"واحد ‪ "1‬من المعامل ‪.‬‬
‫العامل "‪: "/‬‬
‫يقوم باختزال نتيجة القسمة الى العدد الصحيح فقط عندما يكون كال المعامالن عدد صحيح ‪.‬‬
‫لحظ الفرق بين كلمة "العامل" و"المعامل" ‪ .‬العامل هو المؤثر _جمع – طرح ‪ )..‬الذى نؤثر به‬
‫على المعامل ( ‪ )a , b ….‬فيتغير تبعا لهذا المؤثر ‪.‬‬

‫العوامل التى تتعامل مع البت الواحدة ‪: Bitwise Operators‬‬


‫أ‬ ‫أ‬
‫توفر لغة السى ستة عوامل للتعامل مع الخانة ‪ bit‬وهى يمكن ان تطبق على العداد الصحيحة فقط‬
‫أ‬
‫اى ‪:‬‬
‫أ‬
‫‪ char, short, int, , long‬سواء باشارة ‪ signed‬او بدون اشارة ‪ unsigned‬وهى ‪:‬‬
‫‪ ‬العامل "&" ‪. AND‬‬
‫‪ ‬العامل " | " ‪. OR‬‬
‫‪ ‬العامل "^" ‪. XOR‬‬
‫‪ ‬العامل "~" ‪. NOT‬‬
‫‪ ‬العمل ">>" ‪. right shift‬‬
‫‪ ‬العامل "<<" ‪. left shift‬‬

‫العامل & ‪:‬‬


‫أ‬ ‫أ أ‬
‫غالبا ما يستخدم فى جعل بت او اك ثر بصفر اى مسح (تصفير) ‪ . clear‬على سبيل المثال العبارة ‪:‬‬

‫‪PORTC = PORTC & 0xBD; /* PORTC is 8 bits */‬‬

‫تقوم بمسح (تصفير) البت رقم ‪ 6‬والبت رقم ‪ 1‬من المنفذ ‪.) 0Xbd = 0b10111101( PORTC‬‬

‫العامل | ‪:‬‬
‫أ أ‬
‫غالبا ما يستخدم فى جعل خانة او اك ثر بواحد ‪ . set‬على سبيل المثال العبارة ‪:‬‬

‫‪PORTB = PORTB | 0x40; /* PORTB is 8 bits */‬‬

‫تجعل الخانة رقم ‪ 6‬بالمنفذ ‪ PORTB‬بواحد ‪. (0x40 = 0b01000000 ( set‬‬

‫العامل "^" ‪: XOR‬‬


‫أ‬
‫يمكن ان يستخدم فى تحويل (تغيير) البت ‪ .‬على سبيل المثال العبارة ‪:‬‬

‫‪abc = abc ^ OxF0; /* abc is of type char */‬‬


‫أ‬
‫تقوم بتحويل (تغيير حالة) البتات الربعة العليا للمتغير ‪abc‬‬
‫العامل >> ‪:‬‬
‫يقوم بزحزحة (ازاحة) المعامل جهة اليمين لعدد محدد من المواضع ‪ .‬على سبيل المثال العبارة ‪:‬‬

‫;‪xyz = abc>> 3‬‬

‫تؤدى الى ازاحة المتغير ‪ abc‬جهة اليمين بثالثة مواضع وتخصيصه للمتغير ‪. xyz‬‬

‫العامل << ‪:‬‬


‫يقوم بزحزحة (ازاحة) المعامل جهة اليسار لعدد محدد من المواضع ‪ .‬على سبيل المثال العبارة ‪:‬‬
‫;‪xyz = xyz << 4‬‬
‫أ‬
‫تؤدى الى ازاحة المتغير ‪ xyz‬جهة اليسار اليمين باربعة مواضع ‪.‬‬
‫آ‬
‫عامل التخصيص "=" غالبا ما يشترك (يدمج) مع عامل اخر ‪ .‬على سبيل المثال العبارة ‪:‬‬

‫;‪PORTD = PORTD & 0xBD‬‬

‫يمكن ك تابتها بالطريقة التالية ‪:‬‬

‫;‪PORTD &= 0xBD‬‬

‫والعبارة التالية ‪:‬‬


‫;‪PORTB = PORTB | 0x40‬‬

‫يمكن ك تابتها بالطريقة التالية‬


‫;‪PORTB I = 0x40‬‬

‫عوامل المقارنة والعوامل المنطقية ‪: Relational and Logical Operators‬‬


‫عوامل لمقارنة تستخدم فى العبارات لمقارنة قيم معامالن ‪ .‬اذا كانت نتيجة المقارنة "صواب" ‪true‬‬
‫عندئذ فان قيمة التعبير (العائد) تكون ‪ . 1‬وان لم تكن صواب فان قيمة التعبير تكون ‪ . 0‬هذه‬
‫العوامل هى ‪:‬‬
‫‪ ‬العامل "==" يساوى ‪. equal to‬‬
‫‪ ‬العامل "=!" ل يساوى ‪. not equal to‬‬
‫أ‬
‫‪ ‬العامل ">" اكبر من ‪. greater than‬‬
‫أ‬ ‫أ‬
‫‪ ‬العامل "=>" اكبر من او يساوى ‪. greater than or equal to‬‬
‫أ‬ ‫أ‬
‫‪ ‬العامل "=<" اقل من او يساوى ‪. less than or equal to‬‬
‫‪ ‬العامل "&&" ‪. and‬‬
‫‪ ‬العامل "||" ‪. or‬‬
‫‪ ‬العامل "!" ‪. not‬‬
‫أ‬
‫بعض المثلة على هذه العوامل ‪:‬‬

‫))‪if (!(ADCTL & 0x80‬‬


‫‪statement1; /* if bit 7 is 0, then execute statement1 */‬‬

‫) ‪i f ( i > 0 & & i < 10‬‬


‫‪statement2; /* if 0 < i < 10 then execute statement2 */‬‬

‫)‪if (a1 == a2‬‬


‫‪statement3 /* if a1 equals a2 then execute statement3 */‬‬
‫القادم ان شاء هللا‬

‫التحكم فى مسار البرنامج ‪Control Flow‬‬


‫عبارات (جمل) التحكم فى مسار البرنامج تحدد الترتيب الذى يتم به العمليات الحاسوبية ‪ .‬فى لغة‬
‫أ‬
‫السى "الفاصلة المنقوطة" ";" هى نهاية العبارة (الجملة) ‪ .‬القواس }…{ تستخدم لجمع مجموعة من‬
‫أ‬ ‫أ‬
‫التعريفات والعبارات معا فى "عبارة او جملة مركبة " او "مجموعة" "بلوك" ‪ block‬بحيث يكون‬
‫بناؤها يكافىء عبارة مفردة ‪.‬‬
‫أ‬
‫"العبارة او الجملة المركبة" ل تنتهى "بالفاصلة المنقوطة" ‪.‬‬

‫جمل اتخاذ القرار ‪: decision‬‬

‫عبارة (جملة) ‪: If‬‬


‫أ‬
‫جملة ‪ If‬هى "جملة شرط " ‪" .‬العبارة او الجملة المصاحبة لجملة ‪ " If‬يتم تنفيذها بناء على "نتيجة‬
‫الشرط" ‪ .‬اذا تم تقييم الشرط بقيمة غير صفرية ( الشرط صواب ‪ ) true‬فانه يتم تنفيذ العبارة وال‬
‫يتم تخطى هذه العبارة ‪.‬‬
‫صيغة بناء جملة ‪ If‬كما يلى ‪:‬‬

‫)‪if (expression‬‬
‫;‪statement‬‬

‫مثال على جملة ‪: If‬‬

‫)‪if (a > b‬‬


‫;‪sum += 2‬‬
‫أ‬
‫قيمة المجموع ‪ sum‬سوف يتم تزايدها بمقدار ‪ 2‬اذا كان المتغير ‪ a‬اكبر من المتغير ‪. b‬‬

‫ملحوظة ‪:‬‬
‫العبارة‬

‫‪expression1 += expression2‬‬
‫مثل العبارة ‪:‬‬
‫‪expression1 = expression1 + expression2.‬‬
‫أ‬
‫عبارة او جملة ‪: If-Else‬‬
‫أ‬
‫جملة ‪ If-Else‬تتعامل مع الحوال التى يتطلب فيها تنفيذ عبارة واحدة اذا كانت نتيجة الشرط غير‬
‫أ‬
‫صفرية (صواب ‪ )true‬وتنفيذ عبارة مختلفة اذا كانت نتيجة الشرط صفرية (خطا ‪. )false‬‬
‫صيغة بناء جملة ‪ If-Else‬كما يلى ‪:‬‬
‫)‪if (expression‬‬
‫‪statementl‬‬
‫‪else‬‬
‫‪statement2‬‬
‫يتم تقييم الشرط الموجود بين القوسين بعد ‪ If‬وهو )‪ . (expression‬اذا كانت النتيجة صواب ‪( true‬غير‬
‫أ‬ ‫أ‬
‫صفرية) يتم تنفيذ العبارة الولى ‪ . statement‬واذا كانت النتيجة خطا ‪( false‬صفرية) يتم تنفيذ‬
‫العبارة الثانية ‪. statement2‬‬
‫مثال ‪:‬‬
‫‪if (a ! = 0) //not equal‬‬
‫;‪r = b‬‬
‫‪else‬‬
‫;‪r = c‬‬

‫جملة الشرط متعددة التجاهات (المسارات) ‪:‬‬


‫القرار المتعدد التجاهات يمكن التعبير عنه بسلسلة من عبارات ‪ . if-else‬هذه السلسلة تكون‬
‫بالشكل التالى ‪:‬‬

‫)‪if (expressionl‬‬
statementl
else if expression2)
statement2
else if (expression3)
statement3
...
else
statement,

: ‫مثال على قرار له ثالثة اتجاهات‬


if (abc > 0) return 5;
else if (abc == 0) return 0;
else return -5;
. ‫ تستخدم للخروج من الحالة الحالية وتعود بقيمة‬return ‫كلمة‬
‫أ‬
: Switch ‫جملة او عبارة‬
. "‫ هى جملة قرار متعدد التجاهات اعتمادا على قيمة "عبارة تحكم‬Switch ‫جملة‬
: ‫ كما يلى‬Switch ‫صيغة بناء جملة‬

switch (expression) {
case const_exprl:
statementl;
break;
case const_expr2:
statement2;
break;
...
default:
tatement;
}
‫مثال ‪:‬‬
‫مقطع من برنامج ‪:‬‬
‫{ )‪switch (i‬‬
‫;)"*"(‪case 1: printf‬‬
‫;‪break‬‬
‫;)"**"(‪case 2: printf‬‬
‫;‪break‬‬
‫;)"***"(‪case 3: printf‬‬
‫;‪break‬‬
‫;)"****"(‪case 4: printf‬‬
‫;‪break‬‬
‫;) "*****"(‪case 5: printf‬‬
‫‪default:‬‬
‫;)"‪printf("\n‬‬
‫}‬

‫عدد الرموز المطبوعة يساوى قيمة ‪ . i‬الكلمة ‪ break‬تجبر سريان البرنامج على قطع جملة ‪switch‬‬
‫أ‬
‫بحيث ل يتم تنفيذ ال العبارات الموجودة فى الحالة المناظرة ‪ .‬اذا لم تتواجد اى من كلمات ‪break‬‬
‫أ‬
‫فسوف يتم تنفيذ جميع العبارات بدءا من هذه الحالة وحتى مقابلة كلمة ‪ break‬مرة اخرى خالل‬
‫نفس جملة ‪. switch‬‬

‫القادم ان شاء هللا‬

‫جمل التكرار‬

‫التكرار المحدد ‪:‬‬

‫جملة "حلقة ‪For-Loop Statement: "For‬‬


‫صيغة بناء الجملة كما يلى ‪:‬‬
‫)‪for (exprl; expr2; expr3‬‬
‫;‪statement‬‬
‫أ‬ ‫أ‬
‫حيث ‪ :‬التعبير الول ‪ exprl‬والتعبير الثالث ‪ expr3‬هى تخصيصات (تعيينات) او استدعاء لدالة‬
‫والتعبير الثانى ‪ expr2‬هو تعبير "مقارنة" ‪.‬‬
‫أ‬
‫قبل اول تكرار للحلقة يتم يتم تعيين القيمة البتدائية لمتغير عداد الحلقة ‪ . exprl‬بعد ذلك يتم‬
‫اختبار قيمة الشرط ‪ expr2‬قبل تنفيذ جسم الحلقة ‪ .‬يتم تكرار تنفيذ جسم الحلقة ‪ statement‬حتى‬
‫أ‬
‫تصبح قيمة الشرط خطا ‪ . false‬فى كل تكرار للحلقة يتم تزايد عداد الحلقة ‪. expr3‬‬
‫أ‬
‫على سبيل المثال حلقة ‪ for‬التالية تقوم بحساب "مجموع مربعات العداد الصحيحة من ‪ 1‬الى ‪: " 9‬‬

‫;‪sum = 0‬‬
‫)‪for (i = 1; i < 10; i++‬‬
‫;‪sum = sum + i * i‬‬

‫شرح الحلقة ‪:‬‬


‫أ‬
‫حلقة ‪ for‬لتكرار محدد (تسع مرات) على اساس ‪ :‬القيمة البتدائية لعداد الحلقة ‪ i = 1‬وصحة عبارة‬
‫المقارنة ‪. i < 10‬‬
‫قبل الحلقة تم تصفير متغير "المجموع" ;‪. sum = 0‬‬
‫أ‬
‫تكرار الحلقة ‪ :‬الحلقة الولى ‪:‬‬
‫الثالثة تعبيرات ‪:‬‬
‫"عداد الحلقة " ‪( i = 1‬تخصيص) – ثم مقارنة ‪ i < 10‬الجواب "صواب ‪ – "true‬ثم تزايد عداد الحلقة‬
‫بواحد (تخصيص) ‪. i++‬‬
‫أ‬
‫نتيجة لذلك يتم تنفيذ جسم الحلقة ;‪ sum = sum + i * i‬اى ضرب قيمة ‪ i‬فى نفسها (المربع) وجمع‬
‫النتيجة على محتويات متغير " المجموع" السابقة فى كل مرة ‪ .‬فى نهاية هذه الحلقة يكون‬
‫أ‬ ‫أ‬
‫‪ sum=0+1*1=1‬واصبح عداد الحلقة ‪ i=1+1=2‬وهى القيمة التى يبدا بها الحلقة الثانية وهكذا ‪.‬‬
‫أ‬
‫يتم تكرار الحلقات حتى تكون "المقارنة" ‪ i < 10‬خطا ‪( false‬بعد ‪ 9‬حلقات ) عندئذ يتم الخروج من‬
‫أ‬
‫الحلقة وتكون النتيجة النهائية ‪" :‬مجموع مربعات العداد الصحيحة من ‪ 1‬الى ‪. " 9‬‬
‫أ‬ ‫أ‬
‫حلقة ‪ for‬التالية تطبع العشرة اعداد الصحيحة الفردية الولى ‪:‬‬

‫)‪for (i = 1; i < 20; i++‬‬


‫;)‪if (i % 2) printf("%d ", i‬‬

‫الشرح ‪:‬‬
‫حلقة ‪ for‬لتكرار محدود ( ‪ 19‬مرة)‬
‫جملة شرط ‪ if‬باستخدام عامل بقى القسمة ‪: %‬‬
‫أ‬ ‫أ‬
‫الحلقة الولى ‪ i=1 :‬و )‪ 1 ( (1%2 =1‬على ‪ 2‬تساوى صفر وباقى القسمة بواحد) اى ‪ true‬فيتم‬
‫تنفيذ عبارة الطباعة ‪.‬‬
‫الحلقة الثانية ‪ i=2 :‬و )‪( (2%2 = 0‬ل يوجد باقى قسمة ) ى ‪ false‬فال يتم تنفيذ عبارة الطباعة ‪.‬‬
‫أ‬
‫الحلقة الثالثة ‪ i=3 :‬و )‪ 3 ((3%2 = 1‬على ‪ 2‬تساوى ‪ 1‬وباقى القسمة بواحد) اى ‪ true‬فيتم تنفيذ‬
‫عبارة الطباعة ‪.‬‬
‫وهكذا ‪.‬‬
‫أ‬
‫اذا تم ازالة الشرط فال يوجد شرط لنختبره عندئذ تعتبر النتيجة "صواب" ‪ true‬دائما ‪ .‬وهكذا فان‬
‫أ‬
‫جملة ‪ for‬الخالية من العبارات تستخدم فى انشاء حلقة "غير منتهية" او غير محدودة ويكون‬
‫صيغتها بالشكل التالى ‪:‬‬

‫‪for ( ; ; ) statement‬‬

‫الطريقة الوحيدة لكسر هذه الحلقة هى استخدام كلمة ‪. break‬‬


‫أ‬
‫جملة او عبارة حلقة ‪: while‬‬
‫أ‬
‫عندما ل يكون "التعبير" (الشرط) ‪ expression‬غير صفرى ‪ ,‬فان حلقة ‪ while‬تكرر العبارة او‬
‫مجموعة (بلوك) من الكود ‪ .‬يتم التحقق من قيمة التعبير ‪ expression‬قبل كل تنفيذ للعبارة ‪.‬‬
‫صيغة بناء عبارة ‪: while‬‬
‫)‪while (expression‬‬
‫;‪statement‬‬
‫أ‬
‫يتم تقييم "التعبيير" )‪ . (expression‬اذا كانت النتيجة غير صفرية اى "صواب ‪ " true‬يتم تنفيذ‬
‫العبارة ‪ statement‬ويتم "اعادة تقييم" التعبير )‪ . (expression‬هذه الدورة تستمر حتى يصبح‬
‫أ‬ ‫أ‬
‫نتيجة التعبير )‪ (expression‬بالصفر اى (خطا ‪ ) false‬عند هذه النقطة يتوقف التنفيذ من بعد‬
‫العبارة ‪ . statement‬قد تكون العبارة ‪ statement‬غير موجودة‪.‬هذه العبارة لتفعل شىء كما فى‬
‫المثال التالى ‪:‬‬

‫;‪Int_cnt = 5‬‬
‫;)‪while (int_cnt‬‬

‫فى البداية يتم تقييم التعبير )‪ (int_cnt‬وتكون النتيجة غير صفرية لذلك فان وحدة المعالجة‬
‫أ‬
‫المركزية ‪ CPU‬سوف ل تقوم بعمل شىء قبل ان يتناقص المتغير ‪ Int_cnt‬الى الصفر ومن ثم‬
‫يكون تقييم التعبير )‪ (int_cnt‬بصفر ‪ .‬فى التطبيقات تناقص المتغير ‪ Int_cnt‬غالبا يكون نتيجة‬
‫أ‬
‫احداث خارجية مث المقاطعات ‪.‬‬

‫يمكن انشاء حلقة "غير منتهية" بجعل نتيجة الشرط دائما صواب ‪while(1) : true‬‬

‫أ‬
‫جملة او عبارة ‪: Do-While‬‬
‫حلقة ‪ while‬وحلقة ‪ for‬تختبر شرط النهاء فى بداية الحلقة بينما حلقة عبارة ‪ Do-While‬تختبر‬
‫أ‬ ‫أ أ‬
‫شرط النهاء فى نهاية الحلقة اى ان عبارة جسم الحلقة يتم تنفيذها على القل لمرة واحدة ‪.‬‬
‫صيغة بناء الجملة ‪:‬‬
‫‪do‬‬
‫‪statement‬‬
‫;)‪while (expression‬‬

‫لحظ وجود الفاصلة المنقوطة بعد الشرط ;)‪ (expression‬وهى غير موجودة فى الجمل السابقة ‪.‬‬
‫مثال ‪:‬‬
‫أ‬
‫حلقة ‪ do-while‬التالية تعرض العداد الصحيحة تنازليا من ‪ 9‬الى ‪: 1‬‬

‫;‪int digit = 9‬‬


‫‪do‬‬
‫;)‪printf("%d ", digit--‬‬
‫;)‪while (digit >= 1‬‬

‫الشرح ‪:‬‬
‫فى البداية يتم تعريف متغير من نوع "العدد الصحيح" ويخصص له القيمة البتدائية ‪int digit = : 9‬‬
‫;‪9‬‬
‫أ‬ ‫أ‬
‫تبدا الحلقة بكلمة ‪ do‬بعدها يتم تنفيذ جسم الحلقة اول دورة ;)‪ printf("%d ", digit--‬بعدها يتم‬
‫اختبار الشرط ;)‪ while (digit >= 1‬فان كان صواب ‪ true‬يتم تكرار الحلقة وال تم الخروج منها ‪.‬‬
‫أ‬
‫جملة او عبارة ‪: GOTO‬‬
‫تنفيذ عبارة ‪ goto‬يسبب تحول التحكم مباشرة الى عبارة الالفتة (العنوان) ‪ .label‬عبارة الالفتة‬
‫أ‬
‫يجب ان توضع فى نفس دالة عبارة ‪. goto‬‬
‫أ‬
‫استخدام عبارة ‪ goto‬يقاطع التتابع العادى لسريان البرنامج ومن ثم يجعله اصعب فى التتبع ‪ .‬لهذا‬
‫السبب ل يعتبر استخدام عبارات ‪ goto‬نمط جيد من البرمجة وينصح بعدم استخدامها فى البرامج ‪.‬‬

‫صيغة بناء عبارة ‪: goto‬‬

‫‪goto label‬‬
: ‫مثال‬

if (x > 100)
goto fatal_error;
...
fatal_error:
printf("Variable x is out of bound!\n);

You might also like