C Language - Basics
C Language - Basics
ليس القصد من هذا المقال التغطية الكاملة للغة السى ,بل تقديم موجز لبناء لغة السى .
أ أ
حلت لغة السى تدريجيا محل لغة السمبلى فى العديد من التطبيقات المضمنة embeddedلنها
أ
تحتوى على العديد من المزايا .اهم ميزة هى السماح لنا بعمل البرامج بمنطق ذات مستوى مرتفع
ومن ثم تحسين انتاجية البرمجة بشكل كبير .
أ أ
-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لطباعة النتيجة :
التعليق :
التعليق يشرح ما سوف يتم تنفيذه ولكنه عند ترجمة البرنامج يتم اهماله .
أ أ
التعليق فى لغة السى يبدا بالرموز " * "/وينتهى بالرموز " " */واى شىء بينهما يهمل .التعليق يوفر
توثيق للبرنامج ويحسن من قابليته للقراءة .التعليف يؤتر على حجم الملف كنص مك توب فقط ول
يؤدى الى زيادة فى الكود الذى يتم تنفيذه .العديد من برمجيات ترجمة لغة السى تسمح باستخدام
الشرط المائلة ) (//فى التعليق الذى ل يتعدى سطر واحد .
الثوابت : 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 "--
تقوم بمسح (تصفير) البت رقم 6والبت رقم 1من المنفذ .) 0Xbd = 0b10111101( PORTC
العامل | :
أ أ
غالبا ما يستخدم فى جعل خانة او اك ثر بواحد . setعلى سبيل المثال العبارة :
تؤدى الى ازاحة المتغير abcجهة اليمين بثالثة مواضع وتخصيصه للمتغير . xyz
)if (expression
;statement
ملحوظة :
العبارة
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 (expressionl
statementl
else if expression2)
statement2
else if (expression3)
statement3
...
else
statement,
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
جمل التكرار
;sum = 0
)for (i = 1; i < 10; i++
;sum = sum + i * 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
;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
;9
أ أ
تبدا الحلقة بكلمة doبعدها يتم تنفيذ جسم الحلقة اول دورة ;) printf("%d ", digit--بعدها يتم
اختبار الشرط ;) while (digit >= 1فان كان صواب trueيتم تكرار الحلقة وال تم الخروج منها .
أ
جملة او عبارة : GOTO
تنفيذ عبارة gotoيسبب تحول التحكم مباشرة الى عبارة الالفتة (العنوان) .labelعبارة الالفتة
أ
يجب ان توضع فى نفس دالة عبارة . goto
أ
استخدام عبارة gotoيقاطع التتابع العادى لسريان البرنامج ومن ثم يجعله اصعب فى التتبع .لهذا
السبب ل يعتبر استخدام عبارات gotoنمط جيد من البرمجة وينصح بعدم استخدامها فى البرامج .
goto label
: مثال
if (x > 100)
goto fatal_error;
...
fatal_error:
printf("Variable x is out of bound!\n);