Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Samankaltaiset tiedostot
Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Tietotyypit ja operaattorit

Luennon sisältö Tyypit int, char, float, double signed, unsigned short, long Vakiot const Rakenteet if, for, while, switch, do-while Syöttö ja tulostu

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Loppukurssin järjestelyt

Loppukurssin järjestelyt C:n edistyneet piirteet

C-kurssi kevät Luennon sisältö

Luennon sisältö. C-kurssi kevät Tasokokeen kohta 1: Taulukon järjestäminen. Tasokokeen kohta 2. Tasokokeen kohta 2. Tasokokeen kohta 3

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

C-kurssi syksy ltö. Luennon sisält. Luento 2: tyypit, rakenteet, makrot Tyypit. signed, unsigned short,, long Vakiot const Rakenteet

Luennon sisält. ltö. C-kurssi syksy ääreet: int ja char. Yksinkertaiset tyypit. Kokonaisluvut. Merkit

Ohjausrakenteet. Valinta:

Ohjelmointiharjoituksia Arduino-ympäristössä

Tietueet. Tietueiden määrittely

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

Luento 5. Timo Savola. 28. huhtikuuta 2006

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

1. Omat operaatiot 1.1

Moduli 5: Kehittyneitä piirteitä

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

Java-kielen perusteet

Binäärioperaatiot Tiedostot ja I/O

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

11. Javan toistorakenteet 11.1

Java-kielen perusteet

1. luento. Ohjelmointi (C) T0004 Syksy luento. 1. luento. 1. luento. 1. luento. kurssin sisältö ja tavoitteet työmuodot.

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Alkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

12. Javan toistorakenteet 12.1

Binäärioperaatiot Tiedostot ja I/O

Osoittimet ja taulukot

Moduli 4: Moniulotteiset taulukot & Bittioperaatiot

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

12. Javan toistorakenteet 12.1

5. HelloWorld-ohjelma 5.1

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

Harjoitus 3 (viikko 39)

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

5/20: Algoritmirakenteita III

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Dynaaminen muisti. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät 2017.

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

ITKP102 Ohjelmointi 1 (6 op)

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

Harjoitus 5 (viikko 41)

// // whiledemov1.c // #include <stdio.h> int main(void){ int luku1 = -1; int luku2 = -1;

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Ohjelmoinnin perusteet Y Python

Tietorakenteet ja algoritmit

Muuttujat ja kontrolli. Ville Sundberg

13. Loogiset operaatiot 13.1

C-kurssi kevät t Luento 2: tyypit, rakenteet, makrot

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten

16. Ohjelmoinnin tekniikkaa 16.1

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

Tyyppejä ja vähän muutakin. TIEA341 Funktio ohjelmointi 1 Syksy 2005

VIII. Osa. Liitteet. Liitteet Suoritusjärjestys Varatut sanat Binääri- ja heksamuoto

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

16. Ohjelmoinnin tekniikkaa 16.1

5.6. C-kielen perusteet, osa 6/8, Taulukko , pva, kuvat jma

Fortran 90/95. + sopii erityisesti numeriikkaan:

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

Sisällys. 17. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. for-lause lyhemmin

Harjoitus 2 (viikko 45)

Lyhyt kertaus osoittimista

Java-kielen perusteita

Harjoitus 5. Esimerkki ohjelman toiminnasta: Lausekielinen ohjelmointi I Kesä 2018 Avoin yliopisto 1 / 5

Muuttujatyypit ovat Boolean, Byte, Integer, Long, Double, Currency, Date, Object, String, Variant (oletus)

ITKP102 Ohjelmointi 1 (6 op)

811120P Diskreetit rakenteet

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Sisältö. 2. Taulukot. Yleistä. Yleistä

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Dynaaminen muisti Rakenteiset tietotyypit

Tietorakenteet ja algoritmit

19. Olio-ohjelmointia Javalla 19.1

Java-kielen perusteita

P e d a c o d e ohjelmointikoulutus verkossa

ITKP102 Ohjelmointi 1 (6 op)

Harjoitus 4 (viikko 47)

tietueet eri tyyppisiä tietoja saman muuttujan arvoiksi

Tietuetyypin määrittely toteutetaan C-kielessä struct-rakenteena seuraavalla tavalla:

Johdatus ohjelmointiin / Lausekielinen ohjelmointi 1 & 2

Ohjelmoinnin perusteet Y Python

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

Python-ohjelmointi Harjoitus 2

Rakenteiset tietotyypit Moniulotteiset taulukot

TAITAJA 2007 ELEKTRONIIKKAFINAALI KILPAILIJAN TEHTÄVÄT. Kilpailijan nimi / Nro:

Kielioppia: toisin kuin Javassa

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

11. Javan valintarakenteet 11.1

Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö. Muistin käyttö C-ohjelmassa

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

Transkriptio:

C! Perusteet 19.1.2015

Työkaluista Perinteinen: komentorivi + tekstieditori Editori: esimerkiksi Kate, Notepad++, Aquamacs (Emacs) Ohjelman kääntäminen ja suorittaminen komentoriviterminaalissa TMC - komentorivityökalu Integroitu kehitysympäristö (IDE) Kaikki toiminnot yhdessä paketissa Netbeansiin saatavilla TMC-plugin tehtävien palauttamiseen Netbeans vaatii JDK 7:n toimiakseen Aallon Linux-järjestelmissä valmiiksi asennettuna Ohjeita: https://src.aalto.fi/c/instructions/ 2

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 3

emacs komentoja (erittäin lyhyt versio) Ctrl+x ja Ctrl+s Tallenna tiedosto Ctrl+x ja Ctrl+c Sulje emacs 4

tmc.py -- työkalu (katso tmc.py - asennus ohjeista, myös Aallon koneet) tmc configure valitse kurssi, anna käyttäjätunnus tmc select valitse tehtävä Editoi (esim. emacs)-> sen jälkeen make make run-main testaa käyttäen src/main.c tiedostoa tmc test aja testit paikallisesti tmc submit lähetä palvelimelle tmc submit --paste laita pastebiniin 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 -127 127 unsigned char 0 255 16 bittiä = 2 tavua short -32767 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

Tiedon tulostus ja syöttäminen 14

Printf ja muotoilumääritteet Koodi: #include <stdio.h>! int main(void)! {! int numa = 10;! float numb = 2.54;! float numc = 0.000001;! printf("the following is at least five characters long: [%5d]\n", numa);! printf("the length is six, but just one decimal shown: [%6.1f]\n", numb);! printf("another floating point number, aligned left: [%-10.2e]\n", numc);! printf("number with leading zeros: [%05d]\n", ++numa);! }! Tuloste: The following field is at least five characters long: [ 10]! The length is six, but just one decimal shown: [ 2.5]! Another floating point number, aligned left: [1.00e-06 ]! Number with leading zeros: [00011]! 15

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) 16

Scanf - esimerkki #include <stdio.h>! int main()! {! int a;! float b, c;! char onechar;! int ret_a, ret_b;!! ret_a = scanf("%d", &a);! ret_b = scanf("%f,%f", &b, &c);!! if (ret_b < 2) {! /* reading failed, show error */! }! if (scanf("%c", &onechar) < 1) {! /* reading failed, show error */! }! }! 17

Tehdään ohjelma, joka Kysyy käyttäjältä kaksi lukualuetta (kokonaisluvuilla): Min x, max x, Min y, max y Tulostaa kaksiulotteisen kertotaulun näiden välillä Tehdään omaksi funktiokseen Kukin kertotaulussa tulostettu numero vie neljä merkkiä tilaa Palauttaa tulostettujen numeroiden määrän 18

Ehtolausekkeet 19

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! 20

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 21

If else esimerkki int days, years;! scanf("%d %d", &days, &years);! if (days > 365)! {! years = years + 1;! days = days - 365;! }! else! printf("%d days remaining until the next year\n", 365 - days);!! /* No curly braces in else branch --! this part of code is executed in both cases */! printf("days: %d years: %d\n", days, years);! 22

Toistolausekkeet 23

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++;! }! 24

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);! 25

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) 26

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 (;;) { } 27

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 28

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 29

Funktiot 30

Funktiot Funktiot muodostavat ohjelman rakenteen Käytännössä välttämättömiä vähänkään isommissa ohjelmissa Funktiolla on neljä osaa Nimi, paluuarvo, parametrit ja runko Nimen oltava uniikki: vain yksi saman niminen funktio per ohjelma int add(int para, int parb)! {! int result = para + parb;! return result;! }! 31

Funktion paluuarvo Funktiolla voi palauttaa paluuarvon tuloksenaan Voidaan käyttää osana lausekkeita void paluuarvona tarkoittaa että paluuarvoa ei ole Paluuarvo palautetaan return lauseella Muoto: return paluuarvo;! Funktion suoritus päättyy tähän Paluuarvottomassa (void) funktiossa paluuarvoa ei anneta Return voidaan kutsua ilman paluuarvoa Funktion suoritus voi päättyä myös ilman return-lausetta Paluuarvo määrittelemätön (yleensä virhe) Poikkeuksena main funktio (paluuarvo tällöin 0) 32

Funktion parametrit Parametrit välitetään arvoina Kopioidaan kutsuvasta koodista Muutokset funktion sisällä eivät näy kutsuvassa koodissa Eräänlainen poikkeus: osoittimet ja taulukot (Moduli 2) Funktiokutsussa annettava oikea määrä parametreja Mikäli parametreja ei ole, on hyvä käyttää void määrettä parametrilistassa Esim. void funktio(void)! Jos parametrilista on tyhjä, kääntäjä ei tarkista mitä parametreja kutsu käyttää 33

Esimerkki funktion käytöstä #include <stdio.h> double mypower(double base, int exp) { double result = 1.0; while (exp--) result *= base; return result; } int main(void) { double res = mypower(3, 3); printf("%f\n", res); printf("4^5 = %f\n", mypower(4, 5)); return 0; } 34

Aikataulu Ti 26.1. -- asiaa osoittimista Pe 29.1. ensimmäinen kierros kiinni Ti 2.2. debugaustyökaluista, ym. Pe 12.2. 2. kierros kiinni ( jatkuu 4 periodilla ) 35