C++-ohjelmoinnin aloittaminen
Kontrollirakenteet ja operaattorit
Kuten Pythonissa, myös C++:ssa on kontrollirakenteita valintaa ja toistoa varten. Tässä kohdassa vertaillaan ensin kielten if- ja while-lauseita. Sen jälkeen tutustutaan yhteen tapaan käyttää C++:n for-silmukkaa ja esitellään lyhyesti C++:n operaattoreita.
Vertaile seuraavien esimerkkiohjelmien avulla C++:n valinta- ja silmukkarakenteita Pythonin vastaaviin:
Python
def main(): salaluku = int(input("Syötä salainen luku: ")) arvattu_luku = -1 arvausten_maara = 0 while salaluku != arvattu_luku: arvattu_luku = int(input("Anna arvaus: ")) arvausten_maara += 1 if arvattu_luku < salaluku: print("Arvaus on liian pieni!") elif arvattu_luku > salaluku: print("Arvaus on liian suuri!") else: print("Arvasit oikein!") print("Arvausten lukumäärä: ", arvausten_maara) main()
C++
#include <iostream> using namespace std; int main() { int salaluku = 0; cout << "Syota salainen luku: "; cin >> salaluku; int arvattu_luku = -1; int arvausten_maara = 0; while (salaluku != arvattu_luku) { cout << "Anna arvaus: "; cin >> arvattu_luku; arvausten_maara += 1; if (arvattu_luku < salaluku) { cout << "Arvaus on liian pieni!" << endl; } else if (arvattu_luku > salaluku) { cout << "Arvaus on liian suuri!" << endl; } else { cout << "Arvasit oikein!" << endl; } } cout << "Arvausten lukumaara: " << arvausten_maara << endl; }
Puolipisteitä, sulkeita ja muita syntaktisia eroja lukuun ottamatta esimerkit toimivat samalla tavalla. Tämä havainnollistaa, että ohjelmoinnin käsitteet, kuten toisto, säilyvät samoina ohjelmointikielestä toiseen.
Aaltosulkeet C++:ssa
C++:ssa lohkoa ympäröivät aaltosulkeet voidaan jättää pois, jos lohkossa on vain yksi käsky. Esimerkiksi:
int i = 0; while (i < 10) { ++i; } cout << i << endl;
voidaan lyhentää muotoon:
int i = 0; while (i < 10) ++i; cout << i << endl;
Aaltosulkeet kannattaa yleensä säilyttää, sillä niiden unohtuminen voi aiheuttaa vaikeasti löydettäviä virheitä. Ilman aaltosulkeita vain seuraava käsky kuuluu silmukkaan, vaikka seuraavat rivit olisi sisennetty näyttämään lohkon osilta:
int i = 0; while (i < 10) ++i; cout << i << endl; // Suoritetaan vain kerran silmukan jälkeen cout << "Hommat jatkuvat silmukan jälkeen" << endl;
Ensimmäinen cout-käsky ei kuulu silmukkaan. Aaltosulkeiden puuttuessa lohkoon kuuluu vain yksi käsky, tässä tapauksessa ++i;. Ensimmäinen tulostus suoritetaan kerran, kun silmukka päättyy ja suoritus jatkuu seuraavasta käskystä.
C++-kääntäjä ei päättele käskyjen ryhmittelyä rivinvaihdoista. Aaltosulkeet voidaan sijoittaa esimerkiksi näin:
if (x) {
...
}
Tai näin:
if (x)
{
...
}
Kumpikin tyyli käy. Ole johdonmukainen ja käytä samaa tyyliä koko ohjelmassa, erityisesti kontrollirakenteissa.
Varoitus: poikkeukset
Pythonissa olet ehkä käyttänyt poikkeusmekanismia eli try-rakennetta esimerkiksi ehtolauseen sijaan. Älä käytä C++:n poikkeusmekanismia tällä kurssilla, ellet varmasti osaa sitä. Sen käyttö opetetaan vasta seuraavalla ohjelmointikurssilla.
for-silmukka
C++:ssa on for-silmukka, jolla on useita käyttötapoja. Se sopii erityisesti tietorakenteiden alkioiden läpikäyntiin. Näitä käyttötapoja käsitellään myöhemmin, kun tietorakenteet ovat tuttuja.
Voit käyttää for-silmukkaa jo tämän kierroksen tehtävissä kokonaislukuvälin läpikäyntiin:
for (int luku = 5; luku < 10; ++luku) { cout << 9 * luku << endl; }
Tämä vastaa seuraavaa Python-rakennetta:
for luku in range(5, 10): print(9 * luku)
Silmukan suorituksen ohjaaminen
Silmukan suoritus päättyy, kun sen ehto muuttuu epätodeksi. C++:ssa on myös muita käskyjä, joilla silmukan suoritusta voi ohjata:
break;lopettaa sisimmän silmukan ja siirtää suorituksen silmukan jälkeiseen käskyyn. Sisäkkäisissä silmukoissa ulompi silmukka jatkaa suoritustaan.continue;ohittaa silmukan nykyisen kierroksen loput käskyt ja siirtyy seuraavalle kierrokselle, jos silmukan ehto on yhä voimassa.return;lopettaa koko funktion suorituksen ja palaa kutsukohtaan. Jos se suoritetaan silmukan sisällä, myös silmukka päättyy. Paluuarvollisen funktion on palautettava arvo.
Vertailu- ja sijoitusoperaattorit
Esimerkkien ehdoissa käytetään vertailuoperaattoreita. C++:n operaattorit ==, !=, <, <=, > ja >= tarkoittavat samaa kuin Pythonin vastaavat operaattorit. C++:ssa on myös sijoitusoperaattorit +=, -=, *= ja /=.
Inkrementointi- ja aritmeettiset operaattorit
Inkrementointioperaattori ++ kasvattaa muuttujan arvoa yhdellä. Dekrementointioperaattori -- vähentää arvoa yhdellä. Käytä näitä operaattoreita mieluiten yksinään omassa käskyssään, sillä yhdistäminen muihin operaattoreihin voi johtaa yllättäviin tuloksiin.
C++:ssa ovat myös tavalliset yhteen-, vähennys-, kerto- ja jakolaskuoperaattorit. Operaattori % laskee kokonaislukujen jakojäännöksen. Kokonaisluvuilla operaattori / suorittaa kokonaislukujen jakolaskun: esimerkiksi 7 / 3 on 2 ja 1 / 5 on 0.
Loogiset operaattorit
C++:n loogiset operaattorit vastaavat Pythonin operaattoreita:
- looginen negaatio: Pythonin
not avastaa C++:n!a - looginen ja: Pythonin
a and bvastaa C++:na && b - looginen tai: Pythonin
a or bvastaa C++:na || b
&& ja || ovat oikosulkuoperaattoreita. Jälkimmäistä operandia ei suoriteta, jos tulos tiedetään jo ensimmäisen perusteella. Esimerkiksi false && a on epätosi arvosta a riippumatta, ja true || a on tosi arvosta a riippumatta.
Loogisten operaattorien && ja || biteittäiset vastineet ovat & ja |. Ne vertailevat operandien bittejä. C++:ssa on myös biteittäinen ^-operaattori. Tällä kurssilla ei tarvitse käyttää bittioperaattoreita.
C++:ssa ei ole potenssiin korottavaa operaattoria.
Video: inkrementointioperaattori
C++:n inkrementointioperaattori (++) on kätevä, mutta sen käyttöön liittyy sudenkuoppia.