Podstawowe elementy programowania w C++
mgr Zofia Makara
22 października 2003
1
Funkcja main()
Każdy program zawiera fukcję
main(){}.
i od niej zaczyna wykonywanie programu. Instrukcje, które mają być przez
nią wykonywane zawarte są pomiędzy klamrami {}. Zbiór wszystkich in-
strukcji nazywa się ciałem funkci, wnętrzem funkcji lub jej treścią.
Przykładowy program
#include<iostream.h>
int main()
{
cout<<"Program wylicza sume dwoch liczb"<<endl;
cout<<"Podaj pierwsza liczbe: "<<endl;
float a, b, suma;
cin>> a;
cout<<"Podaj druga liczbe: "<<endl;
cin>>b;
suma = a+b;
cout<<"Suma wynosi: "<< suma << endl;
return 0;
}
Uwaga 1. endl - przenosi tekst do następnej linii.
Uwaga 2. Funkcja main (domyślnie) zwraca wartość typu int. Ponadto, może
posiadać argumenty.
2
Dwa słowa o bibliotekach i operacjach wejścia -
wyjścia
Polecenie
#include < nazwaP liku.h >
1
służy do dołączania tak zwanego pliku nagłówkowego. Pliki nagłókowe po-
siadają deklarację funkcji bibliotecznych. Po dołączeniu określonego pliku
nie tylko można korzystać z tam zdefiniowanych funkcji, ale ma się rów-
nież pewność, że kmpilator sprawdza poprawność wykorzystywanych przez
programistę funkcji.
Biblioteki służące do obsługi operacji wejścia-wyjścia:
• stdio.h - pozostałość, po C, używanie jej w C++ nie należy do ”do-
brego stylu programowania”;
• stream.h - ”starsz wersja” biblioteki iostream.h;
• iostream.h - obecnie używana biblioteka służąca do wykonywania
operacji wejścia wyjścia.
Za pomocą tej biblioteki można między innymi wyprowadzać i wprowa-
dzać informacje ze standardowych urządzeń wejścia (klawiatura) - wyjścia
(ekran).
Najczęściej stosowane instrukcje to:
cout << ”jakis tekst”;
powoduje wyświetlenie na ekranie tekstu zawatego w ”..” lub bezpośrednio
zmiennej lub stałej znajdującej się po operatorze ”«”.
cin >> zmienna;
powoduje wczytanie wartości zmiennej z klawiatury.
3
Typy fundamentalne (podstawowe)
Całkowite:
• short int (krótko: short);
• int;
• long int (krótko: long);
• enum - wylczeniowy;
Zmiennoprzecinkowe:
• short int (krótko: short);
• float;
• double;
2
• long double;
Znakowy:
• char;
Uwaga 3. signed, unsigned - ze znakiem lub bez znaku.
Uwaga 4. Programista można definiować również własne ”typy”.
Uwaga 5. Zmienne można definiować w dowolnym miejscu programu. (NA-
LEŻY JEDNAK ZWRACAĆ UWAGĘ NA ZAKRES TAK DEFINIOWA-
NYCH ZMIENNYCH).
4
Operatory
Operatory arytmetyczne:
• + - dodawanie;
• - - odejmowanie (lub zmiana znaku na przeciwny);
• * - mnożenie;
• / - dzielenie;
Operator modulo:
• % - rezszta z dzielenia;
Operatory inkrementacji i dekrementacji:
• ++ - zwiększenie o 1 (np. i++; oznacza i = i+1;);
• −− -zmiejszenie o 1(np. i–; oznacza i = i-1;);
Operatory przypisania:
• = - przypisanie wartości danej zmiennej;
• pozostałe (+= - dodawanie do zmiennej danej wartości, np. i+ = 3;
oznacza i = i + 3; *= - pomnożenie zmiennej przez daną wartość, np.
i∗ = 2; oznacza i = i ∗ 2; i inne);
Operatory logiczne:
• < -mniejszośći;
• > - większości;
• <= -mniejszośći lub równośći;
• >= - większości lub równości;
3
Operatory sumy i iloczynu logicznego:
• || - logiczne ”LUB”;
• && - logiczne ”I”;
Ponadto istnieją jeszcze inne operatory, np. bitowe.
5
Tablice
Tablice to ciąg obiektów określonego typu (np. int, float, char), które zajmu-
ją ciągły obszar w pamięci (długość obszaru zależy od ilości i typu obiektów).
Ilość elementów (nie tworzonej dynamicznie) tablicy jest stałą.
Elementy tablicy n−elementowej tablicy są numerowane od 0 do n − 1.
Uwaga 6. Próba zapisania elementu o numerze n spowoduje zniszczenie da-
nych znajdujących się w tym obszarze pamięci.
DEFINIOWANIE TABLICY:
typ nazwaT ablicy[iloscElementow];
ewentualnie
typ nazwaT ablicy[iloscElementow] = {wartosc1, ... , wartoscK};
Taka definicja zapewnia, ze pierwszym k-elementom zostaną przypisane po-
dane elementy od wartosc1 do wartoscK. Zaś:
typ nazwaT ablicy[] = {wartosc1, ... , wartoscK};
Pozwala na utworzenie tablicy k-elementowej o podanych wartościach.
SPOSOBY INICJALIZACJI TABLICY n−elementowej:
f or(i = 0; i < n; i + +) tablica[i] = wartoscI;
lub
f or(i = 0; i <= n − 1; i + +) tablica[i] = wartoscI;
lub
t[0] = wartosc1; t[1] = wartosc2; ... t[n − 1] = wartoscN ;
lub
jak zostało podane w przypadku definiowania;
4
6
Instrukcje warunkowe
Instrukcje warunkowe pozwalają na tworzenie programów, w których część
operacji zależna jest od tego, czy jakiś warunek jest spełniony, czy nie. W
C++ wartość logiczną fałsz reprezentuje zero (lub wyrażenie, które po wy-
liczeniu daje zero) i prawda - każda inna wartość.
W kodzie C++ zapisuje się jako:
if (wyrazenie) instrukcja;
lub
if (wyrazenie){
instrukcja1;
instrukcja2;
...
instrukcjaN;
}
co należy rozumieć jako:
jeżeli wyrażenie jest prawdziwe (przyjmuje wartość różną od zera) wykonuje
się instrukcja (lub ciąg N instrukcji), w przeciwnym wypadku nic nie jest
wykonywane.
Instrukcję warunkową stosuje się też jako:
if (wyrazenie) instrukcja1;
else instrukcja2;
lub
if (wyrazenie){
instrukcja1;
instrukcja2;
...
instrukcjaN;
}
else
{
instrukcjaK1;
instrukcjaK2;
...
instrukcjaKN;
}
co należy rozumieć jako:
jeżeli wyrażenie jest prawdziwe (przyjmuje wartość różną od zera) wykonuje
się instrukcja (lub ciąg N instrukcji) stojących między if i else, w przeciw-
nym wypadku wykonuje się instrukcja (ciąg instrukcji) stojących za else.
#include<iostream.h>
int main()
{
cout << "Podaj dowolna liczbe : " << endl;
5
int liczba = 0;
cin >> liczba;
if (liczba>0) cout << "Podana liczba jest dodatnia."<< endl;
else if(liczba<0)
cout << "Podana liczba jest ujemna."<< endl;
else cout << "Podana liczba to zero."<< endl;
return 0;
}
7
while, do..while, for
Pętla while pozwala na wykonywanie określonego ciągu instrukcji tak długo
jak długo prawdziwe jest jakieś wyrażenie.
W kodzie C++ zapisuje się jako:
while (wyrazenie) instrukcja;
lub
while (wyrazenie){
instrukcja1;
instrukcja2;
...
instrukcjaN;
}
co należy rozumieć jako:
Wykonuj instrukcję (lub ciągi instrukcji) dopóki prawdziwe jest dane wyra-
żenie.
Natomiast, pętla do..while pozwala na wykonywanie instrukcji (określone-
go ciągu instrukcji) tak długo, jak długo prawdziwe jest jakieś wyrażenie.
Różnica pomiędzy pętlą while i do..while polega na tym, że przed pierszym
sprawdzeniem warunku dany ciąg instrukcji zawsze zostaje wykonany w pętli
do..while, zaś w pętli while tylko w przypadku, gdy warunek jest prawdziwy.
W kodzie C++ zapisuje się jako:
do
instrukcja
while (wyrazenie);
lub
do {
instrukcja1;
instrukcja2;
...
instrukcjaN;
}
while (wyrazenie);
Przykładowy program:
6
#include<iostream.h>
int main()
{
cout << "Program wyznacza sumę podawanych liczb dodatnich : "<<endl;
cout << "Podanie liczby ujemnej spowoduje zakończenie sumowania!"<<endl;
int liczba = 1;
int suma = 0;
while (liczba>0)
{
cout << "Podaj dowolna liczbe dodtnią : "<<endl;
cin>>liczba;
suma += liczba;
}
cout << "Suma wynosi : "<<suma;
return 0;
}
Pętla for pozwala wykonywać instrukcję lub ciąg instrukcji, zaczynając od
instrukcji inicjującej pętli, kończąc wykonanie kiedy wyrażenie warunekowe
przestaje być prawdziwe. W między czasie dokonuje się obliczanie instrukcji
krokowej.
f or(instrukcjaInicjujca; wyraenieW arunkowe; instrukcjaKrokowa)
NAJPROSTRZA POSTAĆ PĘTLI f or:
f or(i = wartoscP oczatkowa; i < wartoscKoncowa; instrukcjaKrokowa)
instrukcja;
lub
f or(i = wartoscP oczatkowa; i < wartoscKoncowa; instrukcjaKrokowa)
{
instrukcja1;
...
instrukcjaN;
}
gdzie instrukcjaKrokowa może być wyrażeniem np.: i + +, i − −, lub podob-
nym.
#include<iostream.h>
int main()
{
7
cout << "Program liczący silnię liczby naturalnej n : "<<endl;
int i, n, silnia = 1;
cin >> n;
for(i = 1; i<=n; i++)
silnia = silnia*i;
cout << n<<"! = "<<silnia;
cin>>i;
return 0;
}
8
Funkcje
Oprócz funkcji main(), program może zawierać dowolną ilość funkcji, zwa-
nych również podprogramami. Dają one możliwość tworzenia znacznego
upraszczania i skracania kodu programu, jak również zwiększają jego przej-
rzystość.
Funkcja ma postać:
typZwracanejW artoci nazwaF unkcji(argumentW ywoania1, ..., argumentW ywoaniaN )
{
instrukcja1;
...
instrukcja1;
return wartosc;
}
wartosc - jest zmienną typu typZwracanejW artoci.
Można tworzyć funkcje, które nie zwracają, żadnej wartości wówczas jako
typZwracanejW artoci zapisuje się void (i nie ma instrukcji return war-
tość;). Można takżę tworzyc funkcje bezargumentowe, wówczas nawias z
argumentami jest pusty (ewentualnie można dopisać void).
#include<iostream.h>
float podajLiczbe()
{
cout<< "podaj liczbe : "<<endl;
float liczba = 0;
cin>>liczba;
return liczba;
}
int main()
{
int n=21;
while (n>20){
8
cout << "Program sumuje kwadraty n liczb"<< endl<< "podaj n <= 20"<<endl;
cin>>n;
}
int i = 0;
float suma = 0;
float liczby[20];
for (i = 0; i<n; i++)
{
liczby[i] = podajLiczbe();
}
for (i = 0; i<n; i++)
suma += liczby[i]*liczby[i];
cout<< "Suma wynosi:"<< suma;
cin>>suma;
}
9