الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

أساسيات لغة C للبرمجة

مغلق
بدأه caballero في 5 أغسطس 2005 · 30 رد · 3,096 مشاهدة · في نظام تشغيل Unix & Linux
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله تعالى و بركاته

سأقوم في هذا الموضوع بشرح أساسيات لغة C للبرمجة ، و الهدف منها هو وضعك على الطريق و نقلك من مرحلة المبتدئ الى مرحلة المتقدم .

أدرك بأن الطريقة الوحيدة لتعليم أية لغة برمجة للمبتدئين ، هي كثرة اﻷمثلة و التطبيقات ، لذلك لن أتعبك بقراءة المقدمات الطويلة و دروس التاريخ ، بل سنبدأ مباشرة بكتابة برنامجك اﻷول بلغة C للبرمجة .

اذن ، ابتعد قليلا عن الشاشة و خذ نفسا عميقا ، و توكل على الله .

البرنامج اﻷول :

مرحبا بك من جديد ، لعلك تتسائل الآن ما هي اﻷدوات التي ستحتاجها ، سأجيبك لا شيء ، ﻷنك تملك جميع اﻷدوات في نظامك ، طبعا أتكلم عن Linux ، فهناك مترجم مجاني للغة C يأتي مرفقا مع جميع التوزيعات ، و ستكتب الشفرات في محررات النصوص المرفقة مع النظام أيضا ، اذا لم تستطع الحصول على نظام لينوكس حتى الآن فلا تحزن ، فيمكنك تطبيق الدروس عن طريق حجز حساب مجاني لصدفات اليونكس ، و الطريقة مشروحة بالتفصيل في هذا الرابط .

لم لا نبدأ الآن ؟

افتح أي Terminal تحبه ، و ليكن Konsole ، قم بانشاء مجلد جديد ستحفظ فيه شفرات برامجك

mkdir CLanguage

أنشئ ملفا جديدا داخله باسم FirstApplication و بامتداد c

cd CLanguage
touch FirstApplication.c

و قم بفتحه بأي محرر نصوص تفضله ، بالنسبة لي فأنا أفضل pico و vi ، و لكن رفقا بكم ، فأنصحكم أن تفتحوه ب Emacs أو Kate أو Kwrite

emacs FirstApplication.c

البرنامج اﻷول الذي يكتب في كل لغات البرمجة هو ! Hello, World ، و لكننا سنشذ عن هذه القاعدة ، و سنكتب برنامجا يطبع شعار نظام Unix .

الآن ، اكتب فيه الشفرة التالية :

(تجنب النسخ و اللصق)

#include <stdio.h>
main ()
{
printf("Live Free or Die !\n");
}

و لحفظه ، من قائمة File اختر Save

ثم أغلق المحرر .

عد الآن الى Konsole ، و قم بترجمة الملف .

هناك طريقتان :

الطريقة اﻷولى :

cc FirstApplication.c

الطريقة الثانية :

gcc -o FirstApplication FirstApplication.c

تنفيذ البرنامج :

هناك أيضا طريقتان متعلقتان بطريقة ترجمتك للملف ، اذا قمت بترجمته بالطريقة الأولى فقم بتنفيذ هذا اﻷمر :

./a.out

و الا ، قم بتنفيذ هذا اﻷمر :

./FirstApplication

في كلا الحالتين ستحصل على نفس النتيجة :

Live Free or Die !

اسمح لي أن أهنئك ، فقد أصبحت مبرمجا .

شرح البرنامج اﻷول :

السطر اﻷول :

#include <stdio.h>

توجيه ال Compiler الى مكتبة الدخل و الخرج القياسية ، و هي stdio اختصارا ل Standard Input Output Library ، و بشكل عام ، اذا أردت اضافة أي مكتبة الى برنامجك ، استعمل اﻷمر include# متبوعا باسم المكتبة التي يجب أن تحصر بين <>

