Vrste uporabniško določenih funkcij v programiranju C.

V tej vadnici boste spoznali različne pristope, s katerimi lahko s pomočjo funkcij rešite isti problem.

Ti 4 programi spodaj preverjajo, ali je celo število, ki ga vnese uporabnik, prosto število ali ne.

Rezultat vseh teh spodnjih programov je enak in v vsakem primeru smo ustvarili uporabniško določeno funkcijo. Vendar je pristop, ki smo ga uporabili v vsakem primeru, drugačen.

Primer 1: Ni posredovanih argumentov in ni vrnjene vrednosti

 #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 je prispevek od uporabnika, preveri, ali se je praštevilo ali ne in se prikaže na zaslonu.

Prazne oklepaje v checkPrimeNumber();stavku znotraj main()funkcije pomenijo, da se funkciji ne posreduje noben argument.

Vrnjeni tip funkcije je void. Zato funkcija ne vrne vrednosti.

Primer 2: Niso posredovani nobeni argumenti, ampak vrnjena vrednost

 #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 oklepaje v n = getInteger();stavku pomenijo, da se funkciji ne posreduje noben argument. In vrednost, vrnjena iz funkcije, je dodeljena n.

Tu getInteger()funkcija od uporabnika vnese vnos in ga vrne. Koda za preverjanje, ali je število prosto ali ne, je znotraj main()funkcije.

Primer 3: Argument je poslan, vendar ni vrnjene vrednosti

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

Celoštevilčna vrednost, ki jo vnese uporabnik, se prenese v checkPrimeAndDisplay()funkcijo.

Tu checkPrimeAndDisplay()funkcija preveri, ali je posredovani argument prosto število ali ne, in prikaže ustrezno sporočilo.

Primer 4: Argument je poslan in vrnjena vrednost

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

Vnos uporabnika se prenese v checkPrimeNumber()funkcijo.

Na checkPrimeNumber()funkcija preveri, ali je opravil argument prime ali ne.

Če je posredovani argument prosto število, funkcija vrne 0. Če je posredovani argument neštevilčno število, funkcija vrne 1. Vrnjena vrednost je dodeljena spremenljivki zastavice.

Odvisno od tega, ali je zastavica 0 ali 1, se iz main()funkcije natisne ustrezno sporočilo .

Kateri pristop je boljši?

No, to je odvisno od težave, ki jo poskušate rešiti. V tem primeru je boljše posredovanje argumenta in vrnitev vrednosti iz funkcije (primer 4).

Funkcija mora izvajati določeno nalogo. checkPrimeNumber()Funkcija ne bo prispevek od uporabnika ne prikaže ustrezno sporočilo. Preveri samo, ali je število prosto ali ne.

Zanimive Članki...