1. الأنواع الاعتيادية
لعلمك فإنه في علم الرياضيات تنقسم الأعداد إلى عدة مجموعات أهمها ما يلي:
IN | وهي مجموعة الأعداد الصحيحة الطبيعية | :( 0 ، 1 ، ... ، n ) |
ZZ | وهي مجموعة الأعداد الصحيحة النسبية | :(n ، ... ، 1، 0 ، -1 ، ... ، -n ) |
Q | وهي مجموعة الأعداد الجذرية | :كل عدد يمكن تمثيله على الشكل التالي q/p |
IR | وهي مجموعة الأعداد الحقيقية | :كل المجموعات الأولى + الأعداد العشرية |
في اللغة C توجد عدة مجموعات مشابهة:
C يحتوي على المجموعات التي في الأعلى كلها، لكن هناك فرق بين الرياضيات و C :
في الرياضيات: n وp وq غير محدودة.
في اللغة السي: محدودة .
قبل التطرق لاستعمال أي نوع يجب معرفة المجال الذي ينتمي إليه وكذلك عدد الأثمان (byte أو octet) الذي يأخذها في الذاكرة.
2. تعريف المتغيرات البسيطة
في الخوارزم | في C |
<نوع> <متغير1>،<متغير2>،...،<متغيرn> |
<Type> <NomVar1>,<NomVar2>,...,<NomVarN>; |
أمثلة:
في الخوارزم | في C |
صحيح X,Y,compteur |
int compteur,X,Y;
float hauteur,largeur; double masse_atomique; char touche; int t_pressee; |
ملاحظة :الأنواع المنطقية لا توجد في C ،ويمكن تمثيلها بـ int حيث تأخذ القيمة 1 = صح أو 0 = خطأ
التمرين 3.2
ترجم إلى C التعريفات التالية مع احترام المجال المقدر لها :
(1) |
صحيح |
COMPTEUR |
{0 ,..., 300} |
(2) |
صحيح |
X,Y |
{120- ,..., 100} |
(3) |
صحيح |
MESURE |
{10- ,..., 104} |
(4) |
حقيقي |
SURFACE1 |
{0.5 ,..., 150075} |
(5) |
حقيقي |
SURFACE2 |
{12- ,..., 1500750.5} |
(6) |
صحيح |
N1 |
{0 ,..., 210} |
(7) |
صحيح |
N2 |
{47- ,..., 47} |
(8) |
صحيح |
N3 |
{0 ,..., 326} |
(9) |
صحيح |
N4 |
{1280- ,..., 1285} |
(10) |
منطقي |
TROUVE |
{خطأ, صح} |
3.1.التهيئة
التهيئة في الخوارزم | التهيئة في C |
في <المتغير> نضع <القيمة> |
;<variable> = <value> |
أمثلة :
- التهيئة بالقيم الثابتة :
الخوارزم |
C |
نوع الثابتة |
نضع 141 في LONG |
LONG = 141; |
ثابتة صحيحة |
نضع 3.1415926 في PI |
PI = 3.1415926; |
ثابتة حقيقية |
نضع "L" في NATION |
NATION = 'L'; |
ثابتة حرفية |
- التهيئة بقيم المتغيرات :
الخوارزم |
C |
نضع X1A في VALEUR |
VALEUR = X1A; |
نضع COURRIER في LETTRE |
LETTRE = COURRIER; |
- التهيئة بقيم الإنشاءات :
الخوارزم |
C |
نضع PI*R2 في AIRE |
AIRE = PI*pow(R,2); |
(A+B)/2 نضع MOYENNE في |
MOYENNE = (A+B)/2; |
sin2(X)+cos2(X) نضع UN في |
UN=pow(sin(X),2)+pow(cos(X),2); |
نضع 45+5*X في RES |
RES = 45+5*X; |
نضع (X>Y) في AKBAR |
AKBAR = (X>Y); |
نضع ('a'='a') في CORRECT |
CORRECT = ('a' == 'a'); |
4 الإنشاءات والأوامر
4.1 تعريف
الإنشاء: هو كل أمر منته بالرمز ';'
4.2 أمثلة
printf("salamo 3alaikom"); /* الإنشاء الأول*/
c=getchar(); /* الإنشاء الثاني*/
x+=2; /* الإنشاء الثالث*/
y++; /* الإنشاء الرابع*/
5 أولوية أو أسبقية العوامل
التصنيف | العوامل |
الأولوية الأولى | () |
الأولوية الثانية | ! ++ -- |
الأولوية الثالثة | * / % |
الأولوية الرابعة | + - |
الأولوية الخامسة | < <= > >= |
الأولوية السادسة | == != |
الأولوية السابعة | && |
الأولوية الثامنة | || |
الأولوية التاسعة | = += -= *= /= %= |
التمرين 3.5
لنعتبر القيم التالية : a=20 b=5 c=-10 d=2 x=12 y=15
حدد في كل حالة من الحالات التالية القيمة الناتجة عن الإنشاءات وقيم المتغيرات العددية التي قد تم تغيير محتواها :
(2) (5*(X+2)*3)*(B+4)
(3) A == (B=5)
(4) A += (X+5)
(5) A != (C *= (-D))
(6) A *= C+(X-D)
(7) A %= D++
(8) A %= ++D
(9) (X++)*(A+C)
(10) A = X*(B<C)+Y*!(B<C)
(11) !(X-D+C)||D
(12) A&&B||!0&&C&&!D
(13) ((A&&B)||(!0&&C))&&!D
(14) ((A&&B)||!0)&&(C&&(!D))
التمرين 3.6
أزل الأقواس غير الضرورية في إنشاءات التمرين 3.5 .
6 الدوال الحسابية الاعتيادية
متغيرات الدوال الحسابية ونتيجتها من نوع double ، إليك أبرزها :
الكتابة في C |
الشرح |
الكتابة الخوارزمية |
exp(X) |
الدالة الأسية |
eX |
log(X) | خوارزم أو لوغاريتم طبيعي | ln(X), X>0 |
log10(X) | خوارزم أو لوغاريتم بـ 10 | log10(X), X>0 |
pow(X,Y) | X أس Y | XY |
sqrt(X) | جذر مربع X | √x |
fabs(X) | القيمة الطلقة X | |X| |
floor(X) | تقريب بتفريط | int(X) |
ceil(X) | تقريب بإفراط | |
fmod(X,Y) |
باقي القسمة الجذرية لـ X/Y |
|
sin(X) cos(X) tan(X) |
الدوال المثلثية |
جيب وجيب التمام ومماس X |
asin(X) acos(X) atan(X) |
الدوال المثلثية العكسية |
|
sinh(X) cosh(X) tanh(X) |
الدوال المثلثية الهدلولية |
التمرين 3.7
قم بتعديل الشفرة التالية بحيث تظهر حسب ما يلي:
* AB
*وتر مثلث قائم الزاوية ذي الضلعين A و B ،
* مماس A (يعني tan ) باستعمال الدالتين sin و cos ،
* القيمة المقربة بتفريط لـ A/B،
* القيمة المقربة بتفريط لـ 3 مواقع وراء الفاصلة لـ A/B،
#include <stdio.h> main() { double A; double B; double RES; /* A و B قراءة قيمتي */ printf(" A : "); scanf("%lf", &A); printf(" B : "); scanf("%lf", &B); /* الحساب*/ RES = A*A; /* إظهار النتيجة على الشاشة */ printf("A^2 = %f \n", RES); /* الحساب*/ RES = B*B; /* إظهار النتيجة على الشاشة */ printf("B^2 = %f \n", RES); return 0; } |
7.1 التحويل التلقائي
مثال 1:
نعتبر الحساب التالي :
foat X = 12.5;
double Y; Y = I *X;
لأجل العملية Y = I * X سيكون لدينا :
- I سيصبح من النوع float لأجل أن يضرب في X إذن ستصبح النتيجة من النوع float.
- بما أن Y من النوع double سيتم تحويل النتيجة إلى double. وسنحصل في النهاية على النتيجة : Y = 100.00
مثال 2:
نعتبر الحساب التالي :
لأجل العملية (RES = pow(A, 2 سيكون لدينا :
- بما أن الدالة pow ومتغيراتها من النوع double سيتم تحويل A و 2 إلى النوع double .
- بما أن RES من النوع int سيتم تحويل النتيجة إلى int.
7.2 قوانين التحويل
يتم التحويل تلقائيا عند كل عملية حسب :
1- char و short يحولان إلى أكبر نوع من الأنواع int, unsigned int, long, unsigned long
2- النوع الصحيح يحول إلى النوع الحقيقي
3- النوع الحقيقي يحول إلى أكبر نوع من الأنواع float, double, long double
التمرين 3.8
char B = 'A'; /* code ASCII : 65 */
حدد نوع وقيمة كل من الإنشاءات التالية:
(2) B + 1
(3) C + B
(4) 3 * C + 2 * B
(5) 2 * B + (A + 10) / C
(6) 2 * B + (A + 10.0) / C
مثال 1 : التحويل التلقائي
نعتبر الحساب التالي :
char A=3;
int B=4;
float C;
C = A/B;
نلاحظ أولا أن المتغيرات العددية A و B و C مختلفة من جهة النوع.
لأجل العملية C = A/B سيكون لدينا :
- A سيصبح من النوع int لأجل القسمة الصحيحة إذن ستصبح النتيجة من النوع int (النتيجة هي 0 لأن القسمة الصحيحة لـ 3 على 4 ستكون نتيجتها هي 0 والباقي هو 3 ، لكن ما يهمنا هنا هو النتيجة لأنه لدينا عددين صحيحين ) .
- بما أن C من النوع float سيتم تحويل النتيجة التي هي 0 إلى float . وسنحصل في النهاية على النتيجة : C = 0.0
مثال 2 : التحويل الإجباري
نعتبر الحساب التالي :
char A=3;
int B=4;
float C;
C =(float)A/B;
نلاحظ أولا أن المتغيرات العددية A و B و C مختلفة من جهة النوع.
لأجل العملية C = (float)A/B سيكون لدينا :
- B و A سيصبحان من النوع float لأجل التحويل الإجباري(float) إذن ستصبح النتيجة من النوع float (النتيجة هي 0.75 لأن القسمة الحقيقية لـ 3 على 4 ستكون نتيجتها هي 0.75 والباقي هو 0 ) .
- بما أن C من النوع float سيتم تحويل النتيجة التي هي 0.75 إلى float . وسنحصل في النهاية على النتيجة : C = 0.75
ملاحظة :لأجل تحويل أي عدد أو نتيجة إلى نوع معين type إجباريا يجب وضع النوع أمامه (type).
تأليف
المؤلف الأصلي: فرديريك فابر (Frédéric FABER)
البريد الإلكتروني: عنوان البريد الإلكتروني هذا محمي من روبوتات السبام. يجب عليك تفعيل الجافاسكربت لرؤيته.
الموقع الإلكتروني: http://www.ltam.lu/cours-c
ترجمة بتصرف: محمد عبد الرحمان