English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل أساسيات لغة C

تحكم في عملية لغة C

الوظائف في لغة C

المسافات في لغة C

المراجع في لغة C

الصفحات في لغة C

مباني لغة C

ملفات لغة C

C أخرى

دليل مرجع لغة C

عناصر التشغيل في لغة C

الوظيفة هي رمز يخبر معالج البرمجة تنفيذ عملية حسابية أو منطقية معينة. تحتوي لغة C على مجموعة واسعة من الوظائف وتقدم أنواعًا من الوظائف التالية:

  • الوظائف الحسابية

  • عمليات الحساب العلاقية

  • عمليات الحساب المنطقية

  • عمليات الحساب الثنائية

  • عوامل الاستبدال

  • الوظائف المختلفة

سيتم تقديم كل من الوظائف الحسابية، والوظائف العلاقية، والوظائف المنطقية، والوظائف الثنائية، والوظائف المخصصة، والوظائف الأخرى في هذا الفصل.

الوظائف الحسابية

الجدول أدناه يوضح جميع الدوال الحسابية المتاحة بلغة C. افترض المتغير A قيمة هو 10، المتغير B قيمة هو 20، فإن:

operator描述مثال
+الناتج من جمع العمودينA + B سيكون 30
-الناتج من طرح العمودينA - B سيكون -10
*تضاعف العمودينA * B سيكون 200
/الناتج من قسمة الناتج على الموزعB / A سيكون 2
%ميزة الحساب المتبقي، يتم الحصول على الباقي بعد عملية التقسيم الكاملB % A سيكون 0
++ميزة الزيادة، يتم زيادة قيمة الصنف بأصل 1A++ سيكون 11
--ميزة التناقص، يتم تقليل قيمة الصنف بأصل 1A-- سيكون 9

مثال

الرجاء النظر في المثال أدناه لفهم جميع الدوال الحسابية المتاحة بلغة C:

#include <stdio.h>
 
int main()
{
   int a = 21;
   int b = 10;
   int c;
 
   c = a + b;
   printf("السطر 1 - قيمة c هي %d\n", c);
   c = a - b;
   printf("السطر 2 - قيمة c هي %d\n", c);
   c = a * b;
   printf("السطر 3 - قيمة c هي %d\n", c);
   c = a / b;
   printf("السطر 4 - قيمة c هي %d\n", c);
   c = a % b;
   printf("السطر 5 - قيمة c هي %d\n", c);
   c = a++; // تخصيص بعد الحساب، c هو 21، a هو 22
   printf("السطر 6 - قيمة c هي %d\n", c);
   c = a--; // تخصيص بعد الحساب، c هو 22، a هو 21
   printf("السطر 7 - قيمة c هي %d\n", c);
 
}

عندما يتم تجميع وتنفيذ الكود أعلاه، سيتم إنتاج النتائج التالية:

السطر 1 - قيمة c هي 31
السطر 2 - قيمة c هي 11
السطر 3 - قيمة c هي 210
السطر 4 - قيمة c هي 2
السطر 5 - قيمة c هي 1
السطر 6 - قيمة c هي 21
السطر 7 - قيمة c هي 22

يظهر هذا المثال الفرق بين a++ و ++a:

#include <stdio.h>
 
int main()
{
   int c;
   int a = 10;
   c = a++; 
   printf("أولاً التخصيص ثم الحساب:\n");
   printf("السطر 1 - قيمة c هي %d\n", c);
   printf("السطر 2 - قيمة a هي %d\n", a);
   a = 10;
   c = a--; 
   printf("السطر 3 - قيمة c هي %d\n", c);
   printf("السطر 4 - قيمة a هي %d\n", a);
 
   printf("أولاً الحساب ثم التخصيص:\n");
   a = 10;
   c = ++a; 
   printf("السطر 5 - قيمة c هي %d\n", c);
   printf("السطر 6 - قيمة a هي %d\n", a);
   a = 10;
   c = --a; 
   printf("السطر 7 - قيمة c هي %d\n", c);
   printf("السطر 8 - قيمة a هي %d\n", a);
 
}

نتيجة تنفيذ البرنامج أعلاه هي:

أولاً التخصيص ثم الحساب:
السطر 1 - قيمة c هي 10
السطر 2 - قيمة a هي 11
السطر 3 - قيمة c هي 10
السطر 4 - قيمة a هي 9
أولاً الحساب ثم التخصيص:
السطر 5 - قيمة c هي 11
السطر 6 - قيمة a هي 11
السطر 7 - قيمة c هي 9
السطر 8 - قيمة a هي 9

