Upload
dohuong
View
216
Download
0
Embed Size (px)
Citation preview
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 1 z 78
Powrót
Full Screen
Zamknij
Koniec
Podstawy Programowania
Łukasz Kusznerhttp://www.kaims.pl/∼kuszner/
Wykład,
2012/13
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 2 z 78
Powrót
Full Screen
Zamknij
Koniec
1. Zasady
Cel
Poznać podstawy języka C, zbudować dobre podstawy do dalszejnauki programowania.
Zaliczenie
• Zaliczenie zajęć praktycznych
• Wykład kończy się egzaminem pisemnym
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 3 z 78
Powrót
Full Screen
Zamknij
Koniec
2. Literatura
Książki
• Język ANSI C, Brian W. Kernighan, Dennis M. Ritchie,WNT.
• Język C. Wskaźniki. Vademecum profesjonalisty, Kenneth A.Reek (Pointers on C), Helion.
• Inne książki traktujące o języku C lub rozdziały dotyczą-ce programowania proceduaralnego z książek traktujących oprograwmowaniu w C++.
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 4 z 78
Powrót
Full Screen
Zamknij
Koniec
Inne
• System pomocy Visual Studio
• Pomoc na stronach firmy Micrososft
• strony pomocy HowTo, man i info z dystrybucji Linux’a
• http://ideone.com/kusziamw/opr11 - programy przykłado-we
• http://spoj.pl - ogólnodostępny zbiór zadań i sędzia online
• https://pl.spoj.pl/ - ogólnodostępny zbiór łatwych zadań nadobry początek w języku polskim
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 5 z 78
Powrót
Full Screen
Zamknij
Koniec
Narzędzia
• Visual Studio
• Sphere Online Judge (spoj.pl)
• Ewentulanie inne środowiska zintegrowane (ang. IDE - Inte-grated development environment): Code::Blocks, . . . )
• Kompilatory usostępnione na licencji GNU (GCC, DJGPP,. . . ), edytory kodu (emacs, vim, notepad++, . . . ), debugger(gdb, . . . ).
• Kompilator online (ideone.com).
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 6 z 78
Powrót
Full Screen
Zamknij
Koniec
3. Dlaczego C?
Historia języka C
Język C jest strukturalnym językiem imperatywnym rozwijanympoczątkowo głównie w ramach systemu UNIX.Poprzednikiem C był interpretowany język B, który Ritchie roz-winął w język C. Pierwszy okres rozwoju języka to lata 1969-1973.W roku 1973 w języku C udało się zaimplementować jądro (ker-nel) systemu operacyjnego Unix. W 1978 roku Brian Kernighani Dennis Ritchie opublikowali dokumentację języka p.t. C Pro-gramming Language (wydanie polskie: Język ANSI C).C stał się popularny poza Laboratoriami Bella (gdzie powstał)po 1980 roku, i stał się dominującym językiem do programowaniasystemów operacyjnych i aplikacji. Na bazie języka C w latachosiemdziesiątych Bjarne Stroustrup stworzył język C++, którywprowadza możliwość programowania obiektowego.
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 7 z 78
Powrót
Full Screen
Zamknij
Koniec
Standardy C
Pierwsze wersje systemu UNIX były rozpowszechniane w szko-łach wyższych wraz z pełnym kodem źródłowym napisanym wjęzyku C.Potrzeba stworzenia standardu języka wynikała z jego popular-ności - coraz więcej osób z niego korzystało (głównie na uniwer-sytetach).Amerykański standard języka - ANSI C (1983-1988) - stanowiłznaczne rozszerzenie w stosunku do wersji Kernighan’a i Rit-chie’go. Kolejna wersja standardu języka: ISO 9899:1990 była mo-dyfikacją standardu ANSI. Język zgodny z tą wersją standarduokreślany jest nieformalnie jako C89. Od tego czasu powstało wie-le uaktualnień tej normy na przykład powszechnie obowiązującaC99.
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 8 z 78
Powrót
Full Screen
Zamknij
Koniec
Zastosowania
• Programowanie niskopoziomowe: sterowniki
• Implementacja fragmentów systemu o zwiększonych wyma-ganiach efektywnościowych
Dlaczego jeszcze warto nauczyć się C?
• Popularne języki wysokiego poziomu mają składnię opartąna C (C++, Java, C#).
• Elementy składniowe języka występują w zasadzie we wszyst-kich językach imperatywnych.
• Od czegoś trzeba zacząć.
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 9 z 78
Powrót
Full Screen
Zamknij
Koniec
4. Tworzenie oprogramowaniaTworzenie oprogramowania zaczyna się od powstania potrzebyjego istnienia. W naszym wypadku tą potrzebą jest proces kształ-cenia w którym bierzemy udział. Kolejne fazy, jakie można wy-odrębnić to:
• analiza problemu i tworzenie zarysu projektu,
• projektowanie, tworzenie specyfikacji technicznej,
• pisanie kodu,
• testowanie i debugowanie.
• wdrożenie i utrzymanie
Na zajęciach będą nas interesować głównie elementy związane zkodowaniem, testowaniem i debugowaniem.
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 10 z 78
Powrót
Full Screen
Zamknij
Koniec
Pisanie kodu i kompilacja
Przykład 1.
#include<s t d i o . h>int main ( ){
p r i n t f ( ” He l l o world !\n” ) ;return 0 ;
}Mówiąc w dużym skrócie powyższy program musi zostać przetłu-maczony z kodu źródłowego na język maszyny. Program, który dotego służy nazywamy kompilatorem, a sam proces tłumaczeniakompilacją.
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 11 z 78
Powrót
Full Screen
Zamknij
Koniec
Elementy kodu programu
Program w języku C musi zawierać funkcję main. Funkcja main,podobnie jak każda inna funkcja w C ma następującą postać:<typ zwracany> <nazwa>(<parametry>){<kod funkcji>}
Nasz program zawiera tylko i wyłącznie funkcję main, któranie ma żadnych parametrów i składa się z dwóch instrukcji:printf("Hello world!\n");, ta wypisuje tekst zawarty w cu-dzysłowie, oraz return 0;, ta nakazuje zakończenie działaniafunkcji, a w wypadku funkcji main również i programu oraz prze-kazanie wartości 0.Typem zwracanym przez main jest int – typ całkowitoliczbowy.Wartość 0 zostaje przekazana do systemu i oznacza poprawnewykonanie programu.
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 12 z 78
Powrót
Full Screen
Zamknij
Koniec
Pliki nagłówkowe
W plikach nagłówkowych (zwyczajowo mają one rozszerzenie .h)znajdują się deklaracje funkcji bibliotecznych. Przykładowofunkcja biblioteczna printf znajduje się w domyślnie włączanymnagłówku stdio.h. Do włączenia nagłówka używamy dyrektywy#include:
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 13 z 78
Powrót
Full Screen
Zamknij
Koniec
Struktura programu
• Kod programu może zostać umieszczony w jednym bądź wie-lu plikach.
• Program składa się z dyrektyw preprocesora, definicji typów,funkcji oraz zmiennych.
• Funkcje zbudowane są z instrukcji, z których każda zakoń-czonych średnikiem.
• Instrukcje składają się ze słów kluczowych, operatorów, nazwzmiennych oraz znaków grupujących i separujących (nawiasy,przecinki, średniki).
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 14 z 78
Powrót
Full Screen
Zamknij
Koniec
Uruchomienie programu
• Program zaczyna działanie od wykonania funkcji main. Po-zostałe funkcje mogą być napisane przez programistę lub po-chodzić z bibliotek.
• Przed uruchomieniem program należy skompilować i scalić(linkowanie, konsolidacja) z funkcjami bibliotecznymi.
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 15 z 78
Powrót
Full Screen
Zamknij
Koniec
5. Edycja kodu źródłowegoPożądane cechy edytora kodu programu:
• Podświetlanie składni
• Wielokrotne cofnij/powtórz
• Zaznaczanie blokowe
• Parowanie nawiasów
• Autowcięcia
• Autouzupełnianie
• Ukrywanie części kodu
• Ukrywanie części tekstu
• Integracja z kompilatorem
• Możliwość sprawdzania pisowni (np. w komentarzach)
• Łatwość obsługi
• Niska cena
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 16 z 78
Powrót
Full Screen
Zamknij
Koniec
6. KompilacjaKompilacja to proces automatycznego tłumaczenia kodu napisa-nego w jednym języku programowania na inny (kod maszyno-wy lub kod pośredni). Dane wejściowe najczęściej nazywa się ko-dem źródłowym. Program wykonujący tłumaczenie to kompila-tor. Przeważnie kompilacja jest częścią większego procesu tłuma-czenia, a tworzony w jej trakcie kod wynikowy jest przekazywanydo linkera (konsolidatora).
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 17 z 78
Powrót
Full Screen
Zamknij
Koniec
Proces przetwarzania kodu źródłowego
• preprocessing - przetworzenie wstępne, na przykład włącze-nie plików nagłówkowych
• kompilacja
• konsolidacja - łączenie skompilowanych modułów i utworze-niu pliku wykonywalnego.
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 18 z 78
Powrót
Full Screen
Zamknij
Koniec
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 19 z 78
Powrót
Full Screen
Zamknij
Koniec
Etapy kompilacji
• Faza wstępna - odczyt i analiza kodu na podstawie regułjęzyka, tworzenie reprezentacji pośredniej kodu źródłowegow postać grafu lub drzewa zależności.
• Analiza leksykalna - rozdzielenie kodu na elementarne jed-nostki języka programowania zwane tokenami.
• Analiza składniowa - dopasowanie tokenów do gramatykijęzyka (sprawdzenie, czy kod źródłowy był poprawny skła-dniowo)
• Analiza semantyczna - określenie znaczenia poszczególnychtokenów. Przykładem może być sprawdzanie, czy nie wystę-puje niezgodność typów.
• Optymalizacja - reprezentacja pośrednia jest upraszczanatak, aby program otrzymany na jej podstawie charaktery-zował się pewnymi cechami (np. większą wydajnością lubmniejszą objętością).
• Generacja kodu na podstawie reprezentacji pośredniej gene-rowany jest kod wynikowy.
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 20 z 78
Powrót
Full Screen
Zamknij
Koniec
Dyrektywy preprocesora
• #include ... - dyrektywa włączająca tekst innego pliku źró-dłowego w miejscu jej wystąpienia w pliku podlegającymaktualnie przetwarzaniu, przy czym możliwe jest zagłębionewystępowanie dyrektywy include
• #define i #undef definiowanie symboli dla warunkowejkompilacji
• #if, #elif, #else, and #endif - warunkowe włączanie iwyłączanie fragmentów kodu źródłowego
• inne: #pragma, #error, #warning, . . .
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 21 z 78
Powrót
Full Screen
Zamknij
Koniec
Dyrektywy preprocesora - przykład
Zabezpieczenia plików nagłówkowych przed wielokrotnym dołą-czaniem do tego samego projektu.Jeżeli treść pliku nagłówkowego nazwa.h zawiera instrukcje:
#ifndef NAZWA H#define NAZWA H
// . . . t reść właściwa . . .
#endif
to przy kolejnej próbie włączenia pliku cała treść właściwa zosta-nie pominięta.
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 22 z 78
Powrót
Full Screen
Zamknij
Koniec
Błędy kompilacji
Bezproblemowy przebieg kompilacji programu jest rzadkim zja-wiskiem nawet u doświadczonych programistów.
Przykład 2.
int main ( ){
p r i n t f ( ” He l l o world !\n” ) //Brak średnikareturn 0 ;
}Powyższy przykład jest błędny. Próba kompilacji takiego progra-mu zakończy się niepowodzeniem. Przykładowe komunikaty wy-świetlone przez kompilator mogą mieć następującą postać:
Przykład 3.hello.c: In function ‘main’:hello.c:4: error: syntax error before "return"
Kompilator uznał, że błąd znajduje się w linii 4 przed słowemreturn, mimo że średnik zwyczajowo piszemy bezpośrednio poinstrukcji. Mimo to sytuacja jest wielce komfortowa; otrzymali-śmy precyzyjny komunikat o błędzie, który łatwo poprawić.
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 23 z 78
Powrót
Full Screen
Zamknij
Koniec
7. DebugowanieDebugowanie (ang. debugging = odpluskwianie) - proces śledze-nia działania systemu mikroprocesorowego lub programu kom-puterowego za pomocą specjalnego programu - debugera w celuwychwycenia i naprawy błędów w działaniu uruchamianego urzą-dzenia lub oprogramowania. Istotą uruchamiania przy pomocydebugera jest możliwość wykonywania programu w trybie pra-cy krokowej lub z zastawianiem tzw. pułapek (ang. breakpoints),czyli miejsc w programie, po osiągnięciu których dalsze wykony-wanie programu jest zatrzymywane, a także podglądania i ew.zmiany zawartości rejestrów, pamięci itd.
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 24 z 78
Powrót
Full Screen
Zamknij
Koniec
8. Ważne pojęcia:• kod źródłowy,
• kompilacja,
• pliki nagłówkowe,
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 25 z 78
Powrót
Full Screen
Zamknij
Koniec
Zadanie 1. Scharakteryzuj przydatność do tworzenia opro-gramowanie następujących edytorów tekstu: Notatnik, MicrosoftWord, innego wybranego edytora.
Zadanie 2. Napisz, skompiluj i wykonaj swój pierwszy programw C.
Zadanie 3. Poznaj i wypróbuj podstawowe opcje kompilatora.
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 26 z 78
Powrót
Full Screen
Zamknij
Koniec
9. Typy i zmienneJak wiemy, komputer operuje na danych binarnych, można my-śleć, że dane w pamięci komputera to ciągi liczb złożone z 0 i 1.Sposób interpretacji przechowywanych danych zależy od ich typu.Wspomniano już o typie całkowitoliczbowym int. Typ char od-nosi się do danych znakowych. Popatrzmy na poniższy przykład:
Przykład 4.
#include<s t d i o . h>int main ( ){
int a=75;char z ;p r i n t f ( ”a = %d\n” , a ) ;z=a ;p r i n t f ( ”z = %c\n” , z ) ;p r i n t f ( ”z = %d\n” , z ) ;return 0 ;
}
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 27 z 78
Powrót
Full Screen
Zamknij
Koniec
Komentarz
Najpierw została zadeklarowana zmienna a typu liczbowego intz wartością początkową 75. Liczba ta została wypisana instrukcjąprintf. Następnie wartość ta została podstawiona do zmiennejtypu znakowego z i również wartość tej zmiennej została wypi-sana. Tym razem na ekranie zobaczymy jednak literę K, którejkodem ASCII jest 75. Kolejne wypisanie każe traktować zmien-ną znakową z jako liczbę (specyfikator %d) i znowu na ekraniezobaczymy liczbę 75. Później zobaczymy, że z punktu widzeniakompilatora nie ma różnicy między znakami, a kodami ASCIIznaków.
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 28 z 78
Powrót
Full Screen
Zamknij
Koniec
Interpretacja i rozmiar
Kolejną różnicą między typami danych jest ich rozmiar. Typ charma jeden bajt, czyli 8 bitów, a typ int ma co najmniej 2 bajty(16 bitów) – to gwarantuje standard, faktycznie w systemie Linuxtyp ten ma 4 bajty (32 bity). W każdym razie jest to typ szerszyniż char, co pokazuje poniższy przykład.
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 29 z 78
Powrót
Full Screen
Zamknij
Koniec
Przykład 5.
#include<s t d i o . h>int main ( ){
int a=322;char z ;
p r i n t f ( ”a = %d\n” , a ) ;z=a ;p r i n t f ( ”z = %c\n” , z ) ;p r i n t f ( ”z = %d\n” , z ) ;return 0 ;
}Po podstawieniu z=a zmienna z ma wartość B – litery o kodzie66 (reszta z dzielenie 322 przez 256).
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 30 z 78
Powrót
Full Screen
Zamknij
Koniec
Typy zmiennoprzecinkowe i zaokrąglenia
W języku C możliwe jest również operowanie na liczbach niecał-kowitych. Umożliwiają to typy float i double. Nazywa się jezmiennoprzecinkowymi ze względu na specjalny format zapisu.
Przykład 6.
#include<s t d i o . h>int main ( ){
float x =1.5 ;p r i n t f ( ”x=%f\n” , x ) ;return 0 ;
}
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 31 z 78
Powrót
Full Screen
Zamknij
Koniec
Operatory
Dotychczas poznaliśmy jeden operator =. Jest to dwuargumen-towy operator przypisania. Wyrażenie a=b oznacza, że lewemuoperandowi a przypisuje się wartość b. Inne operatory to np.:
• + – dodawanie,
• - – odejmowanie,
• * – mnożenie,
• > – porównanie: lewy większy od prawego,
• < – porównanie: lewy mniejszy od prawego,
• == – porównanie: lewy równy prawemu.
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 32 z 78
Powrót
Full Screen
Zamknij
Koniec
Proste typy danych
W języku C występuje tylko kilka podstawowych typów danych:
• char jeden bajt, typ znakowy
• int typ całkowity, standard ANSI określa rozmiar na co naj-mniej dwa bajty
• float typ zmiennoprzecinkowy pojedynczej precyzji
• double typ zmiennoprzecinkowy podwójnej precyzji
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 33 z 78
Powrót
Full Screen
Zamknij
Koniec
Kwalifikatory typów
Kwalifikatory rozmiaru typów liczbowych
• short int (krótki int, nie dłuższy niż int)
• long int (długi int, przynajmniej 4 bajty)
• long double typ zmiennoprzecinkowy rozszerzonej precyzji
Przykład 7.
short int a ;long int b ;long double c ;
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 34 z 78
Powrót
Full Screen
Zamknij
Koniec
Kwalifikatory typów c.d.
Kwalifikatory:
• signed (liczby ze znakiem)
• unsigned (liczby bez znaku )
można stosować z typem char lub dowolnym typem całkowitym,
Przykład 8.
signed char a ; /∗ −128 <= a <= 127 ∗/unsigned int b ; /∗ 0 <=b <= 255 ∗/signed long int l i ;
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 35 z 78
Powrót
Full Screen
Zamknij
Koniec
10. Sterowanie• grupowanie instrukcji - nawiasy klamrowe { }• wybór wariantowy (if, switch)
• pętle (iteracje) - powtarzanie instrukcji, bądź grupy instrukcjize sprawdzeniem warunku zatrzymania (for, do, while).
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 36 z 78
Powrót
Full Screen
Zamknij
Koniec
Grupowanie instrukcji
Każda instrukcja musi być zakończona średnikiem, np:
x = 0 ;p r i n t f ( ” He l l o ” ) ;return 1 ;
Nawiasy klamrowe służą do grupowania instrukcji w instrukcjęzłożoną, czyli blok, np.:
{x = 0 ;p r i n t f ( ” He l l o ” ) ;return 1 ;
}
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 37 z 78
Powrót
Full Screen
Zamknij
Koniec
Instrukcja warunkowa
Instrukcje warunkowe stosujemy wszędzie tam, gdzie dalszy prze-bieg sterowania ma dwa warianty.
Przykład 9.
#include<s t d i o . h>int main ( ){
int a ;p r i n t f ( ”Podaj l i c z b ę : ” ) ;s can f ( ”%d”,&a ) ;i f ( a%2==0)
p r i n t f ( ” l i c z b a parzysta\n” ) ;else
p r i n t f ( ” l i c z b a n i e p a r z y s t a\n” ) ;return 0 ;
}
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 38 z 78
Powrót
Full Screen
Zamknij
Koniec
Instrukcja warunkowa (2)if (<CL>)
<IN1>else
<IN2>
Sprawdzana jest wartość wyrażenia <CL>, w przypadku gdy jestróżna od zera wykonywana jest instrukcja lub instrukcja złożona<IN1>, w przeciwnym wypadku wykonywane jest <IN2>.
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 39 z 78
Powrót
Full Screen
Zamknij
Koniec
Program Warunek Trójkąta
Problem: Napisać program sprawdzający czy z podanych trzechdługości można zbudować trójkąt.Wejście: liczby całkowite: a, b, cWyjście: odpowiedź TAK lub NIERozwiązanie:
• Wczytujemy 3 liczby ze standardowego wejścia.
• Należy sprawdzić warunki: a+b > c, a+c > b oraz b+c > a.
• Jeżeli wszystkie warunki są spełnione, drukujemy TAK, wprzeciwnym razie drukujemy na wyjście NIE.
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 40 z 78
Powrót
Full Screen
Zamknij
Koniec
Program Warunek Trójkąta (2)
#i n c l u d e <s t d i o . h>int main ( ) {
int a , b , c ;s can f ( ”%d%d%d” , &a , &b , &c ) ;
i f ( a + b > c )i f ( b + c > a )
i f ( a + c > b )p r i n t f ( ”TAK” ) ;
else p r i n t f ( ”NIE” ) ;else p r i n t f ( ”NIE” ) ;
else p r i n t f ( ”NIE” ) ;return 0 ;
}
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 41 z 78
Powrót
Full Screen
Zamknij
Koniec
Program Warunek Trójkąta(3)
us ing System ;pub l i c c l a s s Test {
pub l i c static void Main ( ) {int a , b , c ;s t r i n g s ;t ry {
s = Console . ReadLine ( ) ;a = int . Parse ( s ) ;s = Console . ReadLine ( ) ;b = int . Parse ( s ) ;s = Console . ReadLine ( ) ;c = int . Parse ( s ) ;i f ( a + b > c && b + c > a && a + c > b )
Console . WriteLine ( ”TAK” ) ;else Console . WriteLine ( ”NIE” ) ;
}catch ( Exception e ) {
Console . WriteLine ( ”Nie podano l i c z b y ” ) ;}
}}Zastąpienie kolejnych warunków jednym, spójnik logiczny && (lo-giczne i).
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 42 z 78
Powrót
Full Screen
Zamknij
Koniec
Częste błędy
Uwaga na niejednoznaczności:
#include<s t d i o . h>main (){
int a=3;i f ( a<2)
i f ( a>0) p r i n t f ( ”a=1” ) ;else p r i n t f ( ”a<=0” ) ;
}Do którego if odnosi się else? Zawsze używaj nawiasów klam-rowych, unikniesz wielu niepotrzebnych błędów.Kompilator oznajmia ten fakt programiście w następujący sposób(używając np. opcji -Wall):prb.c: In function ‘main’:prb.c:5: warning: suggest explicit braces
to avoid ambiguous ‘else’
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 43 z 78
Powrót
Full Screen
Zamknij
Koniec
Wybór wielowariantowy
W sytuacji, gdy wybieramy spośród wielu możliwych wariantówpomocna może się okazać konstrukcja switch.
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 44 z 78
Powrót
Full Screen
Zamknij
Koniec
Przykład 10.
#include<s t d i o . h>int main (){
char c ;p r i n t f ( ” podaj l i t e r ę : ” ) ;s can f ( ”%c” ,&c ) ;switch ( c ){case ’A ’ : case ’E ’ : case ’ I ’ :case ’O ’ : case ’U ’ : case ’Y ’ :
p r i n t f ( ”Wielka l i t e r a \n” ) ;case ’ a ’ : case ’ e ’ : case ’ i ’ :case ’ o ’ : case ’ u ’ : case ’ y ’ :
p r i n t f ( ”%c j e s t samogłoską\n” , c ) ; break ;default :
i f ( c<=’ z ’ && c>=’A ’ )p r i n t f ( ”%c j e s t spó łg ło ską\n” , c ) ;
else p r i n t f ( ” to n i e l i t e r a \n” ) ;i f ( c<=’Z ’ && c>=’A ’ )
p r i n t f ( ”Wielka l i t e r a \n” ) ;break ;
}return 0;}
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 45 z 78
Powrót
Full Screen
Zamknij
Koniec
Wybór wielowariantowy 2switch (<CL>) {
case <LAB1>: <IN1>case <LAB2>: <IN2>........default <IN3>
}
Wyrażenie <CL> użyte jako selektor wyboru musi przyjmowaćwartości całkowite, etykiety muszą być stałymi całkowitymi.Wykonanie instrukcji switch-case:Wyrażenie porównywane jest kolejno z etykietami, jeżeli jedna zetykiet ma wartość wyrażenia, to wykonywane są instrukcje poniej następujące.Instrukcje po etykiecie default są wykonywane, jeżeli żadna zetykiet nie ma wartości równej selektorowi wyboru. Aby uniknąćsprawdzania kolejnych przypadków, stosujemy instrukcję break.
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 46 z 78
Powrót
Full Screen
Zamknij
Koniec
Pętla whilewhile (<CL>)<IN>
Dopóki warunek po słowie while jest spełniony dopóty blok in-strukcji ograniczony {} będzie wykonywany.Trzeba zwrócić uwagę, by pętla miała prawidłowy warunek koń-ca i nie mogło zdarzyć się tak, iż będzie się ona wykonywać wnieskończoność. W ogólności problem stwierdzenia, czy programsię zatrzyma, czy też nie, jest trudny. Popatrzmy na poniższyprzykład.
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 47 z 78
Powrót
Full Screen
Zamknij
Koniec
Przykład 11.
#include <s t d i o . h>int main ( ) {
int a , i =0;p r i n t f ( ”Podaj l i c z b ę całkowitą : ” ) ;s can f ( ”%d”,&a ) ;p r i n t f ( ”\n” ) ;while ( a>1) {
i f ( a%2) a=3∗a+1;else a=a /2 ;i ++;p r i n t f ( ”a=%d\n” , a ) ;
}p r i n t f ( ”\n Liczba i t e r a c j i : %d\n” , i ) ;return 0 ;
}Możemy zapytać, czy ta pętla się zawsze kiedyś zatrzyma. Jest toznany problem Collatz’a. Dotychczas nie udało się go rozwiązać.Problem ten jest szczególnym przypadkiem problemu stopu, októrym wiadomo, że jest niealgorytmiczny (wiemy, że nie istniejealgorytm, który go rozwiązuje).
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 48 z 78
Powrót
Full Screen
Zamknij
Koniec
Wydruk dla a=7 :221134175226134020105168421liczba iteracji : 16
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 49 z 78
Powrót
Full Screen
Zamknij
Koniec
Pętla for
Pętla for jest szczególnym przypadkiem pętli while. Zapisujemyją w postaci:for(<IN1>;<IN2>;<IN3>) <IN4>
gdzie: <IN1> zwykle inicjuje licznik pętli, <IN2> jest warunkiemkońca, <IN3> steruje licznikiem w każdym kroku, <IN4> jest in-strukcją lub blokiem instrukcji wykonywanym cyklicznie. Zwrotten jest równoważny zapisowi:<IN1>;while (<IN2>){<IN4>;<IN3>; }
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 50 z 78
Powrót
Full Screen
Zamknij
Koniec
Pętla for (2)
Pętle for często stosujemy do powtarzania pewnych operacjiokreśloną liczbę razy, tak jak w przykładzie poniżej.
Przykład 12.
int main ( ){
int i ;for ( i =0; i <10; i++)
p r i n t f ( ” He l l o world ! %d times\n” , i ) ;return 0 ;
}
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 51 z 78
Powrót
Full Screen
Zamknij
Koniec
Pętla do whiledo<IN>while (<CL>);
Tu najpierw wykonuje się instrukcje, a następnie oblicza wyraże-nie <CL> i jeśli jest prawdziwe, to następuje powrót do początkupętli.
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 52 z 78
Powrót
Full Screen
Zamknij
Koniec
11. Jednostki leksykalneJednostki leksykalne (leksemy) są to niezależne, oddzielone sepa-ratorami (spacja, średnik, przecinek) fragmenty kodu źródłowe-go, np. int (typ zmiennej), scanf (identyfikator nazwa funkcjibibliotecznej), for, while (słowa kluczowe), "Ala" (literał).
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 53 z 78
Powrót
Full Screen
Zamknij
Koniec
Identyfikatory
• Identyfikatory są to nazwy zmiennych lub funkcji.
• Identyfikator jest sekwencją liter, cyfr i znaków podkreślenia( ).
• Rozróżniane są małe oraz duże litery (ang. case sensitive).
• Pierwszy znak identyfikatora nie może być cyfrą.
• Identyfikator nie może być słowem kluczowym (słowem za-strzeżonym dla języka).
• Należy unikać stosowania nazw zaczynających się od (za-rezerwowane dla bibliotek).
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 54 z 78
Powrót
Full Screen
Zamknij
Koniec
Słowa kluczowe
Podane poniżej napisy są w języku C słowami kluczowymi (niemogą być nazwami zmiennych i funkcji):char, int, float, double, enum, void,long, short, signed, unsigned,const, static, volatile, extern, register,struct, union,for, while, do, switch, case, default, if, elsebreak, continue, return, goto,inline, sizeof, typedef
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 55 z 78
Powrót
Full Screen
Zamknij
Koniec
Literały
Literał to wartość wpisana bezpośrednio w kod programu.Każdy literał (np. liczba 2 występująca w wyrażeniu: x=2*x) maokreślony typ.
Literały całkowite
• 1234 - typ int
• 1234L - typ long int
• 1234U - typ unsigned int
• 1234UL - typ unsigned long int
• 012 - typ int, liczba w systemie ósemkowym (dziesiętnie: 10)
• 0x12 - typ int, liczba w sytemie szesnastkowym (dziesiętnie:18)
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 56 z 78
Powrót
Full Screen
Zamknij
Koniec
Literały zmiennoprzecinkowe
• -314.15 - typ double (notacja dziesiętna z kropką)
• -3.1415e2 (lub -3.1415E2) - typ double (notacja wykładni-cza)
• użycie literki F lub L zmienia typ na float lub long doubleodpowiednio.
Literały znakowe i łańcuchowe
• ’a’ - typ char pojedynczy znak ujęty w pojedyncze apostrofy
• ”ala ma psa” - typ char * ciągi znaków ujęte w cudzysłowie
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 57 z 78
Powrót
Full Screen
Zamknij
Koniec
12. Ważne pojęcia• literał,
• operator,
• pętla
• typ,
• zmienna,
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 58 z 78
Powrót
Full Screen
Zamknij
Koniec
Zadania
Zadanie 4. Proszę przeczytać ze zrozumieniem fragment książkiomawiający poruszane zagadnienia bardziej szczegółowo. Mogą tobyć np. rozdziały 1, 2 i 3 z książki Kernighana i Ritchiego.
Zadanie 5. Napisz program, który wyznacza wartość: n! = 1 *2 * ... * n
Zadanie 6. Napisz program, który drukuje trójkąt z gwiazdek:****************
Zadanie 7. Napisz program, który wczytuje ze standardowegowejścia kolejne znaki – cyfry i tworzy z nich liczbę dziesiętną.
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 59 z 78
Powrót
Full Screen
Zamknij
Koniec
Zadanie 8. Wskaż literały i określ ich typy w następującymprogramie
#include<s t d i o . h>int main ( ){
int a ;p r i n t f ( ”Podaj l i c z b ę : ” ) ;s can f ( ”%d”,&a ) ;i f ( a%2==0)
p r i n t f ( ” l i c z b a parzysta\n” ) ;else
p r i n t f ( ” l i c z b a n i e p a r z y s t a\n” ) ;return 0 ;
}
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 60 z 78
Powrót
Full Screen
Zamknij
Koniec
13. Typy złożoneTypy złożone są to typy, które tworzy programista używającwbudowanych typów prostych i innych typów złożonych.
• tablice
• struktury
• unie
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 61 z 78
Powrót
Full Screen
Zamknij
Koniec
Tablice
Tablica jest strukturą danych złożoną z określonej liczby elemen-tów tego samego typu. Przykładowo int T[5] jest deklaracją5-cio elementowej tablicy (wektora) typu int, wtedy kolejne ele-menty tablicy to T[0], T[1], T[2], T[3], T[4]. Dostęp do po-szczególnych elementów tablicy uzyskuje się poprzez użycie ope-ratora [ ] tak, jak w przykładzie poniżej:
Przykład 13.
for ( i=0 ; i<5 ; i++ )T[ i ]= i∗ i ;
Uwaga:W języku C indeks tablicy zawsze zaczyna się od 0. Takwięc w rozważanym przykładzie T[4] jest ostatnim elementemtablicy (a nie T[5]!).
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 62 z 78
Powrót
Full Screen
Zamknij
Koniec
Tablice dwuwymiarowe
Można też tworzyć tablice dwu- i więcej wymiarowe. Na przykładdouble A[10][10];
jest deklaracją tablicy dwuwymiarowej o rozmiarze 10x10.Do elementów takiej tablicy odwołujemy się np:A[i][j]
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 63 z 78
Powrót
Full Screen
Zamknij
Koniec
Znaki, łańcuchy znaków
Typ znakowy to char. Łańcuchy w języku C to tablice znaków(tablice typu char ).char z=’a’;char Tekst[]="Abc";
Instrukcje te deklarują zmienną znakową z, oraz łańcuch znakówTekst, oraz inicjują je. Wtedy T[0]=’A’, T[1]=’b’, T[2]=’c’oraz T[3]=’\0’ (znacznik końca łańcucha).W C i C++ typ znakowy jest typem całkowitym, tzn. zmienne zna-kowe można traktować tak, jak liczby całkowite równe ich kodomASCII.Ponadto na zmiennych znakowych można wykonywać działaniaarytmetyczne. Np.char x=’a’, y=’f’;x++;y=y+’A’-’a’;
Po tych instrukcjach zmienna x jest równa ’b’, zaś y jest równa’F’ (w zmiennej y litera została zamieniona na dużą).
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 64 z 78
Powrót
Full Screen
Zamknij
Koniec
Typowe błędy
Należy pamiętać, że standardowo w C/C++ nie ma kontroli do-stępu do tablic.Jeśli odwołujemy się do elementu tablicy który nie istnieje np:
const int TAB SIZE=100;
int main (){int T[ TAB SIZE ] ;int n=5000;T[ n ]=0;return 0 ;
}To odwołanie do nieistniejącej komórki nie zostanie zasygnali-zowane w fazie kompilacji, a w fazie wykonania może przynieśćnieoczekiwane efekty. Najprzyjemniejszym jest komunikat syste-mowy:Naruszenie ochrony pamięciW systemie SPOJ błąd ten jest sygnalizowany przez komunikat:runtime error (SIGSEGV).
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 65 z 78
Powrót
Full Screen
Zamknij
Koniec
Struktury
struct Punkt { /∗ typ zmiennej ∗/int wsp x , wsp y ;char ko l o r ;char znak ;
} ;
Utworzenie zmiennych:struct Punkt a,b;Dostęp do pól struktury:a.wsp_x = 1;a.kolor = 0;a.znak = ’c’;
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 66 z 78
Powrót
Full Screen
Zamknij
Koniec
Konwersja typów
Operator konwersji (jawnej) ma postać(nazwa-typu) Operand
Konwersja niejawna zachodzi w sytuacji, gdy operandy danegooperatora są różnych typów, ogólna zasada mówi, że automatycz-nie wykonuje się tylko takie przekształcenia, dla których argumentzajmujący mniej pamięci jest zamieniany na argument zajmującywięcej pamięci (char na int, int na float) bez utraty informacji,np.:int a=5/2;float b = a/2;float c = (float)a/2; //a=? b=? c=?
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 67 z 78
Powrót
Full Screen
Zamknij
Koniec
14. FunkcjePodczas pisania programu (implementacji algorytmu) zachodzipotrzeba wielokrotnego wykonywania tych samych operacji (in-strukcji) w różnych sytuacjach (dla różnych danych), np. znale-zienie najmniejszego elementu w ciągu liczb (w szczególnym przy-padku dwóch), posortowanie ciągu liczb, wyznaczenie rozwiązańrównania kwadratowego.W obrębie funkcji można zamknąć operacje wykonywane dlazadanych parametrów wejściowych, np. współczynniki równaniakwadratowego.W praktyce każdy (większy) program jest zbudowany z wielufunkcji (dobry styl programowania zaleca, wiele krótkich i czytel-nych funkcji), poprawia to przejrzystość i czytelność programu,zwiększa modyfikowalność, zapewnia oszczędność czasu (funkcjaraz napisana może być wielokrotnie wykorzystana i jednokrotnietestowana).
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 68 z 78
Powrót
Full Screen
Zamknij
Koniec
Proste funkcje - przykłady
Funkcja obliczająca minimum dwóch liczb:
int min ( int a , int b) {i f ( a > b ) return b ;else return a ;
}Wykorzystanie funkcji w programie np.:x = min(a, b)
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 69 z 78
Powrót
Full Screen
Zamknij
Koniec
Potęgowanie w Zp (modulo p)
Przykład 14.
int potega ( int b , int w, int p){// o b l i c z b do potegi w mod p
int wynik=1;
while (w>0){i f (w%2) wynik∗=b ;wynik%=p ;b∗=b ;b%=p ;w/=2;}return wynik ;
}
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 70 z 78
Powrót
Full Screen
Zamknij
Koniec
Funkcje – deklaracja i definicja
Deklaracja funkcji, w odróżnieniu od definicji jest pojęciem lo-gicznym, stanowi informację dla kompilatora, że funkcja o okre-ślonej nazwie, typie parametrów może zostać użyta (ale nie musi!)w programie.int min(int a, int b);
Definicja funkcji określa natomiast co funkcja robi, stanowi za-tem zapis jakiegoś algorytmu, definicja funkcji, w odróżnieniuod deklaracji, powoduje przydzielenie obszaru pamięci, w którymznajduje się kod wynikowy funkcji.
int min ( int a , int b) {i f ( a > b ) return b ;else return a ;
}
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 71 z 78
Powrót
Full Screen
Zamknij
Koniec
Parametry programu
Podobnie jak inne funkcje również main może pobierać argumen-ty. Są to parametry wywołania programu. W pierwszej kolejnościjest pobierana ich liczba typu int, a następnie lista argumentów.Poniższy program wypisze wszystkie argumenty wywołania.
Przykład 15.
int main ( int argc , char∗∗ argv ) {int i =0;for ( i =0; i<argc ; i++)
p r i n t f ( ”Argument numer %d : %s\n” ,i , argv [ i ] ) ;
}Na przykład, jeśli program ma domyślną nazwę a.out, to komen-da:./a.out test
Wypisze:Argument numer 0: ./a.outArgument numer 1: test
Widzimy, że argumentem o numerze 0 jest nazwa pliku wykony-walnego.
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 72 z 78
Powrót
Full Screen
Zamknij
Koniec
Przekaz argumentów
Popatrzmy na prostą funkcję, która zwiększa argument o 1 i wy-pisuje go:
Przykład 16.
void i n c ( int a){a++;p r i n t f ( ” inc : a = %d\n” , a ) ;
}
int main (){int a ;a=0;inc ( a ) ;p r i n t f ( ”main : a = %d\n” , a ) ;return 0 ;
}Wynikiem działania programu będzie:inc: a = 1main: a = 0
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 73 z 78
Powrót
Full Screen
Zamknij
Koniec
Komentarz
Może to być zaskoczeniem, ale zobaczmy po kolei co się dzie-je. Wartość zmiennej a w programie głównym zostaje ustawionana 0. Dalej wywoływana jest funkcja inc. Następuje przekazaniewartości parametru do funkcji. Tam wartość ta jest przechowa-na w zmiennej lokalnej a, ale uwaga nie jest to to samo a, cow main. Lokalna zmienna a zostaje zwiększona o jeden i wypi-sana jej wartość. Następnie wracamy do main, gdzie cały czasegzystuje zmienna a o wartości 0, ta wartość zostaje wypisana.Podsumowując w naszym przykładzie funkcja nie zmienia war-tości innych zmiennych niż jej zmienne lokalne. O takiej funkcjimówimy też, że nie powoduje efektów ubocznych, a taki sposóbprzekazu argumentów nazywamy przekazywaniem przez war-tość.
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 74 z 78
Powrót
Full Screen
Zamknij
Koniec
Funkcje rekurencyjne
Funkcjami rekurencyjnymi nazywamy takie funkcje, które wywo-łują same siebie. Ilustracją może być poniższa funkcja nwd, któraoblicza największy wspólny dzielnik dwóch liczb, z których drugajest nie większa od pierwszej.
Przykład 17.
int nwdab( int a , int b) {i f ( ( a<=0)||(b<=0)) {
p r i n t f ( ” ty lko l i c z b y dodatnie\n” ) ;e x i t ( 1 ) ;}
i f ( a%b==0) return b ;else return nwdab(b , a%b ) ;
}
main ( ) {int a ;a=nwdab ( 4 8 , 2 7 ) ;p r i n t f ( ”%d\n” , a ) ;return 0;}
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 75 z 78
Powrót
Full Screen
Zamknij
Koniec
15. Stałe i wyliczeniaDeklaracje zmiennychint cyfra = 7;char znak;char znak = ’o’;double a, b = 3.2e-1;
Deklaracje stałychconst double pi = 3.1415;const int liczba = 37;
Uwaga! Wartość zmiennych poprzedzonych kwalifikatorem constnie może być zmieniona w trakcie działania programu.Wyliczeniaenum dni {pn, wt, sr, czw, pt};/* domyślnie: 0, 1, 2, 3, 4 */enum rok {smoka = 1, koguta, malpy};/* kolejne =2, =3, ... */
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 76 z 78
Powrót
Full Screen
Zamknij
Koniec
Standardowe pliki nagłówkowe
• assert.h – diagnozowanie programów
• ctype.h – klasyfikacja znaków
• errno.h – zmienne przechowujące informacje o błędach
• math.h – funkcje matematyczne
• signal.h – mechanizmy obsługi zdarzeń wyjątkowych
• stdio.h – funkcje wejścia oraz wyjścia
• stdlib.h – funkcje narzędziowe (przekształcanie liczb, opera-cje na pamięci)
• string.h – operacje na tekstach
• time.h – obsługa daty oraz czasu
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 77 z 78
Powrót
Full Screen
Zamknij
Koniec
Biblioteka math – przykłady funkcji
• double sin(double x);
• float sinf(float x);
• double exp(double x);
• double log(double x);
• double pow(double x, double y);
Zasady
Literatura
Dlaczego C?
Tworzenie . . .
Edycja kodu . . .
Kompilacja
Debugowanie
Ważne pojęcia:
Typy i zmienne
Sterowanie
Jednostki leksykalne
Ważne pojęcia
Typy złożone
Funkcje
Stałe i wyliczenia
Strona główna
Strona tytułowa
JJ II
J I
Strona 78 z 78
Powrót
Full Screen
Zamknij
Koniec
Zadanie 9. Proszę przeczytać ze zrozumieniem fragment książkiomawiający te zagadnienia bardziej szczegółowo. Mogą to być np.:rozdziały 1–4 książki Kernighana i Ritchiego.