Kod

Podstawy języka C: nauka programowania od podstaw — wykład 1.1 kursu CS50

Podstawy języka C: nauka programowania od podstaw — wykład 1.1 kursu CS50

Naucz się: Zostań programistą C++ od podstaw

Dowiedz się więcej

CS50 (Computer Science 50) to renomowany kurs informatyki oferowany przez uniwersytety Harvard i Yale. Stał się ważnym punktem wyjścia dla wielu osób, które chcą rozpocząć swoją przygodę z programowaniem. Ten kurs konsekwentnie obejmuje kluczowe tematy, takie jak logika komputerowa, programowanie wizualne w Scratch, podstawy języka C, manipulacja tablicami, podstawowe algorytmy, zarządzanie pamięcią i struktury danych. Obejmuje również podstawy Pythona, SQL, HTML, CSS, JavaScript i frameworka Flask. Ten kurs zapewnia studentom niezbędną wiedzę i umiejętności, aby z powodzeniem rozpocząć przygodę ze światem programowania i technologii. Ukończenie tego kursu pozwoli Ci dogłębnie zrozumieć, jak działają komputery, opanujesz fundamentalne zasady programowania oraz nauczysz się czytać i analizować kod w różnych językach programowania. Ta wiedza otworzy nowe możliwości w branży IT i pomoże Ci w przyszłych studiach i karierze zawodowej. W tym artykule omówimy podstawowe zasady programowania na przykładzie środowiska wizualnego Scratch. Bardziej złożone tematy, takie jak C i inne języki programowania, zostaną omówione w kolejnych artykułach z tej serii. Scratch oferuje przyjazny dla użytkownika interfejs dla początkujących, ułatwiając zrozumienie podstawowych pojęć, takich jak algorytmy i logika. Przygotuj się na ekscytujące zanurzenie w świecie programowania w Scratchu, zanim przejdziesz do bardziej złożonych języków.

Aby skutecznie pozycjonować, ważne jest, aby wziąć pod uwagę nie tylko treść, ale także strukturę tekstu. Optymalizacja SEO polega na użyciu słów kluczowych, które pasują do tematu treści. Warto również zwrócić uwagę na nagłówki i podtytuły, aby poprawić czytelność i zwiększyć szanse na wysoką pozycję w wyszukiwarkach. Tworzenie unikalnych i informacyjnych treści, odpowiadających na zapytania użytkowników, jest kluczowe. Nie zapomnij o linkowaniu wewnętrznym i zewnętrznym, które pomoże usprawnić nawigację i zwiększyć autorytet Twojego zasobu. Regularna aktualizacja treści również pomaga zachować ich trafność i podnosi pozycję w wyszukiwarkach. Używaj meta tagów i opisów, aby zwrócić uwagę na swoje treści, i monitoruj analizy, aby zrozumieć, jakie zmiany mogą poprawić Twoje pozycje w wynikach wyszukiwania.

  • Klucz do pisania dobrego kodu
  • Korzystanie ze środowiska IDE
  • Kompilowanie programu
  • Funkcje i argumenty
  • Dlaczego potrzebna jest funkcja Main
  • Pliki nagłówkowe
  • Polecenia Linuksa

Dlaczego przetłumaczyliśmy CS50 i jak zorganizowany jest każdy artykuł w kursie

CS50 to flagowy kurs programowania na Uniwersytecie Harvarda i najpopularniejszy otwarty kurs online na platformie edX. Wszystkie materiały kursu, w tym ćwiczenia praktyczne, są dostępne bezpłatnie. Za niewielką opłatą możesz również zdobyć certyfikat i dodatkowe korzyści. Kurs obejmuje podstawy informatyki i programowania, dzięki czemu idealnie nadaje się zarówno dla początkujących, jak i osób pragnących pogłębić swoją wiedzę. Przekonwertowaliśmy wykłady wideo do formatu tekstowego, dodając ilustracje i wyjaśnienia. Wszystkie materiały są dostępne w otwartym kodzie źródłowym. Oryginalny kurs jest dostępny na licencji Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0). Oznacza to, że możesz go remiksować i rozpowszechniać bezpłatnie, pod warunkiem przestrzegania oryginalnej licencji. Dzięki temu możesz korzystać z tej serii materiałów w swojej pracy lub działalności społecznej całkowicie za darmo i bezpłatnie, zgodnie z określoną licencją.

Każdy artykuł z serii CS50 zawiera następujące materiały:

  • tłumaczenie tekstu filmu (czasem połowy filmu, jeśli temat jest obszerny);
  • link do oryginalnego filmu w języku angielskim;
  • schematy i wyjaśnienia;
  • linki do bardziej szczegółowych materiałów na temat artykułu;
  • zadania praktyczne.

Amerykański naukowiec i profesor Uniwersytetu Harvarda. Jego badania naukowe i edukacyjne wywarły znaczący wpływ na rozwój środowiska akademickiego i innowacyjne podejście do nauczania. Ambitne projekty i publikacje pomagają poszerzać granice wiedzy i inspirują nowe pokolenia badaczy.

Oryginalny film

Główne warunki tworzenia dobrego kodu

W tym wykładzie rozpoczniemy naukę języka programowania C. W przeciwieństwie do języka wizualnego Scratch, C jest językiem tekstowym, który stanowi podstawę wielu współczesnych języków, w tym Pythona. Nauka C otworzy nowe możliwości programowania i pomoże Ci zrozumieć zasady innych języków.

