JavaRush /Java blogi /Random-UZ /CS50 ma'ruzalari uchun qo'shimcha materiallar: 1-hafta (3...
Masha
Daraja

CS50 ma'ruzalari uchun qo'shimcha materiallar: 1-hafta (3 va 4-ma'ruzalar)

Guruhda nashr etilgan
Cs50 rus tilida qo'shimcha materiallar 1-hafta vazifalari

Birinchi hafta maqsadlari

  • Linuxning asosiy buyruqlari bilan tanishing
  • Asosiy C sintaksisini o'rganing va bir nechta muammolarni hal qiling
  • Aniqroq o'ylashni boshlang =)
IDE CS50
Vazifalarni bajarish uchun CS50 bulutda IDE (Integrated Development Environment) ni taklif qiladi. Undan foydalanish uchun edX platformasida hisob yarating va asl kursga roʻyxatdan oʻting . Shundan so'ng:
1. cs50.io saytiga o'ting, ro'yxatdan edX-ni tanlang, login va parolingizni kiriting, Submit-ni bosing 2. edX hisob ma'lumotlarini kiriting, ID.CS50.NET-ga qaytish -ni bosing . cs50.io 3. Biz kutamiz: virtual makoningiz yaratilmoqda. Virtual maydon cs50 4. Bajarildi! cs50 ide
Buyruqlar qatori va CS50 IDE-ni ishga tushirish
CS50 IDE oynasining pastki qismida, Terminal yorlig'ida terminal oynasi yoki buyruq qatori paneli mavjud. Bu yerda siz string buyruqlarini kiritishingiz mumkin: siz oyna interfeysi bilan bir xil narsani qilishingiz mumkin, masalan, ilovalarni ishga tushirish, fayllarni o'chirish va yaratish, dasturiy ta'minotni o'rnatish. Agar siz hech qachon buyruq qatori bilan ishlamagan bo'lsangiz, bu usul qiyin bo'lib tuyulishi mumkin: buyruqlarni eslab, piktogramma va tugmalarni bosish o'rniga ularni yozishingiz kerak. Qaysidir darajada bu to'g'ri, keyin oyna interfeysi ixtiro qilingan. Biroq, buyruq qatori barcha operatsion tizimlarda mavjud va administratorlar uni yaxshi ko'radilar. Va barchasi, chunki ba'zan siz usiz yashay olmaysiz. Terminaldagi IDE oynasida siz sirli qatorni ko'rasiz: foydalanuvchi nomi:~/workspace $ "foydalanuvchi nomi" o'rniga avtomatik ravishda yaratilgan nom bo'ladi (ro'yxatdan o'tish ma'lumotlaringiz asosida). Terminal oynasini bosing, kiriting: update50 Enter tugmasini bosing. Buyruq tizimni yangilashni so'raydi. O'rnatish jarayonini tavsiflovchi terminalda chiziqlar paydo bo'lishini ko'rasiz. Yangilanish tugallanmaguncha CS50 IDE-ni yopmang ! . Shundan so'ng, standart satr yana paydo bo'ladi, sizning ismingiz bilan.
IDE da ishlash
Keling, fayllaringiz saqlanadigan papka yarataylik. CS50 IDE ning yuqori chap burchagidagi ~/workspace (ildiz katalogingiz) ni o'ng tugmasini bosing , Yangi jild ni tanlang . Pset1 jildining nomini o'zgartiring (agar siz nomni noto'g'ri yozgan bo'lsangiz, papkani o'ng tugmasini bosing va Nomini o'zgartirish ni tanlang ). Keyin pset1 jildiga sichqonchaning o'ng tugmachasini bosing va Yangi fayl-ni tanlang . Untilted fayli paydo bo'ladi, keling, uning nomini o'zgartiramiz hello.txt . hello.txt ni ikki marta bosing. CS50 IDE-da siz yangi yorliq va o'ng tomonda yozishingiz mumkin bo'lgan maydonni ko'rasiz. Agar siz buni qilgan bo'lsangiz, yorliqdagi fayl nomidan oldin paydo bo'ladigan yulduzcha (*) belgisiga e'tibor bering - faylga o'zgartirishlar kiritilgan, ammo saqlanmagan ko'rsatkich. Faylni *Fayl > Saqlash-ga o'tish yoki + S (Apple kompyuterlarida) yoki Ctrl + S (kompyuterlarda) buyrug'idan foydalanib saqlang. Yulduzcha yo'qolishi kerak. Keling, fayl qaerda bo'lishi kerakligini tekshirib ko'raylik. Buni buyruq qatori yordamida qilaylik, bunga ko'nikish vaqti keldi :). Avvalgidek, terminaldagi faol chiziq quyidagicha ko'rinadi: Ish maydoni - joriy ishchi katalog (ish muhitida ochiq bo'lgan). Tilda (~) asosiy katalogni bildiradi (ish maydoni unda joylashgan). Terminaldagi ish maydoni CS50 IDE ning yuqori chap burchagidagi ~/workspace belgisi bilan bir xil ekanligini unutmang. Keling, mashq qilaylik. Terminalning istalgan joyini bosing va buyruq qatoriga kiriting va Enter tugmasini bosing. Ushbu ikkita kichik harf - "ro'yxat" ning qisqartmasi - joriy ish maydoni katalogida joylashgan fayl va papkalar ro'yxatini ko'rsatadi. Boshqa narsalar qatorida siz yaratgan pset1 ni ko'rasiz ! Endi buyruq yordamida papkamizni ochamiz. Biz yoki batafsilroq yozamiz: cd (katalogni o'zgartirish) buyrug'i faol katalogni o'zgartiradi, bizda faol qatorga o'zgartirildi Bu sizning hozir katalogda ekanligingizni tasdiqlaydi (satr "I am in pset1" ma'nosini bildiradi. ildiz papkasida joylashgan papka, ~" bilan belgilanadi). Endi yozing. Siz hello.txt faylini ko'rasiz ! Terminaldagi nomni bossangiz, hech narsa bo'lmaydi: bu matn va u faol bermaydi. havola, lekin u hello.txt bo'lishi kerak bo'lgan joyda ekanligini tasdiqlaydi.Yozing Agar faqat cd buyrug'ining o'zini yozsangiz, lekin argument keltirmasangiz (ya'ni, u borishi kerak bo'lgan jildning nomi), u sizni qaytaradi. standart ildiz katalogiga kiring, shuning uchun siz faol qatorda quyidagi rasmni ko'rasiz: pset1 papkasiga qaytish uchun tering. cs50 ide jildining nomini o'zgartiringcs50 ideCS50 ma'ruzalari uchun qo'shimcha materiallar: 1-hafta (3 va 4-ma'ruzalar) - 1username:~/workspace $lscd pset1cd ~/workspace/pset1~/pset1username:~/workspace/pset1 $~/workspace/pset1lscdusername:~ $cd workspace va Enter tugmasini bosing. Keyin cd pset1 yana kiriting. Shuningdek, siz ushbu ikkita buyruqni bitta, haqiqiyroq buyruq bilan almashtirishingiz mumkin: cd workspace/pset1
Salom, C!
Nihoyat, bu daqiqa keldi! Keling, dasturlashni boshlaylik. IDE-dagi pset1 jildimiz ichida hello.c nomli faylni yarating (kengaytma kerak), uni yangi yorliqda oching (biz o'ylaymizki, buni avvalgi xatboshidan qanday qilishni eslaysiz). MUHIM! Harflar kichik bo'lishi kerak, Linux katta-kichik harflarga sezgir. Hello.c va hello.c turli xil fayllardir. CS50 IDE oynasining o'ng tomonida quyida ko'rib turganingizdek xuddi shu matnni kiriting. Ha, siz uni nusxalashingiz mumkin, lekin uni yozish foydaliroq. Harflar turli xil ranglarda, chunki CS50 IDE sintaksisini ajratib ko'rsatishga ega. U yaxshiroq o'qilishi uchun matn bloklarini rang bilan ajratib ko'rsatadi. Ranglar faylning o'zida saqlanmaydi, ular faqat IDEda ko'rinadi. Agar ular mavjud bo'lsa, IDE C ni tushunadi va siz fayl kengaytmasida (*.c) C ekanligini ko'rsatdingiz. Agar siz bir xil faylni hello.txt deb atagan bo'lsangiz, matn bitta rangda bo'ladi. Har bir narsani misoldagidek yozganingizga ishonch hosil qiling, aks holda siz birinchi xatoni ushlaysiz =). Yana sizning e'tiboringizni kichik va katta harflar o'rtasidagi farqga qaratamiz. \n belgisi kursorni keyingi qatorga olib boradi va keyingi kiritilgan matn dastur chiqishi bilan birga qolmaydi. Ha, va nuqta-vergul (;) haqida unutmang. Bu dastur bayonotlari uchun muhim ajratuvchidir; C ularsiz ishlashni xohlamaydi. Fayl > Saqlash (yoki buyruq yoki Ctrl tugmalari) tugmasini bosing . Fayl nomi oldidagi yulduzcha yo'qolganiga e'tibor bering? Ha bo'lsa, o'zgarishlar saqlangan. Kodingiz ostidagi terminal oynasining istalgan joyini bosing va ~/workspace/pset1 ichida ekanligingizga ishonch hosil qiling (agar bo'lmasangiz, cd-ni bosing va Enter tugmasini bosing, keyin cd workpace/pset1 va yana Enter ni bosing). Sizning faol qatoringiz quyidagicha ko'rinishi kerak: keling, hello.c fayli aynan qaerda bo'lishi kerakligiga ishonch hosil qilaylik . kiriting va Enter tugmasini bosing. Hello.c ni ham ko'ryapsizmi? Agar yo'q bo'lsa, bir necha qadam orqaga qayting va faylni yana kerakli katalogda yarating. ... Endi tantanali daqiqa keladi: biz barmoqlarimizni kesib o'tamiz va ... yozamiz: va barmoqlarimizni kesishgan holda Enter tugmasini bosamiz. Aynan salom, salom.c emas. Agar ushbu harakatdan keyin sizning oldingizda oldingisiga o'xshash ikkinchi faol chiziq bo'lsa, unda hamma narsa ishlaydi! Sizning manba kodingiz mashina yoki ob'ekt kodiga tarjima qilingan (ya'ni, 0 va 1 lar ketma-ketligida). Endi bu kodni bajarish mumkin (ya'ni dasturni ishga tushirish mumkin!). Buni amalga oshirish uchun buyruq qatoriga kiriting: Enter tugmasini bosing. Agar siz ""lar orasiga qo'yilgan matnni o'zgartirmagan bo'lsangiz, quyida ko'rasiz: Agar siz hozir buyruqni yozsangiz va Enter tugmasini bossangiz, hello.c va hello.txt bilan birga yangi salom faylini ko'rasiz. Birinchi salom nomidan keyin yulduzcha bo'lishi kerak, bu bajariladigan fayl, ya'ni dasturni ishga tushirgan fayl ekanligini ko'rsatadi. #include int main(void) { printf("hello, world\n"); } username:~/workspace/pset1 $lsmake hello./hellohello, worldls
Xatolarmi?
Agar make buyrug'idan keyin xatolarni ko'rsangiz, birinchi disk raskadrovka vaqti keldi! “Kutilayotgan deklaratsiya” kabi yozuvlar biror joyda xato qilganingizni anglatadi. Yuqoridagi kodni yana tekshiring, faqat barcha tafsilotlarga juda ehtiyot bo'ling. Diqqat! Xato tavsiflari ingliz tilida berilgan. Agar aniq bo'lmasa, qidiruv tizimidan, Google Tarjimonidan foydalaning yoki izohlarda savol bering. Xatolarni tuzatganingizdan so'ng, fayl > Saqlash (yoki buyruq yoki Ctrl tugmalari) yordamida kodingizni saqlashni unutmang , terminal oynasining ichki qismiga yana bosing va yozing make hello (Shunchaki ~ ichida ekanligingizga ishonch hosil qiling. /workspace/pset1 birinchi ). Agar boshqa xatoliklar bo'lmasa, buyruqni terish orqali dasturni ishga tushiring.Nazariy ./hello jihatdan, "chop etish" buyrug'ini beruvchi printf operatorining qo'shtirnoq ichiga olingan qimmatbaho ibora sizning oldingizda paydo bo'lishi kerak. Agar terminal oynasi juda kichik bo'lib ko'rinsa, hello.c yonidagi doira ichida joylashgan ortiqcha (+) belgisini bosing.
To'g'riligini tekshirish
Check50 ilovasi CS50 IDE-ga o'rnatilgan. U buyruq satridan ishlaydi va ba'zi dasturlarni xatolar uchun tekshiradi. Agar siz hali u erda bo'lmasangiz, terminalda buyruqni ishga tushirish orqali ~/workspace/pset1 katalogiga o'ting: cd ~/workspace/pset1 Endi ishga tushiring, ls siz kamida hello.c faylini ko'rasiz. Fayl nomi Hello.c yoki hello.C emas, balki shunday ko'rinishiga ishonch hosil qiling. Buyruq manbasini ishga tushirish orqali fayl nomini o'zgartirishingiz mumkin mv source destination - joriy fayl nomi, maqsad - yangi fayl nomi. mv (inglizcha move dan) nomni o'zgartirish uchun yordamchi dasturdir. Agar siz tasodifan faylni Hello.c deb nomlagan bo'lsangiz, qatorni kiriting: mv Hello.c hello.c Fayl aniq hello.c deb nomlanganiga ishonch hosil qilgandan so'ng, check50 tekshirish dasturini chaqiramiz. Iltimos, 2015.fall.pset1.hello “salom dunyo” muammosi uchun noyob identifikator ekanligini unutmang. check50 2015.fall.pset1.hello hello.c Agar dastur to'g'ri bajarilgan bo'lsa, siz quyidagilarni ko'rasiz: CS50 ma'ruzalari uchun qo'shimcha materiallar: 1-hafta (3 va 4-ma'ruzalar) - 2 Yashil tabassumlar testdan o'tganligini bildiradi. Shuningdek, siz URLni check50 chiqishining pastki qismida ko'rishingiz mumkin, lekin bu faqat xodimlar uchun (ammo, agar siz qiziqsangiz, tekshirib ko'ring!). check50 3 ta testni oʻtkazadi: hello.c fayli mavjudmi, hello.c kompilyatsiya qilinadimi va ilova “salom, dunyo\n” degan qator hosil qiladimi. Agar siz qayg'uli qizil kulgichlarni ko'rsangiz, bu sizda xatolik borligini anglatadi. :( 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 Bu yerda check50 hello.c topilmadi va qizil tabassum siz nomda xato qilganingizni yoki faylni noto'g'ri joyga yuklaganingizni bildiradi. Sariq "neytral" kulgichlar testlar o'tmaganligini anglatadi. Va agar dastur tekshirilishi kerak bo'lgan faylni topmasa, ular qaerdan boshlashlari mumkin? Printf() funksiyasi chiqishi kerak bo'lgan matnni o'zgartirsangiz, yana bir variant paydo bo'ladi: :) hello.c exists :) hello.c compiles :( prints "hello, world\n" \ expected output, but not "hello, world" check50 xabariga ko'ra, salom, dunyo\n qatori kutilgan edi, lekin boshqa narsa paydo bo'ldi. check50 kursni yakunlash uchun ballarni hisoblamaydi, lekin topshiriq natijasi kutilganidan farq qiladimi yoki yo'qligini tekshiradi. Va bu sizga kurs davomida topshiriqning to'g'riligini tasdiqlashdan oldin buni tekshirishga imkon beradi (buni qanday qilishni keyinroq aytib beramiz).
C asoslari: Scratch bilan solishtirish
Scratch va C-da salom dunyo:
CS50 ma'ruzalari uchun qo'shimcha materiallar: 1-hafta (3 va 4-ma'ruzalar) - 3 #include int main(void) { printf("hello, world\n"); }
  • CS50 ma'ruzalari uchun qo'shimcha materiallar: 1-hafta (3 va 4-ma'ruzalar) - 4Scratch-da spraytning "so'zlarini" kulgili pufakchaga chiqaradigan funksiyani ifodalaydi, C tilida xuddi shu ishni bajaradigan printf funktsiyasi mavjud, faqat multfilmlarsiz.
  • asosiy - ingliz tilida - "asosiy". Dasturga kirish nuqtasi. Xuddi shunday CS50 ma'ruzalari uchun qo'shimcha materiallar: 1-hafta (3 va 4-ma'ruzalar) - 5.
Cheksiz tsikl
CS50 ma'ruzalari uchun qo'shimcha materiallar: 1-hafta (3 va 4-ma'ruzalar) - 6 C tiliga tarjima qilingan: while (true) { printf("hello, world\n"); } while (true) xuddi shu ishni bajaradi: qiymat rost boʻlganda tsikl oʻz ishini davom ettiradi (bu “toʻgʻri” yoki “bir” ifodasi). Ushbu tsikl cheksiz ishlaydi.
Ekranda iborani 10 marta ko'rsatadigan halqa
Scratch CS50 ma'ruzalari uchun qo'shimcha materiallar: 1-hafta (3 va 4-ma'ruzalar) - 7 C for (int i = 0; i < 10; i++) { printf("hello, world!\n"); } i hisoblagich o'zgaruvchisi bo'lib, uning qiymati i++ ortish operatori tomonidan o'zgartirilib, tsiklning har bir iteratsiyasida uni 1 ga oshiradi. Dastlab i ga = belgilash operatori yordamida 0 qiymati beriladi. Diqqat! Java tilidagi kabi C tilida ham tenglik ==, belgilash operatori = bilan belgilanadi. Ya'ni, a = 5 a o'zgaruvchisiga 5 qiymati berilganligini va (a= =5) Bulon ifodasini bildiradi (agar a 5 ga teng bo'lsa, u holda ifoda rost, teng bo'lmasa, noto'g'ri) . Men 9 ga "o'sganimda" tsikl to'xtaydi. Hisoblash oson, tsikl 10 marta bajariladi. Shunday qilib, agar biror narsani ma'lum bir necha marta takrorlash kerak bo'lsa, C da siz for tsiklini aniqlaysiz (int i = 0; i < 10; i++). Yana bir misol: CS50 ma'ruzalari uchun qo'shimcha materiallar: 1-hafta (3 va 4-ma'ruzalar) - 8 Xuddi shu narsa C tiliga tarjima qilingan: int counter = 0; while (true) { printf("%i\n", counter); counter++; }
  • hisoblagich qiymatni C va Scratch-da saqlaydi. C da biz int counter = 0 o'rniga o'rnatamiz Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 9.
  • Tushuntirish uchun oʻzgaruvchining turini int sifatida belgilaymiz: i butun son (ingliz tilidan butun, butun).
  • Biz to‘rtinchi qatordagi printf da ishlatadigan %i belgisi o‘nlik butun sonni chop etishimizni bildiruvchi to‘ldiruvchi bo‘lib, xuddi printf ga to‘ldiruvchini hisoblagich o‘zgaruvchisi oladigan qiymat bilan almashtirishni aytganimizdek.
Mantiqiy ifodalar
Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 10 Xuddi shunday (x < y) ((x < y) && (y < z))
Shartlar
Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 11 Va "shit" ekvivalenti: Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 12 birinchi tushunarsiz ibora haqida nima deyish mumkin? Bu haqda keyinroq, "Kutubxonalar" bo'limida. #include
Shartli gaplar
Bu bolalar ba'zi bir shart (mantiqiy ifoda, faqat "ha" yoki "yo'q" deb javob berish mumkin bo'lgan savol) to'g'ri yoki yo'qligini tekshiradilar va agar shunday bo'lsa, ular ushbu shartga bog'liq ba'zi harakatlarni bajaradilar. Hayotdan misol: agar yomg'ir yog'sa (yomg'ir yog'adi deb hisoblasak) va men tashqarida bo'lsam (yomg'ir yog'ayotganda tashqarida bo'laman), soyabonimni ochaman. if (condition) { //исполнить, если meaning истинно } Murakkab variant: agar shart bajarilsa, harakat qiling, agar bajarilmasa, boshqa chora ko'ring. if (condition) { //выполнить действие } else { //выполнить другое действие, если condition ложно } Misol: agar siz 18 yoshdan oshgan bo'lsangiz, kirishni tasdiqlang. Agar kamroq bo'lsa, tasdiqlamang. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 12
Tanlash operatori
switch (n) { case const1: // если n equals const1, выполнить break; // condition совершилось — выйти из выбора case const2: // если n equals const2, выполнить break; ... default: // если n не equals ни одной из констант, выполнить break; } Misol: agar n = 50 bo'lsa, "CS50 - Informatika I ga kirish", agar n = 51 bo'lsa, "CS51 - Informatika II ga kirish", aks holda "Kechirasiz, men bu sinf bilan tanish emasman!" 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; }
Velosipedlar
while: shartni tekshiradi, so'ngra shart rost bo'lganda amalni bajaradi while (condition) { // выполнять, пока истина } do/while birinchi marta shartni tekshirmasdan amalni bajarishi bilan farq qiladi va keyin faqat tekshiradi. Agar shart rost bo'lsa, u shart noto'g'ri bo'lguncha harakatni takrorlaydi. do { ) // выполнять, пока истина } while (condition); For tsikli amalni ma'lum bir necha marta takrorlaydi.Looplar Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 13 bir-birining ichiga joylashtirilishi mumkin. Bunday holda, tashqi halqaning har bir bosqichida ichki pastadir to'liq bajariladi. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 14
C tilidagi asosiy ma'lumotlar turlari
основные типы данных в C
Kutubxonalar C
Ehtimol, siz C dasturining birinchi qatori nimani anglatishini allaqachon qiziqtirgandirsiz: uning roli nima va usiz qilish mumkinmi? #include qatori juda muhim vazifani bajaradi: u sizning dasturingizga allaqachon yozilgan kod kutubxonalarini o'z ichiga oladi. Ulangan kutubxona nomi burchakli qavslar (<>) ichiga olingan va kengaytmasi (.h) mavjud. Agar kutubxonalar bo'lmasa, har qanday, hatto eng asosiy harakat ham har safar qayta-qayta tasvirlanishi kerak edi. Biz ulangan kutubxona#include kiritish/chiqarish funksiyalarini o‘z ichiga oladi. Bu bizga ekranga chop etish uchun printf() funksiyasidan foydalanish imkonini beradi. Ya'ni, agar biz #include qatorini yozmaganimizda edi , lekin printf() funksiyasini dastur tanasida qoldirganmiz; biz uni ishga tushirishga harakat qilganimizda, biz xatoga yo'l qo'ygan bo'lardik! Chunki bu kutubxonasiz kompilyator printf() nima ekanligini bilmaydi. Standart kutubxonalar mavjud, ular tilning lug'atini tashkil qiladi. Printf() funksiyasi kompyuterga o'rnatilmagan, lekin u standart C kutubxonasiga kiritilgan.Ya'ni, uni avvaldan qaysidir dasturchi yozgan va kutubxonaga kiritgan. Endi boshqalar g'ildirakni qayta ixtiro qilmasdan foydalanishlari mumkin. Kompilyator uni "tushunishi" uchun biz ulanamiz . CS50 jarayonida ishlatiladigan boshqa standart kutubxonalar mavjud. Masalan, satrlar bilan amallarni tavsiflovchi satrlar kutubxonasi (uzunlikni aniqlash, qo'shish va boshqalar). Boshqa mashhur dasturlash tillari bilan solishtirganda standart C kutubxonalari soni juda kam. Ammo o'z-o'zidan yozilgan, ko'pincha yuqori darajada ixtisoslashgan kutubxonalar mavjud. Ha, kutubxona CS50 talabalari uchun maxsus yaratilgan. Muhim eslatma qilish vaqti keldi: dasturlarni yozish va o'z kodingiz yordamida muammolarni hal qilishdan tashqari, yaxshi dasturchi yana bir muhim mahoratga ega: allaqachon yozilgan vositalarni bilish va ulardan (boshqa odamlar kutubxonalari) foydalanish qobiliyati. "g'ildirak" ni qayta ixtiro qilish uchun vaqtni behuda sarflamaslik. Shunday qilib, agar siz juda keng tarqalgan bo'lib tuyuladigan zerikarli yoki murakkab muammoni hal qilish jarayonida bo'lsangiz, o'zingizga savol berishni o'rganing: "Yechimni boshqa kimdir yozganmi?" Bu shunday bo'lishi ehtimoli yaxshi va siz bu funktsiyani mavjud kutubxonada topishingiz mumkin. Texnik tilda kutubxona bu bog'lovchi yordamida ob'ekt fayllari to'plamini birlashtirish orqali ishlab chiqarilgan ikkilik fayldir. Ob'ekt fayllari ilovalarni kompilyatsiya qilganda olinadigan kengaytmali (*.o) fayllardir.
C kutubxonalarining tuzilishi
Когда программист пишет библиотеку, 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
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION