10
02 Podstawy Informatyki Wprowadzenie do języka C dr inż. Jarosław Bułat 2012.10.07 Program w języku C Program w języku C jest pisany w pliku tekstowym, następnie przetwarzany przez kompilator do pliku wynikowego. Proces przetwarzania składa się z preprocesingu, kompilacji i konsolidacji (linkowania). Podczas zajęć z Podstaw Informatyki zalecamy wykorzystanie jednego z trzech systemów kompilacji: Eclipse (dodatek A) QtCreator (dodatek B) bezpośrednio z konsoli (dodatek C) Wybierz środowisko programistyczne, skompiluj najprostszy program zaproponowany przez to środowisko a następnie uruchom go i sprawdź czy rezultat działania zgodny z oczekiwaniem. Pierwszy program Przepisz, skompiluj i uruchom następujący program: #include <stdio.h> #include <stdlib.h> int main(void) { char znak = 'x'; int a,b; unsigned int c = 128; a=c; b=20; printf("znak =%c, a=%d\n b=, c=\n\n", znak, a ); return EXIT_SUCCESS; } uzupełnij kod o wyświetlanie wartości zmiennych b i c, czym różni się typ zmiennej int od unsigned int? przygotuj przykład w którym przepisanie wartości ze zmiennej a do c spowoduje przekroczenie zakresu zmiennej, czy w takiej sytuacji kompilator poinformuje programistę o problemie? Rozmiar zmiennych W języku C, wszystkie typy zmiennych oprócz int zajmują znaną ilość bajtów, natomiast długość zmiennej int jest zależna od implementacji (zazwyczaj 32 bity). Uzupełnij powyższy program o kod wypisujący długości (w bitach) wszystkich użytych zmiennych. Funkcja zwracająca długości zmiennych (w bajtach) to sizeof(): int rozmiar; rozmiar = sizeof( int ); Zasięg zmiennych Każda zmienna ma swój zasięg, inaczej mówiąc czas życia określający w którym miejscu można jej użyć. Poniższy kod ilustruje tą zasadę. Zauważ, że: kompilator nie zwrócił błędu redeklaracji zmiennej a w wewnętrznym bloku programu, wartość zmiennej w wewnętrznym bloku nie zmodyfikowała zmiennej zewnętrznej. Zakomentuj deklarację zmiennej a wewnątrz bloku programu, skompiluj i wyjaśnij rezultat.

Podstawy Informatyki 02 Wprowadzenie do języka C …home.agh.edu.pl/~kwant/wordpress/wp-content/uploads/2012...02 Podstawy Informatyki Wprowadzenie do języka C dr inż. Jarosław

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Podstawy Informatyki 02 Wprowadzenie do języka C …home.agh.edu.pl/~kwant/wordpress/wp-content/uploads/2012...02 Podstawy Informatyki Wprowadzenie do języka C dr inż. Jarosław

02Podstawy InformatykiWprowadzenie do języka Cdr inż. Jarosław Bułat

2012.10.07

Program w języku C

Program w języku C jest pisany w pliku tekstowym, następnie przetwarzany przez kompilator do pliku wynikowego. Proces przetwarzania składa się z preprocesingu, kompilacji i konsolidacji (linkowania). Podczas zajęć z Podstaw Informatyki zalecamy wykorzystanie jednego z trzech systemów kompilacji:

• Eclipse (dodatek A)• QtCreator (dodatek B)• bezpośrednio z konsoli (dodatek C)

Wybierz środowisko programistyczne, skompiluj najprostszy program zaproponowany przez to środowisko a następnie uruchom go i sprawdź czy rezultat działania zgodny z oczekiwaniem.

Pierwszy program

Przepisz, skompiluj i uruchom następujący program:

#include <stdio.h>#include <stdlib.h>

int main(void) {char znak = 'x';int a,b;unsigned int c = 128;

a=c;b=20;

printf("znak=%c, a=%d\n b=, c=\n\n", znak, a );return EXIT_SUCCESS;

}

