لماذا لغة C ؟
تخيل أنك تمتلك مفتاحًا يمكنك من خلاله فتح أبواب البرمجة على مصراعيها، وفهم كيف تعمل الأنظمة والتطبيقات من الداخل.
هذا المفتاح هو لغة C، اللغة التي بُنيت عليها معظم لغات البرمجة الحديثة والتي تُعد أداة قوية للسيطرة على الموارد والأداء.
لغة C حجر الأساس في عالم البرمجة
سواء كنت تطمح لتطوير أنظمة تشغيل، برمجيات مدمجة، أو حتى لفهم عميق لمبادئ البرمجة، فإن تعلم لغة C يمنحك أساسًا متينًا ومهارة لا غنى عنها في رحلتك البرمجية.
دع شغفك بالإبداع يقودك، وابدأ رحلتك مع لغة C في هذا المقال التحفيزي الجميل.
♓ مقدمة إلى لغة البرمجة C
- تتيح مرونة كبيرة للتعامل مع العتاد عبر المؤشرات وإدارة الذاكرة، مما يجعلها الخيار الأفضل للأنظمة المدمجة.
- تعد لغة عامة وشائعة بين المبرمجين، مما يوفر دعماً تعليمياً واسعاً.
- كما أنها تُعتبر أساساً للغات البرمجة الحديثة مثل C++ وJava، مما يُسهّل تعلمها لاحقاً.
- توفّر سيطرة كاملة على الموارد، مما يجعلها مناسبة للتطبيقات الحساسة.
- تستخدم منذ عقود ولا تزال معتمدة لتطوير الأنظمة الحيوية بفضل موثوقيتها واستمراريتها.
♓ التعرف على بنية برنامج C
شرحا مفصلًا عن بنية برنامج لغة C.
سوف نقوم بإنشاء محتوى تعليمي منظم يوضح الهيكل الأساسي لفهم واستيعاب برامج C.
هذا المقال ليس بديلاً عن تعلم البرمجة بلغة "C"، وإنما يهدف إلى تقديم خطوة تحفيزية تساعدك على الانطلاق في عالم البرمجة، ليكون بمثابة البداية الأولى نحو اكتساب مهارات أعمق وفهم أوسع لهذه اللغة الأساسية.
أبسط برنامج في C
#include <stdio.h>
int main() {
printf("مرحبا بكم في عالم البرمجة !\n");
return 0;
}
✅ Output: // مرحبا بكم في عالم البرمجة !
شرح الكود
- الكود المكتوب بلغة
بلغة C
يُستخدم لطباعة النص "مرحبا بكم في عالم البرمجة !. - " باستخدام الدالة
printf
.
يشمل الكود:
- تعريف المكتبة الأساسية
<include <stdio.h
# - تعريف الدالة الرئيسية()
main
كبوابة البرنامج. - استخدام
return 0
للإشارة إلى انتهاء البرنامج بنجاح.
♓ المتغيرات والأنواع الأساسية
لغة البرمجة C تقدم مجموعة متنوعة من أنواع البيانات التي تُستخدم لتخزين وإدارة البيانات بشكل فعال.
فيما يلي توضيح لأهم مفاهيم أنواع البيانات وكيفية التعامل معها:
أنواع البيانات الأساسية (Primitive Data Types):
int
: تستخدم لتخزين الأعداد الصحيحة.float
: تستخدم لتخزين الأرقام العشرية (ذات الدقة البسيطة).double
: تُستخدم للأرقام العشرية ذات الدقة المزدوجة.char
: تستخدم لتخزين الحروف أو القيم النصية.
مثال:
مثال لكود بلغة C.
#include <stdio.h>
int main() {
// تعريف المتغيرات
int age = 25; // العمر
float height = 1.75; // الطول بالمتر
char grade = 'A'; // التقدير
// طباعة القيم باستخدام printf
printf("العمر: %d\n", age);
printf("الطول: %.2f متر\n", height);printf("التقدير: %c\n", grade);return 0; // إنهاء البرنامج بنجاح
}
✅ // : output:
العمر: 25
الطول: 1.75 متر
التقدير: A
شرح الكود
تعريف المتغيرات:
int age
: تعريف متغير عددي (عدد صحيح) باسمage
وقيمته الابتدائية 25.float height
: تعريف متغير عشري (عدد غير صحيح) باسمheight
وقيمته الابتدائية 1.75.char grade
: تعريف متغير حرفي (رمز واحد) باسمgrade
وقيمته الابتدائية'A'
.
طباعة القيم باستخدام printf:
printf
: تُستخدم لطباعة النصوص والقيم على الشاشة.- يتم استخدام:
%d
: لتمثيل القيم الصحيحة(int)
.%.2f
: لتمثيل القيم العشرية بدقة تصل إلى منزلتين عشريتين(float)
.%c
: لتمثيل القيم الحرفية(char)
.
♓ شروط واتخاذ القرارات
شروط واتخاذ القرارات
👈 جملة if:
// الجملة الشرطية if
#include <stdio.h>
int main() {
int number = 10;
if (number > 5) {
printf("الرقم أكبر من 5.\n");
else {
printf("الرقم 5 أو أقل.\n");
}
return 0;
}
✅ //Output: الرقم أكبر من 5.
شرح الكود
-
يبدأ البرنامج ويقوم بتعريف المتغير
number
بقيمة10
. - يتحقق من الشرط
if (number > 5):
لأن10 > 5
، الشرط صحيح.يتم تنفيذ النص داخل الجملة الشرطية: يتم تجاهل الجزءelse
لأنه لم يتم استيفاء شرطه. - ينتهي البرنامج ويعيد القيمة
0
.
👈 جملة else:
#include <stdio.h>
int main() {
int number = 10;
if (!(number == 5)) { // عكس الشرط
printf("الرقم لا يساوي 5.\n");
} else {
printf("الرقم يساوي 5.\n");
}
return 0;
}
✅ // Output: الرقم لا يساوي 5.
شرح الكود
تعريف المتغير:
- يتم تعريف متغير عددي باسم
number
وتعيين القيمة الأولية له وهي10
.
الجملة الشرطية if:
- يتم استخدام
!(number == 5)
، وهو عكس الشرطnumber == 5
. !(...)
تعني "ليس" أو "عكس".- إذا كانت
number
لا تساوي5
، الشرط يكون صحيحًا(true)
.
تنفيذ الجملة الشرطية:
- إذا تحقق الشرط
(number != 5)
: - يقوم بطباعة النص: "الرقم لا يساوي 5."
♓ الحلقات ( loops )
- الحلقة
for
- الحلقة
while
- الحلقة
do-while
👈 الحلقة for:
الكود:
// الحلقة for
#include <stdio.h>
int main() {
for (int i = 1; i <= 5; i++) {
printf("العدد: %d\n", i);
}
return 0;
} ✅ // Output: العدد: 1 العدد: 2 العدد: 3 العدد: 4 العدد: 5
شرح الكود:
حلقة for:
- تعريف المتغير
i
: يتم تعيين قيمته الابتدائية إلى 1(int i = 1)
. - الشرط
(i <= 5)
: الحلقة تستمر طالما أن قيمة i أقل من أو تساوي5
. - زيادة
i (i++)
: في نهاية كل دورة للحلقة، يتم زيادة قيمةi
بمقدار 1
.
دالة الطباعة printf:
- تقوم بطباعة النص "العدد: " متبوعًا بالقيمة الحالية للمتغير
i
.
إنهاء البرنامج:
- الدالة
return 0
تُستخدم للإشارة إلى أن البرنامج انتهى بنجاح.
👈 الحلقة while:
الكود
#include <stdio.h>
int main() {
int count = 1; // تعريف متغير العد وتهيئته بالقيمة 1
while (count <= 5) {// تستمر الحلقة طالما أن count أقل من أو يساوي 5
printf("العدد: %d\n", count); // طباعة قيمة count الحالية
count++; // زيادة قيمة count بمقدار 1
}
return 0; // إنهاء البرنامج
}
✅ // Output: العدد: 2 العدد: 3 العدد: 4 العدد: 5 العدد: 1
شرح الكود
تعريف متغير count
:
- تم تعريف متغير من النوع
int
يحمل اسم count ويخزن قيمة عددية صحيحة. - تم تهيئة
count
بالقيمة 1
كبداية. - تستمر الحلقة طالما أن الشرط
count <= 5
(أي أن count أقل من أو يساوي 5) صحيح.
- إذا أصبح الشرط خاطئًا، تتوقف الحلقة.
تنفيذ التعليمات داخل الحلقة:
- تستخدم دالة
printf
لطباعة النصوص. %d
هو رمز تنسيق يُستخدم لطباعة قيمة عدد صحيح.- يتم استبدال
%d
بالقيمة الحالية للمتغيرcount
.
تحديث قيمة count:
- يُزيد هذا السطر قيمة
count
بمقدار 1 بعد كل تكرار للحلقة. - إذا كان
count = 1
، يصبحcount = 2
وهكذا.
إنهاء البرنامج:
- يتم استخدام
return 0
للإشارة إلى أن البرنامج قد انتهى بنجاح.
👈 الحلقة do-while
الكود
#include <stdio.h>
int main () {
int number;
do {
printf("أدخل رقمًا موجبًا: ");
scanf("%d", &number); // قراءة إدخال المستخدم
} while (number <= 0); // تستمر الحلقة طالما أن الرقم غير موجب
printf("شكراً! الرقم المدخل هو: %d\n", number);
return 0;}
✅ // Output أدخل رقمًا موجبًا: -1
أدخل رقمًا موجبًا: 0
أدخل رقمًا موجبًا: 5
شكراً! الرقم المدخل هو: 5
شرح الكود
تعريف متغير count:
- يتم تعريف متغير باسم
count
من النوعint
(عدد صحيح).
1
.الحلقةdo-while:
التنفيذ الأولي:- يتم تنفيذ الكود داخل كتلة
do
مرة واحدة على الأقل، حتى إذا كان الشرط فيwhile
غير صحيح.
while (count <= 5)
:- يتم التحقق من أن قيمة
count
أقل من أوتساوي 5
. - إذا تحقق الشرط، تعاد الحلقة، وإذا لم يتحقق، تخرج الحلقة.
♓ الوظائف (Functions)
إنشاء وظيفة بسيطة:
الكود:
#include <stdio.h> // تعريف الوظيفة
int sum(int a, int b){
return a + b;}
int main() {
int result = sum(10, 20);
printf("المجموع: %d\n", result);
return 0;}
✅ // Output: المجموع: 30
شرح الكود:
تعريف الدالة sum:
- الدالة
sum
تقوم بجمع رقمين وإرجاع الناتج.
- تُستخدم الكلمة المفتاحية
int
لتحديد أن الدالة تُرجع قيمة عدد صحيح. - المعاملات
int a
وint b
هما القيم التي ستُمرر إلى الدالة عند استدعائها. - التعبير
return a + b;
يُرجع مجموع القيمتينa و b
إلى المكان الذي استُدعي منه.
استدعاء الدالة sum وتخزين النتيجة:
- يتم استدعاء الدالة
sum
وتمرير القيمتين10 و 20
و كمعاملين. - تقوم الدالة بإرجاع الناتج
(30)
، والذي يتم تخزينه في المتغيرresult
.
طباعة النتيجة:
- "المجموع:
%d\n"
: - النص "المجموع:" يُطبع كما هو.
- %d هو رمز تنسيق لعرض قيمة عدد صحيح.
result
هو القيمة التي ستُعرض مكان%d
.
♓ تطبيق عملي
تطبيق عملي يعرض سورة الناس.
هذا المثال يمكن من خلاله التعرف على بعض خصائص لغة C.
- يقوم هذا التطبيق العملي بترجمة كلمات مدخلة باللغة الإنجليزية (مثل: hello، world، programming، language، computer) إلى اللغة العربية (مثل: مرحبا، عالم، برمجة، لغة، حاسوب).
- يعتمد التطبيق على استخدام أساسيات لغة C مثل typedef لتعريف هيكل خاص يحتوي على الكلمات وترجماتها، و char لتخزين النصوص، بالإضافة إلى حلقة for للبحث عن الكلمة المطلوبة داخل القاموس.
- هذا التطبيق يساهم في تعزيز المهارات المكتسبة في البرمجة بلغة C من خلال تطبيق عملي بسيط وممتع.
// برنامج بسيط يقوم بترجمة بعض الكلمات بلغةال برمجة C
#include <stdio.h>
#include <string.h>
#define MAX_WORDS 5
#define MAX_INPUT_LENGTH 20
// هيكل يحتوي على الكلمة وترجمتها
typedef struct {
char word[MAX_INPUT_LENGTH];
char translation[MAX_INPUT_LENGTH];
} DictionaryEntry;
// دالة للبحث عن الترجمة
const char* translate(const char* input, DictionaryEntry dictionary[], int size) {
for (int i = 0; i < size; i++) {
if (strcmp(input, dictionary[i].word) == 0) {
return dictionary[i].translation;
}
}
return "Translation not found!";
}
int main() {
// القاموس البسيط
DictionaryEntry dictionary[MAX_WORDS] = {
{"hello", "مرحبا"},
{"world", "عالم"},
{"programming", "برمجة"},
{"language", "لغة"},
{"computer", "حاسوب"}
};
char input[MAX_INPUT_LENGTH];
printf("Enter a word to translate: ");
if (scanf("%19s", input) != 1) { // تحديد عدد الأحرف لتجنب تجاوز الذاكرة
printf("Error reading input!\n");
return 1;
}
// استدعاء الدالة للترجمة
const char* result = translate(input, dictionary, MAX_WORDS);
printf("Translation: %s\n", result);
return 0;
}