C-ohjelmointi syksy 2007


Harjoitus 2

Tehtävät käsitellään harjoitustilaisuuksissa 13-14.9.

  1. Mitä seuraavat lauseet tulostaa. Perustele vastauksesi.
       int i = 3;
       int j = 7;
    
       while(j++, i +=3, i < j)
          printf("i = %d, j = %d\n", i, j);
    
       for(; ;)
          break;
    
       for(i = 1, j = 3; ;i++, j--)
          if(i == j) {
             printf("end: i = %d, j = %d\n", i, j);
             break;
          } else printf("within : i = %d, j = %d\n", i, j);
    
       i = (j = 5) +4;
    
       for(; i > j;) {
          j++;
          printf("%d\n", j);
       }
    
    
    
    
  2. Kirjoita ohjelma, jota voidaan käyttää kertomisen testamiseen. Ohjelma lukee toistuvasti kaksi kokonaislukua ja kysyy niiden tuloa ohjelman käyttäjältä ja lopuksi tarkistaa annetun vastuksen. Rajoita syötetyt arvot välille 0-19. Lukeminen päättyy kun 20 arvoa on luettu tai on annettu syötteeksi kelpaamaton arvo. Jälkimmäisessä tapauksessa ohjelma tulostaa virheilmoituksen. Lopuksi ohjelma tulostaa oikeiden vastausten ja väärien vastausten lukumäärän.
  3. Kirjoita ohjelma, joka laskee 10 vuodeksi otetun 250 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 432.376372 kenttään, jonka leveys on 15 tarkkuuksilla 1,2,3,4 ja 5 vasemmalle tasattuna. Miten oikealle tasaus saadaan aikaan?
    Tulosta reaaliku 456.892356 seuraavissa formaateissa
    %f
    %.2f
    %2.f
    %10.4f
    %10.5f
    %-10.5f
    %010.5f
    %-+10.5f
    %+-10.4f
    %10.0f
    



.