for-toistorakenne
For-rakennetta kannattaa käyttää, jos toistojen määrä tiedetään ohjelmassa, ennen kuin toistot aloitetaan.
- For-lauseessa toistojen lukumäärää hallitaan yleensä ohjelmassa olevan toistolaskurin avulla.
-> Se määritellään yleensä kokonaislukumuuttujana, jolle annetaan nimii
. - Toistot päätetään, kun laskuri on saavuttanut sovitun loppuarvon (loppuarvo voi olla vakio tai muuttuja).
Syntaksi
For-rakenteen kieliopillisesta muodosta on oleellista huomata, että kaikki kolme toistoa ohjaavaa operaatiota kirjoitetaan for-riville sulkujen sisään:
Code Block |
---|
for (alkutoimet; toistoehto; lopputoimet) { lauseita; } |
...
...
Toistolaskurin käsittely
Laskuriin kohdistuu kolme oleellista operaatiota. Nämä ovat:
...
| Toimet | Merkitys |
---|---|---|
1. | alkutoimet | Laskurin alkuarvon asettaminen |
2. | toistoehto | Laskurin arvon vertaaminen loppuarvoon |
3. | lopputoimet | Laskurin arvon kasvattaminen |
...
Nämä kaikki asiat tehdään for-lauseen alussa sulkujen sisällä:
...
- alkuarvon asettaminen tehdään kerran (ennen 1. toistoa)
- toistoehto tutkitaan ennen kunkin toistokerran alkua
- laskurin arvoa kasvatetaan kunkin toistokerran päätteeksi
– - Jos for-silmukoita on sisäkkäin, tarvitaan useita laskureita. Kts #Esimerkki 2.
- Sisempien silmukoiden laskureille voidaan käyttää nimiä
j
jak
, jne.
Esimerkki 1
Ohjelman pätkä, joka tulostaa arvot 0...9 allekain ruudulle käyttäen for-toistorakennetta:
...
Ohjelma, jossa tulostetaan kymmenen kertotaulu käyttäen sisäkkäisiä for-rakenteita:
Note |
---|
Ohjelmassa käytetään samaa laskuria |
Code Block |
---|
#include <stdio.h> int main() { int i, j; // for-rakenteiden laskurit printf(" |"); // alkumuotoilut for (i=1; i<=10; i++) printf("%3d ", i); // tulostetaan ylärivin luvu 1...10 printf("\n--------------------------------------------"); // tulostetaan rivinvaihto ja 40 '-' -merkkiä for (i=1; i<=10; i++) // ulompi silmukka, käydään arvot 1...10 läpi { printf("\n%3d|", i); // tulostetaan vasempaan laitaan luku, millä kerrotaan ylärivin luvut for (j=1; j<=10; j++) // sisempi silmukka, jossa kerrotaan luvuilla 1...10 ulomman silmukan laskuri { printf("%3d ", i*j); // tulostetaan laskenta i*j ruudulle } } printf("\n"); // loppuun rivinvaihto } |
Ohjelma tulostaa seuraavan taulukon:
...