Naszym głównym celem nie jest opanowanie przez Ciebie konkretnych języków programowania, takich jak Scratch, C czy Python, ale nauczenie się programowania w ogóle. Język C jest pełen szczegółów, które mogą odciągać uwagę od samego procesu programowania: złożona składnia, zróżnicowana interpunkcja — znaki haszujące, nawiasy kątowe, nawiasy okrągłe i okrągłe, ukośniki odwrotne i wiele innych. Jestem jednak przekonany, że wkrótce opanujesz wszystkie te niuanse. Ważne jest, aby pamiętać, że omówiliśmy już wiele zasad, które pomogą Ci w drodze.

Podczas rozwiązywania problemów w Scratch, badaliśmy funkcje przyjmujące argumenty (dane wejściowe) i zwracające wartości (dane wyjściowe). Należy jednak pamiętać, że nie wszystkie funkcje zwracają wartości. Zrozumienie tych pojęć jest kluczowym aspektem programowania, ponieważ pozwala tworzyć bardziej wydajne i zorganizowane programy. Poznawanie funkcji z argumentami i wartościami zwracanymi pomaga poprawić umiejętności programowania i pogłębić wiedzę na temat Scratcha.

Omówiliśmy instrukcje warunkowe, które można postrzegać jako rozwidlenia dróg w programowaniu. Przyjrzeliśmy się również wyrażeniom logicznym, czyli pytaniom z dwiema możliwymi odpowiedziami: tak lub nie, prawda lub fałsz. Te pojęcia stanowią podstawę podejmowania decyzji w kodzie i odgrywają kluczową rolę w zarządzaniu przepływem programu. Zrozumienie wyrażeń warunkowych i logicznych pozwala programistom tworzyć bardziej złożone i wydajne algorytmy.

Omówiliśmy pętle, które umożliwiają wielokrotne wykonywanie tej samej czynności, oraz zmienne, które tymczasowo przechowują wartości. Te pojęcia będą przydatne później.

Teraz przyjrzyjmy się, jak przełożyć te pojęcia na kod w językach programowania. Składnia języków programowania jest zazwyczaj prostsza niż w języku naturalnym, ponieważ liczba używanych słów jest znacznie mniejsza. Jednak podczas pracy z językami programowania wymagana jest szczególna ostrożność, ponieważ nawet drobne błędy mogą prowadzić do awarii programu. Ważne jest, aby zrozumieć, że precyzja i dokładność są kluczowymi czynnikami podczas pisania kodu, ponieważ komputer wymaga ścisłego przestrzegania reguł składni.

Napisałeś kod i zastanawiasz się: czy jest dobry? Pierwszym kryterium oceny kodu jest jego zdolność do poprawnego rozwiązania problemu. Jednak nawet jeśli problem zostanie rozwiązany poprawnie, długi i niezorganizowany kod zostanie uznany za niskiej jakości. Inny programista będzie miał trudności ze zrozumieniem logiki Twojego kodu i jego poprawności. Co więcej, patrząc na ten kod za rok, a nawet następnego dnia, możesz nie pamiętać dokładnie, co napisałeś. Efektywny kod powinien być nie tylko funkcjonalny, ale także czytelny, aby ułatwić jego konserwację i modyfikację w przyszłości.

Ważne jest, aby programista skupił się na tworzeniu wysokiej jakości kodu, poprawie wydajności algorytmów i utrzymaniu czystości kodu. Estetyka kodu również odgrywa znaczącą rolę w jego odbiorze i późniejszym utrzymaniu. Czysty i uporządkowany kod nie tylko ułatwia czytanie, ale także debugowanie i optymalizację, co ostatecznie prowadzi do tworzenia bardziej niezawodnych i wydajnych rozwiązań programistycznych.

Dobry kod ma kilka ważnych cech, takich jak poprawność, projekt (architektura i struktura) oraz styl. Przyjrzyjmy się prostemu przykładowi programu w C, który wyświetla na terminalu tekst „Hello, World”. Ten program jest doskonałym przykładem do nauki podstaw programowania.

Oto jak wygląda kod:

«`c
#include <stdio.h>

int main() {
printf(«Hello, World\n»);
return 0;
}
«`

W tym kodzie używamy biblioteki stdio.h, która jest wymagana dla funkcji printf. Funkcja główna, main, wypisuje na terminalu komunikat „Hello, World” i kończy działanie programu. Ten przykład demonstruje podstawową składnię języka C i stanowi punkt wyjścia dla początkujących programistów. Poprawna struktura i styl kodu przyczyniają się do jego czytelności i użyteczności.

Na pierwszy rzut oka proces wielokrotnego naciskania klawiszy może wydawać się brutalny, zwłaszcza gdy jego efekt jest znikomy. Jednak po kilku wykładach i zapoznaniu się z nowocześniejszymi językami programowania, takimi jak Python, zobaczysz, jak tę logikę można uprościć do jednej linijki kodu. Ważne jest jednak, aby zrozumieć, co dzieje się w bieżącym kontekście, aby uzyskać dogłębne zrozumienie podstaw programowania. Pomoże Ci to w opanowaniu bardziej złożonych języków i technologii.

Korzystanie ze środowiska IDE

Jak wyświetlić na ekranie napis „hello, world”? Do wprowadzania tekstu można używać edytorów tekstu, takich jak Word, Dokumenty Google czy Pages, ale nie są one rozwiązaniem dla programistów. Narzędzia te nie potrafią konwertować tekstu na kod binarny zrozumiały dla komputera. Programowanie wymaga użycia specjalistycznych języków programowania, które pozwalają tworzyć instrukcje do wykonania przez komputer. Aby poprawnie wyświetlić napis „hello, world” na ekranie, należy użyć języka programowania, który konwertuje tekst na format czytelny dla maszyny.