– uzupełnij kod o wyświetlanie wartości zmiennych b i c,– czym różni się typ zmiennej int od unsigned int? – przygotuj przykład w którym przepisanie wartości ze zmiennej a do c spowoduje

przekroczenie zakresu zmiennej, czy w takiej sytuacji kompilator poinformuje programistę o problemie?

Rozmiar zmiennych

W języku C, wszystkie typy zmiennych oprócz int zajmują znaną ilość bajtów, natomiast długość zmiennej int jest zależna od implementacji (zazwyczaj 32 bity). Uzupełnij powyższy program o kod wypisujący długości (w bitach) wszystkich użytych zmiennych. Funkcja zwracająca długości zmiennych (w bajtach) to sizeof():

int rozmiar;rozmiar = sizeof( int );

Zasięg zmiennych

Każda zmienna ma swój zasięg, inaczej mówiąc czas życia określający w którym miejscu można jej użyć. Poniższy kod ilustruje tą zasadę. Zauważ, że:

– kompilator nie zwrócił błędu redeklaracji zmiennej a w wewnętrznym bloku programu,– wartość zmiennej w wewnętrznym bloku nie zmodyfikowała zmiennej zewnętrznej.

Zakomentuj deklarację zmiennej a wewnątrz bloku programu, skompiluj i wyjaśnij rezultat.

Page 2: Podstawy Informatyki 02 Wprowadzenie do języka C …home.agh.edu.pl/~kwant/wordpress/wp-content/uploads/2012...02 Podstawy Informatyki Wprowadzenie do języka C dr inż. Jarosław

#include <stdio.h>#include <stdlib.h>

int main(void) {int a=0;printf("a=%d\n", a );{

int a;a = 1;printf("a=%d\n", a );

}printf("a=%d\n", a );

return EXIT_SUCCESS;}

Tablice

W języku C/C++ można deklarować tablice zmiennych dowolnego typu. Wielkość tablicy musi być określona podczas kompilacji i nie może się zmienić w trakcie działania programu. Poniżej zadeklarowano 10-elementową tablicę typu int. Zainicjalizowano dwa pierwsze elementy ale wyświetlono trzy pierwsze. Jaka będzie wartość trzeciego (niezainicjalizowanego) elementu?

#include <stdio.h>#include <stdlib.h>

int main(void) {int tab[10];int x = 0;

tab[0] = x;tab[1] = 10;

printf( "%d %d %d\n", tab[0], tab[1], tab[2] );

return EXIT_SUCCESS;}

Łańcuchy znakoweŁańcuchy znakowe to nic innego jak tablica znaków. Zauważ, że podczas deklaracji nie podano długości tablicy. Jeżeli deklaracja tablicy (jakiejkolwiek) występuje razem z inicjalizacją to kompilator jest na tyle ,,inteligentny'' że policzy sobie jaka powinna być długość tablicy i sam niejawnie wstawi odpowiednią wartość.

#include <stdlib.h>#include <stdlib.h>

int main(void) {char text[] = "Napis na ekranie";printf( "%s\n", text );return EXIT_SUCCESS;

}

Formatowanie (style programowania)

Formatowanie kodu źródłowego jest ważniejsze niż większość początkujących programistów sądzi. Daje ono wytyczne gdzie należy wstawiać spacje, tabulacje (indentacja), ile linii powinna mieć funkcja, jak długie powinny być linie, jakie są konwencje nazywania zmiennych i funkcji, etc... W obrębie jeżyka C/C++ można wyróżnić dwie podstawowe konwencje: K&R style i GNU.

Nie ważne którego stylu używasz, ważna jest konsekwencja.

Źródło programu napisane według wytycznych jest czytelniejsze przez co szybciej się je analizuje, poprawia i utrzymuje. Odpowiednie formatowanie zmniejsza również ilość błędów. Jest ono niezbędne w pracy grupowej – nikt nie będzie chciał czytać cudzego, niechlujnego kodu. Praktycznie wszystkie edytory dla programistów pomagają pisać programy w jednym z wymienionych stylów.

