#include #include #define PI 3.14159 /* a) Ei argumentteja eikä palautusarvoa (pelkkä tulostuskäsky). */ void kilroy(); /* b) Ei argumentteja (luvun kysyminen tehdään scanf-funktiolla * aliohjelmassa), palauttaa int-tyyppisen arvon. */ int ask_int(); /* c) Lausekkeen x/(1-x) muodosta päätellen nyt operoidaan reaaliluvuilla. * Siis argumentti ja palautusarvo molemmat double-tyyppisiä. */ double f(double); /* d) Lukujen kysyminen hoituu taas scanf:llä aliohjelman sisällä. * Palautusarvo int-tyyppiä. */ int ask_int2(); /* e) Nyt voisi tulkita, että vertailtavat luvut ovat pääohjelman * muuttujia ja ne välitetään vertailualiohjelmalle argumentteina. */ void order(int,int); /* f) Argumentti ja palautusarvo molemmat double-tyyppisiä. */ double g(double); main() { int n,m; double x; /* kilroy() tulostaa näytölle tekstinpätkän. */ kilroy(); /* ask_int() palauttaa kokonaisluvun, joka voidaan sitten sijoittaa * pääohjelmassa johonkin muuttujaan. */ n=ask_int(); printf("You entered %i\n\n",n); /* Kysytään käyttäjältä argumentti funktiolle f. */ printf("Enter x: "); scanf("%lf",&x); printf("f(x) = %g\n",f(x)); printf("f(0) = %g\n\n",f(0)); /* Funktiolle voi syöttää myös vakion. */ /* Huomaa miten aliohjelmaa käytetään! ask_int2() palauttaa * kokonaisluvun, joka voidaan esim. tulostaa printf:llä. Kannattaa * ajaa tämä ohjelma debug-tilassa. */ printf("The greater of them is %i.\n\n",ask_int2()); /* scanf-funktiolla voi lukea useamman muuttujan arvon kerrallaan. */ printf("Enter two integers separated by a space: "); scanf("%i %i",&n,&m); order(n,m); /* Funktiolle g voi syöttää muuttujan tai vakion. */ printf("\nexp(PI/4)*sin(PI/4) = %g\n",g(PI/4)); } void kilroy() { printf("Kilroy was here!\n\n"); } int ask_int() { int k; printf("Enter k: "); scanf("%i",&k); return k; } double f(double x) { double y; /* Lauseketta ei ole määritelty kun x==1. */ if(x==1) { printf("Error! Division by zero not wise!\n"); return 0; /* Tämä käsky lopettaa aliohjelman suorituksen * ja palauttaa pääohjelmaan arvon 0. */ } else /* jos x ei ole 1 */ { y=x/(1-x); } return y; } int ask_int2() { /* Sijoitetaan käyttäjän syöttämät luvut paikallisiin muuttujiin k ja l. * HUOM! Paikalliset muuttujat eivät ole käytössä pääohjelmassa, kuten * myöskään pääohjelman muuttujat eivät ole käytössä aliohjelmissa. * Argumentitkin ovat vain kopioita pääohjelman muuttujista (tästä * lisää myöhemmin). */ int k,l; printf("Enter k: "); scanf("%i",&k); printf("Enter l: "); scanf("%i",&l); if(k>l) return k; else return l; } void order(int k, int l) { if(k>l) printf("%i > %i\n",k,l); else if(l>k) printf("%i > %i\n",l,k); else printf("%i == %i\n",l,k); } double g(double x) { /* return-käskyllä voi palauttaa monimutkaisten laskulausekkeidenkin * arvoja. */ return exp(x)*sin(x); }