عمليات الحساب العلاقية

يظهر الجدول أدناه جميع عمليات الحساب العلاقية التي يدعمها لغة C. افترض المتغير A قيمة هو 10، المتغير B قيمة هو 20، فإن:

operator描述مثال
==التحقق من أن قيمتي العنصرين تساويان، إذا كانت تساويان فإن الشرط صحيح.(A == B) هو خطأ.
!=التحقق من أن قيمتي العنصرين تساويان، إذا لم تكن تساويان فإن الشرط صحيح.(A != B) هو صحيح.
>التحقق من قيمة العنصر الأيسر إذا كانت أكبر من قيمة العنصر الأيمن، إذا كان الأمر كذلك فإن الشرط صحيح.(A > B) هو خطأ.
<التحقق من قيمة العنصر الأيسر إذا كانت أصغر من قيمة العنصر الأيمن، إذا كان الأمر كذلك فإن الشرط صحيح.(A < B) هو صحيح.
>=التحقق من قيمة العنصر الأيسر إذا كانت أكبر أو تساوي قيمة العنصر الأيمن، إذا كان الأمر كذلك فإن الشرط صحيح.(A >= B) خطأ.
<=يحقق القيمة المنطقية للمعامل الأيسر إذا كانت أقل أو تساوي القيمة المنطقية للمعامل الأيمن.(A <= B) صحيح.

مثال

انظر إلى المثال أدناه لفهم جميع عمليات الحساب العلاقية المتاحة بلغة C:

#include <stdio.h>
 
int main()
{
   int a = 21;
   int b = 10;
   int c;
 
   if( a == b )
   {
      printf("خط 1 - a يساوي b\n");
   }
   else
   {
      printf("خط 1 - a ليس يساوي b\n");
   }
   if ( a < b )
   {
      printf("خط 2 - a أصغر من b\n");
   }
   else
   {
      printf("خط 2 - a ليس أصغر من b\n");
   }
   if ( a > b )
   {
      printf("خط 3 - a أكبر من b\n");
   }
   else
   {
      printf("خط 3 - a ليس أكبر من b\n");
   }
   /* تغيير قيم a و b */
   a = 5;
   b = 20;
   if ( a <= b )
   {
      printf("خط 4 - a أصغر أو يساوي b\n");
   }
   if ( b >= a )
   {
      printf("خط 5 - b أكبر أو يساوي a\n");
   }
}

عندما يتم تجميع وتنفيذ الكود أعلاه، سيتم إنتاج النتائج التالية:

خط 1 - a ليس يساوي b
خط 2 - a ليس أصغر من b
خط 3 - a أكبر من b
خط 4 - a أصغر أو يساوي b
خط 5 - b أكبر أو يساوي a

عمليات الحساب المنطقية

الجدول أدناه يظهر جميع عمليات الحساب المنطقية والعلاقات المدعومة بلغة C. افترض المتغير A القيمة هي 1، المتغير B القيمة هي 0، فإن:

operator描述مثال
&&يسمى عملاً منطقياً و. إذا كان كلا المعاملين غير صفر، فإن الشرط صحيح.(A && B) خطأ.
||يسمى عملاً منطقياً أو. إذا كان أي من المعاملين غير صفر، فإن الشرط صحيح.(A || B) صحيح.
!يسمى عملاً منطقياً لاستبدال الحالة المنطقية للمعامل. إذا كان الشرط صحيحاً، فإن عملاً منطقياً يجعله خطأ.!(A && B) صحيح.

مثال

انظر إلى المثال أدناه لفهم جميع عمليات الحساب المنطقية المتاحة بلغة C:

#include <stdio.h>
 
int main()
{
   int a = 5;
   int b = 20;
   int c;
 
   if ( a && b )
   {
      printf("خط 1 - الشرط صحيح\n");
   }
   if ( a || b )
   {
      printf("خط 2 - الشرط صحيح\n");
   }
   /* تغيير قيم a و b */
   a = 0;
   b = 10;
   if ( a && b )
   {
      printf("خط 3 - الشرط صحيح\n");
   }
   else
   {
      printf("خط 3 - الشرط خطأ\n");
   }
   if ( !(a && b) )
   {
      printf("Line 4 - Condition is true\n");
   }
}

