Harjoitustehtävät
Näytä ratkaisu opettajalle, niin saat pisteet "kotiin".
1. a) Kirjoita ohjelma, jolla tulostat kuvaruudulle oman nimesi.
b) Muuta tulostuvaa tekstiä siten, että nimen lisäksi tulostat myös ikäsi.
c) Muuta ohjelmaasi niin, että ikää varten otat käyttöön muuttujan, jolle annat alkuarvoksi oman ikäsi.
d) Tulosta osoitteesi nimirivin alapuolelle.
e) Käännä ohjelmastasi suorituskelpoinen versio.
2p.
2. a) 'debuggaa' tehtävässä 1 tekemäsi ohjelma, eli suorita se rivi kerrallaan.
b) Etsi tekemäsi ohjelma ja käynnistä sen EXE-versio virtuaalikoneessa. Huom. ikkuna ei jää näkyviin.
2p.
3. a) Kirjoita ohjelma, jossa on kaksi kokonaislukumuuttujaa (int
), joista toiselle annat alkuarvon. Tulosta muuttujien arvot (%d). Mitä huomaat?
b) Lisää ohjelmaasi kahden merkkimuuttujan määrittely (char
). Anna toiselle merkille alkuarvo. Tulosta merkit kuvaruudulle (%c). Mitä huomaat?
c) Anna myös toiselle kokonaislukumuuttujalle alkuarvo. Tulosta kokonaislukumuuttujien summa ja erotus. Voit kirjoittaa laskutoimitukset printf()
-funktion kutsussa sulkeiden sisälle.
2p.
4. Tee ohjelma, joka kyselee käyttäjältä (scanf()
-funktiolla) kolme lukua, laskee niistä kaksi ensimmäistä yhteen ja vähentää viimeisen. Tee kaikki toiminnat pääohjelmaan. 2p.
5. Tee edellinen ohjelma siten, että lukujen kyselyt toteutetaan pääohjelmassa ja laskenta aliohjelmassa. Palauta tulos pääohjelmaan return
-lauseella ja tulosta tulos pääohjelmassa. 2p.
6. Kirjoita erillinen funktio, joka tulostaa kuvaruudulle tähtirivin, jossa on 10 tähtimerkkiä:
**********
2p.
7. Kirjoita funktio, joka tulostaa kuvaruudulle funktiolle parametrina annetun määrän tähtiä. Tehtävän järkevä toteutus vaatii toistorakenteen. 2p.
8. Kirjoita ohjelma, joka kysyy käyttäjältä ympyrän säteen ja laskee sen perusteella ympyrän kehän pituuden. Jos annettu syöte ei ole kelvollinen, ohjelma antaa virheilmoituksen ja lopettaa.
9. Kirjoita ohjelma, joka kysyy käyttäjältä kuinka monta tähteä tulostetaan ja välittää tiedon funktiolle, joka tulostaa annetun määrän tähtiä ruudulle. Jos annettu syöte ei ole kelvollinen, ohjelma antaa virheilmoituksen ja lopettaa.
10. Tee ohjelma, joka tulostaa millä välillä antamasi luku on. Lukuvälit ovat <10, 10-100 ja >100. Tee ohjelma if else lauseilla. 2p. (Jos teet QT:llä, niin katso ohje
11. Tee ohjelma, joka tulostaa appelsiini, omena tai päärynä, kun käyttäjä antaa arvot 1, 2 tai kolme. Jos käyttäjä antaa jonkin muun arvon, ohjelma tulostaa arvon peruna.
12. Kysy käyttäjältä lukuarvo ja tulosta vastaava määrä eri hedelmän nimiä. Jos käyttäjä antaa arvon, joka on suurempi kuin tietämiesi eri hedelmien nimet, niin pyydä pienempää lukua. Käytä while-lausetta.
13.Tee edellinen tehtävä käyttämällä for-lausetta
14. Tee edellinen tehtävä käyttämällä do-while-lausetta
ALLA OLEVIA TEHTÄVIÄ EI TEHDÄ VIELÄ !
3. Tee edellinen ohjelma siten, että lukujen kyselyt toteutetaan pääohjelmassa ja laskenta aliohjelmassa. Palauta tulos pääohjelmaan aliohjelman neljännessä parametrissa, jonka esittelet osoittimena. 2p
4. Tee ohjelma, joka kyselee nimesi pääohjelmassa ja tulostaa sen aliohjelmassa. Käytä globaalia muuttujaa nimen talletukseen. 2p
5. Tee edellinen ohjelma käyttämällä pääohjelman paikallista muuttujaa. Välitä merkkijonon osoite aliohjelmalle. (merkkijonon nimi on myös sen soite eli EI & merkkejä) 2p.
6. Tee edellinen ohjelma siten, että kyselet nimen aliohjelmassa ja tulostat sen pääohjelmassa. 2p
7. Lisää edelliseen ohjelmaan funktio, joka tulostaa nimesi halutun määrän kertoja. Kysy määrä ohjelman alussa. 2p käytä for-lausetta 2p
8. Tee edellinen ohjelma do while lauseella. 2p
9. Tee edellinen ohjelma while lauseella. 2p
11. Lisää sotu esimerkkiin nimen ja osoitteen kysely. Tulosta lopussa nimi, osoite ja sotu ja onko tulos oikea. 2p
12. Tee ohjlema, joka kyselee lukuja väliltä 1...10 , 50...100, 500... 1000. Jos käyttäjä vastaa väärin, anna herja. kysele niin kauan kuin käyttäjä antaa luvun 101. 2p
13. Tee ohjelma, joka tulostaa antamasi liukuluvun kokonaislukuna, heksalukuna sekä oktaalilukuna.2 p
14. Tee ohjelma, joka näyttää ruudulla käyttäjän antamaa lukua pienemmät parittomat luvut.2p
15. Tee muutos edelliseen tehtävään siten, että tulostat yhdelle riville 10 lukua. 2p
16. Tee edellinen tehtävä käyttäen tabulointia (5 lukua riville).2p
17. Siirrä edellisen tehtävän parittomien lukujen testi omaan aliohjelmaansa, vie luku argumenttina aliohjelmalle. 2p
18. Tee tehtävä 12 siten, että käytät satunnaisfunktiota rand alueen arpomiseen. Lopeta ohjelma, kun käyttäjä antaa luvun 999. 2p
19. Yhdistä tehtävien 12, 13 ja 14 toiminnoista funktiot yhteen ohjelmaan. Lisäksi tee pääohjelmaan case-rakenne, joka kutsuu tekemiäsi funktoita. Luentomateriaalissa on neuvottu case rakenteen käyttö. 2p
20. Tee edellisen harjoituksen perusteella ohjelma, joka kutsuu neljää vapaasti valitsemaasi aiempaa harjoitustehtävää. Käytä system-funktiota toisten ohjelmien käynnistämiseen.2p
21. Tee do-while silmukkaa käyttäen ohjelma, joka kyselee merkkijonoon enintään 20 merkkiä. (Ohje kysele getche-funktiolla. Lopeta silmukka, kun merkki on 13= ENTER tai silmukan sisällä oleva laskuri on kasvanut riittävästi). 2p
22. Muuta edellistä tehtävää siten, että ohjelma kyselee kokonaisluvun merkki kerrallaan ja tarkastaa jokaisen annetun merkin. Tämän jälkeen merkkijono muutetaan kokonaisluvuksi. (Ohje: tarkasta isdigit-funktiolla ja muuta kokonaisluvuksi atoi-funktiolla) 2p
23. Tee ohjelma, joka nollaa bitit 4 ja 5 antamastasi 8 bittisestä luvusta (unsigned char) ja tulostaa arvon. 2p
malliratkaisu tehtävään 23 binääriluvuilla
24. Tee ohjelma, joka asettaa bitit 4 ja 5 arvoon yksi 8 bittisestä luvusta. 2p
malliratkaisu tehtävään 24 binääriluvuilla
25. Tee ohjelma, joka vaihtaa bittien 4 ja 5 arvot vastakkaisiksi antamastasi 8 bittisestä luvusta. Kutsu funktiota kaksi kerrtaa ja tarkasta saitko takaisin alkuperäisen luvun. 2p
malliratkaisu tehtävään 25 binääriluvuilla
26. Kahdssa 8 bittisessä luvussa on merkitsevänä osana molemmissa neljä vähinten merkitsevää bittiä. Yhdistä luvut yhteen kahdeksan bittiseen lukuun siten että ensimmäinen luku on neljässä vähiten merkitsevässä bitissä ja toinen neljässä eniten merkitsevässä bitissä. 2p
malliratkaisu tehtävään 26 binääriluvuilla
27. Vaihda 16 bittisen luvun vähiten merkitsevä ja eniten merkitsevä tavu keskenään. 2p
malliratkaisu tehtävään 27 binääriluvuilla
28. Testaa sizeof funktion toimintaa ja tulosta näytölle char, short, int, long ja long long tyyppien koko. 2p
29. Tee ohjelma, joka täyttää 3*3 taulukon ensin nollilla ja sen jalkeen sarake- ja rivi-indeksin summalla. Tulosta taulukon sisältö sekä alustuksen, että summauksen jälkeen. 2p
30. Tehtävä y=sin(x) on sarjakehitelmänä y=x-1/3!*x^3+1/5!*x^5... Laske kaavan avulla sin, huom. muuta kaava toimimaan asteilla.
y=e^x on sarjakehitelmänä y=1+x+x^2/2!.... potenssi =pow. Kuinka monella sarjan jäsenellä saat neljännen desimaalin oikeaksi?
malliratkaisu sinin, kosinin ja eksponenttifunktion laskemiseksi sarjakehitelmillä
31.35. Testaa main-funktion komentoriviargumetteja. Tee testiohjelma, joka tulostaa antamiesi kolmen kokonaislukuargumentin arvon. 4p
36. Tee tietue ,joka sisältää Fischer robotin ohjelman moottorin ajotiedot. Eli moottorin numero, matka ja viive. 2p
37. Tee edellisestä tietuetaulukko. Kysy alussa käskyjen määrä= rivien määrä tietuetaulukossa ja sitten arvot. 4p