demo1.c 30/09/15 08:19 #include <stdio.h> // io-toiminnot //#define KM_MAILISSA 1.609 int main( ){ double mailit = 0.0; double kilometrit; const double KM_MAILISSA = 1.609; printf("anna maililukema > "); /* lue mailikukema */ scanf("%lf", &mailit); /* lasketaan */ kilometrit = KM_MAILISSA * mailit; /* n yt lopputulos */ printf("%lf", mailit); printf("mailia on "); printf("%lf",kilometrit); printf(" km"); printf("\n"); printf("\n"); return 0; Page 1 of 1
demo2.c 30/09/15 08:19 #include <stdio.h> int main( void ){ int luku = 0; int summa = 0; int lkm = 0; printf("anna positiivinen kokonaisluku > "); for( scanf("%d", &luku); luku >=0; scanf("%d", &luku) ){ summa = summa + luku; lkm++; //lkm = lkm + 1 printf("anna positiivinen kokonaisluku > "); printf("lukujen summa %d ja lukuja syotettiin %d kappaletta\n", summa, lkm ) ; printf("lukujen keskiarvo on %lf \n", (double)summa/(double)lkm ); return 0; Page 1 of 1
kldemo_v1.c 30/09/15 08:20 #include <stdio.h> void tulostavalikko(void); void yhteenlaskutehtava(void); void vahennyslaskutehtava(void); int luekokonaisluku( void ); void lueroskat( void ); int main( void ){ int valinta; int vastaus = 0; int loppu = 0; //ei halua lopettaa //toista kunnes lopetetaan while(!loppu ) { tulostavalikko(); //lue valinta valinta = luekokonaisluku(); //tulkitse teht v ja suorita teht v tai ilmoita virheellisest //valinnasta switch( valinta ){ case 1: yhteenlaskutehtava(); case 2: vahennyslaskutehtava(); case 0: loppu = 1; default: printf("\nvirheellinen komento\n"); printf("\n\n"); return 0; Page 1 of 3
kldemo_v1.c 30/09/15 08:20 //main p ttyy t h n void tulostavalikko(void){ //tulosta ohjeet tai valittavien toimintojen lista printf("paina 1 jos haluat yhteenlaskutehtavan\n"); printf("paina 2 jos haluat vahennyslaskutehtavan\n"); printf("nolla lopettaa\n"); printf("\nvalintasi > "); void yhteenlaskutehtava(void){ int vastaus; printf("\nvalitsit yhteenlaskutehtavan\n\n"); printf("paljono on 1 + 1?"); vastaus = luekokonaisluku(); if( 2 == vastaus ){ printf("oikein\n\n"); else{ printf("vaarin\n\n"); void vahennyslaskutehtava(void){ int vastaus; printf("\nvalitsit vahennyslaskutehtavan\n\n"); printf("paljono on 1-1?"); vastaus = luekokonaisluku(); if( 0 == vastaus ){ printf("oikein\n\n"); else{ printf("vaarin\n\n"); int luekokonaisluku( void ){ int valinta; int result = 0; Page 2 of 3
kldemo_v1.c 30/09/15 08:20 result = scanf("%d", &valinta); while( 0 == result ){ printf("\net syottanyt kokonaislukua!\n"); lueroskat(); printf("\nyrita uudelleen > "); result = scanf("%d", &valinta); lueroskat(); return valinta; void lueroskat( void ){ while( fgetc(stdin)!= '\n'); Page 3 of 3
kldemo_v1.c 06/10/15 13:51 #include <stdio.h> #include <time.h> //mm. koneen kellonaika #include <stdlib.h> //mm. rand() void tulostavalikko(void); void yhteenlaskutehtava( int * oikein, int * vaarin ); void vahennyslaskutehtava(int * oikein, int * vaarin); int luekokonaisluku( void ); void lueroskat( void ); int main( void ){ int valinta; int oikein = 0; int vaarin = 0; int loppu = 0; //ei halua lopettaa srand( time(null) ); //alusta s-generaattori //toista kunnes lopetetaan while(!loppu ) { tulostavalikko(); //lue valinta valinta = luekokonaisluku(); //tulkitse teht v ja suorita teht v tai ilmoita virheellisest //valinnasta switch( valinta ){ case 1: yhteenlaskutehtava( &oikein, &vaarin ); printf("\ntilanne: Oikein: %d ja vaarin %d\n", oikein, vaarin); case 2: vahennyslaskutehtava( &oikein, &vaarin ); printf("\ntilanne: Oikein: %d ja vaarin %d\n", oikein, vaarin); case 0: loppu = 1; default: printf("\nvirheellinen komento\n"); Page 1 of 3
kldemo_v1.c 06/10/15 13:51 printf("\n\n"); return 0; //main p ttyy t h n void tulostavalikko(void){ //tulosta ohjeet tai valittavien toimintojen lista printf("paina 1 jos haluat yhteenlaskutehtavan\n"); printf("paina 2 jos haluat vahennyslaskutehtavan\n"); printf("nolla lopettaa\n"); printf("\nvalintasi > "); void yhteenlaskutehtava( int * oikein, int * vaarin ){ int vastaus; int luku1, luku2, tulos; luku1 = abs(rand()) % 11; // luvut 0..10 luku2 = abs(rand()) % 11; // luvut 0..10 tulos = luku1 + luku2; //printf("\nvalitsit yhteenlaskutehtavan\n\n"); printf("paljonko on %d + %d?", luku1, luku2 ); vastaus = luekokonaisluku(); if( tulos == vastaus ){ (*oikein)++; printf("oikein\n\n"); else{ (*vaarin)++; printf("vaarin\n\n"); void vahennyslaskutehtava(int * oikein, int * vaarin){ int vastaus; int luku1, luku2, tulos; luku1 = abs(rand()) % 11; // luvut 0..10 luku2 = abs(rand()) % 11; // luvut 0..10 Page 2 of 3
kldemo_v1.c 06/10/15 13:51 tulos = luku1 - luku2; printf("\nvalitsit vahennyslaskutehtavan\n\n"); printf("paljonko on %d - %d?", luku1, luku2 ); vastaus = luekokonaisluku(); if( 0 == vastaus ){ (*oikein)++; printf("oikein\n\n"); else{ (*vaarin)++; printf("vaarin\n\n"); int luekokonaisluku( void ){ int luku; int result = 0; char merkki; while( (result=scanf("%d%c", &luku, &merkki) ) == 0 ( result == 2 && merkki!= '\n') ){ printf("\net syottanyt kokonaislukua!\n"); lueroskat(); printf("\nyrita uudelleen > "); return luku; void lueroskat( void ){ while( fgetc(stdin)!= '\n'); Page 3 of 3
taulukkodemo_v1.c 06/10/15 13:51 #include <stdio.h> int luekokonaisluku( void ); void lueroskat( void ); void taytataulukko( double taulukko[], int koko); void tulostataulukko( double taulukko[], int koko); double luereaaliluku( void ); int etsisuurinarvo( double taulukko[], int koko ); int main(void){ int koko; int suurin; printf("\nmontako lukemaa haluat tallettaa > "); koko = luekokonaisluku(); double lampotilat[ koko ]; //mahtaako toimia taytataulukko( lampotilat, koko ); suurin = etsisuurinarvo( lampotilat, koko ); printf("\ntaulukon suurin arvon on %lf\n", lampotilat[suurin] ); tulostataulukko( lampotilat, koko ); return 0; //main paattyy int etsisuurinarvo( double taulukko[], int koko ){ int i; int suurimmanpaikka = 0; //oletus: arvo taulukon alussa for( i=0; i < koko; i++ ){ if( taulukko[i] > taulukko[ suurimmanpaikka ] ){ suurimmanpaikka = i; return suurimmanpaikka; void taytataulukko( double taulukko[], int koko){ int i; for( i=0; i < koko; i++ ){ printf("anna lampotila > "); taulukko[i] = luereaaliluku(); Page 1 of 3
taulukkodemo_v1.c 06/10/15 13:51 void tulostataulukko( double taulukko[], int koko){ int i; for( i=0; i < koko; i++ ){ printf("lampotila: %.2lf\n", taulukko[i] ); double luereaaliluku( void ){ double luku; int result = 0; char merkki; while( (result=scanf("%lf%c", &luku, &merkki) ) == 0 ( result == 2 && merkki!= '\n') ){ printf("\net syottanyt resaalilukua!\n"); lueroskat(); printf("\nyrita uudelleen > "); return luku; int luekokonaisluku( void ){ int luku; int result = 0; char merkki; while( (result=scanf("%d%c", &luku, &merkki) ) == 0 ( result == 2 && merkki!= '\n') ){ printf("\net syottanyt kokonaislukua!\n"); lueroskat(); printf("\nyrita uudelleen > "); return luku; void lueroskat( void ){ while( fgetc(stdin)!= '\n'); Page 2 of 3
taulukkodemo_v1.c 06/10/15 13:51 Page 3 of 3
istademo_b.c 13/10/15 10:32 #include <stdio.h> #include <stdlib.h> typedef struct solmu * solmuptr; typedef struct solmu { int data; solmuptr link; Solmu; void tulostalista( solmuptr ); void lisaalistaan( solmuptr *, int ); void tuhoalista( solmuptr *); int main(){ solmuptr alku = NULL; int i = 0; printf("\nalkutilanne:"); tulostalista(alku); for(i=1; i <= 5; i++){ //lisätään listaan i:n arvoja //funktiolle on välitettävä osoittimen osoite, jotta muutokset // näkyvät alku-muuttujasta lisaalistaan( &alku, i ); printf("\nlopullinen lista:"); tulostalista(alku); // tässä ei tarvitse välittää muuttujan osoitetta // koska tulostaminen ei muuta listan sisältöä //funktiolle on välitettävä osoittimen osoite, jotta muutokset // näkyvät alku-muuttujasta printf("\nlistan täystuho alkaa...\n"); tuhoalista( &alku ); return 0; void tulostalista( solmuptr alku){ solmuptr temp; temp = alku; printf("\n"); printf("[alku]->"); while( NULL!= temp ){ printf("[%d]->", temp->data); temp=temp->link; printf("null\n\n"); Page 1 of 3
istademo_b.c 13/10/15 10:32 // Funktio saa parametrina listan alkuosoitinmuuttujan osoitteen, // jotta muutokset välittyvät pääohjelmassa olevaan listan alkuosoittimeen. void lisaalistaan( solmuptr * alku, int arvo){ solmuptr uusi = NULL; solmuptr temp = NULL; //luo uusi lisättävä solmu uusi = (solmuptr) malloc( sizeof( Solmu ) ); //täytä solmun muuttujat uusi -> link = NULL; uusi -> data = arvo; //kiinnitetään temp listaan //tempin avulla käydään läpi listaa //alkua ei saa käyttää läpikäyntiin, koska tällöin hukataan listan alkioita temp = *alku; //onko lista tyhjä? if( NULL == temp ){ // lisäys listan 1. solmuksi *alku = uusi; printf("\nyhden alkion lisäyksen jälkeen:"); tulostalista( *alku ); else{ //lisäys listan hännille //temp = alku; //haetaan viimeisin solmu while( NULL!= temp->link) temp = temp->link; //lisää uusi solmu temp->link = uusi; printf("\nuuden alkion lisäyksen jälkeen:"); tulostalista( *alku ); // Funktio saa parametrina listan alkuosoitinmuuttujan osoitteen, // jotta muutokset välittyvät pääohjelmassa olevaan listan alkuosoittimeen. // Funktio poistaa aina yhden solmun listan alusta ja tulostaa // muuttuneen listan sisällön. // Poistamista jatketaan kunnes lista on tyhjä. void tuhoalista( solmuptr * alku ){ solmuptr pois = NULL; //osoittaa listasta poistettavaa solmua //tuhotaan listaa solmu kerralla, kunnes lista on tyhjä, eli *alku on NULL while( NULL!= *alku ){ Page 2 of 3
istademo_b.c 13/10/15 10:32 //kiinnitetään listan 1. solmu poistettavaksi pois = *alku; *alku = pois->link; // aseta alku osoittamaan lista 2. solmua pois->link = NULL; // solmu "unohtaa" olleensa listassa, tämä ei ole pakollista free(pois); // vapauta solmun käyttämä muisti printf("\nlista alkion eli solmun poistamisen jälkeen:"); tulostalista( * alku ); Page 3 of 3