Kari Lehtonen

C-tehtäviä

Kirjallisuutta

WWW-oppaita

Muuta informatiota C:stä WWW:ssä

Yleistä

[Muistiinpanot; Schaum's, luku 1]
  1. Mitä on ohjelmointi? Selitä asia jollekin valitsemallesi kohderyhmälle.
  2. Mitä tarkoittaa syntaksi ohjelmoinnin yhteydessä?
  3. Mitä on tietokoneohjelma?
  4. Mihin ohjelmoinnissa tarvitaan kontrollirakenteita?
  5. Miten tietokoneessa esitetään kokonaislukuja/reaalilukuja/merkkejä?
  6. Selitä käsitteet tulkki ja kääntäjä.
  7. Miten c-ohjelma käännetään Unix-käyttöjärjestelmässä? Entä jos ohjelmassa käytetään matemaattisia funktioita?

Muuttujat ja tietotyypit

[Muistiinpanot; Schaum's, luku 2]
  1. Mitkä ovat 4 (3–5) tärkeintä yksinkertaista tietotyyppiä? Kuvaile niitä ja niiden käyttötarkoitusta.
  2. Tarvitset ohjelmassa muuttujaa, jolla on alkuarvona 2,45·10-13. Miten määrittelet muuttujan?
  3. Tarvitset ohjelmassa muuttujaa (tai vakiota), jolla on arvona oma sukunimesi. Miten määrittelet muuttujan (vakion)?

Operaattorit ja lausekkeet

[Schaum's, luku 3]
  1. Mikä on seuraavien kirjastofunktioiden tarkoitus: floor, cos, fmod, toascii. Esimerkkejä.
  2. Ohjelmassa on seuraavat määrittelyt:
    int i = 8, j = 5, k;
    float x = 0.005, y = -0.01, z;
    Mikä on muuttujien k ja z arvo seuraavien lauseiden jälkeen:
    k = i + j;
    k = i/j;
    k = x + y;
    z = x + y;
    k = (i < j);
    z = i/j;
    z = (1.0*i)/(1.0*j);
    z = x/y;
  3. Tee ohjelma, joka laskee kosinilauseella kolmion sivun, kun muut sivut ja niiden välinen kulma tunnetaan.

Syöttö ja tulostus

[Schaum's, luku 4]
  1. Mihin funktiota getchar yleensä käytetään? Anna esimerkki.
  2. Millä tavalla funktiolla putchar voidaan tulostaa kokonainen merkkijono?
  3. Kirjoita scanf-funktiota käyttäen komento, joka ottaa käyttäjältä arvot muuttujiin hinta (tyyppiä float), saatavilla (tyyppiä character) ja tuote (merkkijonotaulukko eli tyyppiä string).
  4. Kirjoita edellisen tehtävän komento kolmeksi eri komennoksi. Mitä ongelmia voi tulla? Miten hoidat ongelman?
  5. Miten käyttäjän syöttämä henkilötunnus (esimerkiksi 230763-215K) voidaan pilkkoa neljän muuttujan paiva, kuu, vuosi ja tunniste arvoiksi?
  6. Ohjelmassa käytetään kokonaislukumuuttujia x ja y. Kirjoita komento, joka tulostaa muuttujien arvot ja niiden summan esimerkiksi seuraavassa muodossa:
    Lukujen x = 23 ja lukujen y = 11 summa x + y = 34.
  7. Kirjoita printf-funktiota käyttäen komennot, joilla voit tulostaa seuraavankaltaisen taulukon otsikon ja rivejä. Käytettävissä on muuttujat maa, provlkm, vluku, synt ja velka. Päättele itse muuttujien tyyppi.
    ===========================================================
    Maa     Provinsseja      Väkiluku  Syntyvyys          Velka
    ===========================================================
    Suomi            12       5083000       13.2   $   3.50e+10
    Kiina            21    1192300000       18.2   $   5.85e+10
    
  8. Halutaan tehdä keskusteleva opetusohjelma, joka puhuttelee käyttäjää tämän nimellä, esimerkiksi:
    Hyvä Matti!
    Oppilas Koskinen, olkaa huolellisempi.
    Matti Koskinen, sait tästä kokeesta 17 pistettä.
    
    Miten menettelet?

Kontrollirakenteet

[Schaum's, luku 6]
  1. Muuttujilla a, x ja merkki on arvot 5, 3.7 ja 'k'. Mikä on seuraavien loogisten lausekkeiden totuusarvo:
    a) a == 6
    b) x < 10
    c) merkki <= 'm'
    d) (a != 5) || (x > 2)
    e) !((a == 5) && (x < 2))
  2. Ohjelmassa on muuttujat a, b ja c. Kirjoita if-lause, joka ilmoittaa, onko c a:n ja b:n välissä vai välin ulkopuolella.
  3. Tee ohjelma, joka ratkaisee toisen asteen yhtälöitä ax2 + bx + c = 0. Ohjelman tulisi hallita myös tapaukset, joissa tulee kompleksiratkaisuja sekä tapaus a = 0.
  4. Tee ohjelma, joka laskee sataa pienempien parittomien lukujen summan. Toteuta ohjelma
    a) for-silmukalla
    b) while-silmukalla
    c) do-silmukalla.
  5. Luvun a neliöjuuren likiarvo voidaan laskea toistamalla ns. rekursiokaavaa x = 0.5*(x + a/x). Tee ohjelma, joka laskee halutun luvun neliöjuuren halutulla tarkkuudella.
  6. Tee ohjelma, joka luo kymmenen kertotaulun.
  7. Tee ohjelma, joka tarkistaa käyttäjätunnuksen ja salasanan (käyttäjätunnuksia ja salasanoja).

