Käyttäjän määrittelemien toimintojen tyypit C-ohjelmoinnissa

Tässä opetusohjelmassa opit erilaisista lähestymistavoista, joita voit käyttää saman ongelman ratkaisemiseksi toimintojen avulla.

Nämä alla olevat 4 ohjelmaa tarkistavat, onko käyttäjän syöttämä kokonaisluku alkuluku vai ei.

Kaikkien alla olevien ohjelmien lähtö on sama, ja olemme luoneet käyttäjän määrittelemän toiminnon kussakin esimerkissä. Kussakin esimerkissä omaksuma lähestymistapa on kuitenkin erilainen.

Esimerkki 1: Ei argumentteja välitetty eikä palautusarvoa

 #include void checkPrimeNumber(); int main() ( checkPrimeNumber(); // argument is not passed return 0; ) // return type is void meaning doesn't return any value void checkPrimeNumber() ( int n, i, flag = 0; printf("Enter a positive integer: "); scanf("%d",&n); for(i=2; i <= n/2; ++i) ( if(n%i == 0) ( flag = 1; ) ) if (flag == 1) printf("%d is not a prime number.", n); else printf("%d is a prime number.", n); ) 

checkPrimeNumber()Toiminto ottaa syötettä käyttäjältä, tarkistaa, onko se on alkuluku vai ei, ja esittää sen ruudulla.

Funktion checkPrimeNumber();sisällä olevan lauseen tyhjät sulut main()osoittavat, että funktiolle ei välitetä argumenttia.

Funktion palautustyyppi on void. Funktiosta ei siis palauteta arvoa.

Esimerkki 2: Ei argumentteja annettu, mutta palautusarvo

 #include int getInteger(); int main() ( int n, i, flag = 0; // no argument is passed n = getInteger(); for(i=2; i<=n/2; ++i) ( if(n%i==0)( flag = 1; break; ) ) if (flag == 1) printf("%d is not a prime number.", n); else printf("%d is a prime number.", n); return 0; ) // returns integer entered by the user int getInteger() ( int n; printf("Enter a positive integer: "); scanf("%d",&n); return n; ) 

Lausekkeen tyhjät sulut n = getInteger();osoittavat, että funktiolle ei välitetä argumenttia. Ja funktion palauttama arvo määritetään n: lle.

Tässä getInteger()funktio ottaa käyttäjän syötteen ja palauttaa sen. Koodi, jolla tarkistetaan, onko luku alkuluku vai ei, on main()funktion sisällä .

Esimerkki 3: Argumentti välitetty, mutta ei palautusarvoa

 #include void checkPrimeAndDisplay(int n); int main() ( int n; printf("Enter a positive integer: "); scanf("%d",&n); // n is passed to the function checkPrimeAndDisplay(n); return 0; ) // return type is void meaning doesn't return any value void checkPrimeAndDisplay(int n) ( int i, flag = 0; for(i=2; i <= n/2; ++i) ( if(n%i == 0)( flag = 1; break; ) ) if(flag == 1) printf("%d is not a prime number.",n); else printf("%d is a prime number.", n); ) 

Käyttäjän syöttämä kokonaislukuarvo välitetään checkPrimeAndDisplay()funktiolle.

Tässä checkPrimeAndDisplay()funktio tarkistaa, onko välitetty argumentti alkuluku vai ei, ja näyttää sopivan viestin.

Esimerkki 4: Argumentti välitetty ja palautusarvo

 #include int checkPrimeNumber(int n); int main() ( int n, flag; printf("Enter a positive integer: "); scanf("%d",&n); // n is passed to the checkPrimeNumber() function // the returned value is assigned to the flag variable flag = checkPrimeNumber(n); if(flag == 1) printf("%d is not a prime number",n); else printf("%d is a prime number",n); return 0; ) // int is returned from the function int checkPrimeNumber(int n) ( int i; for(i=2; i <= n/2; ++i) ( if(n%i == 0) return 1; ) return 0; ) 

Käyttäjän tulo välitetään checkPrimeNumber()toiminnolle.

checkPrimeNumber()Toiminto tarkistaa, onko kulunut argumentti on alkuluku vai ei.

Jos välitetty argumentti on alkuluku, funktio palauttaa arvon 0. Jos välitetty argumentti on ei-alkuluku, funktio palauttaa arvon 1. Palautusarvo osoitetaan lippumuuttujalle.

Riippuen siitä, onko lippu 0 vai 1, main()funktiosta tulostetaan sopiva viesti .

Mikä lähestymistapa on parempi?

No, se riippuu ongelmasta, jonka yrität ratkaista. Tässä tapauksessa argumentin välittäminen ja arvon palauttaminen funktiosta (esimerkki 4) on parempi.

Funktion tulisi suorittaa tietty tehtävä. checkPrimeNumber()Ominaisuus ei panosta käyttäjä eikä se näyttää sopiva viesti. Se tarkistaa vain, onko luku alkuluku vai ei.

Mielenkiintoisia artikkeleita...