الامتداد h هو اختصار ل Header File و تعني الملف الرأسي .

السطر الثاني :

كما تعلمون فان لغة C للبرمجة هي لغة اجرائية ، أي تعتمد على الدوال (سنتطرق لها فيما بعد) ، و هذا يعني أن كل برنامج مكتوب بلغة C يضم دالة واحدة على اﻷقل و هي main

الحاسب يحتاج أن يعرف من أين يبدأ بتنفيذ برنامجك ، برامج لغة C يبدأ تنفيذها من دالة main .

دالة main هي دالة خاصة تعتبر كنقطة الانطلاق .

لا بد من وضع القوسين الفارغين بعد اسم main ، و ستفهم فائدتهما عند دراسة الدوال .

السطر الثالث و السطر الخامس :

جسم الدالة يتم حصره بين لامتين ، { }

السطر الرابع :

قمنا باستدعاء الدالة printf من مكتبة stdio ، و تقرأ Print Function ، و تقوم هذه الدالة بطباعة String الموجود بين علامتي الاقتباس " " ، و يجب وضع قاطعة (فاصلة منقوطة ; ) في نهاية الدالة .

مثال :

لطباعة جملة Linux is Freedom نكتب :

printf("Linux is Freedom");

الأمر n\ يسمى سلسلة الهروب Escape Sequence ، و يخبر المترجم أن يضع مؤشر الكتابة في بداية السطر الموالي .

اذا لم تفهم فطبق هذا المثال و ركز قليلا في النتيجة

 #include <stdio.h>
main()
{
printf("Knowledge \nis \nPower");
}

ستكون النتيجة :

Knowledge
is
Power

أظنك فهمت الآن وظيفته .

و ربما عرفت أنه لطباعة سطر فارغ يكفي أن نكتب

printf("\n");

و لطباعة جملة في سطر واحد يمكننا أن نكتب مثلا :

printf("Knowledge");
printf("is");
printf("Power");

و من سلاسل الهروب اﻷخرى t\ التي تؤدي دور زر tab عند الكتابة ، و r\ التي تضع مؤشر الكتابة في بداية السطر الحالي ، و \\ التي تطبع علامة \ ، و غير ذلك .

الآن ، نأتي الى الواجب :

1- اكتب برنامجا يطبع اسمك في سطر و بريدك الالكتروني في سطر .

2- اكتب برنامجا يحتوي على خطأ مقصود و حاول أن تشرح رسالة الخطأ عند الترجمة .

3- حدد اﻷخطاء اﻷربعة في هذا البرنامج :

#include <stdio>
main()
{
print("I am Free \n)
}

الى لقاء قريب بحول الله

MPSI/MP* - CPR Tanger

#2

هل هذا برمجة under linux

Muhammad Allam

Computer Science

@Resource(MappedURL="My Blog" )

#3

السلام عليكم

نعم ، البرمجة بلغة C تحت Linux

كما تلاحظ فهي لا تختلف كثيرا عن البرمجة بلغة C تحت منصة الويندوز ، ﻷن لغة C القياسية واحدة .

و لكن هناك بعض الدوال التي تسهل عليك العمل بدل من اعادة كتابتها من جديد .

كما بامكانك انشاء برامج ذات واجهة رسومية بلغة C اذا استعملت المكتبات المناسبة مثل gnome.h ، و لن أتطرق اليها في هذا الموضوع .

MPSI/MP* - CPR Tanger

#4

شكرا جزيلا ياكابوس

اعتقد انك بهذه الطريقه تضرب عصفورين بحجر

تعليم لغة سي تحت نظام لينكس والاخرى طريقة فتح ملف والدخول اليه عن طريق سطر الاوامر وطريقة استخدام المترجم طريقه تشكر عليها للمبتدئين مثلي

شكرا مرة اخرى

#5

وعليكم السلام ورحمة الله وبركاتة

شكرا اخي

:) والله استفدت من الدرس