Funktiot

[Schaum's, luku 7]
  1. Mitä tarkoitetaan C-ohjelmoinnissa käsitteellä funktio? Miten funktio määritellään?
  2. Tee funktio kuutio, joka laskee luvun kuution. Käytä määrittelyssä tavallista kertolaskua. Kirjoita malliksi funktion kutsu johonkin pääohjelman käskyyn (laske esimerkiksi pallon tilavuus).
  3. Trigonometristen funktioiden sarjakehitelmissä on laskettava tuloja, jotka ovat muotoa 1*3*5*7*...*pariton_luku ja 2*4*6*...*parillinen_luku. Tee funktio, joka laskee tällaisia tuloja, kun argumentiksi annetaan tulon viimeinen tekijä (suurin tekijä). Laske tulo funktiossa sopivalla silmukalla.
  4. Edellinen probleema. Sovella funktion määrittelyssä rekursiota.
  5. Tee funktio, joka tulostaa halutun muuttujan arvon (luku, tekstiä ...) sopivalla tavalla kehystettynä.

Ohjelman rakenne

[Schaum's, luku 8]
  1. Mitä tarkoittaa muuttujan pysyvyys? Mitä tarkoittaa muuttujan vaikutusala?
  2. Tee ohjelma, joka tulostaa halutun määrän Fibonaccin lukuja. (Fibonaccin lukujonon kaksi ensimmäistä lukua ovat mielivaltaisia ja seuraavat ovat aina kahden edellisen summia. Esimerkiksi: 3,5,8,13,21,34,...) Tee ohjelmasta rakenteeltaan selkeä. Käytä funktioita (aliohjelmia). Kiinnitä huomiota muuttujien tarkoituksenmukaiseen käyttöön.

Taulukot

[Schaum's, luku 9]
  1. Tee ohjelma, joka lukee päätteeltä 10 lukua taulukkoon. Lisäksi ohjelma tulostaa luvut järjestysnumeroineen sekä syöttöjärjestyksessä että käänteisessä järjestyksessä.
  2. Tee ohjelma, joka laskee vektoreiden summia. Vektoreita voidaan käsitellä yksiulotteisina taulukkoina, joiden pituus on vektoriavaruuden dimensio (voit ottaa dimensioksi 3).
  3. Tee salakirjoitusohjelma. Salakirjoitusperiaate voi olla esimerkiksi Caesarin menetelmä tai salakirjoitusavaimeen perustuva menetelmä.
  4. Tee ohjelma, joka lajittelee a) lukuja, b) tekstiä.
  5. Tee ohjelma, joka tulostaa siististi 2-ulotteisen desimaalilukutaulukon. Taulukossa on vaikkapa 8 saraketta.
  6. Tee ohjelma, joka laskee jonkin polynomifunktion arvon, kun muuttujana on neliömatriisi. Esimerkiksi f(A) = A3 + 2*A2 - 3*A + 4*I.

Osoittimet

[Schaum's, luku 10]
  1. Mikä on osoitinmuuttuja? Missä

Struktuurit

[Schaum's, luku 11]
  1. Mitä tarkoittaa struktuuri? Mihin sitä käytetään C-ohjelmissa?
  2. Määrittele struktuurit paivays ja opiskelija. Tarkoitus on laatia ohjelma, jossa käsitellään opiskelijoiden eräitä henkilötietoja (nimi, syntymäaika, opintojen alkamispäivä, opintolinja, luokka jne).
  3. Määrittele muuttuja koneoppilas, joka on edellisen tehtävän mukaista tyyppiä. Millä käskyillä sijoitat muuttujaan halutun opintolinjan? Entä millä käskyllä sijoitat muuttujaan halutun aloituspäivämäärän?
  4. koneoppilaat on taulukko, jonka alkioina on 100 muuttujaa tyyppiä opiskelija. Kirjoita komennot, joilla lajittelet taulukon opintojen aloitusvuoden perusteella. Tulosta tiedoista vaikkapa nimi, aloitusvuosi ja syntymävuosi.
  5. Tee ohjelma, joka etsii koneoppilaista ne, jotka ovat aloittaneet opintonsa yli 25-vuotiaina.
  6. Tee ohjelma, joka laskee kompleksilukujen summia ja tuloja. Määrittele kompleksiluvut struktuurilla, jossa on jäseninä kompleksiluvun reaaliosa ja imaginaariosa.

Tiedostojen käsittely

[Schaum's, luku 12]
  1. Ohjelmassa halutaan lukea tietoja tiedostosta alku.txt ja lisätä tietoja tiedostoon loppu.txt. Miten nämä tiedostot otetaan käyttöön?
  2. Miten tiedoston avaamisen virhetilanteet voitaisiin käsitellä?
  3. Ohjelma kirjoittaa tuottamansa tiedot uuteen tiedostoon, jonka nimen käyttäjä antaa. Miten varmistetaan, ettei vahingossa tuhota mitään levyllä jo olevaa tiedostoa?
  4. Tee ohjelma, joka salakirjoittaa käyttäjän ilmoittaman tiedoston.
  5. Tee ohjelma, joka laskee vokaalien suhteellisen osuuden käyttäjän ilmoittamassa tiedostossa.
  6. Eräästä tekstistä halutaan laskea sanojen alussa olevien erilaisten 2-kirjaimisten merkkiyhdistelmien suhteelliset osuudet. Oletetaan, että teksti on tiedostossa xyzzy.txt siten, että jokainen sana on omalla rivillään. Tulokset kirjoitetaan tiedostoon xyzzy.fre seuraavanlaiseksi taulukoksi. Taulukkoon tulee *, jos kyseinen suhteellinen osuus on enemmän kuin tietty alaraja (kokeile esimerkiksi 2 prosenttia). Voit myös tulostaa suhteellisen osuuden todellisen arvon.
       a b c d e f g h i .......
    a  *             * *
    b  *       *       *
    c      *   *
    d          *       *
    e        *   *
    ....
    
  7. Tiedostossa ruoat.txt on ruokien nimiä, kukin omalla rivillään. Tiedostossa juomat.txt on juomien nimiä, kukin omalla rivillään. Tee ohjelma, joka yhdistää tiedostot yhdeksi tiedostoksi ateriat.txt, jossa jokainen rivi on muotoa:
    Pihvi ja maito on lyömätön yhdistelmä.
    Miten saisit tekstiin vaihtelua? Tuleeko ongelmia, jos tiedostot ovat eripituiset.