Istnieją narzędzia, które mogą znacznie uprościć proces tworzenia oprogramowania. Nazywa się je zintegrowanymi środowiskami programistycznymi, czyli IDE. Jednym z najpopularniejszych przykładów jest Visual Studio Code (VS Code), który oferuje wiele funkcji umożliwiających efektywną pracę z kodem.

Ramka okna VS Code: CS50 / YouTube

Powyżej znajduje się pusty plik o nazwie hello.c, gdzie rozszerzenie .c wskazuje, że jest to kod w języku programowania C. Numery wierszy wyświetlane po lewej stronie ułatwiają nawigację po strukturze programu.

Teraz dodam bibliotekę stdio.h, o której omówimy szczegółowo później. Następnie wpiszę int main(void), do którego wrócimy później. Następnie wpiszę nawiasy klamrowe i nacisnę Tab, aby dodać wcięcie. Na koniec napiszę printf(«hello, world\n»); i wstaw średnik.

David przed swoimi slajdami podczas czytania kursu. Ramka: CS50 / YouTube

Teraz musisz nacisnąć kombinację klawiszy Ctrl + S, aby zapisać plik. I oto zostałem programistą.

Kompilowanie programu

Mój program jest zapisany w pliku o nazwie hello.c. Teraz muszę przekonwertować kod źródłowy, który jest tekstem w języku programowania, na kod maszynowy, który składa się z zer i jedynek. To właśnie ten kod maszynowy jest wykonywany przez komputer. Proces konwersji kodu źródłowego na kod maszynowy nazywa się kompilacją i stanowi ważny etap rozwoju oprogramowania.

Nie będę tego robił ręcznie. Istnieją algorytmy zaimplementowane w specjalnych programach, które automatyzują ten proces. Programy te nazywane są kompilatorami. Nie wszystkie języki programowania używają kompilatorów, ale język C jest jednym z tych, które aktywnie wykorzystują tę technologię. Kompilator konwertuje kod napisany w C na język maszynowy, który może być wykonywany przez komputer. Pozwala to programistom na efektywne tworzenie i optymalizowanie aplikacji.

U góry ekranu znajduje się edytor tekstu, który ułatwia tworzenie plików i pisanie kodu. Na dole ekranu znajduje się okno terminala, w którym można wprowadzać i wykonywać polecenia, takie jak kompilacja kodu źródłowego do kodu maszynowego. Jest to wygodny interfejs dla programistów, umożliwiający im efektywną pracę nad projektami i zarządzanie procesem rozwoju.

Aby przekonwertować plik hello.c na program wykonywalny, otwórz terminal i uruchom polecenie make hello. Następnie, aby uruchomić program, wpisz ./hello i naciśnij Enter. Te polecenia pozwolą Ci skompilować i uruchomić Twój program w języku C.

Budowanie i uruchamianie programu w języku C Ramka: CS50 / YouTube

Make Polecenie hello odpowiada za budowanie i kompilację programu. Polecenie ./hello służy do uruchomienia programu o nazwie hello, który znajduje się w bieżącym katalogu. Polecenia te są kluczowe dla pracy z oprogramowaniem w środowisku programistycznym, umożliwiając programistom efektywne zarządzanie procesem tworzenia i uruchamiania aplikacji.

Teraz otworzę pasek boczny zintegrowanego środowiska programistycznego (IDE). Funkcja ta umożliwia dostęp do różnych narzędzi i ustawień, usprawniając proces tworzenia i upraszczając nawigację w projekcie. Pasek boczny umożliwia szybkie wyszukiwanie plików, zarządzanie zależnościami i przeglądanie błędów, co znacznie zwiększa wydajność programisty.

Eksplorator w VS Code Ramka: CS50 / YouTube

Otworzyłem aplikację o nazwie Explorer, która wyświetla wszystkie pliki na moim koncie. Wśród nich znajduje się plik o nazwie hello.c, który jest wyróżniony, ponieważ jest otwarty w naszym zintegrowanym środowisku programistycznym (IDE). Inny plik o nazwie hello został utworzony podczas kompilacji. Ten plik jest wykonywalny, co pozwala na jego bezpośrednie uruchomienie.

Aby wprowadzić zmiany w programie, na przykład aby wyświetlał tekst „hello, CS50”, należy edytować kod w hello.c. Następnie należy ponownie skompilować plik, aby uzyskać zaktualizowany plik wykonywalny hello. Zmiany w wynikach programu zaczną obowiązywać dopiero po kompilacji.

Funkcje i argumenty

Funkcje i argumenty odgrywają kluczową rolę w programowaniu w Scratchu. Funkcje reprezentują akcje, takie jak „speak”, „call” i „call”. lub „zapytaj”, czy program ma zostać wykonany. Argumenty funkcji w Scratchu są zazwyczaj wyświetlane jako małe, białe owale. Zrozumienie tych podstawowych pojęć pozwoli Ci tworzyć bardziej złożone i interaktywne projekty, poprawiając Twoje umiejętności programowania i logicznego myślenia.

Rozważmy nasz program w C w kontekście Scratcha. C używa funkcji printf do wyświetlania tekstu na ekranie. W tym przypadku nawiasy reprezentują biały owal używany w Scratchu. Warto również zauważyć, że C używa podwójnych cudzysłowów, których nie ma w Scratchu; są one wymagane, gdy ciąg znaków jest przekazywany jako argument do funkcji. Kod używa również średnika, który w C kończy wyrażenia i oznacza koniec instrukcji. Dlatego zrozumienie tych elementów pomoże Ci lepiej zrozumieć programowanie w C i przenieść wiedzę ze Scratcha.

Funkcje mogą zwracać różne typy danych wyjściowych, w tym ciągi znaków, znaki i liczby. Jednak dane wyjściowe mogą również pojawiać się jako „efekty uboczne”. Obejmuje to percepcje wizualne lub dźwiękowe, takie jak obrazy, dźwięk lub tekst pojawiający się na ekranie. Ważne jest, aby zrozumieć, że funkcje nie tylko obliczają wartości, ale mogą również wchodzić w interakcję z użytkownikiem za pośrednictwem interfejsu graficznego lub powiadomień dźwiękowych. Rozszerza to funkcjonalność programów i umożliwia tworzenie bardziej interaktywnych aplikacji.

W Scratchu istnieją funkcje, które oprócz efektów ubocznych mogą zwracać wartości. Na przykład blok „Ask” pozwala zadać pytanie „Jak masz na imię?” i zapisuje odpowiedź w specjalnej zmiennej „Answer”. Wartość ta może być ponownie wykorzystana, w przeciwieństwie do efektów ubocznych, które pojawiają się na ekranie i znikają. Korzystanie z wartości zwracanych sprawia, że ​​kod jest bardziej wydajny i wygodny w dalszym użyciu.

Najbardziej odpowiednim odpowiednikiem bloku „Ask” jest funkcja get_string. Funkcja ta zwraca wynik jako zmienną, co pozwala na jej wielokrotne użycie. W ten sposób możesz skutecznie zarządzać danymi i integrować je ze swoim projektem, usprawniając proces pracy z informacjami.

Funkcja wprowadzania danych użytkownika do programu Frame: CS50 / YouTube

W programowaniu w języku C znak = nie oznacza równości, jak w matematyce, lecz jest operatorem przypisania. Służy do przypisania wyniku funkcji do zmiennej odpowiedzi. Funkcja ta prosi użytkownika o podanie wartości, która jest następnie zapisywana w określonej zmiennej. Zrozumienie różnic między operacjami matematycznymi a programistycznymi jest ważne dla skutecznego programowania w języku C.

W języku programowania C nie wystarczy po prostu nadać zmiennej nazwy, jak w Scratchu. Ważne jest, aby z góry poinformować komputer, jaki typ danych będzie przechowywana w zmiennej. Na przykład, typ string jest przeznaczony do przechowywania danych łańcuchowych, a typ int do przechowywania liczb całkowitych. Istnieją inne typy danych, które omówimy później. Zrozumienie typów danych jest kluczowym aspektem programowania w języku C, ponieważ wpływa na sposób przetwarzania i przechowywania danych w pamięci.

Jeśli program określa, że ​​zmienna jest typu string, komputer interpretuje zera i jedynki w niej zapisane jako słowa lub sekwencje znaków, w tym puste ciągi znaków. Jeśli zmienna jest zadeklarowana jako int, dane będą traktowane jako liczby całkowite. Próba wstawienia ciągu znaków do zmiennej numerycznej lub odwrotnie spowoduje wyświetlenie komunikatu o błędzie. Należy pamiętać, że wszystkie dane wprowadzane do terminala, niezależnie od formatu, będą traktowane jako ciągi tekstowe, czyli jako typ string. Należy to uwzględnić podczas pracy ze zmiennymi w programowaniu, aby uniknąć błędów i zapewnić poprawne przetwarzanie danych.

Typy danych w języku programowania C odgrywają kluczową rolę w tworzeniu oprogramowania. Określają one sposób przechowywania i przetwarzania informacji w pamięci. W języku C istnieje kilka głównych kategorii typów danych, w tym wbudowane i zdefiniowane przez użytkownika.

Wbudowane typy danych obejmują liczby całkowite, takie jak int i long, oraz liczby zmiennoprzecinkowe, takie jak float i double. Każdy z tych typów ma swoje własne cechy, takie jak rozmiar w bajtach i zakres wartości, jakie może przyjmować. Na przykład typ int zazwyczaj zajmuje 4 bajty i może przechowywać wartości od -2 147 483 648 do 2 147 483 647.

Oprócz typów wbudowanych, język C oferuje również możliwość tworzenia niestandardowych typów danych za pomocą struktur i unii. Struktury pozwalają łączyć różne typy danych w jedną jednostkę logiczną, co jest szczególnie przydatne w pracy ze złożonymi danymi. Unie z kolei pozwalają przechowywać wiele typów danych w jednym obszarze pamięci, oszczędzając miejsce.

Język C posiada również typ danych wskaźnika, który przechowuje adresy innych zmiennych. Pozwala to na efektywne zarządzanie pamięcią i przesyłanie dużych ilości danych między funkcjami bez konieczności ich kopiowania.

Prawidłowe użycie typów danych w C ma kluczowe znaczenie dla efektywnego programowania i optymalizacji wydajności aplikacji. Wybierając typ danych, należy wziąć pod uwagę nie tylko rozmiar i zakres możliwych wartości, ale także specyfikę rozwiązywanego problemu. Zrozumienie różnych typów danych i ich cech pomoże programistom tworzyć bardziej niezawodne i wydajne aplikacje.

  • bool — wartości logiczne (prawda/fałsz);
  • char — pojedynczy znak;
  • float — liczby zmiennoprzecinkowe/przecinkowe (ułamkowe);
  • double — dłuższe liczby zmiennoprzecinkowe/przecinkowe (ułamkowe);
  • int — liczby całkowite;
  • long — duże liczby całkowite;
  • string — ciąg znaków.

Typy te ułatwiają interpretację i przetwarzanie sekwencji zer i jedynek, przekształcając je w sensowne dane o określonym formacie.

Przyjrzyjmy się teraz znakowi końca wiersza \n. Otwórzmy VS Code i wróćmy do przykładowego programu „hello, world”. Usuńmy znak \n i uruchommy kod w celu kompilacji i wykonania.

Wyjście programu bez /n Ramka: CS50 / YouTube

Znak $ pozostał w tym samym wierszu co tekst „hello, world”, co pozwala nam wnioskować, że znak \n służy do przeniesienia kursora do nowego wiersza. Brak tego znaku sprawia, że ​​tekst wyjściowy jest mniej ustrukturyzowany i wizualnie nieuporządkowany. Prawidłowe użycie znaku \n sprzyja lepszemu postrzeganiu informacji i poprawia czytelność kodu.

Teraz uczyńmy program bardziej interaktywnym. Najpierw zapyta użytkownika o imię, a następnie powita go. To doda element personalizacji i sprawi, że interakcja będzie przyjemniejsza. Interaktywność programu poprawi komfort użytkowania i zwiększy jego atrakcyjność.

Zaktualizowany program w C będzie ulepszoną wersją, która będzie zawierała zoptymalizowany kod, zwiększoną wydajność i poprawki błędów. Ta wersja uwzględnia najnowsze zmiany w standardach językowych i ulepsza algorytmy, aby zapewnić wydajniejsze przetwarzanie danych. Aktualizacja programu zawiera również ulepszony interfejs, dzięki któremu interakcja użytkownika z aplikacją będzie bardziej intuicyjna i wygodna.

Główne cechy zaktualizowanego programu C obejmują optymalizację algorytmów, poprawki znanych luk w zabezpieczeniach, ulepszoną dokumentację i przykłady użycia, które pomogą użytkownikom szybko opanować funkcjonalność aplikacji. Zaktualizowana wersja programu stanie się niezawodnym narzędziem dla deweloperów, umożliwiając im tworzenie wyższej jakości i bardziej produktywnych aplikacji.

Nowy program i wynik jego wykonania Ramka: CS50 / YouTube

W tym tekście omówimy program i jego strukturę, podkreślając kluczowe punkty. Dołączona jest biblioteka cs50.h, niezbędna do korzystania z niektórych funkcji języka C. Chociaż niektóre funkcje są dostępne domyślnie, większość wymaga dołączenia odpowiednich bibliotek. Funkcja get_string, opracowana specjalnie na potrzeby kursu CS50, umożliwia odbieranie danych wejściowych od użytkownika w terminalu. Bez tej funkcji kod byłby znacznie bardziej złożony i zagmatwany. Aby użyć get_string, należy dołączyć bibliotekę cs50.h, która zawiera tę funkcję. Upraszcza to interakcję z użytkownikiem i czyni kod bardziej czytelnym.

Biblioteka to zestaw przydatnych fragmentów kodu, wstępnie napisanych przez programistów, które można wywoływać jako funkcje za pomocą krótkich nazw, takich jak get_string. Standardowa biblioteka stdio.h jest integralną częścią języka programowania i udostępnia podstawowe funkcje do pracy z danymi wejściowymi i wyjściowymi. Ważne jest, aby zrozumieć, że nawet najprostsze funkcje języka programowania opierają się na kodzie napisanym przez innych programistów. Korzystanie z bibliotek może przyspieszyć proces tworzenia i poprawić jakość kodu, ponieważ zawierają one sprawdzone rozwiązania typowych problemów.

Nasz program korzysta z dwóch bibliotek. Biblioteki te zapewniają funkcjonalność niezbędną do efektywnego działania aplikacji. Każda z nich odgrywa istotną rolę w realizacji różnych zadań, od przetwarzania danych po interakcję z użytkownikiem. Korzystanie z tych bibliotek może znacznie uprościć tworzenie i zwiększyć produktywność. Zalecamy zapoznanie się z dokumentacją każdej biblioteki, aby dokładnie zrozumieć jej możliwości i sposób wykorzystania w projekcie.

  • stdio.h to biblioteka, która zapewnia dostęp do printf i innych funkcji związanych z wejściem i wyjściem.
  • cs50.h to biblioteka, która zapewnia dostęp do funkcji nieznajdujących się w standardowej bibliotece C i zawiera get_string.

Biblioteka CS50 zawiera wiele funkcji, które upraszczają tworzenie oprogramowania i promują naukę programowania. Do najważniejszych funkcji biblioteki należą zarządzanie wejściem i wyjściem, obsługa tablic, ciągów znaków, operacje matematyczne i obsługa danych użytkownika. Zapewnia wygodne narzędzia do implementacji algorytmów i struktur danych, co czyni proces uczenia się bardziej przystępnym i efektywnym. Korzystanie z biblioteki CS50 pozwala studentom skupić się na rozwiązywaniu problemów, a nie na szczegółach programowania niskiego poziomu, co sprzyja lepszemu zrozumieniu podstaw i zasad tworzenia oprogramowania.

  • get_char()
  • get_double()
  • get_float()
  • get_int()
  • get_long()
  • get_string()

Funkcje wejściowe umożliwiają pobieranie różnych typów informacji z wiersza poleceń. Jeśli musisz wprowadzić ciąg, użyj funkcji get_string(). Wyświetli ona użytkownikowi tekst w terminalu i zapisze go w określonej zmiennej. Należy pamiętać, że nawet wartości numeryczne będą interpretowane jako ciągi tekstowe.

Znak %s w języku programowania C służy do formatowania ciągów. W przeciwieństwie do Scratcha, gdzie ciągi znaków są po prostu łączone poprzez ich zapisanie, w C należy użyć specjalnej składni. Aby wstawić wartość zmiennej do ciągu znaków, umieszczamy specjalną sekwencję znaków %s w tekście w podwójnych cudzysłowach. Informuje to kompilator o konieczności podstawienia wartości zmiennej, której nazwa następuje po ciągu znaków w nawiasach. W tym przypadku jest to zmienna odpowiedzi, której wartość zostanie podstawiona za %s. Takie podejście pozwala na elastyczną kontrolę nad danymi wyjściowymi i tworzeniem dynamicznych komunikatów.