Na zadanie domowe przeczytaj http://en.wikipedia.org/wiki/Indent_style i od następnych zajęć formatuj kod według jednego ze stylów – będzie to obowiązkowe.

Page 3: Podstawy Informatyki 02 Wprowadzenie do języka C …home.agh.edu.pl/~kwant/wordpress/wp-content/uploads/2012...02 Podstawy Informatyki Wprowadzenie do języka C dr inż. Jarosław

Dodatek A - Eclipse

Eclilpse to zintegrowane środowisko developerskie (IDE) zaprojektowane dla języka Java a następnie rozwinięte do wykorzystania innych językach programowania. Język C/C++ jest obsługiwany przez dodatkowy moduł CDT. Za pomocą tego środowiska można pisać kod źródłowy programów, kompilować, debugować i uruchamiać.

Jak każde tego typu środowisko umożliwia również wiele zaawansowanych funkcji takich jak: współpraca z repozytoriami kodu źródłowego, rozbudowana pomoc, autouzupełnianie kodu, automatyczne formatowanie, refraktoring kodu, analiza kodu, projektowanie aplikacji (w tym UML), wdrażanie, etc...

System Eclipse został stworzony przez firmę IBM, jest rozpowszechniany na zasadach licencji OpenSource (http://eclipse.org), występuje pod różne platformy (w tym Windows, Linux, MacOS), jest aktywnie rozwijany, posiada repozytorium wielu użytecznych dodatków. Jest to drugie najpopularniejsze środowisko developerskie (pierwsze to Visual Studio). Między innymi firma Google wybrała Eclipse jako podstawową platformę do pisania programów na system operacyjny Android.

Projekt

Nawet najprostszy program wymaga utworzenia projektu. Projekt będzie zawierać wszystkie niezbędne pliki oraz całą konfigurację niezbędną do kompilacji i uruchamiania programu. Poniżej przedstawiono etapy tworzenia, kompilowania i uruchamiania projektu w środowisku Eclipse.

Tworzenie nowego projektu:

Page 4: Podstawy Informatyki 02 Wprowadzenie do języka C …home.agh.edu.pl/~kwant/wordpress/wp-content/uploads/2012...02 Podstawy Informatyki Wprowadzenie do języka C dr inż. Jarosław

Wybierze typ projektu i wciśnij ,,Next'':

Następnie: 1) wpisz nazwę projektu (unikaj polskich liter), 2) wybierz predefiniowany szablon programu, 3) zakończ wybierając ,,Finish''. Jeżeli wybierzesz ,,Next'' będziesz mógł zmienić ustawienia projektu (można to zrobić później, po utworzeniu projektu):

Page 5: Podstawy Informatyki 02 Wprowadzenie do języka C …home.agh.edu.pl/~kwant/wordpress/wp-content/uploads/2012...02 Podstawy Informatyki Wprowadzenie do języka C dr inż. Jarosław

Poniżej wygenerowany szablon programu w języku C. Zmień napis wypisywany na ekran, zamień instrukcję puts() na printf(). Upewnij się że plik jest zapisany – nie ma gwiazdki przed nazwą pliku (2).

Kompilacja

Po prostu wciśnij klawisz ctrl-b lub zaznaczoną ikonkę (3 na powyższym obrazku). Jeżeli system jest prawidłowo zainstalowany i skonfigurowany moduł CDT wykorzysta środowisko GCC do wszystkich czynności związanych z przetwarzaniem kodu źródłowego do kodu wykonywalnego.

Kompilacja wygląda jak na poniższym obrazku, zwróć uwagę na wywołanie instrukcji gcc.

Page 6: Podstawy Informatyki 02 Wprowadzenie do języka C …home.agh.edu.pl/~kwant/wordpress/wp-content/uploads/2012...02 Podstawy Informatyki Wprowadzenie do języka C dr inż. Jarosław

Uruchamianie