عندما يتم تجميع وتنفيذ الكود أعلاه، سيتم إنتاج النتائج التالية:

Line 1 - Condition is true
Line 2 - Condition is true
Line 3 - Condition is false
Line 4 - Condition is true

عمليات الحساب الثنائية

تتأثر عمليات الحساب الثنائية بالأرقام الثنائية وتتم العمليات على كل رقمة ثنائية. جدول الحقائق للعمليات الثنائية &، |، ^ كالتالي:

pqp & qp | qp ^ q
00000
01011
11110
10011

لنفترض إذا كان A = 60، و B = 13، الآن نعرضها بتنسيق ثنائي، وهي كالتالي:

A = 0011 1100

B = 0000 1101

-----------------

A&B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

~A = 1100 0011

يظهر الجدول التالي جميع أجهزة الحساب الثنائية المدعومة بلغة C. لنفترض المتغير A القيمة هي 60، المتغير B إذا كان القيمة هي 13، فإن:

operator描述مثال
&

عمليات التمثيل والتمثيل أو والتمثيل المتناقض تتم على مستوى الأرقام الثنائية وتتم عمليات التشغيل على كل رقمة ثنائية.

0&0=0;   
0&1=0;    
1&0=0;     
1&1=1;
(A & B) سيكون 12، أي 0000 1100
|

عامل التمثيل أو، يقوم بـ"التمثيل أو" للبنية الثنائية. قواعد التشغيل:

0|0=0;   
0|1=1;   
1|0=1;    
1|1=1;
(A | B) سيكون 61، أي 0011 1101
^

عامل التمثيل المتناقض، يقوم بـ"التمثيل المتناقض" للبنية الثنائية. قواعد التشغيل:

0^0=0;   
0^1=1;   
1^0=1;  
1^1=0;
(A ^ B) سيكون 49، أي 0011 0001
~

عامل التمثيل العكسي، يقوم بـ"التمثيل العكسي" للبنية الثنائية. قواعد التشغيل:

~1=0;   
~0=1;
(~A) سيكون -61، أي 1100 0011، شكل التكامل الثنائي للعدد الثنائي الموقع إيجابيًا.
<<عامل الحركة الثنائية اليسرى. يتحرك كل ثنائي من أرقام العدد إلى اليسار بعدد معين من المواضع (يتم التخلص من الأرقام في الجانب الأيسر، ويتم تعويض الأرقام بالأصفار في الجانب الأيمن).A << 2 سيكون 240، أي 1111 0000
>>عامل الحركة الثنائية اليمنى. يتحرك كل ثنائي من أرقام العدد إلى اليمين بعدد معين من المواضع، ويتم تعويض الأرقام الإيجابية بالأصفار، والأرقام السلبية بالواحد، ويتم التخلص من الأرقام في الجانب الأيمن.A >> 2 سيكون 15، أي 0000 1111

مثال

الرجاء النظر في المثال التالي لفهم جميع أجهزة الحساب الثنائية المتاحة بلغة C:

#include <stdio.h>
 
int main()
{
 
   unsigned int a = 60; /* 60 = 0011 1100 */  
   unsigned int b = 13; /* 13 = 0000 1101 */
   int c = 0;           
 
   c = a & b; /* 12 = 0000 1100 */ 
   printf("السطر 1 - قيمة c هي %d\n", c);
 
   c = a | b; /* 61 = 0011 1101 */
   printf("السطر 2 - قيمة c هي %d\n", c);
 
   c = a ^ b; /* 49 = 0011 0001 */
   printf("السطر 3 - قيمة c هي %d\n", c);
 
   c = ~a; /* -61 = 1100 0011 */
   printf("السطر 4 - قيمة c هي %d\n", c);
 
   c = a << 2; /* 240 = 1111 0000 */
   printf("السطر 5 - قيمة c هي %d\n", c);
 
   c = a >> 2; /* 15 = 0000 1111 */
   printf("السطر 6 - قيمة c هي %d\n", c);
}

عندما يتم تجميع وتنفيذ الكود أعلاه، سيتم إنتاج النتائج التالية:

السطر 1 - قيمة c هي 12
السطر 2 - قيمة c هي 61
السطر 3 - قيمة c هي 49
السطر 4 - قيمة c هي -61
السطر 5 - قيمة c هي 240
السطر 6 - قيمة c هي 15

عوامل الاستبدال

الجدول أدناه يوضح عوامل الاستبدال المدعومة بلغة C:

