مقدمة في لغة C
ما هي لغة C؟
C هي لغة برمجة إجرائية تم تطويرها في السبعينيات من قبل Dennis Ritchie في Bell Labs. تعتبر أساسية ومؤثرة في عالم البرمجة.
تاريخ اللغة:
تم تطوير C في عام 1972 كتطوير للغة B. كانت الهدف منها تطوير نظام التشغيل UNIX. منذ ذلك الحين، أصبحت واحدة من أكثر لغات البرمجة استخداماً.
مميزات لغة C:
- قريبة من الأجهزة: تتيح التحكم الكامل بالذاكرة والأجهزة
- أداء عالي: كود مترجم مما يعطي أداء ممتاز
- بسيطة وقوية: عدد محدود من الكلمات المفتاحية لكنها قوية جداً
- أساسية: معظم اللغات الحديثة مستوحاة من C
- محمولة: يمكن تشغيلها على أي منصة
مجالات استخدام C:
- أنظمة التشغيل
- برامج الأنظمة (System Software)
- برامج المدمجة (Embedded Systems)
- مترجمات اللغات
- قواعد البيانات
أول برنامج في C:
#include <stdio.h>
int main() {
printf("مرحباً بكم في لغة C!\n");
return 0;
}
تثبيت بيئة العمل
متطلبات بيئة العمل:
لبدء البرمجة بـ C، تحتاج إلى مترجم (Compiler) ومحرر نصوص (Text Editor) أو بيئة تطوير متكاملة (IDE).
1. المترجمان (Compilers):
- GCC (GNU Compiler Collection): الأكثر استخداماً، مجاني ومفتوح المصدر
- MinGW: نسخة Windows من GCC
- Clang: مترجم حديث وسريع
- Turbo C: بيئة قديمة لكنها تعليمية
2. بيئات التطوير (IDEs):
- Code::Blocks: IDE مجاني وقوي لـ C/C++
- Dev-C++: بيئة بسيطة للمبتدئين
- Visual Studio: من Microsoft (يدعم C/C++)
- CLion: من JetBrains (مدفوع)
- VS Code: محرر نصوص مع إضافات C
3. تثبيت GCC على Windows:
- قم بتحميل MinGW من الموقع الرسمي
- ثبت MinGW في مجلد (مثلاً: C:\MinGW)
- أضف C:\MinGW\bin إلى PATH
- افتح Command Prompt واكتب:
gcc --version - إذا ظهر رقم الإصدار، فالتثبيت نجح!
4. التحقق من التثبيت:
gcc --version
gcc -v
أول برنامج C
بنية برنامج C:
كل برنامج C له بنية محددة يجب اتباعها.
مثال برنامج Hello World:
#include <stdio.h>
int main() {
printf("مرحباً بكم في لغة C!\n");
printf("هذا أول برنامج لي\n");
return 0;
}
شرح الكود:
#include <stdio.h>: تضمين مكتبة الإدخال/الإخراج القياسيةint main(): دالة رئيسية، نقطة بداية البرنامجprintf(): دالة لطباعة النص على الشاشة\n: رمز السطر الجديد (Newline)return 0;: إنهاء البرنامج بنجاح
خطوات التشغيل:
- احفظ الكود في ملف باسم
hello.c - افتح Terminal/Command Prompt
- انتقل إلى مجلد الملف
- قم بالتجميع:
gcc hello.c -o hello - قم بالتشغيل:
./hello(Linux/Mac) أوhello.exe(Windows)
مثال آخر - برنامج بسيط:
#include <stdio.h>
int main() {
printf("اسمي: أحمد\n");
printf("عمري: 25 سنة\n");
printf("أتعلم لغة C\n");
return 0;
}
المتغيرات وأنواع البيانات
المتغيرات في C:
المتغيرات هي أماكن في الذاكرة تستخدم لتخزين البيانات التي يمكن تغييرها أثناء تنفيذ البرنامج.
أنواع البيانات الأساسية:
| النوع | الحجم (bytes) | الوصف | مثال |
|---|---|---|---|
char |
1 | حرف واحد | char grade = 'A'; |
int |
4 | عدد صحيح | int age = 25; |
float |
4 | عدد عشري (دقة بسيطة) | float price = 99.99f; |
double |
8 | عدد عشري (دقة عالية) | double salary = 5000.50; |
void |
- | لا شيء (يستخدم مع الدوال) | void function(); |
تعريف المتغيرات:
// تعريف متغير واحد
int age;
age = 25;
// تعريف وتعيين في نفس الوقت
int age = 25;
// تعريف عدة متغيرات من نفس النوع
int x, y, z;
int a = 10, b = 20, c = 30;
مثال شامل:
#include <stdio.h>
int main() {
char grade = 'A';
int age = 25;
float price = 99.99f;
double salary = 5000.50;
printf("الدرجة: %c\n", grade);
printf("العمر: %d\n", age);
printf("السعر: %.2f\n", price);
printf("الراتب: %.2f\n", salary);
return 0;
}
Format Specifiers:
%dأو%i: للأعداد الصحيحة (int)%f: للأعداد العشرية (float, double)%c: للأحرف (char)%s: للنصوص (strings)%lf: لـ double
الثوابت والمدخلات
الثوابت (Constants):
الثوابت هي قيم ثابتة لا يمكن تغييرها أثناء تنفيذ البرنامج.
1. استخدام #define:
#include <stdio.h>
#define PI 3.14159
#define MAX_SIZE 100
int main() {
double radius = 5.0;
double area = PI * radius * radius;
printf("المساحة: %.2f\n", area);
return 0;
}
2. استخدام const:
const int MAX = 100;
const float TAX = 0.15;
const char NEWLINE = '\n';
3. قراءة المدخلات (scanf):
#include <stdio.h>
int main() {
int age;
float salary;
char name[50];
printf("أدخل اسمك: ");
scanf("%s", name);
printf("أدخل عمرك: ");
scanf("%d", &age);
printf("أدخل راتبك: ");
scanf("%f", &salary);
printf("الاسم: %s\n", name);
printf("العمر: %d\n", age);
printf("الراتب: %.2f\n", salary);
return 0;
}
& مع scanf للأعداد، لكن لا تستخدمه مع النصوص (arrays).
العمليات الحسابية والمنطقية
المعاملات (Operators) في C:
1. المعاملات الحسابية:
int a = 10, b = 3;
int sum = a + b; // 13 (الجمع)
int diff = a - b; // 7 (الطرح)
int product = a * b; // 30 (الضرب)
int quotient = a / b; // 3 (القسمة)
int remainder = a % b; // 1 (الباقي)
2. المعاملات المنطقية:
int x = 5, y = 10;
// AND (&&)
if (x > 0 && y > 0) {
printf("كلاهما موجب\n");
}
// OR (||)
if (x > 10 || y > 10) {
printf("أحدهما أكبر من 10\n");
}
// NOT (!)
if (!(x > 10)) {
printf("x ليس أكبر من 10\n");
}
3. معاملات المقارنة:
int a = 5, b = 10;
a == b // false (يساوي)
a != b // true (لا يساوي)
a < b // true (أصغر من)
a > b // false (أكبر من)
a <= b // true (أصغر أو يساوي)
a >= b // false (أكبر أو يساوي)
عبارات الشرط (if-else)
عبارات الشرط في C:
تُستخدم عبارات الشرط لاتخاذ قرارات في البرنامج بناءً على شروط معينة.
1. if Statement:
int score = 85;
if (score >= 90) {
printf("ممتاز!\n");
}
2. if-else:
int age = 18;
if (age >= 18) {
printf("أنت بالغ\n");
} else {
printf("أنت قاصر\n");
}
3. if-else if-else:
int score = 85;
if (score >= 90) {
printf("ممتاز!\n");
} else if (score >= 75) {
printf("جيد جداً!\n");
} else if (score >= 60) {
printf("جيد\n");
} else {
printf("راسب\n");
}
4. Nested if:
int age = 25;
int hasLicense = 1; // 1 = true, 0 = false
if (age >= 18) {
if (hasLicense) {
printf("يمكنك القيادة\n");
} else {
printf("تحتاج رخصة قيادة\n");
}
} else {
printf("أنت قاصر\n");
}
عبارة switch-case
عبارة switch في C:
int day = 3;
switch (day) {
case 1:
printf("الإثنين\n");
break;
case 2:
printf("الثلاثاء\n");
break;
case 3:
printf("الأربعاء\n");
break;
default:
printf("يوم آخر\n");
}
حلقة for
حلقة for في C:
for (int i = 1; i <= 10; i++) {
printf("%d\n", i);
}
حلقة while و do-while
حلقات while:
int count = 1;
while (count <= 5) {
printf("%d\n", count);
count++;
}
// do-while
int num = 1;
do {
printf("%d\n", num);
num++;
} while (num <= 5);
المصفوفات (Arrays)
المصفوفات في C:
int numbers[5] = {10, 20, 30, 40, 50};
for (int i = 0; i < 5; i++) {
printf("%d\n", numbers[i]);
}
المصفوفات متعددة الأبعاد
تعلم استخدام المصفوفات ثنائية وثلاثية الأبعاد في C.
الدوال (Functions)
تعريف واستخدام الدوال في C لتنظيم الكود.
معاملات الدوال
تمرير المعاملات للدوال، Pass by Value و Pass by Reference.
النطاق (Scope)
فهم نطاق المتغيرات: Local و Global variables.
المؤشرات (Pointers) - الجزء الأول
مقدمة عن المؤشرات، أهم مفهوم في C.
المؤشرات - الجزء الثاني
Pointer Arithmetic والعمليات على المؤشرات.
المؤشرات والمصفوفات
العلاقة بين المؤشرات والمصفوفات.
النصوص (Strings)
التعامل مع النصوص في C باستخدام arrays من characters.
الدوال النصية
strlen, strcpy, strcat, strcmp وغيرها من دوال string.h.
الذاكرة الديناميكية
malloc, calloc, realloc, free لإدارة الذاكرة ديناميكياً.
الهياكل (Structures)
تعريف واستخدام Structures لتجميع البيانات المختلفة.
الاتحادات (Unions)
Unions لتوفير الذاكرة باستخدام نفس المساحة لأنواع مختلفة.
الملفات (Files)
قراءة وكتابة الملفات باستخدام FILE pointers.
Preprocessor Directives
#include, #define, #ifdef, #ifndef وغيرها.
الوحدات (Modules)
تنظيم الكود في عدة ملفات، Header files.
مشروع صغير
مشروع تطبيقي صغير يجمع المفاهيم الأساسية.
تحسين الكود
مبادئ تنظيم وتحسين كود C.
Best Practices
أفضل الممارسات في برمجة C.
مشروع تطبيقي كامل
مشروع شامل يطبق جميع المفاهيم المتقدمة.