Oprócz %s istnieją inne specjalne sekwencje znaków. Znaki te odgrywają ważną rolę w formatowaniu tekstu i manipulowaniu danymi. Umożliwiają one poprawne wyświetlanie informacji i zapewniają wygodny sposób prezentacji danych. Ważne jest, aby wiedzieć, jak poprawnie używać tych sekwencji, aby osiągnąć najlepsze wyniki w programowaniu i tworzeniu stron internetowych.

  • %s — ciąg znaków;
  • %i — liczba całkowita;
  • %f — float i double;
  • %li — liczba całkowita długa;
  • %c — znak.

Składnia, na którą należy zwrócić uwagę, jest następująca: umieszczamy ciąg znaków w cudzysłowie, w którym używamy %s. Po ciągu znaków określamy nazwę zmiennej, której wartość zostanie podstawiona za %s. Takie podejście pozwala na efektywne formatowanie ciągów znaków i dynamiczne wstawianie danych do tekstu.

Funkcja printf przyjmuje dwa argumenty. Pierwszy argument to ciąg znaków ujęty w cudzysłów, który określa format wyjściowy. Przecinek następujący po ciągu znaków oddziela go od drugiego argumentu, który jest zmienną odpowiedzi. Należy pamiętać, że przecinek w cudzysłowie jest częścią ciągu znaków i nie wpływa na liczbę argumentów przekazywanych do funkcji. Zrozumienie struktury argumentów funkcji printf jest niezbędne do poprawnego generowania i wyprowadzania danych w języku programowania C.

Podświetlanie składni to ważna funkcja, która znacznie ułatwia programowanie. W edytorze VS Code różne elementy kodu są podświetlane określonymi kolorami, co pozwala programistom na szybszą nawigację po tekście. Na przykład zmienna string_answer jest wyświetlana na czarno, funkcja get_string na brązowo-żółto, a %s na niebiesko. To rozróżnienie kolorów ułatwia programistom identyfikację różnych elementów kodu. Kolor czarny oznacza zmienne, brązowo-żółty oznacza funkcje, a niebieski znaki specjalne. Podświetlanie składni jest obecne we wszystkich nowoczesnych edytorach kodu i zintegrowanych środowiskach programistycznych (IDE), co czyni je niezbędnym narzędziem dla programistów.

Zwróć uwagę na wcięcia w wierszach 6 i 7. Skonfigurowałem edytor VS Code tak, aby po naciśnięciu klawisza Tab używał czterech spacji, co jest powszechną praktyką. Prawidłowe wcięcia pomagają wizualnie podkreślić hierarchię i zagnieżdżenie elementów kodu. Elementy znajdujące się na tym samym poziomie są wcięte w równym stopniu, na przykład nawiasy klamrowe otwierające i zamykające. Jeśli jeden element jest zagnieżdżony w innym, jest wcięty zgodnie z wcięciem elementu nadrzędnego. Na przykład deklaracja zmiennej string_answer znajduje się wewnątrz funkcji main. Prawidłowe stosowanie wcięć nie tylko poprawia czytelność kodu, ale także pomaga w jego utrzymaniu.

Operatory, inkrementacje, dekrementacje i deklaracje zmiennych

Język C oferuje wiele operatorów do wykonywania obliczeń matematycznych. Operatory te umożliwiają wykonywanie różnych operacji arytmetycznych na każdym etapie wykonywania programu. Poniżej wymieniono główne operatory używane do obliczeń matematycznych w języku C.

  • + — plus;
  • — — minus;
  • * — mnożenie;
  • / — dzielenie;
  • % — daje resztę z dzielenia jednej liczby przez drugą.

Język programowania C zawiera zmienne, które zostały już wcześniej omówione. Ponadto C może zawierać lukier składniowy — konstrukcje, które upraszczają pisanie złożonych wyrażeń i czynią kod bardziej czytelnym. Lukier składniowy pozwala programistom efektywnie wyrażać swoje pomysły, ułatwiając zrozumienie i utrzymanie kodu.

Podczas tworzenia zmiennych należy je zadeklarować, określając typ danych i kończąc wiersz średnikiem. Rozważmy przykład utworzenia zmiennej o nazwie licznik, która będzie pełnić funkcję prostego licznika. To podobny element, którego używaliśmy w Scratchu, choć w programowaniu jest on prezentowany w bardziej złożonej formie.

  • int — wskaźnik do typu zmiennej;
  • counter — nazwa zmiennej;
  • = — operator przypisania dla dowolnej wartości (nie jest to „równy”, ale operator przypisania; nie mówi on po prostu, że niektóre wartości są równe, ale w rzeczywistości przypisuje wartość z prawej strony wyrażenia do lewej strony);
  • 0 — wartość, którą przypisujemy do zmiennej;
  • ; — zakończenie dla niemal każdej jednostki semantycznej w C.

Scratch ma wygodny blok wizualny, który pozwala utworzyć licznik, którego wartość jest aktualizowana po wykonaniu określonej akcji, zwiększając się o jeden. W języku programowania C do zwiększenia wartości licznika można użyć następującego kodu:

