İ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](https://cdn.javarush.com/images/article/4148a158-fca2-40fb-9a74-c2de63829484/1024.jpeg)
![Virtual məkan cs50](https://cdn.javarush.com/images/article/57edaa77-a943-49d1-94a2-5d2fee357aa1/1024.jpeg)
![cs50 ide](https://cdn.javarush.com/images/article/6c52dac2-9a3d-4557-9ffa-c33e328220a7/1024.jpeg)
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şdirin](https://cdn.javarush.com/images/article/8f8f100f-95c5-43ea-a57c-def8fa98fac2/original.jpeg)
![cs50 ide](https://cdn.javarush.com/images/article/d4118710-8cdd-408c-981d-443b8ea23469/original.jpeg)
![Mühazirələr üçün əlavə materiallar CS50: 1-ci həftə (3 və 4-cü mühazirələr) - 1](https://cdn.javarush.com/images/article/a63981ef-95e9-4065-815c-63e1d3f907ec/1024.jpeg)
username:~/workspace $
ls
cd pset1
cd ~/workspace/pset1
~/pset1
username:~/workspace/pset1 $
~/workspace/pset1
ls
cd
username:~ $
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 $
ls
make hello
./hello
hello, world
ls
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ınmake 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](https://cdn.javarush.com/images/article/d40b2da7-25f6-40d7-ab89-c4cbe33ec566/1024.jpeg)
:( 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](https://cdn.javarush.com/images/article/b371e02b-93f6-49b3-90d7-fb9dd0267d80/1024.jpeg)
#include
int main(void) { printf("hello, world\n"); }
Scratch-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ə
.
Sonsuz dövr
![Mühazirələr üçün əlavə materiallar CS50: 1-ci həftə (3 və 4-cü mühazirələr) - 6](https://cdn.javarush.com/images/article/c8d90434-4347-4614-bfed-ea03be77a42f/1024.jpeg)
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](https://cdn.javarush.com/images/article/0e6e10b4-57c3-48bd-8448-97a76fc4d6e1/1024.jpeg)
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](https://cdn.javarush.com/images/article/fc692af9-1a60-4504-a4c8-2a8315204aa1/1024.jpeg)
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
.
- 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](https://cdn.javarush.com/images/article/021cfb41-3d5f-4d5d-b403-fe6969b38855/1024.jpeg)
(x < y) ((x < y) && (y < z))
Şərtlər
![Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 11](https://cdn.javarush.com/images/article/8e5a5854-d3c6-40bc-8549-51fb2fa1acda/1024.jpeg)
![Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 12](https://cdn.javarush.com/images/article/99dc8cfb-bd5d-4c18-8edd-47f5d620f315/1024.jpeg)
#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](https://cdn.javarush.com/images/article/71d0fe2c-a39b-49b7-96c9-3209cd5eb32f/1024.jpeg)
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ə yetirirwhile (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](https://cdn.javarush.com/images/article/455f6072-2928-4e83-afcf-5c0ed5b74e13/1024.jpeg)
![Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 14](https://cdn.javarush.com/images/article/a6146862-5037-4e12-97b4-7c8f6b3c65e9/1024.jpeg)
C-də əsas məlumat növləri
![основные типы данных в C](https://cdn.javarush.com/images/article/41b34ecf-b604-48ca-bbb7-854b32ffe270/1024.jpeg)
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
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](https://cdn.javarush.com/images/article/1d178892-963f-4ff1-b671-23a10a24bcb9/1024.jpeg)
![Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 16](https://cdn.javarush.com/images/article/8a831116-28b2-49d8-9f9f-801bada19736/1024.jpeg)
#include <Name_библиотеки.h>
Если библиотека, которую вы хотите подключить, лежит в той же папке, что и ваша программа, подключайте её следующим образом:
#include “Name_библиотеки.h”
2.Присоединить бинарный файл для компиляции. Это очень важный шаг, поскольку, How мы говорor выше, заголовочный файл не содержит реализации элементов библиотеки. Whatбы это сделать, нужно вызвать компилятор clang с флагом –l и идущим непосредственно за ним названием библиотеки. Например, компонуем библиотеку cs50:
clang hello –lcs50
Clang — один из компиляторов. Для компиляции можно также использовать уже знакомую вам программу make. По сути, она вызывает clang с определенными аргументами командной строки.
И снова Hello C: разбор синтаксиса простейших программ
Директива #include подключает библиотеку ввода/вывода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: строка символов.
scanf("%d", &a);
Давайте перепишем нашу программу так, чтобы пользователь сам вводил число, которое нужно возвести в квадрат.
![Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 17](https://cdn.javarush.com/images/article/878c3986-677e-48f7-841f-aa210ea856bc/1024.jpeg)
GO TO FULL VERSION