مقدمة في لغة 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 يبدأ من دالة main() وهي نقطة البداية لتنفيذ البرنامج.

تثبيت بيئة العمل

متطلبات بيئة العمل:

لبدء البرمجة بـ 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:
  1. قم بتحميل MinGW من الموقع الرسمي
  2. ثبت MinGW في مجلد (مثلاً: C:\MinGW)
  3. أضف C:\MinGW\bin إلى PATH
  4. افتح Command Prompt واكتب: gcc --version
  5. إذا ظهر رقم الإصدار، فالتثبيت نجح!
4. التحقق من التثبيت:
gcc --version
gcc -v
نصيحة: للمبتدئين، ننصح باستخدام Code::Blocks لسهولة الاستخدام.

أول برنامج 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;: إنهاء البرنامج بنجاح
خطوات التشغيل:
  1. احفظ الكود في ملف باسم hello.c
  2. افتح Terminal/Command Prompt
  3. انتقل إلى مجلد الملف
  4. قم بالتجميع: gcc hello.c -o hello
  5. قم بالتشغيل: ./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.

مشروع تطبيقي كامل

مشروع شامل يطبق جميع المفاهيم المتقدمة.