Zauważ, że znak równości w tym kontekście nie jest znakiem równości, ale operatorem przypisania. Gdyby rzeczywiście oznaczał równość, samo wyrażenie byłoby bezsensowne. Operacja zwiększania licznika o jeden, znana również jako inkrementacja, jest jedną z najczęstszych operacji w programowaniu. W tym przykładzie pokażemy, jak działa lukrowanie składniowe. Zwróć uwagę na szczegóły.

Oznacza to, że wartość zmiennej licznika jest zwiększana o jeden. Istnieje prostszy sposób na osiągnięcie tego samego rezultatu.

Operacje podobne do inkrementacji można wykonywać za pomocą operatora dekrementacji — . Operacja ta, zwana dekrementacją, pozwala zmniejszyć wartość zmiennej o jeden.

Zmieniając wartość istniejącej zmiennej w programowaniu, nie ma potrzeby ponownego określania jej typu. Oznacza to, że po zadeklarowaniu zmiennej z określonym typem danych, dalsze zmiany jej wartości mogą następować bez określania typu. Takie podejście upraszcza pracę ze zmiennymi i sprawia, że ​​kod jest bardziej zwarty i czytelny. Jest to szczególnie wygodne w językach dynamicznie typowanych, gdzie typ zmiennej może się zmieniać w zależności od przypisanej wartości.

Dlaczego potrzebujemy funkcji main?

Wiersz int main(void) jest punktem początkowym programu w C. Oznacza on funkcję main, która jest wymagana dla każdego programu napisanego w tym języku. Ważne jest, aby zrozumieć, że jest to wiersz, od którego rozpoczyna się proces wykonywania kodu. Funkcja main może przyjmować argumenty, ale w tym przypadku użyto void, co oznacza brak parametrów.

Funkcja main zwraca wartość całkowitą, która wskazuje na powodzenie lub niepowodzenie programu. Wartość 0 zazwyczaj oznacza powodzenie, podczas gdy każda inna wartość może wskazywać na błędy. Zatem wiersz int main(void) nie tylko oznacza punkt początkowy programu, ale także definiuje strukturę niezbędną do poprawnego ukończenia wykonywania kodu. Zrozumienie tego wiersza jest ważne dla tworzenia i debugowania programów w C.

Standardowy program w C rozpoczyna się deklaracją funkcji int main(void). Ten wiersz informuje kompilator o obecności funkcji głównej o nazwie main, która zwraca liczbę całkowitą typu int. Słowo kluczowe void wskazuje, że funkcja nie ma argumentów, co tłumaczy się jako „pustka”. Funkcja główna jest punktem wejścia do wykonania programu i odgrywa ważną rolę w jego strukturze. Właściwe zrozumienie tego elementu jest fundamentalne dla tworzenia programów w C.

Nawiasy klamrowe, które oznaczają początek i koniec ciała funkcji, odgrywają ważną rolę w strukturze kodu. Są używane nie tylko w funkcjach, ale także w innych elementach składowych programu. Nawiasy te zawsze wskazują początek i koniec konkretnego elementu w kodzie, co czyni je kluczowymi dla prawidłowej organizacji i odczytu programów. Prawidłowe użycie nawiasów klamrowych pomaga lepiej zrozumieć logikę programu i upraszcza proces debugowania.

Gdy program dotrze do końca funkcji main, wskazanej zamykającym nawiasem klamrowym, automatycznie zwraca 0. Dzieje się tak, ponieważ typ naszej funkcji to int, co oznacza wynik całkowity. Wartość zwracana jest kluczowa, ponieważ system operacyjny używa jej do określenia statusu zakończenia programu. Wartość 0 sygnalizuje pomyślne zakończenie programu.

Pliki nagłówkowe

Przyjrzyjmy się bliżej plikom nagłówkowym. Nie zwracałem na nie większej uwagi, kiedy uczyłem się Scratcha, ponieważ po prostu używaliśmy zielonej flagi do uruchomienia programu i wypisywaliśmy tekst „hello, world”. To podejście było proste i oczywiste, ale pliki nagłówkowe odgrywają ważną rolę w programowaniu. Zawierają deklaracje funkcji i zmiennych, co pozwala na bardziej efektywną i wygodną organizację kodu. Zrozumienie ich celu i struktury pomoże Ci tworzyć bardziej złożone i funkcjonalne programy.

W języku C nie można po prostu zadeklarować funkcji main() z zagnieżdżoną funkcją printf(). Wymagane jest wstępne polecenie #include, które nakazuje kompilatorowi załadowanie biblioteki kodu opracowanej wcześniej. Pozwala to kompilatorowi zrozumieć, czym jest printf() i jak z nią pracować. Korzystanie ze standardowej biblioteki wejścia/wyjścia jest ważną częścią programowania w C.

Aby pracować z funkcjami takimi jak get_string() i get_int(), należy załadować bibliotekę CS50. Bez tego wiersza kompilator nie będzie w stanie rozpoznać, czym jest get_string(). Pliki z rozszerzeniem .h, takie jak stdio.h i cs50.h, w językach programowania C i C++ nazywane są plikami nagłówkowymi. Należy pamiętać, że pliki te zawierają deklaracje funkcji, co pozwala kompilatorowi na ich prawidłową interpretację i użycie. Można je sobie wyobrazić jako menu restauracji, w którym zamiast dań wymienione są wszystkie dostępne funkcje. To „menu” upraszcza proces programowania, zapewniając dostęp do niezbędnych narzędzi i metod.

Biblioteka udostępnia wszystkie funkcje, które omówiliśmy wcześniej, a plik nagłówkowy służy jako specjalny mechanizm do włączania niezbędnych funkcji do kodu. Na przykład biblioteka może nazywać się CS50 lub Standard I/O, a odpowiadające jej pliki nagłówkowe będą miały nazwy stdio.h i cs50.h. Prawidłowe użycie plików nagłówkowych pozwala zoptymalizować kod i poprawić jego czytelność, zapewniając dostęp do niezbędnych funkcji bez zbędnej redundancji.

