przedmiot kończy się zaliczeniem na stopień proponowany...
TRANSCRIPT
2018-04-04 Programowanie strukturalne – W1 1
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
Wykład 1
Dr inż. Tadeusz Jeleniewski e-mail: [email protected]
Materiały – streszczenia wykładów, zadania, przykłady znajdują się pod adresem:
http://tjeleniewski.ujw.edu.pl
Przedmiot kończy się zaliczeniem na stopieńPrzedmiot kończy się zaliczeniem na stopieńProponowany termin kolokwium zaliczeniowego – ostatni wykład w semestrze letnimFormą towarzyszącą jest laboratoriumFormą towarzyszącą jest laboratorium
2018-04-04 Programowanie strukturalne – W1 2
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
Programowanie strukturalne – program zajęć1. Wprowadzenie Algorytmiczne języki programowania. Struktura programu źródłowego w
języku C/C++. Proces kompilacji, konsolidacji i uruchamiania. Przykład prostego programu. Jednostki składniowe języka.
2. Podstawowe pojęcia Typy wartości, zmienne. Reprezentacja danych w komputerze. Typy całkowite i rzeczywiste. Inicjacja zmiennych.
3. Komunikacja programu z otoczeniem Funkcje scanf, printf, gets, puts. Podejście "obiektowe" -strumienie standardowe cin, cout
4. Wskaźniki Zmienne i ich adresy. Odwoływanie się do zmiennych przez nazwę lub adres. Zmienne wskaźnikowe - notacja, znaczenie. Arytmetyka wskaźników.
5. Operatory i wyrażenia Przypisanie proste i arytmetyczne, wyrażenia arytmetyczne, inkrementacja i dekrementacja, operatory logiczne, relacje, operatory bitowe, wyrażenie warunkowe
6. Sterowanie wykonaniem programu Instrukcja if, if ... else, else if. Zagnieżdżanie instrukcji if. Instrukcja switch ... case
7. Instrukcje iteracyjne Pojęcie pętli programowej. Pętla for, pętle z badaniem warunku na początku (while) i na końcu (do ... while). Zagnieżdżanie pętli. Instrukcje break oraz continue
8. Funkcje Pojęcie funkcji w C/C++. Deklaracja (prototyp) i definicja funkcji. Zwracanie wartości funkcji. Przekazywanie argumentów przez wartość, adres i referencję
9. Tablice i łańcuchy Typ strukturalny - tablica, deklaracja i inicjacja wartości elementów. Tablice jako argumenty funkcji. Łańcuch znaków i jego reprezentacja w postaci tablicy znakowej.
10. Struktury Pojęcie struktury, deklaracja struktury, atrybuty dostępu, możliwość definiowaniametod. Zagnieżdżanie struktur. Wskaźniki na struktury. Tablice struktur. Unie i ich zastosowanie.
2018-04-04 Programowanie strukturalne – W1 3
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
LiteraturaLiteratura
• Walter Savitch Programowanie w tonacji C++. Wydawnictwo RM, Warszawa, 2005
•Jerzy Grębosz Symfonia C++. Oficyna Kallimach, Kraków, 2010
•Jesse Liberty C++ dla każdego. Wydawnictwo HELION, 2002
I wiele innych podręczników na temat programowania w języku C/C++
2018-04-04 Programowanie strukturalne – W1 4
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
O czym będzie pierwszy wykład ?• Co to jest program komputerowy i jak powstaje
• Struktura programu źródłowego w języku C/C++
• Jednostki składniowe
• Typy i zmienne całkowite, reprezentacja danych całkowitych, stałe całkowite
• Typy rzeczywiste, inicjacja zmiennych rzeczywistych
• Typy i zmienne wskaźnikowe
2018-04-04 Programowanie strukturalne – W1 5
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
Tworzenie programu komputerowego w języku C/C++ (i innych) odbywa się w dwóch etapach: - opracowanie kodu źródłowego- generowanie kodu wynikowego.
Przed rozpoczęciem opracowywania kodu źródłowego należy obmyślić algorytmrozwiązania postawionego zadania.
Algorytm to sposób rozwiązania pewnej klasy zadań.
Opracowanie kodu źródłowego czyli tzw. kodowanie to zapis wcześniej obmyślonego algorytmu w języku programowania - w naszym przypadku jest nim język C/C++.
Kod wynikowy generuje komputer.
Specjalny program - kompilator analizuje kod źródłowy programu pod względem poprawności leksykalnej, składniowej i częściowo semantycznej (znaczeniowej) i po ewentualnym usunięciu przez programistę wykrytych błędów tłumaczy na postać pośrednią, do której inny program (program łączący - linker) dołącza brakujące elementy umieszczone w bibliotekach funkcji.
2018-04-04 Programowanie strukturalne – W1 6
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
Po pomyślnym zakończeniu procesu łączenia powstaje kod wynikowy - program gotowy do wykonania przez maszynę.
Jest to algorytm rozwiązania zadania zapisany w języku wewnętrznym komputera.
Algorytm nie jest na ogół pozbawiony błędów wykonania.
Są to błędy, których nie wykrywa kompilator w fazie analizy poprawności programu źródłowego.
Inna kategoria błędów, to błędy wykrywane przez program tłumaczący – kompilator. Są to tzw. błędy kompilacji. Porównać je można do błędów ortograficznych, składniowych oraz gramatycznych, które często zdarza nam się popełniać w języku naturalnym (nawet ojczystym).
Rysunek przedstawia schematycznie przebieg procesu tworzenia kodu wynikowego pewnego programu
2018-04-04 Programowanie strukturalne – W1 8
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
Charakterystyczną cechą języka C/C++ jak i wielu innych języków programowaniajest możliwość budowy programu z wielu modułów.
Modułem w języku C/C++ może być każdy plik zawierający poprawny kod źródłowy.
Program w języku C/C++ buduje się z funkcji.
Każda funkcja może (ale nie musi) posiadać parametry
i może, ale nie musi reprezentować wartość określonego typu.
Aby możliwe było wygenerowanie kodu wynikowego programu w postaciprzyjmowanej przez system operacyjny (w systemach operacyjnych DOS, Windowsjest to zbiór z rozszerzeniem .exe) w jednym (i tylko w jednym) module programumusi znaleźć się funkcja o nazwie main (lub podobnej zależnie od środowiska). Od tejfunkcji głównej system rozpoczyna wykonywanie programu.
Moduł, który zawiera tą funkcję nazywa się modułem głównym.
2018-04-04 Programowanie strukturalne – W1 9
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
Najprostszy, poprawny program w C/C++ może mieć postać:
void main(void){}
Program ten składa się z bezparametrowej funkcji main.Funkcja ta nie reprezentuje żadnej wartości - powiadamy że nie "zwraca" do systemu operacyjnego żadnej wartości. Wewnątrz nawiasów klamrowych znajduje się blok, który zawiera definicję funkcji. Definicję funkcji często nazywa się jej ciałem.
Przydatność praktyczna takiego programu jest oczywiście znikoma. Wewnątrz bloku stanowiącego definicję funkcji nie umieszczono żadnego polecenia – ten program niczego nie wykonuje.
2018-04-04 Programowanie strukturalne – W1 10
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
Inny, prosty program może mieć postać:
/* Program 1.2 - przykład prostego programunapisanego w języku C++.Program wyświetla na ekranie komunikatpowitalny
*/#include <iostream.h>void main(void){
cout << "\nWitaj w świecie C++";}
2018-04-04 Programowanie strukturalne – W1 11
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
W tekście tego programu można wyróżnić następujące elementy (jednostki składniowe):
· komentarz - fragment tekstu pomijany przez kompilator w procesie analizy i tłumaczenia programu źródłowego; komentarzem jest dowolny tekst pomiędzy parą symboli dwuznakowych /* (ukośnik gwiazdka) oraz */ (gwiazdka ukośnik); w wersji C++ języka znacznikiem komentarza (tzw. jednowierszowego) jest też znak // i wtedy kompilator ignoruje napis od tego znacznika do końca wiersza;
• dyrektywa preprocesora - słowo include wraz z poprzedzającym je znakiem #; jest to polecenie dla kompilatora, aby przed rozpoczęciem analizy tekstu źródłowego dołączył do niego tzw. plik nagłówkowy o nazwie iostream.h; w plikach nagłówkowych znajdują się definicje symboli użytych w programie oraz tzw. prototypy funkcji;
· deklaracja funkcji main - przykładowy program składa się z bezparametrowej funkcji głównej nie reprezentującej sobą żadnej wartości, na co wskazuje słowo kluczowe void poprzedzające nazwę funkcji głównej;
· wewnątrz nawiasów klamrowych znajduje się blok zawierający definicję (ciało) funkcji głównej;
cout jest nazwą obiektu zdefiniowanego w pliku nagłówkowym iostream.h; obiekt ten to tzw. strumień wyjściowy, do którego za pomocą operatora << (również zdefiniowanego w pliku iostream.h) program prześle tekst komunikatu do wyświetlenia na ekranie monitora.
2018-04-04 Programowanie strukturalne – W1 12
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
Przykładowy program wyświetli na ekranie monitora napis (komunikat) treści:Witaj w świecie C++
oraz zakończy działanie.
Takie samo zadanie wykona program:
/* Program w1_2 - inna wersja (proceduralna)prostego programu, ktory wyswietlakomunikat powitalny
*/#include <stdio.h>void main(void){
printf("\nWitaj w swiecie C++");}
Do wyświetlenia komunikatu użyto tutaj funkcji standardowej o nazwie printf, której parametrem jest łańcuch znaków. Funkcja ta nie zwraca żadnej wartości. Warto zauważyć, że w tym przypadku do tekstu programu dołączono inny niż poprzednio plik nagłówkowy. W pliku stdio.h znajduje się prototyp funkcji standardowej użytej w naszym przykładzie. Definicja tej funkcji znajduje się w bibliotece funkcji standardowych, która jest automatycznie przeglądana przez program łączący w fazie tworzenia kodu wynikowego.
2018-04-04 Programowanie strukturalne – W1 13
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
Jednostkami składniowymi języka C++ są: identyfikatory, słowa kluczowe, znakiprzestankowe, stałe, literały łańcuchowe, operatory.
Identyfikatorem (nazwą) w języku C++ może być ciąg dużych i małych liter, cyfr iznaku podkreślenia .
Identyfikator jest nazwą elementu języka (zmiennej, funkcji itp.).
Pierwszy znak identyfikatora musi być literą lub znakiem podkreślenia.
Kompilator C++ rozróżnia pierwsze 32 litery nazwy. Nazwy dłuższe są poprawne.Kompilator rozróżnia duże i małe litery nazwy.
Nazwa Yuma_15_10 jest identyfikatorem zupełnie innego elementu programu niż
np. yUMA_15_10
2018-04-04 Programowanie strukturalne – W1 14
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
Słowa kluczowe są to identyfikatory zastrzeżone dla specjalnych celów. Mogą byćwykorzystywane tylko zgodnie z ich przeznaczeniem.
Zestawienie wszystkich słów kluczowych można znaleźć w wielu podręcznikach językaC/C++
Kilka przykładów słów kluczowych:
void for int short float return do while structclass continue switch case
Słowa kluczowe to instrukcje języka, nazwy typów, dyrektywy preprocesora i kompilatoraitp.
2018-04-04 Programowanie strukturalne – W1 15
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
Znakami przestankowymi są:[ ] ( ) { } , ; : ... * = #
·nawiasy kwadratowe [ ] - definiowanie tablic i wskazywanie ich elementów,
·nawiasy okrągłe ( ) - grupowanie wyrażeń, wywołania funkcji, lista
parametrów,
·nawiasy klamrowe { } - początek i koniec instrukcji złożonej (bloku),
·przecinek , - oddzielanie elementów listy,
·średnik ; - zakończenie instrukcji,
·dwukropek : - poprzedzający go ciąg znaków jest etykietą,
·wielokropek ... - deklarowanie funkcji o zmiennej liczbie parametrów,
·gwiazdka * - deklarowanie zmiennych wskaźnikowych,
·znak równości = - oddzielanie deklaracji zmiennej od części inicjującej tą zmienną,
·znak # - oznaczenie dyrektywy preprocesora.
2018-04-04 Programowanie strukturalne – W1 16
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
Typ danej to zbiór wartości jakie dana może przyjmować.Typ danej determinuje również sposób jej przechowywania w pamięci komputerai obszar jaki zajmuje (liczbę jednostek pamięci - bajtów).W języku C/C++ dostępne są typy proste i strukturalne.Typy proste wykorzystuje się do tworzenia typów strukturalnych.Do kategorii prostych w języku C/C++ należą typy:- arytmetyczne całkowite i rzeczywiste,- wskaźnikowe,W języku C++ występuje ponadto typ referencyjny.
Typy strukturalne mogą składać się z danych typów prostych i innych typówstrukturalnych. Typami strukturalnymi w języku C/C++ są:- tablice,- struktury,- unie.W C++ grupę typów strukturalnych uzupełniają klasy.Typ danej jest pojęciem logicznym. Reprezentantem fizycznym typu danej jest zmienna.
2018-04-04 Programowanie strukturalne – W1 17
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
Typy i zmienne całkowite.
Typy całkowite w C/C++ są skończonymi, przeliczalnymi podzbiorami zbioru liczb
całkowitych. Zmienne typów całkowitych deklaruje się w programach za pomocą
słów kluczowych (lub ich kombinacji):
char typ znakowy
int typ całkowity
long typ tzw. długich liczb całkowitych
signed liczby całkowite ze znakiem
short typ tzw. krótkich liczb całkowitych
unsigned liczby całkowite bez znaku
2018-04-04 Programowanie strukturalne – W1 18
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
Wymienione słowa kluczowe można łączyć dla oznaczenia różnych kombinacji cechzmiennych.
Przykłady:char a;signed char a; - zmienna a jest wartością dziesiętną kodu ASCII
pewnego znaku – wartość kodu jest opatrzonaznakiem plus lub minus
short k, m, n;short int k, m, n;short signed k, m, n;short signed int k, m, n; - zmienne k, m, n są liczbami
całkowitymi krótkimi ze znakiemunsigned short q, ilosc;unsigned short int q, ilosc; - zmienne q, ilosc są liczbami
całkowitymi krótkimi bezznaku
int K[20]signed int K[20]; - tablica K zawiera liczby całkowite ze znakiem (dodatnie albo
ujemne)
2018-04-04 Programowanie strukturalne – W1 19
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
unsigned _jakosc;
unsigned int _jakosc; - zmienna _jakosc jest liczbą całkowitą bez znaku
long dlugosc, kat;
long int dlugosc, kat;
signed long int dlugosc, kat; - zmienne dlugosc, kat są liczbami
całkowitymi długimi ze znakiem
unsigned long szerokosc, x, y;
unsigned long int szerokosc, x, y; - zmienne szerokosc, x, y są
liczbami całkowitymi długimi bez znaku
2018-04-04 Programowanie strukturalne – W1 20
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
Obszar zajmowany w pamięci oraz zakres wartości zmiennych całkowitych zależąod sprzętu, systemu operacyjnego, kompilatora, wreszcie typu wartości.
Przykładowo – w systemie programowania C/C++ Borland:
unsigned char 8 bitów 0 255
signed char 8 bitów -128 127
unsigned int 16 bitów 0 65535
short signed int 16 bitów -32768 32767
signed int 16 bitów -32768 32767
long unsigned int 32 bity 0 4.294.967.295
long signed int 32 bity -2.147.483. 648 2.147.483.647
2018-04-04 Programowanie strukturalne – W1 21
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
Inicjowanie zmiennych polega na przypisaniu im początkowej wartości.
Kompilator podczas tłumaczenia programu źródłowego nadaje zmiennymwartości nieokreślone (przypadkowe). Prowadzi to często do powstaniatrudnych do wykrycia błędów wykonania. Zapobiec temu może inicjowaniezmiennych przed ich pierwszym użyciem.
W języku C/C++ można tego dokonać wraz z deklaracją zmiennej.
Ma ona następującą postać ogólną:
typ-całkowity identyfikator [=stała-odpowiedniego-typu] (1.1)
Uwaga ! Dalej w wyrażeniach przedstawiających postać ogólną składnibędziemy używać "metasymbolu" [ ] dla oznaczenia części zdania, która może,ale nie musi wystąpić. Metasymbol { } będzie oznaczać część definicji, któramoże wystąpić wiele razy.
2018-04-04 Programowanie strukturalne – W1 22
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
Przykłady deklaracji i inicjacji zmiennych znakowych:char litera_A=65; wartość dziesiętna kodu znaku Achar bubel='B'; znak Bchar Nowa_Linia='\n'; znak sterujący – "przejście" do następnej liniichar odstep16='\x20'; znak o kodzie szesnastkowym 20 - odstęp (spacja)char odstep10='\32'; znak o kodzie dziesiętnym 32 – spacja
Zmiennym typu znakowego (char) nadaje się wartości (również początkowe) podając wartość dziesiętną kodu znaku lub znak ujęty w apostrofy.
Znaki sterujące oraz znaki wykorzystywane przez język C/C++ są kodowane w postaci \litera-lub-znak. Można również podać wartość szesnastkową lub ósemkową kodu ASCII znaku.
2018-04-04 Programowanie strukturalne – W1 23
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
Znaki sterujące w C/C++
Sekwencja Wartość hex
Nazwa znaku Funkcja
\a 07 BEL sygnał dźwiękowy
\b 08 BS cofnięcie kursora i usunięcie znaku
\f 0C FF wysunięcie strony (ang. Form Feed)
\n 0A LF przesunięcie o 1 wiersz w dół (ang. Line Feed)
\r 0D CR przesunięcie kursora na poczatek linii (ang. Carriage Return)
\t 09 HT tabulator poziomy
\v 0B VT tabulator pionowy
\\ 5C lewy ukośnik
\' 27 apostrof
\" 22 cudzysłów
\? 3F znak zapytania
2018-04-04 Programowanie strukturalne – W1 24
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
Aby zainicjować zmienne typów int i long int należy po znaku równości podać
liczbową stałą całkowitą.
Może nią być:
· stała dziesiętna,
· stała ósemkowa (rozpoczynająca się od cyfry 0),
· stała szesnastkowa (rozpoczynająca się znakami 0x).
W podanym dalej przykładzie programu występują deklaracje zmiennych całkowitych,
ich inicjacje oraz wywołania funkcji wyprowadzania do standardowego urządzenia
wyjściowego - monitora.
2018-04-04 Programowanie strukturalne – W1 25
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
/* Przyklad programu, w ktorym wystepuja inicjacje zmiennych calkowitych i wyswietlanie ich wartosci */
#include <conio.h> //Wiersze nr 3 - 5#include <stdio.h>#include <stdlib.h>using namespace std; // 6int main(void) // 7{ // 8char xA=65, mY='y'; // 9unsigned int x=12101, y=0121, z=0xfa; // 10short signed int q=-23409, r=11206; // 11unsigned long dluga=234UL; // 12signed long int po_co=-567L; // 13system("cls"); // 14printf("\n Liczby: \n wartosc xA = %c \n wartosc mY = %c",
xA, mY); // 15 i 16printf("\n wartosc x = %u \n wartosc y = %o \n wartosc z = %x",
x, y, z); // 17 i 18printf("\n wartosc q = %d \n wartosc r = %d", q, r); // 19printf("\n wartosc dluga = %lu \n po_co = %ld", dluga, po_co);
// 20system("pause"); // 21system("cls"); // 22return 0; // 23
}
2018-04-04 Programowanie strukturalne – W1 26
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
•Pierwsze 2 wiersze tekstu stanowią komentarz (łańcuch znaków pomiędzy /* i */ ).
•Wiersze 3 - 5 - dyrektywy include preprocesora (poprzedza je znak #); polecają dołączyć w tymmiejscu do tekstu programu pliki nagłówkowe conio.h oraz stdio.h. W plikach tych znajdująsię definicje stałych i symboli oraz prototypy funkcji odpowiedzialnych za obsługę konsoli (plikconio.h) oraz standardowego wejścia-wyjścia (plik stdio.h). Znaki < > ograniczające nazwy tychplików oznaczają, że kompilator powinien szukać tych zbiorów w specjalnym katalogu o nazwieINCLUDE stanowiącym podkatalog katalogu, gdzie zlokalizowane są wszystkie elementy językaC/C++. Ograniczniki " " nazw plików nagłówkowych polecają kompilatorowi szukać tych zbiorów wbieżącej kartotece (tzw. katalogu roboczym).
• Wiersz 6 informuje o tym, że do poprawnego skompilowania i uruchomienia programu niezbędnajest tzw. "przestrzeń nazw" (biblioteka) std
•Wiersz 7 zawiera deklarację (nagłówek) funkcji głównej main.
•Wiersz 8 - nawias klamrowy otwierający blok, który stanowi "ciało" funkcji głównej
•W wierszu 9 znajdują się deklaracje i inicjacje zmiennych całkowitych typu char. Zmienną xAzainicjowano wartością dziesiętną kodu dużej litery A (wartość 65), a zmienną mY - znakiem y(wewnątrz maszyny jest on przechowywany jako liczba o wartości dziesiętnej 121).
•W wierszu 10 zadeklarowano i nadano wartości początkowe zmiennym x, y, z typucałkowitego bez znaku; zmiennej x nadano wartość dziesiętna 12101, zmiennej y - wartość 81zapisaną w postaci ósemkowej jako 0121; zmienna z będzie mieć wartość odpowiadającą liczbiedziesiętnej 250; w wyrażeniu inicjującym wartość tą zapisano w postaci stałej szesnastkowej jako0xfa.
2018-04-04 Programowanie strukturalne – W1 27
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
Wiersz 11 - deklaracja i inicjacja zmiennych q oraz r typu całkowitego krótkiego ze znakiem. Nadanoim wartości początkowe właściwe dla ich typów.
W wierszu 12 znajduje się deklaracja i inicjator zmiennej całkowitej długiej bez znaku dluga -nadano jej wartość początkową 234. Litery UL sygnalizują kompilatorowi, że powinien on zapisać tądaną w pamięci w postaci właściwej dla typu unsigned long. Zapobiega to ewentualnej zmianiesposobu zapisu w czasie wykonywania programu.
W wierszu 13 zadeklarowano i zainicjowano zmienną całkowitą po_co typu signed long int.
W wierszu 14 znajduje się wywołanie funkcji standardowej system("cls"); jej prototyp znajdujesię w pliku nagłówkowym stdlib.h, a jej zadaniem jest wykonanie polecenia systemuoperacyjnego, którego nazwa jest argumentem funkcji - będzie to "oczyszczenie" ekranu monitora zezbędnych napisów pochodzących np. z poprzednio wykonywanego programu i ustawienie kursora wlewym górnym rogu ekranu.
Wiersze 15 - 20 zawierają wywołania funkcji standardowej printf odpowiedzialnej za obsługęwyjścia z programu.
Funkcja printf obsługuje tzw. wyjście formatowane. Jest to funkcja o zmiennej liczbieargumentów. Pierwszym jej argumentem musi być łańcuch znaków zawierający znaki wyświetlane naekranie oraz tzw. kody formatujące, które określają sposób przedstawiania danych (sposóbtłumaczenia wyświetlanych danych z zapisu wewnętrznego, zero-jedynkowego, na postać czytelnądla człowieka). Kolejne argumenty tej funkcji to nazwy wyprowadzanych zmiennych.
2018-04-04 Programowanie strukturalne – W1 28
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
Wywołanie funkcji printf w wierszu 15 i 16 spowoduje wyświetlenie napisu Liczby:.
W następnym wierszu pojawią się nazwy zmiennych xA oraz mY i ich wartości (znaki A oraz y). Kody formatujące są zastępowane wartościami zmiennych użytych jako kolejne argumenty funkcji. Kod formatujący %c jest właściwy dla danych typu char.
Kod %u oznacza konwersję na postać zewnętrzną liczby całkowitej bez znaku.
Kod %o jest właściwy dla wartości w postaci ósemkowej, a kod %x odpowiada zmiennym o wartościach w postaci szesnastkowej (wiersz numer 17).
Ciąg znaków %d wykonuje konwersję na postać zewnętrzną liczb dziesiętnych (w tym przypadku chodzi o liczby całkowite krótkie ze znakiem).
Prototyp funkcji printf znajduje się w pliku nagłówkowym stdio.h.
Wiersz 20 wyświetla wartości zmiennych dluga oraz po_co; na ekranie będą poprzedzone napisami odpowiednio wartosc dluga = oraz po_co = . Kod formatujący %luodpowiada konwersji liczby całkowitej długiej bez znaku, a łańcuch %ld oznacza polecenie konwersji liczby całkowitej ze znakiem
W wierszu 21 ponownie wywołano funkcję system, tym razem z argumentem pause, która wyświetla komunikat "Aby kontynuować naciśnij dowolny klawisz…" i "czeka" na wpisanie do bufora klawiatury dowolnego znaku, a następnie wraca do wykonywania programu. Efektem jest "zatrzymanie" działania komputera do momentu naciśnięcia dowolnego klawisza. W ten sposób możemy odczytać z ekranu wyniki działania.
Instrukcja return 0 kończy działanie programu i powoduje powrót do systemu operacyjnego z kodem błędu o wartości 0.
2018-04-04 Programowanie strukturalne – W1 29
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
2018-04-04 Programowanie strukturalne – W1 30
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
Typy rzeczywiste są nieciągłymi podzbiorami zbioru liczb rzeczywistych. Ich rodzaje i zakresy wartości są następujące:
Typ/słowo kluczowe Rozmiar w bitach
Zakres od Zakres do
float 32 3,4*1038 3,4*1038
double 64 1,7*10308 1,7*10308
long double 80 3,4*104932 1,1*104932
Kilka przykładów deklaracji i inicjacji zmiennych rzeczywistych:
float blad = -12.3e-2; zmienna blad ma wartośćpoczątkową 0,123
double x, y = 18., z = .11e11; x nieokreślona, y wartość 18, z wartość 0,11*1011
long double r_dluga = -0.304e-607L; r_dluga wartość 0,304*10607 typu long double
float xc = 16.099e+32F; xc wartość 16,099*1032
2018-04-04 Programowanie strukturalne – W1 31
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
Wartości zmiennych rzeczywistych są standardowo przechowywane w postaciwłaściwej dla typu double - podobnie jak w przypadku liczb całkowitych,litery F, f, L, l umieszczane po liczbie w miejscu jej inicjacji zapobiegająwykonywaniu konwersji.
W języku C/C++ można deklarować i używać zmienne, które zamiast właściwej danejzawierają adres obszaru pamięci - miejsca przechowywania właściwej danej.
Obszar ten może być interpretowany jako zmienna określonego typu.
Zmienna zawierająca adres innej zmiennej nosi nazwę zmiennej wskaźnikowej lub krócejwskaźnika.
Zmienna, której adres zapisany jest w zmiennej wskaźnikowej to zmienna wskazywana.
Wskaźniki w języku C/C++ są wygodnym i często używanym mechanizmem; umożliwiają:• tworzenie i przetwarzanie tzw. dynamicznych struktur danych,• zarządzanie blokami pamięci, łańcuchami znaków i tablicami,• przekazywanie parametrów do i z funkcji.
2018-04-04 Programowanie strukturalne – W1 32
Programowanie strukturalne dr inż. Tadeusz Jeleniewski
/* Przyklad uzycia i dzialania zmiennych wskaznikowych */#include <stdio.h>#include <conio.h>#include <stdlib.h>using namespace std;int main(void){char znak = 'y', *w_znak = &znak;
// w_znak - wskaznik, adres zmiennej znakint numer = 113, *w_numer = &numer;
// w_numer - adres zmiennej numerdouble rzecz = 13.077e21, *w_rzecz = &rzecz;
// w_rzecz - adres zmiennej rzeczsystem("cls");printf("\n Wartosci zmiennych wskazywanych: \n %c, %d, %f",
znak, numer, rzecz);*w_znak = 'A';*w_numer = 251;*w_rzecz = -11.11e2;printf("\nNowe wartosci zmiennych wskazywanych:\n %c, %d, %f",
znak, numer, rzecz);system("pause");system("cls");return 0;
}