operator描述مثال
=عامل الاستبدال البسيط، يتعيين قيمة العامل الأيمن إلى العامل الأيسرC = A + B سيقوم بتعيين قيمة A + B إلى C
+=عامل الاستبدال بالجمع، يجمع العامل الأيمن مع العامل الأيسر ويستبدل النتيجة في العامل الأيسرC += A يعادل C = C + A
-=عامل الاستبدال بالطرح، يطرح العامل الأيمن من العامل الأيسر ويستبدل النتيجة في العامل الأيسرC -= A يعادل C = C - A
*=عامل الاستبدال بالضرب، يضرب العامل الأيمن في العامل الأيسر ويستبدل النتيجة في العامل الأيسرC *= A يعادل C = C * A
/=عامل الاستبدال بالقسمة، يقسم العامل الأيسر بالعامل الأيمن ويستبدل النتيجة في العامل الأيسرC /= A يعادل C = C / A
%=عامل الاستبدال بالباقي، يحتسب الباقي بين العاملين ويستبدله في العامل الأيسرC %= A يعادل C = C % A
<<=عميل الحساب الإضافي بتتبع الثنائيC <<= 2 يساوي C = C << 2
>>=عميل الحساب الإضافي بتتبع الثنائيC >>= 2 يساوي C = C >> 2
&=عميل الحساب الإضافي بتتبع الثنائيC &= 2 يساوي C = C & 2
^=عميل الحساب الإضافي بتتبع الثنائيC ^= 2 يساوي C = C ^ 2
|=عميل الحساب الإضافي بتتبع الثنائيC |= 2 يساوي C = C | 2

مثال

انظر إلى الأمثلة التالية لفهم جميع عميلات التخصيص المتاحة بلغة C:

#include <stdio.h>
 
main()
{
   int a = 21;
   int c;
 
   c = a;
   printf("خط 1 - = مثال على عميل الحساب،قيمة c = %d\n", c);
 
   c += a;
   printf("خط 2 - += مثال على عميل الحساب،قيمة c = %d\n", c);
 
   c -= a;
   printf("خط 3 - -= مثال على عميل الحساب،قيمة c = %d\n", c);
 
   c *= a;
   printf("خط 4 - *= مثال على عميل الحساب،قيمة c = %d\n", c);
 
   c /= a;
   printf("خط 5 - /= مثال على عميل الحساب،قيمة c = %d\n", c);
 
   c = 200;
   c %= a;
   printf("خط 6 - %= مثال على عميل الحساب،قيمة c = %d\n", c);
 
   c <<= 2;
   printf("خط 7 - <<= مثال على عميل الحساب،قيمة c = %d\n", c);
 
   c >>= 2;
   printf("خط 8 - >>= مثال على عميل الحساب،قيمة c = %d\n", c);
 
   c &= 2;
   printf("خط 9 - &= مثال على عميل الحساب،قيمة c = %d\n", c);
 
   c ^= 2;
   printf("خط 10 - ^= مثال على عميل الحساب،قيمة c = %d\n", c);
 
   c |= 2;
   printf("خط 11 - |= مثال على عميل الحساب،قيمة c = %d\n", c);
 
}

عندما يتم تجميع وتنفيذ الكود أعلاه، سيتم إنتاج النتائج التالية:

خط 1 - = مثال على عميل الحساب،قيمة c = 21
خط 2 - += مثال على عميل الحساب،قيمة c = 42
خط 3 - -= مثال على عميل الحساب،قيمة c = 21
خط 4 - *= مثال على عميل الحساب،قيمة c = 441
Line 5 - /= 运算符示例,c 的值 = 21
Line 6 - %= 运算符示例,c 的值 = 11
Line 7 - <<= 运算符示例,c 的值 = 44
Line 8 - >>= 运算符示例,c 的值 = 11
Line 9 - &= 运算符示例,c 的值 = 2
Line 10 - ^= 运算符示例,c 的值 = 0
Line 11 - |= 运算符示例,c 的值 = 2

杂项运算符 ↦ sizeof & 三元

下表列出了 C 语言支持的其他一些重要的运算符,包括 sizeof? :

operator描述مثال
sizeof()返回变量的大小。sizeof(a) 将返回 4,其中 a 是整数。
&返回变量的地址。&a; 将给出变量的实际地址。
*指向一个变量。*a; 将指向一个变量。
? :条件表达式如果条件为真 ? 则值为 X : 否则值为 Y