Polecenia Linuksa

Otwórzmy teraz kartę Eksplorator w IDE i przyjrzyjmy się strukturze naszego projektu oprogramowania. Zrzut ekranu pokazuje, że projekt zawiera dwa pliki: hello i hello.c. Pliki te stanowią główne komponenty, których użyjemy do opracowania i skompilowania naszego programu.

Wiersz poleceń w VS Code Zrzut ekranu: CS50 / YouTube

Wyobraź sobie, że musisz zorganizować kod na zajęcia dla studentów w różnych grupach lub z różnymi programami w języku C. W interfejsie graficznym możemy łatwo wykonać to zadanie, korzystając ze znanych ikon z systemów operacyjnych macOS, Windows lub Linux. Za pomocą tych ikon możesz utworzyć nowy katalog i nadać mu dowolną nazwę. Umożliwi Ci to efektywniejsze zarządzanie projektami i ułatwi dostęp do materiałów szkoleniowych.

Ten artykuł zawiera szczegółowy przewodnik po wierszu poleceń systemu Linux. Omawiamy podstawowe polecenia i ich zastosowania, które pomogą Ci efektywnie pracować w środowisku Linux. Dowiedz się więcej o funkcjonalności terminala, zarządzaniu plikami i katalogami oraz ustawieniach systemowych. Nasz przewodnik jest przeznaczony zarówno dla początkujących, jak i doświadczonych profesjonalistów, którzy chcą pogłębić swoją wiedzę. Uzyskaj przydatne wskazówki i porady dotyczące optymalizacji pracy z wierszem poleceń systemu Linux.

Praca z systemem plików może być wydajna za pomocą wiersza poleceń. Na przykład, wpisując polecenie ls w interfejsie poleceń, możesz wyświetlić zawartość projektu. Na tej liście nazwy z ukośnikiem (/) na końcu oznaczają foldery, a nie zwykłe pliki. Aby utworzyć nowy katalog, użyj polecenia mkdir, co oznacza Make DIRectory (Utwórz katalog). Dzięki temu możesz szybko uporządkować pliki i uprościć nawigację po projekcie.

Korzystanie z wiersza poleceń w programie VS Code Zrzut ekranu: CS50 / YouTube

Polecenie clean w trybie poleceń służy do usuwania historii poleceń wprowadzonych w wierszu poleceń. Ta akcja pomaga wyczyścić listę poprzednich poleceń, pozwalając skupić się tylko na ostatnio wprowadzonych zapytaniach. Chociaż rzadko używam tego polecenia w praktyce, używam clean w ramach procesu nauczania, aby zapewnić bardziej usprawnione środowisko i zminimalizować ilość zbędnych informacji.

Polecenie mkdir służy do tworzenia nowego katalogu w systemie plików. Po wprowadzeniu tego polecenia należy podać nazwę nowego katalogu. Na przykład polecenie mkdir pset1 utworzy katalog przeznaczony do przechowywania kodu z pierwszego tygodnia, a polecenie mkdir pset2 utworzy podobny katalog dla kodu z drugiego tygodnia. Użycie mkdir pomaga uporządkować pliki i projekty, ułatwiając zarządzanie nimi i dostęp do nich.

Teraz przejdę do jednego z nowo utworzonych katalogów. Aby to zrobić, wprowadzę polecenie cd pset1 w wierszu poleceń. Polecenie cd oznacza Change Directory, co tłumaczy się jako „zmień katalog”. Po wpisaniu tego polecenia i naciśnięciu Entera dzieją się dwie ważne rzeczy: wiersz poleceń zmienia nazwę katalogu, do którego właśnie przeszedłem, co pomaga mi zapamiętać moją aktualną lokalizację w systemie plików. Jest to wygodna metoda nawigacji, która sprawia, że ​​praca z wierszem poleceń jest bardziej wydajna i uporządkowana.

Po zakończeniu tej operacji możesz użyć polecenia ls, aby wyświetlić zawartość katalogu. Wpisanie tego polecenia spowoduje wyświetlenie listy plików w bieżącym katalogu. W tym przypadku, ponieważ folder jest nadal pusty, rezultatem nie będzie żadnych plików.

Utwórzmy nowy plik w folderze za pomocą kodu polecenia my_first_program.c. Ten plik pojawi się w nowej karcie edytora. Aby przejść o jeden poziom wyżej w systemie plików, użyj polecenia cd .., które przeniesie Cię do katalogu nadrzędnego. Jeśli chcesz przejść o dwa poziomy wyżej, wpisz cd ../.. Symbol ./ reprezentuje bieżący katalog. Wiersz poleceń ma funkcjonalność podobną do graficznego interfejsu użytkownika, ale jest bardziej rozbudowany. Należy pamiętać, że polecenia te są specyficzne dla terminala i nie są częścią języka C. Korzystanie z wiersza poleceń może znacznie uprościć pracę z plikami i katalogami, przyspieszając proces tworzenia.

Zawód programisty C++ od podstaw

Programiści C++ tworzą złożone programy i usługi. Tworzą aplikacje sieciowe o dużym obciążeniu, gry, silniki graficzne oraz komponenty dla systemów operacyjnych i sprzętu. W tym języku napisane są gry Windows, Linux, macOS, Android, Chrome, Counter-Strike, StarCraft i Diablo. Opanujesz ten legendarny język programowania od podstaw: napiszesz wyszukiwarkę i zdobędziesz umiejętności pracy zespołowej.

Dowiedz się więcej