وسهلي فكره عن البرمجه كنت متصور ان هنااك إختلاف كلي بين انواع اللغات من حيث كتابتها ومن حيث التطبيق

لكن اتضحلي انها كلها تقريباً تتشابه

وانا الحين ادرس الperl وال php :) وايضاً معك ال C

بارك الله فيك ونتمنى المزيد من الدروس ومشاركاتك الحلوه

Work is never done on windows system

FreeBSD is the best OS around

#6

بارك الله فيخ اخوي كابوس على الدرس ..

كان ودي من زمان ادرس لغة c بس كنت خايف من الدخول لها ..

اتمنى انك تستمر ولا توقف ..

سؤال :

شنو الفرق بين كتابة الكود في سطر :

printf("Knowledge \nis \nPower");

وبين كتابته في عدة اسطر :

printf("Knowledge");

printf("is");

printf("Power");

#7

:D

سؤالي حده غلط

:D

تاثير السهر احيانا يولد ضعف الانتباه B)

الواجب :D :

ارفقت كل اللي سويته بالكونسول ومعاه ملف اخر طلع معاه ..

خبرني عن نتيجتي .. :)

جزاك الله خير واتمنى تواصل ..

عندي استفسار :

في المثال التالي :

#include <stdio.h>
main()
{
printf("Knowledge \nis \nPower");
}

انا طبقت مثلك حرفيا لكن طلعلي الناتج هو دخول امر الشيل home/user/ في نهاية اخر السطر ملتصقا به .. وراح يبين معاك بالمرفقات ان شالله .. فابدلت ال \n ووضعتها بعد كلمة power .. فانتهت المشكلة واصبحت الكلمة لوحدها .. :)

Text File.rar

#8

اسف تصحيح

printf ("Knowledge \nis Power \n");

تم تعديل هذه المشاركة بواسطة ابن عسكر في 6 أغسطس 2005 في 10:14

#9

السلام عليكم

ما يقوم به الأخ راغب (كابوس) بارك الله فيه ، هو شرح للغة C تحت GCC compiler ، حيث أنه هذا الكومبايلر هو الأقوى عالميا.

وسوف أقوم بمساندة أخي راغب(بعد إذنه طبعا :) ) ، لأن هذا المجال مهم فعلا للمبرمجين تحت نظام لينوكس .

والله المستعان.

System Engineer

Red Hat Certified Engineer

Red Hat Certificate Number

805010381752078

#10

السلام عليكم

شكرا جزيلا لكم جميعا و ان شاء الله أكون عند حسن ظنكم

اﻷخ احمد98

يمكنك أن تفتح أي ملف من سطر اﻷوامر

مثلا ، لفتح ملف PDF اكتب

acroread File_Name.pdf

أترك لك فرصة اكتشاف اﻷوامر اﻷخرى :)

اﻷخ ابن عسكر

لا يوجد فرق ، سوى في النتيجة :

printf("Knowledge \nis \nPower");

printf("Knowledge");
printf("is");
printf("Power");

نتيجة الشفرة اﻷولى ستكون

Knowledge
is
Power

أما نتيجة الشفرة الثانية فستكون

KnowledgeisPower

لعلك تتسائل كيف ذلك ؟

شرح الشفرة اﻷولى :

تتم عملية طباعة الكلمة " Knowledge" ثم بعدها تطلب من المترجم وضع مؤشر الكتابة في بداية السطر الموالي بواسطة اﻷمر n\ .

و هو اختصار جملة New Line ، أي سطر جديد ، أو باﻷحرى : اذهب الى بداية السطر الموالي .

ثم تتم عملية طباعة كلمة " is" ، فيطبعها عند مكان تواجد مؤشر الكتابة و هو بداية السطر الموالي ، و هكذا ...

شرح الشفرة الثانية :

تتم عملية طباعة كلمة "Knowledge" و يوضع مؤشر الكتابة في نهاية الكلمة .

ثم تتم عملية طباعة كلمة "is" فتطبع ابتداء من مكان تواجد مؤشر الكتابة و هو نهاية الكلمة "Knowledge" .

و هكذا ، ...

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

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

أتوقع لك مستقبلا زاهرا :) .

أعد قراءة الشرح الذي ستجده في هذه المشاركة و ستفهم لماذا .

بالنسبة للملف المرفق فهو لا يحتوي على الملف المهم ، الذي يجب أن يكون بامتداد c .

و حاليا أقوم بقراءة اﻷوامر التي كتبتها .

أخي برق

طبعا أرحب بكل مشاركاتك ، و أتمنى أن تتابع الدروس أنت أيضا :lol: و أن تنفذ الواجب :D .

يمكنك كتابة كل ما تراه مناسبا بشرط ألا تسبق المنهج الدراسي :) .

والسلام

MPSI/MP* - CPR Tanger

#11

السلام عليكم

جمل التعليق

كتابة جمل التعليق تعتبر من العادات الحسنة لدى المبرمجين ، فهي تسهل قراءة الشفرات و توثق البرنامج ، و تعطي فكرة عن وظيفة جزء ما من برنامجك .

و لاضافة جمل التعليق ، هناك طريقتان ، سأشرحهما في المثال التالي ، لذلك قم بفتح Konsole و ابدأ بكتابة الشفرة و نفذ البرنامج :

//include information about standard library
#include <stdio.h>
/* define a function
called main*/
main ()
{
//main calls printf function to print a sentence
printf("Knowledge is Power\n");
}

كما ستلاحظ فان التعليقات تهمل أثناء الترجمة ، فهي جمل غير تنفيذية .

و لكتابة تعليق في سطر واحد فيجب أن تسبقه ب //

مثال :

//This is a comment

و اذا تجاوز السطر ، فيجب أن يحصر التعليق بين */ و /*

مثال :

/* This is a Comment
that is on 
a number of lines */

و تلك ليست قواعد ، فمثلا يمكنك أن تكتب

// This is a Comment
//that is on
//a number of lines

/*This is a Comment */

عندما يجد المترجم الرمز // يذهب مباشرة للسطر الموالي ، و عندما يجد */ يتوقف عن الترجمة و يبحث مباشرة عن /* .

المعرفات

هي أسماء تعرفها و تضعها في برنامجك ، و قد تكون :

متغيرات .

ثوابت .

دوال .

و لتسميتها شروط يجب احترامها :

ألا تكون عبارة عن أرقام .

أن تبدأ بحرف أو _ ، و لا تبدأ برقم .

ألا تحتوي على فراغ .

ألا تكون كلمة محجوزة ، و عددها 32 ، و هي :

auto   break   case  char  const  continue  default  do
double  else  enum  extern  float  for  goto  if
int  long  register  return  short  signed  sizeof  static
struct  switch  typedef  union  unsigned  void  volatile  while

و يجب الانتباه الى أن لغة C للبرمجة حساسة لحالة اﻷحرف ، أي أن المعرفات Number و number و NUMBER و nUmBER تعامل على أنها معرفات مختلفة .

اﻷنواع :

int لتخزين قيم عددية صحيحة .

float لتخزين قيم عددية عشرية ، أي تحتوي على فاصلة عشرية "." .

long int هو نفس int و لكن يأخذ قيم أكبر .

double هو نفس float و لكن يأخذ قيما أكبر .

char لتخزين حرف واحد .

bool متغير منطقي يأخذ احدى القيمتين : صحيح True أو خطأ False

المتغيرات :

هي أسماء تحجز لمواقع في الذاكرة ، تحمل قيما يمكن تغييرها أثناء عمل البرنامج ، مثلا : يمكننا أن نعرف متغيرا باسم Variable ونعطيه قيمة ابتدائية هي 7 ، و يمكننا تغييرها فيما بعد الى 22 مثلا .

و لتعريفه ، نضع نوع المتغير ثم اسمه ثم قاطعة (فاصلة منقوطة) .

أمثلة :

int a;
float b;
char c;

كما يمكنك أن تعطيه قيمة ابتدائية أيضا :

int number=12;
float f=23.8;

كما يمكنك أن تعرف عدة متغيرات من نفس النوع مع ضرورة الفصل بين كل منهم بفاصلة .

int x,y,z;
float m,n=4.6;

الثوابت :

هي نفس المتغيرات و لكن القيمة التي تحملها لا تتغير طوال فترة البرنامج .

و لتعريفها يجب أن تضع اسم const قبل نوع الثابت و اسمه ، كما يجب أن تضع له قيمة ابتدائية .

 const int d=26;
 const float p=6.8;

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

الجمع +

الطرح -

الضرب *

القسمة /

باقي القسمة %

أمثلة :

4+5=9
8-2=6
3*7=21
22%3=1

a=b+k;
m=n-6;
x=y*z;
d=84%a;

الموصفات :

لطباعة القيم العددية المخزنة في المتغيرات و الثوابت ، نستعمل ما يسمى بالموصفات التي تفسر للمترجم نوع البيانات التي يتعامل معها .

و هي كالتالي :

d%

يستخدم للدلالة على المتغيرات و الثوابت الصحيحة .

f%

يستخدم للدلالة على المتغيرات و الثوابت العشرية .

c%

يستخدم للدلالة على المتغيرات و الثوابت الحرفية .

s%

يستخدم للدلالة على المصفوفات الحرفية ( سنتناولها لاحقا )

مثال :

#include <stdio.h>
main ()
{
int b=6;
char m;
float e=4.2;
m='a';
printf("%d\n",b);
printf("%f\n",e);
b=8;
printf("%d\n",b);
printf("%c\n",m);
}

حاول تحديد نتيجة البرنامج بقرائته فقط ، ثم قم بتنفيذه .

برنامج تطبيقي :

سنقوم بكتابة برنامج يحول درجة الحرارة 367 على مقياس Fahrenheit الى مقياس ِCelsius

كم عدد المتغيرات التي سنحتاجها ؟

اثنان ، سنسميهما cels و fahr

ما هي الصيغة ؟

cels = 5 * (fahr - 32) / 9;

الشفرة :

#include <stdio.h>
main ()
{
    int fahr=367;
    int cels;
cels=5*(fahr-32)/9;
 printf("%d\n",cels);
}

الواجب لهذا اليوم :

1- حدد أسماء المعرفات الخاطئة من بين اﻷسماء التالية و بين لماذا ؟

number
Nightmare
float
d
7assan
sm+t
while
_linuxian
61

2- حدد الخطأ في البرنامج التالي :

#include <stdio.h>
main()
{
number=45;
printf("%d",number);
}

3- اكتب برنامجا يحول عددا n=4 من الساعات الى الثواني .

الى لقاء قريب باذن الله

MPSI/MP* - CPR Tanger

#12

مشكور على الدرس ..

هالمرة شوي دسم .. عاد انا اكره شي عندي الرياضيات ..

راح احاول احل الولجب ان شالله ..

#13

اسف اخوي كابوس على التاخير بس انشغلت شوي ..

حليت الاول والثاني

اما الثالث فصراحة ما عرفت :blink:

num.rar

#14

السلام عليكم

ممتاز صراحة ، رغم أنك ارتكبت بعض اﻷخطاء

MPSI/MP* - CPR Tanger

#15

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته ...

هذه هي محاولتي لحل الواجب الأخير :

* حل السؤال الأول :

1- صح .

2- صح .

3- خطأ ، لأنه من الكلمات المحجوزة .

4- صح .

5- خطأ ، لأنه لا يصح أن يبدأ المتغير برقم .

6- خطأ ، لأنه يجب أن لا يحتوي اسم المتغير على رموز عدا _ .

7- خطأ ، لأنه من الكلمات المحجوزة .

8- صح .

9- خطأ ، لأنه لا يصح أن يكون المتغير عبارة عن أرقام .

* حل السؤال الثاني :

number=45;

// كان يجب أن يكون
int number=45;

// أو
int number;
number=45;

* حل السؤال الثالث :

#include <stdio.h>
main()
{
int n=4,seconds;
seconds=n*3600;
printf("%d",seconds);
}

سبحان الله وبحمده ... سبحان الله العظيم

#16

مشكور استاذي كابوس

ياليت تبين لي اخطائي علشان استفيد منه :)

#17

السلام عليكم

أخي ابن عسكر

كنت أحاول اعطائك فرصة لمعاودة حل الواجب ، و لكن اﻷخ المبرمج أحمد جزاه الله كل خير سبقك ، :) :D

راجع رد اﻷخ المبرمج أحمد في الصفحة السابقة

MPSI/MP* - CPR Tanger

#18

السلام عليكم

نسيت شيئا هاما

رجو ألا تناديني بلقب استاذ فأنا ما زلت صغيرا عليها :D

يكفي أن تناديني باﻷخ كابوس :)

MPSI/MP* - CPR Tanger

#19

اخوي كابوس وين الدرس ..

عسى المانع خير ان شالله :)

#20

السلام عليكم

سأحاول أن أضعه غدا أو بعد غد ان شاء الله

MPSI/MP* - CPR Tanger

#21

طيب وانا بعمل كومبيل مش كل البرامج بيشتغل

بامر gcc

اللهم زدنى علما

من لا يستطع ان يرفع غطاءه عنه لصلاه الفجر لا يستطع ان يرفع سلاحه عند بدا المعركه

#22

مشكور أخوي كابوس على هذه الدروس لكن عندي طلب وسؤال :

الطلب أتمنى وضع روابط الدروس في المشاركة الأولى في هذا الموضوع بهذا الشكل :

الدرس الأول (البرنامج الأول): /index.ph...ndpost&p=364814

الدرس الثاني ( التعليقات ): /index.ph...ndpost&p=365357

أما السؤال فهو :: لماذا ال C وليست ال C++ ؟؟؟ إضافة إلى أني أرجو الرد على الموضوع : /index.ph...pid=368583&st=0

#23
اقتباس
طيب وانا بعمل كومبيل مش كل البرامج بيشتغل

بامر gcc

أنا لو حصل لي حاجة ، حيكون السبب الأخ أحمد جمال :angry:

يا عم إنت جبت لي إحباط :blink:

الأمر gcc لعمل compiling لملف .c ،بس الناتج حيطلع في ملف اسمه a.out لأنه هو الملف القياسي ، ولو عايز يطلع في ملف تنفيذي وتحدد أنت الإسم ، اكتب الأمر التالي:

gcc sourcefile.c -o filename

حيث أن filename هو اسم الملف التنفيذي الذي سينتج.

System Engineer

Red Hat Certified Engineer

Red Hat Certificate Number

805010381752078

#24

السـﻻم عليكم ..

يبدو ان اﻻخ كابوس قديما كاباليرو حديثا :D ﻻ يستطيع مواصلة الدروس ..

انا عندي اقتراح :

ان نحول الموضوع من دروس الى اسئلة .. علشان نخفف الضغط عن اﻻخ كاباليرو ..

ونستفيد بشكل اسرع من اﻻخوة ..

انا عندي سؤال :

ما هي المكتبة sndfile.h ؟

وكيف استطيع التعامل معها ؟

وما هي الدوال التي تعمل ضمنها ؟

ويا حبذا لو مثال :D

#25

السلام عليكم

أخي العزيز ابن عسكر

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

ان شاء الله سأواصل كتابتها و لكن ارجوا أن تصبر قليلا

جزاك الله خيرا

MPSI/MP* - CPR Tanger

هذا الموضوع مغلق.

مواضيع مشابهة