مثال

انظر إلى الأمثلة التالية لفهم جميع عمليات التداخل المتاحة بلغة C:

#include <stdio.h>
 
int main()
{
   int a = 4;
   short b;
   double c;
   int* ptr;
 
   /* أمثلة على عمليات sizeof */
   printf("السطر 1 - حجم المتغير a = %lu\n", sizeof(a));
   printf("السطر 2 - حجم المتغير b = %lu\n", sizeof(b));
   printf("السطر 3 - حجم المتغير c = %lu\n", sizeof(c));
 
   /* أمثلة على عمليات & و * */
   ptr = &a; /* الآن يحتوي 'ptr' على عنوان 'a' */
   printf("قيمة a هو %d\n", a);
   printf("*ptr هو %d\n", *ptr);
 
   /* مثال على عمليات التوليد الثلاثية */
   a = 10;
   b = (a == 1) ? 20 : 30;
   printf("b قيمة هو %d\n", b);
 
   b = (a == 10) ? 20 : 30;
   printf("b قيمة هو %d\n", b);
}

عندما يتم تجميع وتنفيذ الكود أعلاه، سيتم إنتاج النتائج التالية:

السطر 1 - حجم المتغير a = 4
السطر 2 - حجم المتغير b = 2
السطر 3 - حجم المتغير c = 8
قيمة a هي 4
*ptr هو 4
قيمة b هي 30
قيمة b هي 20

مستوى أولوية عمليات C

أولوية الأوامر تحدد كيفية جمع العناصر في التعبير وتؤثر على كيفية حساب التعبير. بعض الأوامر لها أولوية أعلى من الأخرى، مثل أن أوامر الضرب والقسمة لها أولوية أعلى من أوامر الجمع والطرح.

على سبيل المثال x = 7 + 3 * 2، هنا، يتم تعيين x على 13 وليس 20، لأن أوامر الضرب * لها أولوية أعلى من أوامر الجمع +، لذا يتم حساب الضرب أولاً 3*2، ثم يتم إضافة 7.

الجدول التالي يقوم بترتيب الأوامر حسب أولوية الأوامر من الأعلى إلى الأسفل، حيث تظهر الأوامر ذات الأولوية العالية في الأعلى والأسفل تظهر الأوامر ذات الأولوية المنخفضة. في التعبير، يتم حساب الأوامر ذات الأولوية العالية أولاً.

category operator associativity 
postfix ( ) [] -> . ++ --  من اليسار إلى اليمين 
unary + - ! ~ ++ -- (type)* & sizeof من اليمين إلى اليسار 
multiplication division * / % من اليسار إلى اليمين 
addition subtraction + - من اليسار إلى اليمين 
shift << >> من اليسار إلى اليمين 
relation < <= > >= من اليسار إلى اليمين 
equality == != من اليسار إلى اليمين 
bitwise and AND & من اليسار إلى اليمين 
bitwise xor XOR ^ من اليسار إلى اليمين 
bitwise or OR | من اليسار إلى اليمين 
logical and AND && من اليسار إلى اليمين 
logical or OR || من اليسار إلى اليمين 
condition ?: من اليمين إلى اليسار 
assignment = += -= *= /= %= >>= <<= &= ^= |= من اليمين إلى اليسار 
الcomma , من اليسار إلى اليمين 

مثال

انظر إلى المثال التالي لفهم أولوية الأوامر في لغة C:

#include <stdio.h>
 
main()
{
   int a = 20;
   int b = 10;
   int c = 15;
   int d = 5;
   int e;
 
   e = (a + b) * c / d; // (30 * 15) / 5
   printf("قيمة (a + b) * c / d هي %d\n", e);
 
   e = ((a + b) * c) / d; // (30 * 15) / 5
   printf("قيمة ((a + b) * c) / d هي %d\n", e);
 
   e = (a + b) * (c / d); // (30) * (15/5)
   printf("قيمة (a + b) * (c / d) هي %d\n", e);
 
   e = a + (b * c) / d; // 20 + (150/5)
   printf("قيمة a + (b * c) / d هي %d\n", e);
  
   return 0;
}

عندما يتم تجميع وتنفيذ الكود أعلاه، سيتم إنتاج النتائج التالية:

قيمة ((a + b) * c) / d هي 90
قيمة (((a + b) * c) / d) هي 90
قيمة ((a + b) * (c / d)) هي 90
قيمة (a + (b * c)) / d هي 50