Plik wykonywalny jest uruchamiany (bez debugera) po wciśnięciu klawisza ctrl-F11 lub za pomocą ikonki (1 na poniższym obrazku). Standardowe wyjście jest wypisywane w zintegrowanej zakładce ,,Console'' (2 na poniższym obrazku). Skompilowany programu znajduje się w systemie plików w lokalizacji: ~/workspace/program/Debug/program i można go również uruchomić z poziomu konsoli.

Środowisko eclipse poinformuje programistę jeżeli kompilacja się nie udała. Błędy i ostrzeżenia wypunktowane będą w zakładce ,,Problems'' oraz podkreślone w kodzie źródłowym. Jaki błąd został popełniony w tym kodzie?

Page 7: Podstawy Informatyki 02 Wprowadzenie do języka C …home.agh.edu.pl/~kwant/wordpress/wp-content/uploads/2012...02 Podstawy Informatyki Wprowadzenie do języka C dr inż. Jarosław

Dodatek B - QtCreator

QtCreator to zintegrowane środowisko developerskie (IDE) zaprojektowane do pisania programów przy użyciu bibliotek Qt. Qt to wieloplatformowe środowisko składające się z bibliotek i narzędzi dedykowanych dla języków C++ i Java. Jest to bardzo bogate środowisko do budowy graficznych interfejsów użytkownika.

Za pomocą QtCreatora można również pisać programy w języku C bez wykorzystania bibliotek Qt. Jego zaletą w stosunku do Eclipse jest większa szybkość działania i mniejsze zapotrzebowanie na zasoby. QtCreator jest rozpowszechniany na licencji GPL (OpenSource). Obecnym właścicielem całego środowiska Qt jest firma digia (http://qt.digia.com), która zakupiła Qt od Nokii w 2011 roku.

Poniżej kroki potrzebne do utworzenia projektu i skompilowania projektu:

Page 8: Podstawy Informatyki 02 Wprowadzenie do języka C …home.agh.edu.pl/~kwant/wordpress/wp-content/uploads/2012...02 Podstawy Informatyki Wprowadzenie do języka C dr inż. Jarosław
Page 9: Podstawy Informatyki 02 Wprowadzenie do języka C …home.agh.edu.pl/~kwant/wordpress/wp-content/uploads/2012...02 Podstawy Informatyki Wprowadzenie do języka C dr inż. Jarosław

W przypadku programów bez interfejsu graficznego, uruchomienie programu w środowisku QtCreator polega na otwarciu nowej konsoli tekstowej i uruchomienie w nim programu. Jeżeli program się nie uruchomi spróbuj zrobić to bezpośrednio z konsoli – otwórz terminal, przejdź do katalogu z projektem i uruchom program.

Page 10: Podstawy Informatyki 02 Wprowadzenie do języka C …home.agh.edu.pl/~kwant/wordpress/wp-content/uploads/2012...02 Podstawy Informatyki Wprowadzenie do języka C dr inż. Jarosław

Dodatek C - gcc

GCC (ang. GNU Compiler Collection) to zestaw kompilatorów z których będziemy używać GCC iG++. Kompilator może być uruchamiany na wielu platformach, jest podstawowym kompilatorem w wielu projektach. Praktycznie wszystkie programy pod systemem Linux są kompilowane za pomocą GCC (od jądra systemu po środowisko graficzne oparte o GTK lub Qt).

GCC nie ma interfejsu graficznego. Jest przystosowane do wywołania z konsoli tekstowej lub służy jako back-end środowisk programistycznych takich jak Eclipse czy QtCreator.

Jeżeli chcesz kompilować programy za pomocą GCC:

– otwórz dowolny edytor tekstowy (graficzny jak w przykładzie poniżej),

– napisz program i zapisz go do pliku z rozszerzeniem .c (w zaprezentowanym przypadku ~/Documents/program/program.c),

– uruchom konsolę, przejdź do katalogu w którym znajduje się program (w zaprezentowanym przypadku ~/Documents/program),

– skompiluj za pomocą instrukcji: gcc program.c -o program

– uruchom program wpisując w konsoli: ./program