/* atk 1 - harjoitus 4 tehtävä 1 */ /* Tässä tehtävässä lasketaan kertoman n! arvoa käyttämällä kaikkia kolmea C-kielen toisto rakennetta. */ #include main() { int i, n, kertoma; /* lasketaan seuraavassa kertomat silla oletuksella, etta kayttaja antaa nollaa suuremman luvun n:ksi. jotta n = 0 tapauskin tulisi otettua huomioon, joitain seuraavista toistolauseista tulisi muuttaa hieman. */ printf("Anna n (n >= 1), lasken n!\n"); scanf("%d", &n); /* kerrotaan 'kertoma' muuttujaa n kertaa, joka kerta yhdella suuremmalla kokonaisluvulla, alkaen yhdesta ja lopettaen n:aan. Tulos on silloin n:n kertoma! */ /* while silmukka versio ****************************************************/ printf("while silmukka:\n"); /* Aloitetaan kertominen yhdella. Alustetaan kertoma 1:een (on myos nollan kertoma) */ i = 1; kertoma = 1; /* 'kertomaa' kertovat lausekkeet toistetaan niin kauan kuin i on pienempi tai yhtasuuri kuin yksi. */ while (i <= n) { /* lisataan yksi tulo kertomaan */ kertoma *= i; /* tassa vaiheessa on laskettu kertomat aina i:hin asti, voidaan tulostaa se i:n kertomana */ printf("%d! = %d\n", i, kertoma); /* suurennetaan i:ta yhdella seuraavaa kertolaskua varten */ i++; } /* do - while silmukka versio ***********************************************/ /* paljon ei tarvi muuttaa while silmukkaan verrattuna, rakenteen sisalla oleviin lauseisiin ei tarvitse edes koskea. Huomaa kuitenkin, etta tama silmukka toimii tapauksessa n = 0 eri tavalla kuin while - jos kayttaja antaisi nollan n:ksi. while silmukka ei tekisi mitaan, kun taas seuraava do silmukka tulostaisi nollan kertoman. */ printf("do-while silmukka:\n"); i = 1; kertoma = 1; do { kertoma *= i; printf("%d! = %d\n", i, kertoma); i++; } while (i <= n); /* for silmukka versio ******************************************************/ /* muistuttaa paljolti while silmukkaa, ainoastaan i:n alustaminen ja suurentaminen on siirtyneet uusiin paikkoihin */ printf("for silmukka:\n"); kertoma = 1; for (i = 1; i <= n; i++) { kertoma *= i; printf("%d! = %d\n", i, kertoma); } }