You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 14 Next »

Yleistä

Kun jotain koodin osaa halutaan toistaa ennalta tiedetty määrä kertoja tai ennalta tuntematon määrä, niin voimme käyttää toistorakennetta.

C-kielessä on kolme toistorakennetta:

  1. for
  2. do...while
  3. while

for-silmukka

For-rakennetta kannattaa käyttää, jos toistojen määrä tiedetään ohjelmassa, ennen kuin toistot aloitetaan.

  • For-lauseessa toistojen lukumäärää hallitaan ohjelmassa olevan toistolaskurin avulla.
  • Se määritellään yleensä kokonaislukumuuttujana, jolle annetaan nimi i:
    int i;
  • Toistot päätetään, kun laskuri on ylittänyt sovitun loppuarvon.
  • Jos for-silmukoita on sisäkkäin, tarvitaan useita laskureita.
  • Sisempien silmukoiden laskureille voidaan käyttää nimiä j ja k.

Toistolaskurin käsittely

Laskuriin kohdistuu kolme oleellista operaatiota. Nämä ovat:

  1. laskurin alkuarvon asettaminen (alkutoimet)
  2. laskurin arvon vertaaminen loppuarvoon (toistoehto)
  3. laskurin arvon kasvattaminen yhdellä (lopputoimet)

Nämä kaikki asiat tehdään for-lauseen alussa sulkujen sisällä:

    for (i=1; i<=N; i++)
  • alkuarvon asettaminen tehdään kerran (ennen 1. toistoa)
  • toistoehto tutkitaan ennen kunkin toistokerran alkua
  • laskurin arvoa kasvatetaan kunkin toistokerran päätteeksi

Syntaksi

For-rakenteen kieliopillisesta muodosta on oleellista huomata että kaikki kolme toistoa ohjaavaa operaatiota kirjoitetaan for-riville sulkujen sisään:

for (alkutoimet; toistoehto; lopputoimet)
{
    lauseita;
}

Esimerkki

Seuraavassa for-silmukassa tulostetaan i:n arvot (0...9) ruudulle:

int i;
for (i=0; i<10; i++)
{
    printf("\n i = %d",i);
}

do...while

do...while- toistorakennetta käytetään silloin, kun silmukkaan täytyy mennä kerran, vaikka silmukassa oloehto ei olisikaan tosi. do...while-rakennetta sanotaan loppuehtoiseksi toistorakenteeksi.

do
{
   toiminnot silmukan sisällä;
}
while (silmukassa olo ehto);

Esimerkki

int i=0;
do
{
    printf("\ni = %d",i);
}
while (i<10);

while

while-toistorakennetta käytetään silloin, kun silmukkaan ei mennä alkuehdon ollessa epätosi. while-rakennetta sanotaan alkuehtoiseksi while-silmukaksi.

while (silmukassa olo ehto)
{
    toiminnot silmukan sisällä;
}

Esimerkki

int i=0;
while (i<10)
{
   printf("\ni = %d",i);
   i++;
}

"Ikuinen" silmukka

Seuraavassa on esimerkki ikuisen silmukan ja if sekä else- lauseiden käytöstä. Ikuista silmukkaa tarvitaan hyvin usein ohjelmassa, kun ennalta ei tiedetä koska ohjelmasta tulisi poistua. Tyypillisesti ikuisesta silmukasta poistutaan break tai return käskyillä.

/* Ohjelma, joka tulostaa millä välillä annettu luku on.
 * Lukuvälit ovat <10, 10-100 ja >100.
 * Käytetään ohjelmassa if, else if ja else -lauseita.
 */

#include <stdio.h>
#include <conio.h>

int main()
{
   int Luku;
   while (1) // "ikuinen" silmukka
   {
      printf("\nAnna jokin luku: ");
      scanf("%d",&Luku);

      if (Luku < 10)                      printf("Luku on < 10");
      else if (Luku >= 10 && Luku <= 100) printf("Luku on 10...100");
      else                               printf("Luku on > 100");

      if (Luku == 500) break; // poistutaan silmukasta, kun käyttäjä antaa luvun 500
   }
   return 1;
}
  • No labels
You must log in to comment.