C! Perusteet 19.1.2017
Palautteesta (1. kierros toistaiseksi) (Erittäin) helppoa Miksi vain puolet pisteistä? Vaikeinta oli ohjelmointiympäristön asennus ja käyttö Ei selvää että main funktion pitikin palauttaa nolla Vaikeaa eroavuudet Pythonin ja C:n välillä Akateemisten pisteiden jakaminen palautteesta on typerää Tietotyyppien välisten erojen hahmottaminen vaikeaa 2
Palautteesta (1. kierros toistaiseksi) En löytänyt kaikkea tarvitsemaani tietoa, päädyin hakemaan Googlesta Assarit ammattitaitoisia ja mukavia, Slack hyvä Safarilla ongelmia TIM:n kälin kanssa Sivujen ulkoasua voisi parantaa Liian minimaalinen palaute joissain tehtävissä 3
Komentorivikomentoja ls näytä nykyisen hakemiston sisältö cd <hakemisto> siirry annettuun hakemistoon cd.. takaisin ylempään hakemistoon pwd näytä mikä on uusi hakemisto emacs <tiedosto> editoi tiedostoa käyttäen emacsia rm <tiedosto> poista annettu tiedosto Kätevää: TAB täydentää tiedoston/hakemiston nimen 5
Muuttujat ja niiden esittely C-kielessä muuttujat pitää esitellä ennen käyttöönottoa Määritellään muuttujan tietotyyppi Kääntäjä varaa muuttujalle tarvittavan tilan muistista Muuttujaa ei voi käyttää ennenkuin se on esitelty Muuttujan nimi koostuu kirjaimista, numeroista ja alaviivasta Nimen alettava kirjaimella muuttuja ja Muuttuja ovat kaksi eri nimeä int var_a; int muuttuja = 10; double value1, value2; 6
Kokonaislukutietotyypit 8 bittiä = 1 tavu char -128 127 unsigned char 0 255 16 bittiä = 2 tavua short -32768 32767 unsigned short 0 65535 32 bittiä = 4 tavua int -2 31 2 31 unsigned int 0 2 32 long unsigned long 64 bittiä = 8 tavua...... -2 63 2 63 0 2 64 7
Kokonaislukuvakioista Voidaan käyttää eri lukujärjestelmiä 10-lukujärjestelmä: int number = 66; 16-lukujärjestelmä (arvo alkaa 0x-etuliitteellä) int number = 0x42; 8-lukujärjestelmä (arvo alkaa numerolla 0) int number = 0102; Myös merkkivakioita voidaan käyttää int number = B ; Vastaavat jotain numeroa (konvertoituu merkistön mukaan) A Z peräkkäisillä numeroarvoilla (ASCII: 65-90) 0 9 peräkkäisiä (ASCII: 48 57) 8
ASCII merkistö (+ vähän muutakin) 9
Liukulukutyypit Voidaan käyttää desimaalilukujen, tai suurten lukujen käsittelyyn Sisäisesti koostuu kolmesta komponentista Merkkibitti, eksponentti, mantissa (-1) merkkibitti * 1.mantissa * 2 eksponentti Kaksi eri kokoista tyyppiä float: 32 bittiä (1 + 23 + 8) double: 64 bittiä (1 + 52 + 11) Kaikkia lukuja ei voi esittää Liukuluku on jotain sinne päin 10
Laskuoperaatiot +, -, *, /, % käytetään kuten useimmissa muissa ohjelmointikielissä Samoin sulkeet lisää yhdellä tai vähennä yhdellä Postfix-operaattori: muuttuja++ ja muuttuja-- Prefix-operaattori: ++muuttuja ja --muuttuja Ero: saako lauseke uuden vai vanhan arvon Lisäksi sijoitusoperaattori muuttuja -= 2 on sama kuin muuttuja = muuttuja - 2 Sama toimii myös muille yllämainituille operaattoreille 11
Mikä tyyppi? 7:n kertotaulun läpikäyminen luvuilla 1 10? Nopeusmittari? Verkkokaupan tuotteiden varastosaldo? Ulkolämpötilan mittaaminen? Suomalaisten aakkosten läpikäyminen ja tulostaminen? Kiinalaisten merkkien luetteloiminen ja tulostaminen? char unsigned char short unsigned short int unsigned int long unsigned long float double 12
13
Funktiot 14
Tiedon tulostus ja syöttäminen 18
Syötteen lukeminen scanf - funktiolla Formaatti näyttää samalta kuin printf:n kanssa Pitkälti samat muotoilumääreet (mutta pieniä eroja) Scanf ei palauta luettua arvoa Paluuarvo: onnistuneesti luettujen kenttien lukumäärä Useimmissa tapauksissa välilyönnit ja rivinvaihdot sivuutetaan Poikkeus: yhden merkin (%c) lukeminen Scanf poistuu heti kun tarpeellinen määrä on luettu Jos käyttäjä syötti enemmän, seuraava scanf-kutsu nappaa ne Huomaa & - operaattori (address-of) 20
Ehtolausekkeet 23
Loogiset operaattorit <, <=, >, >= käytetään kuten yleensä == yhtä suuri kuin!= eri suuri kuin Looginen JA, TAI, EI &&: looginen JA (a < 5 && b < 5) on tosi jos sekä a ja b ovat < 5 looginen TAI (a < 5 b < 5) on tosi, jos jompi kumpi on < 5! Looginen EI --!(a < 5) on tosi jos a ei ole pienempi kuin 5 Tuottavat arvon 0 (epätosi) tai 1 (tosi) C:ssä ei erillisiä tosi ja epätosi arvoja Esimerkiksi sijoitus muuttujaan on mahdollinen: int result = (a == 5); // lopputulos 0 tai 1 24
If else rakenne Kun if - ehto toteutuu, suoritetaan seuraava lauseke tai lohko Muussa tapauksessa hypätään sen yli if (lauseke) toteutuu kun lauseke on jotain muuta kuin 0 (eli tosi ) if (!lauseke) toteutuu vain kun lauseke on 0 Voidaan käyttää muuttujan arvon testaamiseen tai loogisten operaatioiden yhteydessä else haara optionaalinen Vaihtoehtoinen toiminta, mikäli if ei toteudu Mahdollista lisätä useita else if - haaroja 25
Toistolausekkeet 27
While - lauserakenne Vähän kuin if, mutta lauseke tai lohko toistuu kunnes ehto on epätosi If suorittaa lausekkeen vain kerran, mikäli ehto on tosi Toistuu kymmenen kertaa: int a = 0; while (a < 10) { printf("value of a is now %d\n", a); a++; } 28
While ja do while Ei suorita lohkon sisältöä lainkaan: int a = 20; while (a < 10) { printf("value of a is now %d\n", a); a++; } Suorittaa yhden kerran: int a = 20; do { printf("value of a is now %d\n", a); a++; } while (a < 10); 29
While ja For expression_1; while (expression_2) { statement expression_3; } on sama kuin: for (expression_1; expression_2; expression_3) statement (toki kaarisulkuja voi käyttää for:in kanssa) 30
While ja For int a = 0; while (a < 10) { printf("value of a is now %d\n", a); a++; } on sama kuin: int a; for (a = 0; a < 10; a++) { printf("value of a is now %d\n", a); } Ikuinen silmukka: for (;;) { } 31
Break Sisimmästä toisto- tai switch-rakenteesta suoraan poistuminen Suoritus jatkuu rakennetta seuraavalta riviltä int a; for (a = 0; a < 10; a++) { printf("value of a is now %d\n", a); if (a == 5) break; } Toistolauseke keskeytyy kun a:n arvo on 5 32
Continue Suoritus siirtyy toistolausekkeen seuraavan kierroksen alkuun For-lausekkeen muutosehto suoritetaan int a; for (a = 0; a < 10; a++) { if (a % 2 == 1) continue; printf("value of a is now %d\n", a); } Tulostaa vain parilliset numerot 33