Lataa esitys
Esittely latautuu. Ole hyvä ja odota
JulkaistuTuula Kivelä Muutettu yli 9 vuotta sitten
1
Ohjausrakenteet Määräävät ohjelmakoodin suoritusjärjestyksen Ehtolause if – else on muotoa if (lauseke) lause1 else lause2 Jos lauseke on tosi, niin suoritetaan lause1 muutoin suoritetaan valinnainen lause2 else liitetään aina lähimpään if-lauseeseen, jolla ei ole else-osaa
2
Monihaarainen päätös else if lausella if (lauseke1) lause1 else if (lauseke2) lause2 else if (lauseke3) lause 3 else lause
3
Monihaarainen päätös switch-lauseen avulla switch (lauseke){ case vakio1: lausejoukko1 break; case vakio2: lausejoukko1 break; default: lausejoukko break; } (lauseke) == vakio1 (lauseke) == vakio2 ilman break lausetta ohjelman suoritus jatkuisi lausejoukkoon2 valinnainen, hypätään tänne mikäli (lauseke) ei vastaa mitään case:ssa luetelluista arvoista
4
while Lause toistetaan niin kauan kun (lauseke) on tosi while(lauseke) lause Kopioidaan merkkijono lahde merkkijonoon kohde while(*kohde++=*lahde++); Lasketaan merkkijonon mj pituus while(*kohde++);
5
for for(lauseke1; lauseke2; lauseke3) lause lauseke1 suoritetaan aluksi lause toistetaan niin kauan kun lauseke2 on tosi jokaisen toistokerran jälkeen suoritetaan lauseke3
6
do - while do lause while (lauseke); lause suoritetaan aina vähintään yhden kerran Toiston määräävä lauseke arvioidaan vasta suorituksen jälkeen
7
for – continue - break for (i=0; i < 10; i++){ if(i%2 == 0) continue; if(i==7) break; printf(”%i\n”, i); } ohjelma tulostaa: 1 3 5
8
Funktiot extern int funktio(int a, char *m){ return 0; } Ohjelman suoritus alkaa funktiosta main() funktion määrittelyssä tarvitaan 1. paluuarvon tyyppi 2. kutsuparametrien tyyppi ja määrä 3. näkyvyys määrittelytiedoston ulkopuolella 4. suoritetaan ohjelmakoodi 1 2 4 3
9
Funktion muistimääritteet extern funktion esittelyn edessä => etsitään funktion määrittelyä myös toisista lähdekooditiedostoista static funktion esittelyn edessä => funktiota ei voida käytää/tietää kyseisen lähdekooditiedoston ulkopuolella extern on oletusarvoinen muistimäärite
10
Funktion esittely int f(void); int f(); ei parametrejä, palauttaa int:n ei tietoa parametreistä, palauttaa int:n int *f(void); ei parametrejä, palauttaa osoittimen int:n Ilman funktion esittelyä ei funktion argumenttien määrää eikä tyyppiä tarkisteta
11
Funktio esimerkki extern double a; static double palauta(void){ return (a + 1.0); } double arvo(double l){ return l + palauta(); } const double a = 1.0; extern double arvo(double); int main(void){ int b; b = (int)arvo(a); return b; } testi.crutiini.c Kääntäminen: gcc –o testi testi.c rutiini.c Ohjelman paluuarvo: echo $?
12
Funktioihin viittaaminen osoittimien avulla Funktiota ei voi välittää parametrina funktiolle Osoittimen funktioon voi välittää parametrina funktiolle Käytetään esim. qsort() kirjastofunktiossa osoittimena vertailufunktioon => Ei tarvita eri lajittelufunktiota eri tyypeille int (*f)(); f on osoitin funktioon, joka palauttaa int:n
13
Esimerkki funktio-osoittimesta extern int arvo(double); int (*pf)(double) = arvo; int main(void){ int i= (*pf )(1.0); return 0; } Osoitin funktioon jonka ainoana parametrinä on double ja joka palauttaa int:n
14
Osoitintaulukot double *g[3]; *g[0] = 1.0; varaa muistia kolmelle osoittimelle double tyyppisiin muuttujiin g[0]:aa ei ole alustettu, joten sijoituslause ei toimi Käytetään tavallisesti dynaamisen muistin varauksen yhteydessä Voidaan käyttää myös merkkijonojen talletukseen char *h[] = {”eka”, ”toka”, ”kolmas”, NULL};
15
Tietueiden välittäminen funktiolle Tietuemuuttuja voidaan välittää funktioon argumettina Paluuarvon tyyppinä voi olla tietuetyyppi struct tietue_t funktio(struct tietue_t); Funktiolle voidaan myös valittää tietueen osoite void funktio(struct tietue_t *);
16
typedef määrittää synonyymin typedef unsigned char cc_t; määritelmän jälkeen cc_t vastaa unsigned char:a Alla määritellään tietotyyppi DBT joka on siis tietue typedef struct { void *data; int datan_pituus; } DBT; mikäli määritelmä alkaisi typedef struct dbt{ niin DBT olisi synonyymi struct dbt:lle
17
typedef typedef:n avulla koodin lukemista voidaan helpottaa typedef void signal_handler(int); signal_handler *signal(int, signal_handler*); signal_handler on funktion jonka argumenttina on int ja paluuarvoa ei ole signal on funktio argumentteinaan int ja osoitin signal_handler:iin, joka on myös paluuarvo Sama signal määritelmä ilman typedef:ä void (*signal(int, void(*)(int)))(int);
Samankaltaiset esitykset
© 2024 SlidePlayer.fi Inc.
All rights reserved.