C-ohjelmointi syksy 2008


Harjoitus 2

Tehtävät käsitellään harjoitustilaisuuksissa 11-15.9.

  1. Mitä seuraava lause tulostaa syötteen ollessa 3 ja luvun onnistuessa. Perustele vastauksesi.
    int i;
    
    switch(scanf("%d", &i)) {
    
    case EOF: printf("see %d\n", i);
              break;
    
    case 1: printf("\tyou");
    
    case 0: printf("\tlater");
              break;
    
    default: printf("printed %d\ntimes\n", i);
    }
    
  2. Kirjoita ohjelma, joka laskee suorakaiteen alan. Tämä ohjelma pyytää käyttäjän antamaan molemien sivujen arvot, tee virhetarkistukset ja tulosta pinta-ala. Jos syötteet ei ole kelvollisia, niin ohjelma tulostaa virheilmoitukseen ja lopettaa toiminnan.
  3. Kirjoita ohjelma, joka laskee 20 vuodeksi otetun 210 000 euron asuntolainan kuukausittaiset lainahoitokustannukset, kun laina on otettu annuiteettilainana. Tämä tarkoittaa sitä, että joka kuukausi maksettavan koron ja lyhennyksen yhteissumma on sama. Voit olettaa, että korko pysyy samana koko laina-ajan. Laske kuukausierä eri vuosikoroille välillä 3% - 11% yhden prosenttiyksikön välein.
    Annuiteettilainan kuukausierä voidaan laskea kaavalla:

    	 kuukausierä = r ^ n * p/ (1200 * (r^n -1)) *A,  
    	           missä r = 1 + p/1200
    	                 p = vuosikorko prosenteina, 
    			 n = lainan takaisinmaksukuukausien määrä,
    	                 A = alkuperäisen lainan määrä  
    			 ^ tarkoittaa potenssiin korotusta.
    
    Potenssin laskemiseen voit käyttää kirjastofunktiota double pow(double x, double y), joka on esitelty otsikkotiedostossa math.h. Linkitä kirjastoon m komentoriviparametrilla -lm.

  4. Tee ohjelma, joka laskee opintopistemäärällä painotetun keskiarvon opiskelijan saamista arvosanoista. Kunkin opiskelijan kaikki suoritustiedot ovat omassa tiedostossa siten, että yhdellä rivillä on aina yksi opintosuoritus muodossa:

     
    	kurssin nimi   kurssin opintopistemäärä  arvosana      suorituspvm
    	
            C-ohjelmointi           4                   3            31052004     
    	                                                        
    	
    Ohjelma kysyy ensin tiedoston nimeä ja tulostaa tähän tiedostoon talletettujen suoritusten arvosanojen painotetun keskiarvon.

  5. Tulosta 785.786544 kenttään, jonka leveys on 15 tarkkuuksilla 1,2,3,4 ja 5 vasemmalle tasattuna. Miten oikealle tasaus saadaan aikaan?
    Tulosta reaaliluku 766.753491 seuraavissa formaateissa
    %f
    %.2f
    %2.f
    %10.4f
    %10.5f
    %-10.5f
    %010.5f
    %-+10.5f
    %+-10.4f
    %10.0f
    



.