JavaRush /Java Blogu /Random-AZ /Mühazirələr üçün əlavə materiallar CS50: 1-ci həftə (3 və...
Masha
Səviyyə

Mühazirələr üçün əlavə materiallar CS50: 1-ci həftə (3 və 4-cü mühazirələr)

Qrupda dərc edilmişdir
Cs50 rus dilində əlavə materiallar 1-ci həftənin tapşırıqları

İlk həftə hədəfləri

  • Əsas Linux əmrləri ilə tanış olun
  • Əsas C sintaksisini öyrənin və bir neçə problemi həll edin
  • Daha aydın düşünməyə başlayın =)
IDE CS50
Tapşırıqları yerinə yetirmək üçün CS50 buludda IDE (Integrated Development Environment) təklif edir. Onu istifadə etmək üçün edX platformasında hesab yaradın və orijinal kurs üçün qeydiyyatdan keçin . Bundan sonra:
1. cs50.io saytına gedin, siyahıdan edX-i seçin, login və parolunuzu daxil edin, Göndər düyməsini basın 2. edX hesab məlumatınızı daxil edin, ID.CS50.NET-ə qayıt düyməsini basın . cs50.io 3. Biz gözləyirik: virtual məkanınız yaradılır. Virtual məkan cs50 4. Bitdi! cs50 ide
Komanda xətti və CS50 IDE-nin işə salınması
CS50 IDE pəncərəsinin aşağı hissəsində, Terminal sekmesinde, terminal pəncərəsi və ya komanda xətti paneli var. Burada sətir əmrlərini daxil edə bilərsiniz: pəncərə interfeysi ilə eyni şeyi edə bilərsiniz, məsələn, proqramları işə salmaq, faylları silmək və yaratmaq, proqram təminatı quraşdırmaq. Əgər siz heç vaxt komanda xətti ilə işləməmisinizsə, bu üsul yəqin ki, çətin görünür: siz əmrləri yadda saxlamalı və nişanlar və düymələrə klikləmək əvəzinə onları yazmalısınız. Müəyyən dərəcədə bu doğrudur, sonra pəncərə interfeysi icad edilmişdir. Bununla belə, komanda xətti bütün əməliyyat sistemlərində mövcuddur və adminlər onu sevirlər. Və hamısı ona görə ki, bəzən onsuz yaşaya bilmirsən. Terminaldakı IDE pəncərəsində sirli bir xətt görəcəksiniz: istifadəçi adı:~/workspace $ “istifadəçi adı” əvəzinə avtomatik olaraq yaradılan ad (qeydiyyat məlumatlarınız əsasında) olacaq. Terminal pəncərəsinə klikləyin, yazın: update50 Enter düyməsini basın. Komanda sistemdən yeniləməyi xahiş edir. Terminalda quraşdırma prosesini təsvir edən xətlərin göründüyünü görəcəksiniz. Yeniləmə tamamlandığını görənə qədər CS50 IDE-ni bağlamayın ! . Bundan sonra, sizin adınız olan standart xətt yenidən görünəcək.
IDE-də işləyir
Fayllarınızın saxlanacağı bir qovluq yaradaq. CS50 IDE- nin yuxarı sol küncündə ~/workspace (kök kataloqunuz) üzərinə sağ klikləyin , Yeni Qovluq seçin . Pset1 qovluğunun adını dəyişdirin (əgər adı səhv yazmısınızsa, qovluğunuza sağ klikləyin və Adını dəyişdir seçin ). Sonra pset1 qovluğuna sağ klikləyin və Yeni Fayl seçin . Untilted faylı görünür, onun adını dəyişdirək hello.txt . hello.txt üzərinə iki dəfə klikləyin. CS50 IDE-də siz yeni tab və sağda yaza biləcəyiniz sahə görəcəksiniz. Bunu etmisinizsə, nişanda fayl adından əvvəl görünən ulduz (*) simvoluna diqqət yetirin - faylda dəyişikliklərin edildiyini, lakin saxlanmadığını göstərən bir göstərici. *Fayl > Saxla və ya + S (Apple maşınlarında) və ya Ctrl + S (kompüterlərdə) əmrindən istifadə etməklə faylı yadda saxlayın . Ulduz işarəsi yox olmalıdır. Faylın olması lazım olan yerdə olub olmadığını yoxlayaq. Bunu komanda xəttindən istifadə edərək edək, artıq öyrəşmək vaxtıdır :). Əvvəlki kimi, terminalda aktiv xətt belə görünür: İş sahəsi - cari işçi kataloqu (iş mühitində açıq olan). Tild işarəsi (~) kök kataloqunu göstərir (iş sahəsi orada yerləşir). Qeyd edək ki, terminaldakı iş sahəsi CS50 IDE-nin yuxarı sol küncündəki ~/workspace işarəsi ilə eynidir. Gəl məşq edək. Terminalda istənilən yerə klikləyin və əmr satırına yazın və Enter düyməsini basın. Bu iki kiçik hərf - "siyahı" üçün qısa - cari iş sahəsi qovluğunda yerləşən fayl və qovluqların siyahısını gətirəcək. Digər şeylər arasında siz yaratdığınız pset1-i görəcəksiniz ! İndi əmrdən istifadə edərək qovluğumuzu açaq. Biz və ya daha ətraflı yazırıq: cd (kataloqu dəyişdir) əmri aktiv qovluğu dəyişdirir, bizim vəziyyətimizdə Aktiv sətir olaraq dəyişdi Bu, hazırda kataloqda olduğunuzu təsdiqləyir (sətir “I am in pset1 in work space” mənasını verir. kök qovluğunda olan qovluq, ~" ilə işarələnir). İndi yazın hello.txt faylını görəcəksiniz ! Terminalda adın üzərinə klikləsəniz, heç bir şey olmur: bu mətndir və aktiv vermir. link, lakin o, hello.txt-nin olması lazım olduğu yerdə olduğunu təsdiqləyir.Yürün Yalnız cd əmrinin özünü yazsanız, lakin arqument təqdim etməsəniz (yəni onun getməli olduğu qovluğun adını), o sizə qaytaracaq. defolt kök qovluğuna köçürün, beləliklə siz aktiv sətirdə aşağıdakı şəkli görəcəksiniz: pset1 qovluğuna qayıtmaq üçün yığın. cs50 ide qovluğunun adını dəyişdirincs50 ideMühazirələr üçün əlavə materiallar CS50: 1-ci həftə (3 və 4-cü mühazirələr) - 1username:~/workspace $lscd pset1cd ~/workspace/pset1~/pset1username:~/workspace/pset1 $~/workspace/pset1lscdusername:~ $cd workspace və Enter düyməsini basın. Sonra cd pset1 yenidən daxil edin. Siz həmçinin bu iki əmri daha orijinal bir əmrlə əvəz edə bilərsiniz: cd workspace/pset1
Salam, C!
Nəhayət, bu an gəldi! Proqramlaşdırmaya başlayaq. IDE-dəki pset1 qovluğumuzda hello.c adlı fayl yaradın (uzatma tələb olunur), onu yeni tabda açın (zənn edirik ki, əvvəlki paraqrafdan bunu necə edəcəyinizi xatırlayırsınız). ƏHƏMİYYƏTLİ! Hərflər kiçik hərflərlə yazılmalıdır, Linux hərflərə həssasdır. Hello.c və hello.c fərqli fayllardır. CS50 IDE pəncərəsinin sağ tərəfində aşağıda gördüyünüz kimi eyni mətni yazın. Bəli, siz onu kopyalaya bilərsiniz, lakin onu yazmaq daha faydalıdır. Hərflər müxtəlif rəngdədir, çünki CS50 IDE sintaksisi vurğulayır. Daha yaxşı oxunaqlılıq üçün mətn bloklarını rənglə vurğulayır. Rənglər faylın özündə saxlanmır, onlar yalnız IDE-də görünür. Əgər onlar oradadırsa, onda IDE C-ni başa düşür və siz fayl uzantısında (*.c) onun C olduğunu göstərmisiniz. Eyni faylı hello.txt adlandırsanız, mətn bir rəng olardı. Hər şeyi nümunədəki kimi yazdığınızdan əmin olun, əks halda ilk səhvi tutacaqsınız =). Yenə də diqqətinizi kiçik və böyük hərflər arasındakı fərqə cəlb edirik. \n simvolu kursoru növbəti sətirə aparır və sonrakı daxil edilən mətn proqramın çıxışı ilə bir yerdə qalmayacaq. Bəli, nöqtəli vergül (;) haqqında unutmayın. Bu proqram ifadələri üçün vacib bir ayırıcıdır; C onlarsız işləmək istəməz. Fayl > Saxla (və ya əmr və ya Ctrl düymələri) klikləyin . Fayl adının qarşısındakı ulduzun itdiyinə diqqət yetirin? Əgər belədirsə, deməli dəyişikliklər yadda saxlanmışdır. Kodun altındakı terminal pəncərəsində istənilən yerə klikləyin və ~/workspace/pset1 daxilində olduğunuzdan əmin olun (əgər deyilsinizsə, cd-klikləyin və Enter düyməsini basın, sonra cd workpace/pset1 və yenidən Enter düyməsini basın). Aktiv xəttiniz belə görünməlidir: Gəlin hello.c faylının olması lazım olan yerdə olduğundan əmin olaq . Yazın və Enter düyməsini basın. hello.c-ni də görürsən? Əgər yoxsa, bir neçə addım geri qayıdın və faylı yenidən istədiyiniz kataloqda yaradın. ... İndi təntənəli məqam gəlir: barmaqlarımızı çarpazlayırıq və... yazırıq: və barmaqlarımızı çarpazlaşdıraraq Enter düyməsini basırıq. Tam salam, hello.c deyil. Bu hərəkətdən sonra qarşınızda gördüyünüz hər şey əvvəlki kimi görünən ikinci aktiv xəttdirsə, deməli hər şey işləyir! Mənbə kodunuz maşın və ya obyekt koduna (yəni, 0 və 1 ardıcıllığı ilə) tərcümə edilmişdir. İndi bu kod icra edilə bilər (yəni proqramı işə salmaq olar!). Bunu etmək üçün əmr satırına daxil edin: Enter düyməsini basın. Əgər "" lər arasında əlavə edilmiş mətni dəyişməmisinizsə, aşağıda görəcəksiniz: Əgər indi əmri yazıb Enter düyməsini sıxsanız, hello.c və hello.txt ilə birlikdə yeni salam faylı görəcəksiniz. İlk salamın adından sonra ulduz işarəsi olmalıdır ki, bu, icra edilə bilən bir fayldır, yəni proqramı işə saldığınız fayldır. #include int main(void) { printf("hello, world\n"); } username:~/workspace/pset1 $lsmake hello./hellohello, worldls
Bugs?
Əgər make əmrindən sonra səhvlər görürsünüzsə, ilk sazlamanın vaxtıdır! “Gözlənilən bəyannamə” kimi yazılar haradasa yazı səhvi etdiyiniz deməkdir. Yuxarıdakı kodu yenidən yoxlayın, sadəcə olaraq bütün detallara çox diqqətli olun. Diqqət! Səhv təsvirləri ingilis dilində təqdim olunur. Əgər aydın deyilsə, axtarış motorundan, Google Translate-dən istifadə edin və ya şərhlərdə sual verin. Səhvləri düzəltdikdən sonra, Fayl > Saxla (və ya əmr və ya Ctrl-s) istifadə edərək kodunuzu yadda saxladığınızdan əmin olun, yenidən terminal pəncərəsinin içərisinə klikləyin və yazın make hello (Sadəcə ~/workspace/pset1-də olduğunuzdan əmin olun. birinci). Əgər daha çox xəta yoxdursa, əmri yazaraq proqramı işə salın.Nəzəri ./hello olaraq, “printf” əmrini verən printf operatorunun dırnaq işarələri içərisində dəyərli ifadəni görməlisiniz. Terminal pəncərəsi çox kiçik görünürsə, hello.c-nin yanındakı dairəvi plus (+) işarəsinə klikləyin.
Düzgünlüyün yoxlanılması
Check50 tətbiqi CS50 IDE-də quraşdırılmışdır. O, komanda xəttindən işləyir və bəzi proqramlarda səhvləri yoxlayır. Əgər hələ orada deyilsinizsə, terminalda əmri işlətməklə ~/workspace/pset1 qovluğuna keçin: cd ~/workspace/pset1 İndi işə salın, ls ən azı hello.c faylı görəcəksiniz. Fayl adının Hello.c və ya hello.C deyil, belə göründüyünə əmin olun. Siz əmr mənbəyini işlətməklə faylın adını dəyişdirə bilərsiniz mv source destination - cari fayl adı, təyinat - yeni fayl adı. mv (ingilis dilindən köçürmə) ad dəyişdirmə proqramıdır. Əgər təsadüfən faylı Hello.c adlandırmısınızsa, sətri yazın: mv Hello.c hello.c Faylın tam olaraq hello.c adlandırıldığından əmin olduqdan sonra check50 yoxlama proqramını çağıraq. Nəzərə alın ki, 2015.fall.pset1.hello “salam dünya” problemi üçün unikal identifikatordur. check50 2015.fall.pset1.hello hello.c Proqram düzgün icra olunubsa, görəcəksiniz: Mühazirələr üçün əlavə materiallar CS50: 1-ci həftə (3 və 4-cü mühazirələr) - 2 Yaşıl gülüşlər testin keçdiyini bildirir. Siz həmçinin check50 çıxışının altındakı URL-i görə bilərsiniz, lakin bu, yalnız işçilər üçündür (amma, əgər maraqlanırsınızsa, yoxlayın!). check50 3 test həyata keçirir: hello.c faylının mövcud olub-olmaması, hello.c-nin tərtib edilib-edilməməsi və tətbiqin "salam, dünya\n" deyən sətir istehsal edib-etməməsi. Əgər kədərli qırmızı ifadələr görürsünüzsə, bu, səhviniz olduğunu bildirir. :( 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 Burada check50 hello.c tapmadı və qırmızı gülüş ya adda səhv etdiyinizi və ya faylı səhv yerə yüklədiyinizi göstərir. Sarı "neytral" ifadələr testlərin keçirilmədiyini bildirir. Proqram yoxlanılması lazım olan faylı tapmasa, haradan başlaya bilərlər? Printf() funksiyasının çıxarmalı olduğu mətni dəyişdirsəniz, açılacaq başqa seçim budur: :) hello.c exists :) hello.c compiles :( prints "hello, world\n" \ expected output, but not "hello, world" check50 bildirir ki, salam, dünya\n sətri gözlənilən idi, lakin başqa bir şey ortaya çıxdı. check50 kursu bitirmək üçün balları saymır, lakin tapşırığın nəticəsinin gözləniləndən fərqli olub-olmadığını yoxlayır. Və bu, kurs daxilində tapşırığın düzgünlüyünü təsdiqləməzdən əvvəl bunu yoxlamağa imkan verir (bunu daha sonra necə edəcəyinizi sizə xəbər verəcəyik).
C Əsasları: Scratch ilə müqayisə
Scratch və C-də salam dünya:
Mühazirələr üçün əlavə materiallar CS50: 1-ci həftə (3 və 4-cü mühazirələr) - 3 #include int main(void) { printf("hello, world\n"); }
  • Mühazirələr üçün əlavə materiallar CS50: 1-ci həftə (3 və 4-cü mühazirələr) - 4Scratch-də spritin "sözlərini" komik qabarcığa çap edən funksiyanı təmsil edir, C-də eyni şeyi edən printf funksiyası var, yalnız cizgi filmləri olmadan.
  • əsas - ingilis dilində - "əsas". Proqrama giriş nöqtəsi. Eyni ilə Mühazirələr üçün əlavə materiallar CS50: 1-ci həftə (3 və 4-cü mühazirələr) - 5.
Sonsuz dövr
Mühazirələr üçün əlavə materiallar CS50: 1-ci həftə (3 və 4-cü mühazirələr) - 6 C dilinə tərcümə olunur: while (true) { printf("hello, world\n"); } while (true) eyni şeyi edir: dəyər doğru olarkən dövrə öz işini davam etdirir ("true" və ya "bir" Boolean ifadəsi). Bu döngə sonsuz davam edəcək.
Ekranda bir ifadəni 10 dəfə göstərən döngə
Scratch Mühazirələr üçün əlavə materiallar CS50: 1-ci həftə (3 və 4-cü mühazirələr) - 7 C for (int i = 0; i < 10; i++) { printf("hello, world!\n"); } i sayğac dəyişənidir; onun dəyəri i++ artım operatoru tərəfindən dəyişdirilir və dövrənin hər təkrarlanmasında onu 1 artırır. İlkin olaraq i-yə = təyinetmə operatorundan istifadə edərək 0 qiyməti verilir. Diqqət! Java-da olduğu kimi, C-də bərabərlik ==, təyinat operatoru = ilə işarələnir. Yəni, a = 5 a dəyişəninə 5 dəyərinin təyin edildiyini bildirir və (a= =5) Bulon ifadəsi deməkdir (a 5-ə bərabərdirsə, onda ifadə doğrudur, bərabər deyilsə, yanlışdır) . Mən 9-a “böyüdükdə” döngə dayanacaq. Hesablamaq asandır, döngə 10 dəfə yerinə yetiriləcək. Beləliklə, əgər bir şeyi müəyyən sayda təkrarlamaq lazımdırsa, C dilində bir for döngüsünü təyin edirsiniz (int i = 0; i < 10; i++). Başqa bir misal: Mühazirələr üçün əlavə materiallar CS50: 1-ci həftə (3 və 4-cü mühazirələr) - 8 C dilinə tərcümə edilən eyni şey: int counter = 0; while (true) { printf("%i\n", counter); counter++; }
  • counter dəyəri C və Scratch-də saxlayır. C dilində biz int counter = 0 yerinə təyin edirik Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 9.
  • Dəyişikliyin tipini aydınlaşdırmaq üçün int kimi qeyd edirik: i tam ədəddir (ingiliscə tam ədəddən, tam).
  • Dördüncü sətirdə printf-də istifadə etdiyimiz %i işarəsi, printf-ə yertutanı sayğac dəyişəninin qəbul etdiyi dəyərlə əvəz etməyi əmr etdiyimiz kimi, onluq tam ədədi çap etməyimizi bildirən yertutandır.
Boolean ifadələri
Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 10 Eynidir (x < y) ((x < y) && (y < z))
Şərtlər
Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 11 Və "bok" ekvivalenti: Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 12 ilk anlaşılmaz ifadə haqqında nə demək olar? Bu barədə daha sonra, "Kitabxanalar" bölməsində. #include
Şərti ifadələr
Bu uşaqlar hansısa şərtin (məntiqi ifadə, yalnız “hə” və ya “yox” ilə cavablandırıla bilən sual) doğru olub-olmadığını yoxlayır və əgər belədirsə, bu şərtlə bağlı bəzi hərəkətləri yerinə yetirirlər. Həyatdan bir misal: yağış yağsa (yağış yağdığını fərz etsək) və mən çöldə olsam (yağış yağanda çöldəyəm), çətirimi açıram. if (condition) { //исполнить, если meaning истинно } Daha mürəkkəb variant: şərt yerinə yetirilibsə, hərəkətə keçin, yoxsa, başqa bir hərəkət edin. if (condition) { //выполнить действие } else { //выполнить другое действие, если condition ложно } Misal: 18 yaşdan yuxarısınızsa, girişi təsdiqləyin. Əgər azdırsa, təsdiq etməyin. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 12
Seçim operatoru
switch (n) { case const1: // если n equals const1, выполнить break; // condition совершилось — выйти из выбора case const2: // если n equals const2, выполнить break; ... default: // если n не equals ни одной из констант, выполнить break; } Nümunə: n = 50 olarsa, "CS50 Kompüter Elmlərinə I Girişdir", n = 51 olarsa, "CS51 Kompüter Elmlərinə II Girişdir" çap edin, əks halda "Üzr istəyirik, mən o siniflə tanış deyiləm!" 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; }
Velosipedlər
while: şərti yoxlayır, sonra şərt doğru olarkən hərəkəti yerinə yetirir while (condition) { // выполнять, пока истина } do/while fərqlidir ki, ilk dəfə şərti yoxlamadan hərəkəti yerinə yetirir və sonra yalnız yoxlayır. Şərt doğrudursa, şərt yanlış olana qədər hərəkəti təkrarlayır. do { ) // выполнять, пока истина } while (condition); For döngəsi hərəkəti müəyyən edilmiş sayda təkrarlayır. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 13 Döngələr bir-birinə daxil ola bilər. Bu halda, xarici döngənin hər addımında daxili döngə tamamilə yerinə yetiriləcəkdir. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 14
C-də əsas məlumat növləri
основные типы данных в C
Kitabxanalar C
Yəqin ki, siz artıq C proqramının birinci sətirinin nə demək olduğunu düşünmüsünüz: Onun rolu nədir və onsuz da bunu etmək mümkündürmü? #include xətti çox vacib bir iş görür: o, proqramınıza artıq yazılmış kodun kitabxanalarını daxil edir. Qoşulmuş kitabxananın adı bucaqlı mötərizədə (<>) verilir və genişlənməsi (.h) var. Əgər kitabxanalar olmasaydı, hər hansı bir, hətta ən əsas hərəkət də hər dəfə təkrar-təkrar təsvir edilməli olardı. Bağladığımız kitabxana#include giriş/çıxış funksiyalarını ehtiva edir. Bu, bizə ekrana çap etmək üçün printf() funksiyasından istifadə etməyə imkan verir. Yəni #include sətrini yazmasaydıq , lakin printf() funksiyasını proqramın gövdəsində buraxdıq; biz onu işə salmaq istəyəndə xəta alacaqdıq! Çünki bu kitabxana olmadan kompilyator printf() funksiyasının nə olduğunu bilmir. Standart kitabxanalar var, onlar dilin lüğətini təşkil edir. printf() funksiyası kompüterdə qurulmayıb, lakin C dilinin standart kitabxanasına daxil edilib.Yəni əvvəllər hansısa proqramçı onu yazıb kitabxanaya daxil edib. İndi başqaları təkəri yenidən kəşf etmədən ondan istifadə edə bilərlər. Kompilyatorun onu "başa düşməsi" üçün biz qoşuluruq . CS50 prosesində istifadə edilən digər standart kitabxanalar da var. Məsələn, sətirlərlə əməliyyatları təsvir edən sətirlər kitabxanası (uzunluğun müəyyən edilməsi, əlavə edilməsi və s.). Digər populyar proqramlaşdırma dilləri ilə müqayisədə standart C kitabxanalarının sayı çox azdır. Ancaq öz-özünə yazılmış, çox vaxt daha yüksək ixtisaslaşmış kitabxanalar var. Bəli, kitabxana CS50 tələbələri üçün xüsusi olaraq yaradılmışdır. Əhəmiyyətli bir qeyd etməyin vaxtı gəldi: proqramların yazılması və öz kodunuzdan istifadə edərək problemlərin həlli ilə yanaşı, yaxşı tərtibatçının daha bir vacib bacarığı var: artıq yazılmış alətlər haqqında bilik və onlardan (digər insanların kitabxanalarından) istifadə etmək bacarığı. “təkər”i yenidən kəşf etməyə vaxt itirməmək. Beləliklə, siz olduqca adi görünən yorucu və ya mürəkkəb problemi həll etmək prosesindəsinizsə, özünüzə sual verməyi öyrənin: “Həllini başqası yazıbmı?” Bunun belə olması şansları yaxşıdır və siz bu funksiyanı mövcud kitabxanada tapa bilərsiniz. Texniki dillə desək, kitabxana bir bağlayıcıdan istifadə edərək obyekt faylları toplusunu birləşdirərək yaradılan ikili fayldır. Obyekt faylları proqramları tərtib edərkən əldə etdiyiniz uzantılı (*.o) fayllardır.
C kitabxanalarının strukturu
Когда программист пишет библиотеку, 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
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION