JavaRush /Blog Java /Random-PL /Materiały dodatkowe do wykładów CS50: Tydzień 1 (wykłady ...
Masha
Poziom 41

Materiały dodatkowe do wykładów CS50: Tydzień 1 (wykłady 3 i 4)

Opublikowano w grupie Random-PL
cs50 w języku rosyjskim materiały dodatkowe Zadania z pierwszego tygodnia

Cele na pierwszy tydzień

  • Zapoznaj się z podstawowymi poleceniami systemu Linux
  • Naucz się podstawowej składni języka C i rozwiąż kilka problemów
  • Zacznij myśleć jaśniej =)
IDECS50
Do realizacji zadań CS50 oferuje IDE (Integrated Development Environment) w chmurze. Aby z niego skorzystać, załóż konto na platformie edX i zarejestruj się na autorski kurs . Następnie:
1. Przejdź do cs50.io, wybierz z listy edX, wpisz swój login i hasło, kliknij Wyślij 2. Wpisz dane swojego konta edX, kliknij Wróć do ID.CS50.NET . cs50.io 3. Czekamy: tworzymy Twoją wirtualną przestrzeń. przestrzeń wirtualna CS50 4. Gotowe! pomysł na cs50
Wiersz poleceń i uruchomienie CS50 IDE
Na dole okna CS50 IDE, w zakładce Terminal, znajduje się okno terminala lub panel wiersza poleceń. Można tu wprowadzać polecenia ciągowe: można robić to samo, co w interfejsie okiennym, np. uruchamiać aplikacje, usuwać i tworzyć pliki, instalować oprogramowanie. Jeśli nigdy nie pracowałeś z wierszem poleceń, ta metoda prawdopodobnie wydaje się uciążliwa: musisz pamiętać polecenia i je wpisywać, zamiast klikać ikony i przyciski. W pewnym stopniu jest to prawdą, wtedy wynaleziono interfejs okienny. Jednak wiersz poleceń jest dostępny we wszystkich systemach operacyjnych i administratorzy go uwielbiają. A wszystko dlatego, że czasami nie da się bez tego żyć. W oknie IDE w terminalu zobaczysz tajemniczą linijkę: nazwa_użytkownika:~/workspace $ w miejscu „nazwy użytkownika” pojawi się automatycznie wygenerowana nazwa (na podstawie Twoich danych rejestracyjnych). Kliknij okno terminala, wpisz: update50 Naciśnij Enter. Polecenie prosi system o aktualizację. W terminalu pojawią się linie opisujące proces instalacji. Nie zamykaj CS50 IDE, dopóki nie zobaczysz, że aktualizacja została zakończona! . Następnie ponownie pojawi się domyślna linia, ta z Twoim imieniem i nazwiskiem.
Praca w IDE
Utwórzmy folder, w którym będą przechowywane Twoje pliki. Kliknij prawym przyciskiem myszy ~/workspace (katalog główny) w lewym górnym rogu CS50 IDE i wybierz Nowy folder . Zmień nazwę folderu pset1 (jeśli błędnie wpisałeś nazwę, kliknij folder prawym przyciskiem myszy i wybierz Zmień nazwę ). cs50 ide zmień nazwę folderu Następnie kliknij prawym przyciskiem myszy folder pset1 i wybierz Nowy plik . Pojawi się plik Untilted, zmieńmy jego nazwę hello.txt . pomysł na cs50 Kliknij dwukrotnie plik hello.txt. W CS50 IDE zobaczysz nową kartę i pole po prawej stronie, w którym możesz pisać. Jeśli to zrobiłeś, zwróć uwagę na symbol gwiazdki (*), który pojawia się przed nazwą pliku na zakładce - oznacza to, że w pliku dokonano zmian, ale nie zostały one zapisane. Materiały dodatkowe do wykładów CS50: Tydzień 1 (wykłady 3 i 4) - 1 Zapisz plik, przechodząc do *Plik > Zapisz lub używając polecenia + S (na komputerach Apple) lub Ctrl + S (na komputerach PC). Gwiazdka powinna zniknąć. Sprawdźmy czy plik jest tam gdzie powinien. Zróbmy to za pomocą wiersza poleceń, czas się do tego przyzwyczaić :). Podobnie jak poprzednio, aktywna linia w terminalu wygląda następująco: username:~/workspace $ Workspace - bieżący katalog roboczy (ten, który jest otwarty w środowisku pracy). Tylda (~) wskazuje katalog główny (w nim znajduje się obszar roboczy). Należy pamiętać, że obszar roboczy w terminalu jest taki sam, jak ikona ~/workspace w lewym górnym rogu IDE CS50. Poćwiczmy. Kliknij w dowolnym miejscu terminala, wpisz wiersz poleceń ls i naciśnij Enter. Te dwie małe litery – skrót od „list” – wyświetli listę plików i folderów znajdujących się w bieżącym katalogu obszaru roboczego. Między innymi zobaczysz utworzony pset1 ! Teraz otwórzmy nasz folder za pomocą polecenia. Wpisujemy cd pset1 lub bardziej szczegółowo: cd ~/workspace/pset1 Polecenie cd (zmiana katalogu) zmienia aktywny katalog, w naszym przypadku na ~/pset1 Aktywna linia została zmieniona na username:~/workspace/pset1 $ To potwierdza, że ​​jesteś teraz w katalogu ~/workspace/pset1 (wiersz oznacza „Jestem w pset1 w obszarze roboczym folder, który znajduje się w folderze głównym, oznaczonym ~"). Teraz wpisz ls Zobaczysz plik hello.txt ! Jeśli klikniesz nazwę w terminalu, nic się nie stanie: jest to tekst i nie daje aktywnego link, ale potwierdza, że ​​hello.txt jest tam, gdzie powinno być. Wpisz cd Jeśli napiszesz samo polecenie cd, ale nie podasz argumentu (czyli nazwy folderu, do którego ma się udać), zwróci cię do domyślnego katalogu głównego, dzięki czemu w aktywnej linii zobaczysz następujący obrazek: username:~ $ Aby wrócić do folderu pset1, wybierz cd workspace i naciśnij Enter. Następnie cd pset1 wprowadź ponownie. Możesz także zastąpić te dwa polecenia jednym, bardziej autentycznym: cd workspace/pset1
Cześć, c!
Wreszcie nadszedł ten moment! Zacznijmy programować. W naszym folderze pset1 w IDE utwórz plik o nazwie hello.c (wymagane rozszerzenie), otwórz go w nowej karcie (myślimy, że pamiętasz, jak to zrobić z poprzedniego akapitu). WAŻNY! Litery muszą być małe, w systemie Linux wielkość liter jest uwzględniana. Hello.c i hello.c to różne pliki. Po prawej stronie okna IDE CS50 wpisz dokładnie ten sam tekst, który widzisz poniżej. Tak, możesz go skopiować, ale bardziej przydatne jest jego wpisanie. Litery mają różne kolory, ponieważ CS50 IDE ma podświetlanie składni. Wyróżnia bloki tekstu kolorem dla lepszej czytelności. Kolory nie są zapisywane w samym pliku; są widoczne tylko w IDE. Jeśli tam są, to IDE rozumie C, a ty wskazałeś, że jest to C w rozszerzeniu pliku (*.c). Jeśli nazwiesz ten sam plik hello.txt, tekst będzie w jednym kolorze. Upewnij się, że wpisałeś wszystko dokładnie tak, jak w przykładzie, w przeciwnym razie złapiesz pierwszy błąd =). Ponownie zwracamy uwagę na różnicę między małymi i wielkimi literami. Znak \n przesuwa kursor do następnej linii, a tekst wpisany jako następny nie będzie sklejał się z danymi wyjściowymi programu. Aha, i nie zapomnij o średniku (;). Jest to ważny separator instrukcji programu; C nie będzie chciał bez nich pracować. Kliknij opcję Plik > Zapisz (lub Command- lub Ctrl-S). Zauważ, że gwiazdka przed nazwą pliku zniknęła? Jeśli tak, oznacza to, że zmiany zostały zapisane. Kliknij gdziekolwiek w oknie terminala pod swoim kodem i upewnij się, że jesteś w ~/workspace/pset1 (jeśli nie, kliknij cd i naciśnij Enter, następnie cd workspace/pset1 i ponownie Enter). Twoja aktywna linia powinna wyglądać następująco: Upewnijmy się, że plik hello.c znajduje się dokładnie tam, gdzie powinien. Wpisz i naciśnij Enter. Czy ty też widzisz hello.c? Jeśli nie, cofnij się o kilka kroków i ponownie utwórz plik w żądanym katalogu. ... Nadchodzi uroczysty moment: trzymamy kciuki i... piszemy: i trzymając kciuki wciskamy Enter. Dokładnie cześć, nie cześć.c. Jeśli po tej akcji widzisz przed sobą tylko drugą aktywną linię, która wygląda dokładnie tak samo jak poprzednia, to wszystko działa! Twój kod źródłowy został przetłumaczony na kod maszynowy lub obiektowy (to znaczy na sekwencję 0 i 1). Teraz ten kod może zostać wykonany (tzn. program może zostać uruchomiony!). Aby to zrobić, wpisz: w wierszu poleceń i naciśnij Enter. Jeśli nie zmieniłeś tekstu zawartego pomiędzy „” s, zobaczysz poniżej: Jeśli teraz wpiszesz polecenie i naciśniesz Enter, zobaczysz nowy plik hello wraz z hello.c i hello.txt. Pierwsze powitanie powinno mieć po nazwie gwiazdkę, która sygnalizuje, że jest to plik wykonywalny, czyli ten, za pomocą którego uruchamiasz program. #include int main(void) { printf("hello, world\n"); } username:~/workspace/pset1 $lsmake hello./hellohello, worldls
Błędy?
Jeśli po poleceniu make zobaczysz błędy, czas na pierwsze debugowanie! Napisy typu „oczekiwana deklaracja” oznaczają, że popełniłeś gdzieś literówkę. Sprawdź ponownie powyższy kod, uważaj tylko na wszystkie szczegóły. Uwaga! Opisy błędów podano w języku angielskim. Jeśli nie jest to jasne, skorzystaj z wyszukiwarki, Tłumacza Google lub zadaj pytanie w komentarzach. Po poprawieniu błędów nie zapomnij zapisać kodu za pomocą polecenia Plik > Zapisz (lub polecenia lub Ctrl-s), kliknij ponownie wnętrze okna terminala i wpisz make hello (Tylko upewnij się, że jesteś w ~ najpierw /workspace/pset1 ). Jeśli nie ma już błędów, uruchom program wpisując polecenie.Teoretycznie ./hello cenna fraza powinna pojawić się przed tobą, ujęta w cudzysłów operatora printf, który wydaje polecenie „print”. Jeśli okno terminala wydaje się zbyt małe, kliknij ikonę plusa (+) w kółku obok hello.c.
Sprawdzanie poprawności
Aplikacja check50 jest wbudowana w CS50 IDE. Działa z wiersza poleceń i sprawdza niektóre programy pod kątem błędów. Jeśli jeszcze tam nie jesteś, przejdź do katalogu ~/workspace/pset1, uruchamiając polecenie w terminalu: cd ~/workspace/pset1 Teraz uruchom ls , zobaczysz przynajmniej plik hello.c. Upewnij się, że nazwa pliku wygląda tak, a nie, powiedzmy, Hello.c lub hello.C. Możesz zmienić nazwę pliku, uruchamiając polecenie mv source destination source - bieżąca nazwa pliku, miejsce docelowe - nowa nazwa pliku. mv (z angielskiego move) to narzędzie do zmiany nazwy. Jeżeli przypadkowo nazwałeś plik Hello.c, wpisz linijkę: mv Hello.c hello.c Po upewnieniu się, że plik nazywa się dokładnie hello.c, wywołajmy program sprawdzający check50. Należy pamiętać, że 2015.fall.pset1.hello to unikalny identyfikator problemu „hello world”. check50 2015.fall.pset1.hello hello.c Jeśli program zostanie wykonany poprawnie, zobaczysz: Materiały dodatkowe do wykładów CS50: Tydzień 1 (wykłady 3 i 4) - 2 Zielone buźki oznaczają, że test został zaliczony. Możesz także zobaczyć adres URL na dole wyniku check50, ale jest on przeznaczony tylko dla pracowników (jednak jeśli jesteś zainteresowany, sprawdź to!). check50 uruchamia 3 testy: czy plik hello.c istnieje, czy hello.c się kompiluje i czy aplikacja generuje linię z napisem „hello, world\n”. Jeśli widzisz smutne czerwone emotikony, oznacza to, że masz błąd. :( 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 Tutaj check50 nie znalazł hello.c, a czerwona buźka wskazuje, że albo popełniłeś błąd w nazwie, albo przesłałeś plik w niewłaściwe miejsce. Żółte emotikony „neutralny” oznaczają, że testy się nie odbyły. A od czego mogą zacząć, jeśli program nie znajdzie pliku, który należy sprawdzić? Oto kolejna opcja, która pojawi się, jeśli zmienisz tekst, który powinna wyświetlić funkcja printf(): :) hello.c exists :) hello.c compiles :( prints "hello, world\n" \ expected output, but not "hello, world" check50 zgłasza, że ​​oczekiwano linii hello, world\n, ale pojawiło się coś innego. check50 nie nalicza punktów za ukończenie kursu, ale sprawdza, czy wynik zadania różni się od oczekiwanego. A pozwala to zweryfikować przed potwierdzeniem poprawności zadania w ramach kursu (jak to zrobić podpowiemy później).
Podstawy C: porównanie ze Scratchem
Witaj świecie w Scratchu i C:
Materiały dodatkowe do wykładów CS50: Tydzień 1 (wykłady 3 i 4) - 3 #include int main(void) { printf("hello, world\n"); }
  • Materiały dodatkowe do wykładów CS50: Tydzień 1 (wykłady 3 i 4) - 4reprezentuje funkcję, która w Scratchu wypisuje „słowa” duszka w komiksowej bańce, w C istnieje funkcja printf, która robi to samo, tylko bez kreskówek.
  • główny - po angielsku - „główny”. Punkt wejścia do programu. Taki sam jak Materiały dodatkowe do wykładów CS50: Tydzień 1 (wykłady 3 i 4) - 5.
Niekończący się cykl
Materiały dodatkowe do wykładów CS50: Tydzień 1 (wykłady 3 i 4) - 6 przetłumaczone na C: while (true) { printf("hello, world\n"); } while (true) robi to samo: pętla kontynuuje swoją pracę, dopóki (while) wartość jest true (wyrażenie logiczne „true” lub „jeden”). Ta pętla będzie działać w nieskończoność.
Pętla wyświetlająca frazę na ekranie 10 razy
Scratch Materiały dodatkowe do wykładów CS50: Tydzień 1 (wykłady 3 i 4) - 7 C for (int i = 0; i < 10; i++) { printf("hello, world!\n"); } i jest zmienną licznikową, której wartość zmienia się za pomocą operatora inkrementacji i++, zwiększając ją o 1 przy każdej iteracji pętli. Początkowo i ma przypisaną wartość 0 za pomocą operatora przypisania =. Uwaga! Podobnie jak w Javie, w C równość jest oznaczona przez ==, operator przypisania =. Oznacza to, że a = 5 oznacza, że ​​zmiennej a przypisano wartość 5, a (a= =5) oznacza wyrażenie Boulogne’a (jeśli a jest równe 5, to wyrażenie jest prawdziwe, jeśli nie równe, to fałszywe) . Pętla zatrzyma się, gdy i „urośnie” do 9. Łatwo to obliczyć, pętla zostanie wykonana 10 razy. Jeśli więc chcesz coś powtórzyć określoną liczbę razy, w C definiujesz pętlę for (int i = 0; i < 10; i++). Inny przykład: Materiały dodatkowe do wykładów CS50: Tydzień 1 (wykłady 3 i 4) - 8 I to samo przetłumaczone na C: int counter = 0; while (true) { printf("%i\n", counter); counter++; }
  • licznik przechowuje wartość w C i Scratch. W C ustawiamy int counter = 0 zamiast Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 9.
  • Dla wyjaśnienia typ zmiennej oznaczamy jako int: i jest liczbą całkowitą (od angielskiej liczby całkowitej, całości).
  • %i, którego używamy w printf w czwartej linii, jest symbolem zastępczym, który mówi nam, abyśmy wypisali dziesiętną liczbę całkowitą, tak samo jak mówimy printf, aby zastąpił symbol zastępczy wartością, jaką przyjmuje zmienna licznika.
Wyrażenia logiczne
Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 10 To jest to samo co (x < y) ((x < y) && (y < z))
Warunki
Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 11 I odpowiednik „gówna”: Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 12 A co z pierwszym niezrozumiałym zwrotem? Więcej na ten temat w dalszej części rozdziału „Biblioteki”. #include
Instrukcje warunkowe
Ci goście sprawdzają, czy jakiś warunek (wyrażenie logiczne, pytanie, na które można odpowiedzieć tylko „tak” lub „nie”) jest prawdziwy, a jeśli tak, to wykonują pewne czynności powiązane z tym warunkiem. Przykład z życia: jeśli pada deszcz (zakładając, że pada) i jestem na zewnątrz (jestem na zewnątrz, gdy pada deszcz), otwieram parasol. if (stan) { //исполнить, если oznaczający истинно } Bardziej skomplikowana opcja: jeśli warunek jest spełniony, wykonaj akcję, jeśli nie, podejmij inną akcję. if (stan) { //выполнить действие } else { //выполнить другое действие, если stan ложно } Przykład: jeśli masz ukończone 18 lat, zatwierdź dostęp. Jeśli będzie mniejsza, nie zostanie zatwierdzona. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 12
Operator wyboru
switch (n) { case const1: // если n równa się const1, выполнить break; // stan совершилось — выйти из выбора case const2: // если n równa się const2, выполнить break; ... default: // если n не równa się ни одной из констант, выполнить break; } Przykład: jeśli n = 50, wydrukuj „CS50 to Wprowadzenie do informatyki I”, jeśli n = 51, wydrukuj „CS51 to Wprowadzenie do informatyki II”, w przeciwnym razie wydrukuj „Przepraszam, nie znam tych zajęć!” 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; }
Cykle
while: sprawdza warunek, a następnie wykonuje akcję, gdy warunek jest spełniony. while (stan) { // выполнять, пока истина } Do/while różni się tym, że za pierwszym razem wykonuje akcję bez sprawdzania warunku, a następnie tylko go sprawdza. Jeśli warunek jest prawdziwy, powtarza akcję, aż warunek stanie się fałszywy. do { ) // выполнять, пока истина } while (stan); Pętla for powtarza akcję określoną liczbę razy.Pętle Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 13 mogą być zagnieżdżane jedna w drugiej. W takim przypadku na każdym etapie pętli zewnętrznej zostanie całkowicie wykonana pętla wewnętrzna. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 14
Podstawowe typy danych w C
основные типы данных в C
Biblioteki C
Pewnie zastanawiałeś się już, co oznacza pierwsza linijka programu w C: Jaka jest jej rola i czy można się bez niej obejść? Linia #include robi bardzo ważną rzecz: włącza do twojego programu biblioteki już napisanego kodu. Nazwa podłączonej biblioteki jest ujęta w nawiasy ostre (<>) i ma rozszerzenie (.h). Gdyby nie było bibliotek, to każdą, nawet najbardziej podstawową czynność trzeba by za każdym razem opisywać od nowa. Biblioteka, którą połączyliśmy#include zawiera funkcje wejścia/wyjścia. To właśnie pozwala nam używać funkcji printf() do drukowania na ekranie. To znaczy, gdybyśmy nie napisali linii #include , ale pozostawiłem funkcję printf() w treści programu; gdy próbowaliśmy ją uruchomić, otrzymalibyśmy błąd! Ponieważ bez tej biblioteki kompilator nie wie, czym jest printf(). Istnieją standardowe biblioteki, które tworzą słownictwo języka. Funkcja printf() nie jest wbudowana w komputer, ale jest zawarta w standardowej bibliotece języka C. Oznacza to, że jakiś programista napisał ją wcześniej i umieścił w bibliotece. Teraz inni mogą z niego korzystać bez konieczności wymyślania koła na nowo. Aby kompilator mógł to „zrozumieć”, łączymy się . Istnieją inne standardowe biblioteki używane w procesie CS50. Np. biblioteka ciągów znaków, która opisuje operacje na ciągach znaków (ustalanie długości, dodawanie itp.). W porównaniu do innych popularnych języków programowania, liczba standardowych bibliotek C jest bardzo mała. Istnieją jednak samodzielnie napisane, najczęściej bardziej wyspecjalizowane biblioteki. Tak, biblioteka został stworzony specjalnie dla studentów CS50. Czas na ważną notatkę: oprócz pisania programów i rozwiązywania problemów przy użyciu własnego kodu, dobry programista posiada jeszcze jedną ważną umiejętność: znajomość narzędzi, które zostały już napisane i umiejętność ich wykorzystania (biblioteki innych osób) tak, aby aby nie tracić czasu na wymyślanie „koła” na nowo. Jeśli więc jesteś w trakcie rozwiązywania żmudnego lub złożonego problemu, który wydaje się dość powszechny, naucz się zadawać sobie pytanie: „czy ktoś inny napisał rozwiązanie?” Jest duże prawdopodobieństwo, że tak jest, a tę funkcję można znaleźć w istniejącej bibliotece. Z technicznego punktu widzenia biblioteka to plik binarny utworzony przez połączenie kolekcji plików obiektowych za pomocą linkera. Pliki obiektowe to pliki z rozszerzeniem (*.o), które otrzymujesz podczas kompilowania aplikacji.
Struktura bibliotek C
Когда программист пишет библиотеку, kod распределяется по двум типам файлов — заголовочный файл (header, расширение *.h) и файл реализации (implementation, расширение *.c). Заголовочный файл содержит kod, описывающий ресурсы библиотеки, которые вы можете использовать. То есть описания переменных, функций, структур, типов и прочее. Если вам интересно, что содержит та Lub иная библиотека, нужно заглянуть именно в заголовочный файл. В терминале CS50 IDE (и других средах Linux) вы можете вызвать приложение less для просмотра файлов и открыть с его помощью интересующую вас библиотеку: less /usr/include/stdio.h Файл откроется прямо в терминале. Правда, для новичков он будет очень трудночитаемым. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 15 Coбы выйти из less, нажмите q на клавиатуре. Заголовочный файл не содержит kod функций, что служит примером очень важного понятия — сокрытия данных Lub инкапсуляции. Пользователю системы незачем знать «внутренности» библиотек, ему достаточно, чтобы она работала. Если вы прошерстите stdio.h, то не найдете там реализации printf(), хотя Jak её использовать, вы уже знаете. Это сделано для того, чтобы защитить данные от вмешательства, которое порой может плохо отразиться на системе. Так, если кто-то изменит реализацию функции printf() в библиотеке, это отразится на всех тех программах, которые её используют. Любознательным будет интересно, где спрятана реализация. Согласно конвенции (соглашения, принятые в мире программирования) такой kod хранят в файле с расширением (*.c). После компиляции библиотеки на основе двух файлов с одинаковым именем, но разным расширением создается obiektный файл, который собран так, чтобы создать файл с двоичным kodом библиотеки. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 16 Autor библиотеки передает программисту, который хочет её использовать, два plik — с двоичным kodом, а также заголовочный файл. Таким образом, файл с исходным kodом программисту не нужен. Точнее, он может быть нужен, если программист хочет что-то поменять в самой библиотеке и перекомпLubровать её под собственные нужды. Coбы воспользоваться функциями библиотеки в своей программе нужно проделать следующее: 1. Включить заголовочный файл в программу с помощью строки #include В случае стандартных библиотек достаточно указать Nazwa библиотеки в угловых скобках: #include <Nazwa_библиотеки.h> Если библиотека, которую вы хотите подключить, лежит в той же папке, что и ваша программа, подключайте её следующим образом: #include “Nazwa_библиотеки.h” 2.Присоединить бинарный файл для компиляции. Это очень важный шаг, поскольку, Jak мы говорLub выше, заголовочный файл не содержит реализации элементов библиотеки. Coбы это сделать, нужно вызвать компилятор clang с флагом –l и идущим непосредственно за ним названием библиотеки. Например, компонуем библиотеку cs50: clang hello –lcs50 Clang — один из компиляторов. Для компиляции можно также использовать уже знакомую вам программу make. По сути, она вызывает clang с определенными аргументами командной строки.
И снова Hello C: разбор синтаксиса простейших программ
Директива #include подключает библиотеку ввода/вывода . Программы в C состоят из функций, а те — из операторов и переменных. Функция — это кусок kodа, в котором уже есть Lub подаются Jakие-то данные, а Jakие-то данные получают в результате её исполнения. Фигурные скобки { } ограничивают тело функции — описание того, что она должна делать. printf() из стандартной библиотеки stdio выводит любую строку на экран. Строки заключаются в двойные кавычки, а символ “\n” означает перевод курсора на новую строку. Пример: функция «посчитать квадрат целого числа». Передаем функции данные, в нашем случае — число, которое нужно возвести в квадрат. Затем в ней прописывается алгоритм умножения числа на самое себя, и результат этого умножения она выдает на выходе. int sqr(int a) { return a*a; } int sqr(int a) — название функции. В скобках — её аргумент a, это то, что подается на вход функции. Это Jak переменная в уравнении. То есть, если мы хотим узнать квадрат числа 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, Jak и любом языке, есть такой элемент, Jak комментарий Lub примечание в коле программы, предназначенное не для компьютера, а для понимания людей. Например, описание, что именно делает kod. Компилятор комментариев не видит. Комментирование программ — очень важный момент, поскольку порой разобраться в чужом (и даже своем) kodе очень сложно. //пример однострочного комментария /** а это – многострочного **/ #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() вызывается с пустыми скобками, потому что её аргументы определены Jak void.
Еще немного о вводе/выводе в C
Вы, наверное, уже успели заметить странные символы %d и %f в скобках оператора printf. Дело в том, что функция printf выводит данные в следующем обобщенном виде: рrintf ("управляющая строка", аргумент1, аргумент2,...); Управляющая строка содержит компоненты трех типов:
  • символы, которые выводятся на экран дисплея;
  • спецификаторы преобразования, которые вызывают вывод на экран очередного аргумента из последующего списка;
  • управляющие символьные константы.
Спецификатор преобразования начинается со знака % и заканчивается символом, задающим преобразование. Некоторые из таких символов:
  • с: oznaczającyм аргумента является символ;
  • d Lub i: десятичное целое число;
  • f: десятичное число с плавающей точкой;
  • s: строка символов.
То есть, %d означает, что на экране появится целое десятичное, а %f — десятичное с плавающей запятой. Co если нам нужно, чтобы пользователь ввёл данные с клавиатуры? Для этого можно использовать функцию scanf( ), прототип которой также лежит в библиотеке stdio. Coбы считать с экрана вещественное число, в программе нужно написать строку scanf("%d", &a); Давайте перепишем нашу программу так, чтобы пользователь сам вводил число, которое нужно возвести в квадрат. Дополнительные материалы к лекциям CS50: Week 1 (лекции 3 и 4) - 17
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION