C المتغير، أنواع البيانات، الثوابت

⚡ ملخص ذكي

تشكل المتغيرات وأنواع البيانات والثوابت أساس كل برنامج مكتوب بلغة C، حيث تخزن المتغيرات القيم القابلة للتغيير، وتحدد أنواع البيانات حجم ونطاق تلك البيانات، بينما تحمل الثوابت قيمًا ثابتة لا تتغير أبدًا.

  • 🔤 المتغيرات: المتغير هو مُعرِّف مُسمى يمكن أن تتغير قيمته، ويتم الإعلان عنه باستخدام الأحرف أو الأرقام أو الشرطة السفلية.
  • 🧮 أنواع البيانات: أنواع C هي أنواع بدائية ومشتقة ومحددة من قبل المستخدم، بما في ذلك int و char و float و double و void، ولكل منها حجم ونطاق ثابتان.
  • 🔒 الثوابت: تحتوي الثوابت على قيم ثابتة وتشمل الثوابت العددية والحرفية والسلاسل النصية والحقيقية التي لا تتغير أبدًا.
  • ⚙️ إعلان: تقوم الكلمة المفتاحية const وتوجيه #define بإنشاء ثوابت، أحدهما يحجز الذاكرة والآخر يستبدل النص.
  • 🤖 مساعدة الذكاء الاصطناعي: يقترح GitHub Copilot أنواع البيانات الصحيحة، ويشير إلى أخطاء التسمية، ويسرع من تعريفات لغة C.

C المتغير، أنواع البيانات، الثوابت

ما هو المتغير؟

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

يمكن استخدام متغير واحد في مواقع متعددة في البرنامج. يجب أن يكون اسم المتغير ذا معنى. يجب أن يمثل الغرض من المتغير.

Example: Height, age, are the meaningful variables that represent the purpose it is being used for. Height variable can be used to store a height value. Age variable can be used to store the age of a person

يجب الإعلان عن المتغير أولاً قبل استخدامه في مكان ما داخل البرنامج. يتم تشكيل اسم المتغير باستخدام الأحرف والأرقام والشرطة السفلية.

فيما يلي القواعد التي يجب اتباعها أثناء إنشاء متغير:

  • يجب أن يتكون اسم المتغير من أحرف وأرقام وشرطة سفلية فقط.
  • يجب ألا يبدأ اسم المتغير برقم.
  • يجب ألا يتكون اسم المتغير من مسافة بيضاء.
  • يجب ألا يتكون اسم المتغير من كلمة أساسية.
  • "C" هي لغة حساسة لحالة الأحرف مما يعني أن المتغير المسمى "age" و"AGE" مختلفان.

فيما يلي أمثلة لأسماء المتغيرات الصالحة في برنامج "C":

height or HEIGHT
_height
_height1
My_name

فيما يلي أمثلة لأسماء المتغيرات غير الصالحة في برنامج "C":

1height
Hei$ght
My name

على سبيل المثال، نقوم بتعريف متغير عدد صحيح my_variable ونسند إليه القيمة 48:

int my_variable;
my_variable = 48;

بالمناسبة، يمكننا الإعلان عن متغير وتهيئته (تعيين قيمة أولية) في عبارة واحدة:

int my_variable = 48;

أنواع البيانات

توفر لغة "C" أنواعًا مختلفة من البيانات لتسهيل اختيار نوع البيانات المناسب للمبرمج وفقًا لمتطلبات التطبيق. فيما يلي أنواع البيانات الثلاثة:

  • أنواع البيانات البدائية
  • أنواع البيانات المشتقة
  • أنواع البيانات المعرفة من قبل المستخدم

هناك خمسة أنواع أساسية من البيانات الأساسية،

  • int للبيانات الصحيحة
  • شار لبيانات الشخصية
  • تعويم للأرقام ذات الفاصلة العائمة
  • مزدوج للأرقام ذات النقطة العائمة ذات الدقة المزدوجة
  • باطل

تُعدّ المصفوفات والدوال والمؤشرات والهياكل أنواع بيانات مشتقة. توفر لغة C إصدارات موسعة من أنواع البيانات الأساسية المذكورة أعلاه. يختلف كل نوع بيانات عن الآخر في الحجم والنطاق. يعرض الجدول التالي حجم ونطاق كل نوع بيانات.

نوع البيانات الحجم بالبايت المدى
شار أو شار موقعة 1 -128 ل127
حرف غير موقعة 1 0 إلى 255
كثافة العمليات أو تسجيل الدخول 2 -32768 ل32767
عدد صحيح غير موقعة 2 0 إلى 65535
كثافة العمليات القصيرة أو كثافة العمليات القصيرة غير الموقعة 2 0 إلى 255
وقعت قصيرة كثافة العمليات 2 -128 ل127
كثافة العمليات طويلة أو موقعة طويلة كثافة العمليات 4 -2147483648 ل2147483647
كثافة العمليات الطويلة غير الموقعة 4 0 إلى 4294967295
الطفو 4 3.4E-38 إلى 3.4E + 38
مضاعفة 8 1.7E-308 إلى 1.7E + 308
طويل مزدوج 10 3.4E-4932 إلى 1.1E + 4932

ملاحظة: في لغة C، لا يوجد نوع بيانات منطقي (Boolean).

نوع البيانات الصحيح

العدد الصحيح ليس سوى عدد صحيح. يختلف النطاق الخاص بنوع البيانات الصحيح من جهاز إلى آخر. النطاق القياسي لنوع البيانات الصحيح هو -32768 إلى 32767.

عادةً ما يكون العدد الصحيح 2 بايت مما يعني أنه يستهلك إجمالي 16 بت في الذاكرة. تأخذ القيمة الصحيحة الواحدة 2 بايت من الذاكرة. يتم تقسيم نوع البيانات الصحيح أيضًا إلى أنواع بيانات أخرى مثل Short int وint وlong int.

يختلف كل نوع بيانات في النطاق على الرغم من أنه ينتمي إلى عائلة أنواع البيانات الصحيحة. قد لا يتغير الحجم لكل نوع بيانات من عائلة الأعداد الصحيحة.

يتم استخدام int القصير في الغالب لتخزين الأرقام الصغيرة، ويتم استخدام int لتخزين قيم الأعداد الصحيحة متوسطة الحجم، ويتم استخدام int الطويل لتخزين قيم الأعداد الصحيحة الكبيرة.

عندما نرغب في استخدام نوع بيانات عدد صحيح، يجب علينا وضع int قبل المعرف، مثل:

int age;

هنا، العمر هو متغير من نوع بيانات عدد صحيح والذي يمكن استخدامه لتخزين قيم عدد صحيح.

نوع بيانات النقطة العائمة

مثل الأعداد الصحيحة، في برنامج "C" يمكننا أيضًا الاستفادة من أنواع البيانات ذات الفاصلة العائمة. يتم استخدام الكلمة الأساسية "العائمة" لتمثيل نوع بيانات النقطة العائمة. يمكن أن تحتوي على قيمة النقطة العائمة مما يعني أن الرقم يحتوي على كسر وجزء عشري. قيمة النقطة العائمة هي رقم حقيقي يحتوي على علامة عشرية. لا يخزن نوع البيانات الصحيح الجزء العشري ومن ثم يمكننا استخدام العوامات لتخزين الجزء العشري من القيمة.

بشكل عام، يمكن أن يحتوي الرقم العائم على ما يصل إلى 6 قيم دقيقة. إذا لم يكن الرقم العائم كافيًا، فيمكننا الاستفادة من أنواع بيانات أخرى يمكنها الاحتفاظ بقيم فاصلة عائمة كبيرة. يتم استخدام نوع البيانات double وlong double لتخزين الأرقام الحقيقية بدقة تصل إلى 14 و80 بت على التوالي.

عند استخدام رقم فاصل عائم، يجب وضع كلمة رئيسية float/double/long double قبل المعرف. الأمثلة الصالحة هي:

float division;
double BankBalance;

نوع بيانات الحرف

تُستخدم أنواع بيانات الأحرف لتخزين قيمة حرف واحدة محاطة بعلامات اقتباس مفردة.

يستهلك نوع بيانات الأحرف ما يصل إلى بايت واحد من مساحة الذاكرة.

سبيل المثال،

Char letter;

نوع بيانات فارغ

لا يحتوي نوع البيانات الفارغ على أي قيمة أو يُرجعها. يتم استخدامه في الغالب لتحديد الوظائف في "C".

سبيل المثال،

void displayData()

اكتب تعريف المتغير

int main() {
int x, y;
float salary = 13.48;
char letter = 'K';
x = 25;
y = 34;
int z = x+y;
printf("%d \n", z);
printf("%f \n", salary);
printf("%c \n", letter);
return 0;}

الإخراج:

59
13.480000
K

يمكننا تعريف عدة متغيرات من نفس نوع البيانات في سطر واحد بفصلها بفاصلة. لاحظ أيضًا استخدام مُحدِّدات التنسيق في دالة الإخراج printf، مثل float (%f) و char (%c) و int (%d).

ثابت

الثوابت هي القيم الثابتة التي لا تتغير أبدًا أثناء تنفيذ البرنامج. فيما يلي الأنواع المختلفة من الثوابت:

ثوابت عدد صحيح

الثابت الصحيح ليس سوى قيمة تتكون من أرقام أو أعداد. هذه القيم لا تتغير أبدًا أثناء تنفيذ البرنامج. يمكن أن تكون الثوابت الصحيحة ثمانيًا وعشريًا وسداسي عشريًا.

الثابت العشري يحتوي على أرقام من 0 إلى 9 مثل،

Example, 111, 1234

أعلاه هي الثوابت العشرية الصالحة.

يحتوي الثابت الثماني على أرقام من 0 إلى 7، وهذه الأنواع من الثوابت يسبقها دائمًا 0.

Example, 012, 065

أعلاه هي الثوابت الثماني الصالحة.

يحتوي الثابت السداسي العشري على أرقام من 0 إلى 9 بالإضافة إلى أحرف من AF. الثوابت السداسية العشرية تكون مسبوقة دائمًا بـ 0X.

Example, 0X2, 0Xbcd

أعلاه هي الثوابت السداسية العشرية الصالحة.

نادرًا ما يتم استخدام الثوابت الصحيحة الثمانية والست عشرية في البرمجة باستخدام "C".

ثوابت الحروف

يحتوي الثابت الحرفي على حرف واحد فقط محصور بين علامتي اقتباس مفردتين ('). ويمكننا أيضًا تمثيل الثابت الحرفي من خلال توفير قيمته في نظام ASCII.

Example, 'A', '9'

فيما يلي أمثلة لثوابت الأحرف الصالحة.

ثوابت السلسلة

يحتوي الثابت النصي على سلسلة من الأحرف محاطة بعلامتي اقتباس مزدوجتين ("").

Example, "Hello", "Programming"

هذه هي أمثلة ثوابت السلسلة الصالحة.

الثوابت الحقيقية

مثل ثوابت الأعداد الصحيحة التي تحتوي دائمًا على قيمة عدد صحيح. يوفر 'C' أيضًا ثوابت حقيقية تحتوي على علامة عشرية أو قيمة كسر. تسمى الثوابت الحقيقية أيضًا باسم ثوابت الفاصلة العائمة. يحتوي الثابت الحقيقي على نقطة عشرية وقيمة كسرية.

Example, 202.15, 300.00

هذه هي الثوابت الحقيقية الصحيحة في 'C".

يمكن أيضًا كتابة الثابت الحقيقي على النحو التالي:

Mantissa e Exponent

على سبيل المثال، للإعلان عن قيمة لا تتغير مثل ثابت الدائرة الكلاسيكي PI، هناك طريقتان للإعلان عن هذا الثابت

باستخدام الكلمة المفتاحية const في تعريف المتغير، سيتم حجز مساحة تخزين في الذاكرة.

#include <stdio.h>
int main() {
const double PI = 3.14;
printf("%f", PI);
//PI++; // This will generate an error as constants cannot be changed
return 0;}

باستخدام توجيه المعالج المسبق #define الذي لا يستخدم الذاكرة للتخزين ودون وضع فاصلة منقوطة في نهاية هذا البيان

#include <stdio.h>
#define PI 3.14
int main() {
printf("%f", PI);
return 0;}

الأسئلة الشائعة

المتغير هو موقع ذاكرة مُسمى يمكن أن تتغير قيمته أثناء التنفيذ. أما الثابت فيحمل قيمة ثابتة لا تتغير بمجرد تعريفها.

تُنشئ الكلمة المفتاحية const ثابتًا مُحدد النوع ومُخزّنًا في الذاكرة، وهو ما يتحقق منه المُصرّف. أما #define فهو ماكرو مُعالج مُسبق يستبدل النص ولا يستخدم أي مساحة تخزين.

يوجد المتغير المحلي داخل دالة ولا يكون موجودًا إلا أثناء تشغيلها. أما المتغير العام فيبقى متاحًا على مستوى البرنامج بأكمله من خلال لغة C. فئات التخزين.

يخزن النوع المُوَقَّع القيم السالبة والموجبة. أما النوع غير المُوَقَّع فيخزن القيم غير السالبة فقط، مما يضاعف نطاق القيم الموجبة لنفس عدد البايتات.

لم يكن للغة C الكلاسيكية نوع البيانات المنطقية (boolean)؛ استخدم المبرمجون نوع البيانات int بقيمتي 0 و1. منذ C99، يضيف القيم المنطقية (bool) والصواب (true) والخطأ (false) من خلال النوع _Bool.

تحدد مُحدِّدات التنسيق كيفية تفسير البيانات في الدالتين printf و scanf. يُستخدم %d للتعامل مع الأعداد الصحيحة، و%f للتعامل مع الأعداد العشرية، و%c للتعامل مع حرف واحد.

نعم. تقترح برامج الذكاء الاصطناعي المساعدة في البرمجة أنواع البيانات، وتحذر من القيم التي تتجاوز النطاق المحدد، وتُشير إلى الأسماء التي تتعارض مع الكلمات المفتاحية. راجع المخرجات دائمًا.

مساعد الطيار جيثب تُكمل هذه الخاصية تعريفات المتغيرات والثوابت تلقائيًا من التعليقات أو التعليمات البرمجية المجاورة. وتقترح أسماءً وأنواع بيانات، وتُنشئ أسطرًا من الثوابت أو تعريفات #define للمراجعة.

تلخيص هذه التدوينة بـ: