JavaRush /مدونة جافا /Random-AR /مواد إضافية للمحاضرات CS50: الأسبوع الأول (المحاضرتان 3 و...
Masha
مستوى

مواد إضافية للمحاضرات CS50: الأسبوع الأول (المحاضرتان 3 و 4)

نشرت في المجموعة
CS50 في مواد إضافية روسية مهام الأسبوع الأول

أهداف الأسبوع الأول

  • تعرف على أوامر Linux الأساسية
  • تعلم بناء جملة C الأساسي وحل بعض المشكلات
  • ابدأ بالتفكير بشكل أكثر وضوحًا =)
إيد CS50
لإكمال المهام، يقدم CS50 بيئة التطوير المتكاملة (IDE) في السحابة. لاستخدامها، قم بإنشاء حساب على منصة edX وقم بالتسجيل في الدورة التدريبية الأصلية . بعد ذلك:
1. انتقل إلى cs50.io، وحدد edX من القائمة، وأدخل معلومات تسجيل الدخول وكلمة المرور الخاصة بك، وانقر فوق " إرسال " 2. أدخل معلومات حساب edX الخاص بك، وانقر فوق " الرجوع إلى ID.CS50.NET" . cs50.io 3. نحن في انتظار: جارٍ إنشاء مساحتك الافتراضية. الفضاء الافتراضي cs50 4. انتهيت! بيئة تطوير متكاملة CS50
سطر الأوامر وإطلاق CS50 IDE
في الجزء السفلي من نافذة CS50 IDE، في علامة التبويب "المحطة الطرفية"، توجد نافذة طرفية أو لوحة سطر أوامر. يمكنك إدخال أوامر السلسلة هنا: يمكنك القيام بنفس الشيء كما هو الحال مع واجهة النافذة، على سبيل المثال، تشغيل التطبيقات، وحذف الملفات وإنشائها، وتثبيت البرامج. إذا لم يسبق لك العمل مع سطر الأوامر، فمن المحتمل أن تبدو هذه الطريقة مرهقة: عليك أن تتذكر الأوامر وتكتبها بدلاً من النقر على الرموز والأزرار. إلى حد ما هذا صحيح، ثم تم اختراع واجهة النافذة. ومع ذلك، فإن سطر الأوامر متاح في جميع أنظمة التشغيل ويحبه المسؤولون. وكل ذلك لأنه في بعض الأحيان لا يمكنك العيش بدونه. في نافذة IDE بالمحطة، سترى سطرًا غامضًا: اسم المستخدم:~/workspace $ بدلاً من "اسم المستخدم"، سيكون هناك اسم يتم إنشاؤه تلقائيًا (استنادًا إلى بيانات التسجيل الخاصة بك). انقر على نافذة المحطة الطرفية، اكتب: update50 اضغط على Enter. يطلب الأمر من النظام التحديث. سترى خطوطًا تظهر في الوحدة الطرفية تصف عملية التثبيت. لا تغلق CS50 IDE حتى ترى اكتمال التحديث! . بعد ذلك، سيظهر السطر الافتراضي مرة أخرى، وهو السطر الذي يحمل اسمك.
العمل في IDE
لنقم بإنشاء مجلد حيث سيتم تخزين ملفاتك. انقر بزر الماوس الأيمن فوق ~/workspace (الدليل الجذر الخاص بك) في الزاوية العلوية اليسرى من CS50 IDE ، وحدد New Folder . أعد تسمية المجلد pset1 (إذا أخطأت في كتابة الاسم، فانقر بزر الماوس الأيمن فوق المجلد وحدد إعادة تسمية ). إعادة تسمية المجلد cs50 ide ثم انقر بزر الماوس الأيمن على المجلد pset1 وحدد ملف جديد . يظهر الملف المنتظر، فلنعيد تسميته بـ hello.txt . بيئة تطوير متكاملة CS50 انقر مرتين على hello.txt. في CS50 IDE، سترى علامة تبويب جديدة وحقلًا على اليمين يمكنك الكتابة فيه. إذا قمت بذلك، انتبه إلى علامة النجمة (*) التي تظهر أمام اسم الملف في علامة التبويب - وهو مؤشر على أنه تم إجراء تغييرات على الملف، ولكن لم يتم حفظه. مواد إضافية للمحاضرات CS50: الأسبوع الأول (المحاضرتان 3 و 4) - 1 احفظ الملف بالانتقال إلى *File > Save أو باستخدام Command + S (على أجهزة Apple) أو Ctrl + S (على أجهزة الكمبيوتر الشخصية). يجب أن تختفي العلامة النجمية. دعونا نتحقق مما إذا كان الملف في المكان الذي يجب أن يكون فيه. دعونا نفعل ذلك باستخدام سطر الأوامر، وحان الوقت للتعود عليه :). كما كان من قبل، يبدو السطر النشط في المحطة كما يلي: username:~/workspace $ مساحة العمل - دليل العمل الحالي (المفتوح في بيئة العمل). تشير التلدة (~) إلى الدليل الجذر (توجد مساحة العمل فيه). لاحظ أن مساحة العمل في الجهاز هي نفس أيقونة ~/workspace الموجودة في الزاوية العلوية اليسرى من CS50 IDE. لنتمرن. انقر في أي مكان في الجهاز واكتب في سطر الأوامر ls واضغط على Enter. سيؤدي هذان الحرفان الصغيران - اختصار لـ "قائمة" - إلى إظهار قائمة بالملفات والمجلدات الموجودة داخل دليل مساحة العمل الحالية. من بين أمور أخرى، سوف ترى pset1 الذي قمت بإنشائه ! الآن دعونا نفتح المجلد الخاص بنا باستخدام الأمر. نكتب cd pset1 أو أكثر بشكل مطول: cd ~/workspace/pset1 يقوم الأمر cd (تغيير الدليل) بتغيير الدليل النشط، في حالتنا إلى لقد ~/pset1 تغير السطر النشط إلى username:~/workspace/pset1 $ هذا يؤكد أنك الآن في الدليل ~/workspace/pset1 (السطر يرمز إلى "أنا في pset1 داخل مساحة العمل" المجلد الموجود في المجلد الجذر، يُشار إليه بـ ~"). اكتب الآن ls وسترى الملف hello.txt ! إذا نقرت على الاسم في الوحدة الطرفية، فلن يحدث شيء: إنه نص، ولا يعطي نشطًا الرابط، ولكنه يؤكد أن hello.txt موجود في المكان الذي يجب أن يكون فيه. اكتب cd إذا كتبت الأمر cd نفسه فقط، ولكن لم تقم بتوفير وسيطة (أي اسم المجلد الذي يجب أن ينتقل إليه)، فسوف يعيدك إلى الدليل الجذر الافتراضي، لذلك سترى الصورة التالية على السطر النشط: username:~ $ للعودة إلى مجلد pset1، اطلب cd workspace واضغط على Enter. ثم cd pset1 أدخل مرة أخرى. يمكنك أيضًا استبدال هذين الأمرين بأمر واحد أكثر أصالة: cd workspace/pset1
مرحبًا ج!
وأخيرا، لقد حان هذه اللحظة! لنبدأ بالبرمجة. داخل مجلد pset1 الخاص بنا في IDE، قم بإنشاء ملف يسمى hello.c (الامتداد مطلوب)، وافتحه في علامة تبويب جديدة (نعتقد أنك تتذكر كيفية القيام بذلك من الفقرة السابقة). مهم! يجب أن تكون الحروف صغيرة، Linux حساس لحالة الأحرف. Hello.c و hello.c هما ملفان مختلفان. على الجانب الأيمن من نافذة CS50 IDE، اكتب نفس النص تمامًا كما ترى أدناه. نعم، يمكنك نسخه، لكن من الأفضل كتابته. الحروف ذات ألوان مختلفة لأن CS50 IDE يحتوي على تمييز بناء الجملة. فهو يسلط الضوء على كتل النص بالألوان لتسهيل القراءة. لا يتم حفظ الألوان في الملف نفسه، بل تكون مرئية فقط في IDE. إذا كانت هناك، فإن IDE يفهم لغة C، وقد أشرت إلى أنها لغة C في امتداد الملف (*.c). إذا قمت باستدعاء نفس الملف hello.txt، فسيكون النص بلون واحد. تأكد من أنك كتبت كل شيء تمامًا كما في المثال، وإلا فسوف تكتشف الخطأ الأول =). نلفت انتباهك مرة أخرى إلى الفرق بين الأحرف الصغيرة والأحرف الكبيرة. يقوم الحرف \n بنقل المؤشر إلى السطر التالي، ولن يلتصق النص الذي يتم إدخاله بعد ذلك بمخرجات البرنامج. أوه نعم، ولا تنسى الفاصلة المنقوطة (؛). يعد هذا فاصلًا مهمًا لبيانات البرنامج، ولن ترغب لغة C في العمل بدونها. انقر فوق ملف > حفظ (أو الأمر أو Ctrl-s). هل لاحظت اختفاء العلامة النجمية الموجودة أمام اسم الملف؟ إذا كانت الإجابة بنعم، فقد تم حفظ التغييرات. انقر في أي مكان في النافذة الطرفية أسفل الكود الخاص بك وتأكد من أنك داخل ~/workspace/pset1 (إذا لم تكن كذلك، فانقر على القرص المضغوط واضغط على Enter، ثم cd Workspace/pset1 ثم أدخل مرة أخرى). يجب أن يبدو خطك النشط كما يلي: دعنا نتأكد من أن ملف hello.c موجود في المكان الذي يجب أن يكون فيه بالضبط. اكتب واضغط على Enter. هل ترى hello.c أيضاً؟ إذا لم يكن الأمر كذلك، فارجع بضع خطوات وأنشئ الملف في الدليل المطلوب مرة أخرى. ... الآن تأتي اللحظة المهيبة: نشبك أصابعنا و... نكتب: وبأصابعنا متقاطعة نضغط على Enter. بالضبط مرحبا، وليس hello.c. إذا كان كل ما تراه أمامك بعد هذا الإجراء هو الخط النشط الثاني، والذي يشبه تمامًا الخط السابق، فكل شيء يعمل! تمت ترجمة الكود المصدري الخاص بك إلى كود الجهاز أو الكائن (أي بتسلسل 0 و1). الآن يمكن تنفيذ هذا الرمز (أي أنه يمكن تشغيل البرنامج!). للقيام بذلك، اكتب: في سطر الأوامر، اضغط على Enter. إذا لم تقم بتغيير النص الموجود بين ""s، فسترى أدناه: إذا قمت الآن بكتابة الأمر والضغط على Enter، فسوف ترى ملف hello جديدًا، بالإضافة إلى hello.c وhello.txt. يجب أن تحتوي كلمة الترحيب الأولى على علامة النجمة بعد الاسم، مما يشير إلى أن هذا ملف قابل للتنفيذ، أي الملف الذي تقوم بتشغيل البرنامج به. #include int main(void) { printf("hello, world\n"); } username:~/workspace/pset1 $lsmake hello./hellohello, worldls
البق؟
إذا رأيت أخطاء بعد أمر make، فقد حان الوقت لإجراء التصحيح الأول! النقوش مثل "الإعلان المتوقع" تعني أنك ارتكبت خطأً مطبعيًا في مكان ما. تحقق من الرمز أعلاه مرة أخرى، فقط كن حذرًا للغاية بشأن جميع التفاصيل. انتباه! يتم توفير أوصاف الأخطاء باللغة الإنجليزية. إذا لم يكن الأمر واضحا، استخدم محرك بحث أو ترجمة جوجل أو اطرح سؤالا في التعليقات. بمجرد تصحيح الأخطاء، تأكد من حفظ التعليمات البرمجية الخاصة بك باستخدام File > Save (أو Command- أو Ctrl-s)، وانقر فوق داخل نافذة الوحدة الطرفية مرة أخرى واكتب make hello (فقط تأكد من أنك في ~/workspace/pset1 أولاً ). إذا لم تكن هناك أخطاء أخرى، قم بتشغيل البرنامج عن طريق كتابة الأمر. ./hello من الناحية النظرية، يجب أن ترى العبارة العزيزة محاطة بعلامات اقتباس لمشغل printf، والتي تأمر "print". إذا بدت نافذة الوحدة الطرفية صغيرة جدًا، فانقر على أيقونة علامة الزائد (+) المحاطة بدائرة بجوار hello.c.
التحقق من صحة
تم دمج تطبيق check50 في CS50 IDE. إنه يعمل من سطر الأوامر ويفحص بعض البرامج بحثًا عن الأخطاء. إذا لم تكن هناك بعد، فانتقل إلى الدليل ~/workspace/pset1 عن طريق تشغيل الأمر في الوحدة الطرفية: cd ~/workspace/pset1 الآن قم ls بتشغيل الملف hello.c على الأقل. تأكد من أن اسم الملف يبدو بهذا الشكل وليس، على سبيل المثال، Hello.c أو hello.C. يمكنك إعادة تسمية ملف عن طريق تشغيل mv source destination مصدر الأمر - اسم الملف الحالي، والوجهة - اسم الملف الجديد. mv (من الخطوة الإنجليزية) هي أداة مساعدة لإعادة التسمية. إذا قمت بتسمية الملف Hello.c عن طريق الخطأ، فاكتب السطر: mv Hello.c hello.c بعد التأكد من أن الملف يسمى hello.c بالضبط، دعنا نستدعي برنامج check50 check. يرجى ملاحظة أن 2015.fall.pset1.hello هو معرف فريد لمشكلة "hello World". check50 2015.fall.pset1.hello hello.c إذا تم تنفيذ البرنامج بشكل صحيح، فسوف ترى: مواد إضافية للمحاضرات CS50: الأسبوع الأول (المحاضرتان 3 و 4) - 2 الوجوه المبتسمة الخضراء تعني اجتياز الاختبار. يمكنك أيضًا رؤية عنوان URL أسفل مخرجات check50، ولكنه مخصص للموظفين فقط (ومع ذلك، إذا كنت مهتمًا، فتحقق من ذلك!). يقوم check50 بإجراء 3 اختبارات: ما إذا كان الملف hello.c موجودًا، وما إذا كان يتم تجميع hello.c، وما إذا كان التطبيق ينتج سطرًا يقول "hello, world\n". إذا رأيت رموزًا حمراء حزينة، فهذا يعني أن لديك خللًا. :( hello.c exists \ expected hello.c to exist :| hello.c compiles \ can't check until a frown turns upside down :| prints "hello, world\n" \ can't check until a frown turns upside down هنا لم يعثر check50 على hello.c، ويشير الوجه المبتسم الأحمر إلى أنك إما ارتكبت خطأ في الاسم أو قمت بتحميل الملف إلى المكان الخطأ. تعني الرموز الصفراء "المحايدة" أن الاختبارات لم يتم إجراؤها. وأين يمكنهم البدء إذا لم يعثر البرنامج على الملف الذي يجب فحصه؟ إليك خيار آخر سينبثق إذا قمت بتغيير النص الذي يجب أن تقوم الدالة printf() بإخراجه: :) hello.c exists :) hello.c compiles :( prints "hello, world\n" \ expected output, but not "hello, world" يُبلغ check50 أن السطر hello,world\n كان متوقعًا، ولكن ظهر شيء آخر. لا يقوم Check50 باحتساب النقاط لإكمال الدورة التدريبية، ولكنه يتحقق مما إذا كانت نتيجة المهمة تختلف عما كان متوقعًا. ويتيح لك التحقق من ذلك قبل التأكد من صحة المهمة داخل الدورة (سنخبرك بكيفية القيام بذلك لاحقًا).
أساسيات لغة C: المقارنة مع برنامج سكراتش
مرحبًا بالعالم في Scratch وC:
مواد إضافية للمحاضرات CS50: الأسبوع الأول (المحاضرتان 3 و 4) - 3 #include int main(void) { printf("hello, world\n"); }
  • مواد إضافية للمحاضرات CS50: الأسبوع 1 (المحاضرتان 3 و 4) - 4يمثل وظيفة تطبع "كلمات" الكائن في فقاعة كوميدية في سكراتش، وهناك وظيفة printf في لغة C تفعل نفس الشيء، فقط بدون الرسوم الكاريكاتورية.
  • رئيسي - باللغة الإنجليزية - "رئيسي". نقطة الدخول للبرنامج. مثل مواد إضافية للمحاضرات CS50: الأسبوع 1 (المحاضرتان 3 و 4) - 5.
دورة لا نهاية لها
مواد إضافية للمحاضرات CS50: الأسبوع الأول (المحاضرتان 3 و 4) - 6 مترجمة إلى لغة C: while (true) { printf("hello, world\n"); } بينما (صحيح) يفعل نفس الشيء: تستمر الحلقة في عملها بينما (بينما) القيمة صحيحة (التعبير المنطقي "صحيح" أو "واحد"). سيتم تشغيل هذه الحلقة إلى ما لا نهاية.
حلقة تعرض العبارة على الشاشة 10 مرات
Scratch مواد إضافية للمحاضرات CS50: الأسبوع الأول (المحاضرتان 3 و 4) - 7 C for (int i = 0; i < 10; i++) { printf("hello, world!\n"); } i هو متغير مضاد؛ يتم تغيير قيمته بواسطة عامل الزيادة i++، مما يزيده بمقدار 1 عند كل تكرار للحلقة. في البداية، تم تعيين القيمة 0 لـ i باستخدام عامل التعيين =. انتباه! كما هو الحال في Java، تتم الإشارة إلى المساواة في لغة C بواسطة ==، عامل التعيين =. أي أن a = 5 يعني أن المتغير a قد تم تعيين القيمة 5 له، و(a= =5) يعني تعبير بولوني (إذا كان a يساوي 5، فإن التعبير صحيح، وإذا لم يكن يساوي، فهو خطأ) . ستتوقف الحلقة عندما "تنمو" إلى 9. من السهل حساب ذلك، وسيتم تنفيذ الحلقة 10 مرات. لذلك، إذا كنت بحاجة إلى تكرار شيء ما لعدد معين من المرات، في لغة C يمكنك تحديد حلقة for (int i = 0; i < 10; i++). مثال آخر: مواد إضافية للمحاضرات CS50: الأسبوع الأول (المحاضرتان 3 و 4) - 8 ونفس الشيء مترجم إلى لغة C: int counter = 0; while (true) { printf("%i\n", counter); counter++; }
  • قيمة المتاجر المضادة في C وScratch. في C قمنا بتعيين int counter = 0 بدلاً من Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 9.
  • نضع علامة على نوع المتغير كـ int للتوضيح: i هو عدد صحيح (من العدد الصحيح الإنجليزي، الكل).
  • علامة %i التي نستخدمها في printf في السطر الرابع هي عنصر نائب يخبرنا بطباعة العدد الصحيح العشري، تمامًا كما نطلب من printf استبدال العنصر النائب بالقيمة التي يأخذها متغير العداد.
التعبيرات المنطقية
Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 10 انها نفس (x < y) ((x < y) && (y < z))
شروط
Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 11 و"القرف" المعادل: Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 12 ماذا عن العبارة الأولى غير المفهومة؟ المزيد عن هذا لاحقًا في قسم "المكتبات". #include
عبارات شرطية
يتحقق هؤلاء الأشخاص مما إذا كانت بعض الشروط (تعبير منطقي، سؤال لا يمكن الإجابة عليه إلا بـ "نعم" أو "لا") صحيحة، وإذا كان الأمر كذلك، فإنهم يقومون ببعض الإجراءات المرتبطة بهذا الشرط. مثال من الحياة: إذا هطل المطر (بافتراض أنها تمطر) وأنا بالخارج (أنا بالخارج عندما تمطر)، أفتح مظلتي. if (condition) { //исполнить, если meaning истинно } خيار أكثر تعقيدًا: إذا تم استيفاء الشرط، فاتخذ إجراءً، وإذا لم يكن الأمر كذلك، فاتخذ إجراءً آخر. if (condition) { //выполнить действие } else { //выполнить другое действие, если condition ложно } على سبيل المثال: إذا كان عمرك أكثر من 18 عامًا، فقم بالموافقة على الوصول. إذا كان أقل، لا توافق. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 12
عامل الاختيار
switch (n) { case const1: // если n equals const1, выполнить break; // condition совершилось — выйти из выбора case const2: // если n equals const2, выполнить break; ... default: // если n не equals ни одной из констант, выполнить break; } مثال: إذا كانت n = 50، فاطبع "CS50 هي مقدمة لعلوم الكمبيوتر 1"، وإذا كانت n = 51، فاطبع "CS51 هي مقدمة لعلوم الكمبيوتر 2"، وإلا فاطبع "عذرًا، لست على دراية بهذا الفصل!" switch (n) { case 50: printf("CS50 is Introduction to Computer Science I\n"); break; case 51: printf("CS51 is Introduction to Computer Science II\n"); break; default: printf("Sorry, I'm not familiar with that class!\n"); break; }
دورات
while: يتحقق من الشرط، ثم ينفذ الإجراء بينما يكون الشرط صحيحًا، while (condition) { // выполнять, пока истина } يختلف do/while في أنه في المرة الأولى التي ينفذ فيها الإجراء دون التحقق من الشرط، ثم يتحقق منه فقط. فإذا تحقق الشرط، كرر الفعل حتى أصبح الشرط خطأ. do { ) // выполнять, пока истина } while (condition); تكرر حلقة for الإجراء لعدد محدد من المرات، Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 13 ويمكن أن تتداخل الحلقات مع بعضها البعض. في هذه الحالة، في كل خطوة من الحلقة الخارجية، سيتم تنفيذ الحلقة الداخلية بالكامل. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 14
أنواع البيانات الأساسية في لغة C
основные типы данных в C
المكتبات ج
ربما تساءلت بالفعل عما يعنيه السطر الأول من برنامج C: ما هو دوره وهل من الممكن الاستغناء عنه؟ يقوم سطر #include بشيء مهم للغاية: فهو يتضمن مكتبات من التعليمات البرمجية المكتوبة بالفعل في برنامجك. اسم المكتبة المتصلة محاط بأقواس زاوية (<>) وله امتداد (.h). إذا لم تكن هناك مكتبات، فسيتعين وصف أي إجراء، حتى الإجراء الأساسي، مرارًا وتكرارًا في كل مرة. المكتبة التي ربطناها#include يحتوي على وظائف الإدخال/الإخراج. هذا هو ما يسمح لنا باستخدام الدالة printf() للطباعة على الشاشة. أي لو لم نكن قد كتبنا سطر التضمين #include ، ولكننا تركنا الدالة printf()‎ في نص البرنامج؛ فعندما حاولنا تشغيلها، كنا قد تلقينا خطأ! لأنه بدون هذه المكتبة لا يعرف المترجم ما هي printf(). هناك مكتبات قياسية، وهي تشكل مفردات اللغة. وظيفة printf () ليست مدمجة في الكمبيوتر، ولكنها مدرجة في المكتبة القياسية للغة C. أي أن بعض المبرمجين كتبها مسبقًا وأدرجها في المكتبة. الآن يمكن للآخرين استخدامه دون إعادة اختراع العجلة. لكي "يفهمها" المترجم، نقوم بالاتصال . هناك مكتبات قياسية أخرى تستخدم في عملية CS50. على سبيل المثال، مكتبة السلاسل، التي تصف العمليات باستخدام السلاسل (تحديد الطول، والإضافة، وما إلى ذلك). بالمقارنة مع لغات البرمجة الشائعة الأخرى، فإن عدد مكتبات C القياسية صغير جدًا. ولكن هناك مكتبات مكتوبة ذاتيًا، وغالبًا ما تكون أكثر تخصصًا. نعم مكتبة تم إنشاؤه خصيصًا لطلاب CS50. حان الوقت لتدوين ملاحظة مهمة: بالإضافة إلى كتابة البرامج وحل المشكلات باستخدام الكود الخاص بك، يتمتع المطور الجيد بمهارة مهمة أخرى: معرفة الأدوات التي تمت كتابتها بالفعل والقدرة على استخدامها (مكتبات الآخرين) حتى عدم إضاعة الوقت في إعادة اختراع "العجلة". لذا، إذا كنت بصدد حل مشكلة مملة أو معقدة تبدو شائعة جدًا، فتعلم أن تسأل نفسك السؤال: "هل قام شخص آخر بكتابة الحل؟" هناك احتمالات جيدة أن يكون هذا هو الحال، ويمكنك العثور على هذه الوظيفة في مكتبة موجودة. من الناحية الفنية، المكتبة هي ملف ثنائي يتم إنتاجه عن طريق دمج مجموعة من ملفات الكائنات باستخدام رابط. ملفات الكائنات هي تلك الملفات ذات الامتداد (*.o) التي تحصل عليها عند تجميع التطبيقات.
هيكل مكتبات C
Когда программист пишет библиотеку, code распределяется по двум типам файлов — заголовочный файл (header, расширение *.h) и файл реализации (implementation, расширение *.c). Заголовочный файл содержит code, описывающий ресурсы библиотеки, которые вы можете использовать. То есть описания переменных, функций, структур, типов и прочее. Если вам интересно, что содержит та or иная библиотека, нужно заглянуть именно в заголовочный файл. В терминале CS50 IDE (и других средах Linux) вы можете вызвать приложение less для просмотра файлов и открыть с его помощью интересующую вас библиотеку: less /usr/include/stdio.h Файл откроется прямо в терминале. Правда, для новичков он будет очень трудночитаемым. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 15 Whatбы выйти из less, нажмите q на клавиатуре. Заголовочный файл не содержит code функций, что служит примером очень важного понятия — сокрытия данных or инкапсуляции. Пользователю системы незачем знать «внутренности» библиотек, ему достаточно, чтобы она работала. Если вы прошерстите stdio.h, то не найдете там реализации printf(), хотя How её использовать, вы уже знаете. Это сделано для того, чтобы защитить данные от вмешательства, которое порой может плохо отразиться на системе. Так, если кто-то изменит реализацию функции printf() в библиотеке, это отразится на всех тех программах, которые её используют. Любознательным будет интересно, где спрятана реализация. Согласно конвенции (соглашения, принятые в мире программирования) такой code хранят в файле с расширением (*.c). После компиляции библиотеки на основе двух файлов с одинаковым именем, но разным расширением создается an objectный файл, который собран так, чтобы создать файл с двоичным codeом библиотеки. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 16 Author библиотеки передает программисту, который хочет её использовать, два file — с двоичным codeом, а также заголовочный файл. Таким образом, файл с исходным codeом программисту не нужен. Точнее, он может быть нужен, если программист хочет что-то поменять в самой библиотеке и перекомпorровать её под собственные нужды. Whatбы воспользоваться функциями библиотеки в своей программе нужно проделать следующее: 1. Включить заголовочный файл в программу с помощью строки #include В случае стандартных библиотек достаточно указать Name библиотеки в угловых скобках: #include <Name_библиотеки.h> Если библиотека, которую вы хотите подключить, лежит в той же папке, что и ваша программа, подключайте её следующим образом: #include “Name_библиотеки.h” 2.Присоединить бинарный файл для компиляции. Это очень важный шаг, поскольку, How мы говорor выше, заголовочный файл не содержит реализации элементов библиотеки. Whatбы это сделать, нужно вызвать компилятор clang с флагом –l и идущим непосредственно за ним названием библиотеки. Например, компонуем библиотеку cs50: clang hello –lcs50 Clang — один из компиляторов. Для компиляции можно также использовать уже знакомую вам программу make. По сути, она вызывает clang с определенными аргументами командной строки.
И снова Hello C: разбор синтаксиса простейших программ
Директива #include подключает библиотеку ввода/вывода . Программы в C состоят из функций, а те — из операторов и переменных. Функция — это кусок codeа, в котором уже есть or подаются Howие-то данные, а Howие-то данные получают в результате её исполнения. Фигурные скобки { } ограничивают тело функции — описание того, что она должна делать. printf() из стандартной библиотеки stdio выводит любую строку на экран. Строки заключаются в двойные кавычки, а символ “\n” означает перевод курсора на новую строку. Пример: функция «посчитать квадрат целого числа». Передаем функции данные, в нашем случае — число, которое нужно возвести в квадрат. Затем в ней прописывается алгоритм умножения числа на самое себя, и результат этого умножения она выдает на выходе. int sqr(int a) { return a*a; } int sqr(int a) — название функции. В скобках — её аргумент a, это то, что подается на вход функции. Это How переменная в уравнении. То есть, если мы хотим узнать квадрат числа 5, то мы вызовем нашу функцию в виде sqr(5) и получим результат 25. int — тип данных (от англ. integer — целые числа). Наша функция написана так, что мы не можем вызвать её с аргументом a = 5.5. Такая попытка выдаст ошибку, поскольку 5.5 — число дробное, а наше число должно быть целым. int перед именем функции означает тип, который должна эта функция возвращать. Он не обязательно совпадает с типом аргумента. Пример: функция, которая отнимает от целого числа 0.5: double bit_less(int a) { double b; b = a – 0.5; return b; } int main (void) — название главной функции. В одной программе может быть много функций, но, чтобы начать её выполнять, нужна функция под названием main. Слово void в скобках означает, что у этой функции нет аргументов. Внимание! main всегда возвращает int, но return для неё не обязателен. Пример функции не возвращающей значения: void sayhello(void) { printf(“hello everyone!\n”); } При вызове функции в главной программе, она выведет приветствие. Давайте напишем одну программу, в которой будет несколько функций. Тех, что мы уже создали выше. Две созданные нами функции вызовем через главную функцию main(). В C, How и любом языке, есть такой элемент, How комментарий or примечание в коле программы, предназначенное не для компьютера, а для понимания людей. Например, описание, что именно делает code. Компилятор комментариев не видит. Комментирование программ — очень важный момент, поскольку порой разобраться в чужом (и даже своем) codeе очень сложно. //пример однострочного комментария /** а это – многострочного **/ #include //функция возведения в квадрат числа a int sqr(int a) { return a*a; } //выводит приветствие void test(void) { printf ("hello everyone!\n"); } //главная функция int main(void) { test(); printf("%d\n", sqr(5)); } Почти всё, что есть в этой программе вы уже видели. Две функции — возведения в квадрат и приветствия и главная функция main, где мы последовательно вызываем эти две функции. В результате выполнения программы у нас сначала выведется приветствие, на следующей строке — квадрат 5. Обратите внимание, функция test() вызывается с пустыми скобками, потому что её аргументы определены How void.
Еще немного о вводе/выводе в C
Вы, наверное, уже успели заметить странные символы %d и %f в скобках оператора printf. Дело в том, что функция printf выводит данные в следующем обобщенном виде: рrintf ("управляющая строка", аргумент1, аргумент2,...); Управляющая строка содержит компоненты трех типов:
  • символы, которые выводятся на экран дисплея;
  • спецификаторы преобразования, которые вызывают вывод на экран очередного аргумента из последующего списка;
  • управляющие символьные константы.
Спецификатор преобразования начинается со знака % и заканчивается символом, задающим преобразование. Некоторые из таких символов:
  • с: meaningм аргумента является символ;
  • d or i: десятичное целое число;
  • f: десятичное число с плавающей точкой;
  • s: строка символов.
То есть, %d означает, что на экране появится целое десятичное, а %f — десятичное с плавающей запятой. What если нам нужно, чтобы пользователь ввёл данные с клавиатуры? Для этого можно использовать функцию scanf( ), прототип которой также лежит в библиотеке stdio. Whatбы считать с экрана вещественное число, в программе нужно написать строку scanf("%d", &a); Давайте перепишем нашу программу так, чтобы пользователь сам вводил число, которое нужно возвести в квадрат. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 17
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION