Vrste korisnički definiranih funkcija u C programiranju

U ovom vodiču naučit ćete o različitim pristupima koje možete poduzeti za rješavanje istog problema pomoću funkcija.

Ova 4 programa u nastavku provjeravaju je li cijeli broj koji je korisnik unijeo prost broj ili nije.

Izlaz svih ovih programa u nastavku je isti, a mi smo u svakom primjeru stvorili korisnički definiranu funkciju. Međutim, pristup koji smo zauzeli u svakom primjeru je različit.

Primjer 1: Nema proslijeđenih argumenata i nema povratne vrijednosti

 #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()Funkcija uzima ulaz od korisnika, provjerava da li je prost broj ili ne i prikazuje ga na zaslonu.

Prazne zagrade u checkPrimeNumber();izrazu unutar main()funkcije ukazuju da se funkciji ne prosljeđuje nijedan argument.

Povratni tip funkcije je void. Stoga se funkcija ne vraća vrijednosti.

Primjer 2: Nisu proslijeđeni argumenti, već povratna vrijednost

 #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; ) 

Prazne zagrade u n = getInteger();izrazu ukazuju da se funkciji ne prosljeđuje nijedan argument. I, vrijednost vraćena iz funkcije dodjeljuje se n.

Ovdje getInteger()funkcija uzima ulaz od korisnika i vraća ga. Kôd za provjeru je li broj prost ili ne nalazi se unutar main()funkcije.

Primjer 3: Argument je proslijeđen, ali nema povratne vrijednosti

 #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); ) 

Cjelobrojna vrijednost koju je korisnik unio prenosi se u checkPrimeAndDisplay()funkciju.

Ovdje checkPrimeAndDisplay()funkcija provjerava je li prosljeđeni argument prost broj ili ne i prikazuje odgovarajuću poruku.

Primjer 4: Argument proslijeđen i povratna vrijednost

 #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; ) 

Ulaz od korisnika prenosi se u checkPrimeNumber()funkciju.

Na checkPrimeNumber()funkcija provjerava je li prošao argument premijera ili ne.

Ako je proslijeđeni argument prost broj, funkcija vraća 0. Ako je prosljeđeni argument ne-prost broj, funkcija vraća 1. Vrijednost povrata dodjeljuje se varijabli zastave.

Ovisno o tome je li zastavica 0 ili 1, iz main()funkcije se ispisuje odgovarajuća poruka .

Koji je pristup bolji?

Pa, to ovisi o problemu koji pokušavate riješiti. U ovom je slučaju bolje prosljeđivanje argumenta i vraćanje vrijednosti iz funkcije (primjer 4).

Funkcija treba izvoditi određeni zadatak. checkPrimeNumber()Funkcija nije se ulaz od korisnika niti prikazuje odgovarajuću poruku. Provjerava samo je li broj prost ili nije.

Zanimljivi članci...