Typer brukerdefinerte funksjoner i C-programmering

I denne opplæringen vil du lære om forskjellige tilnærminger du kan ta for å løse det samme problemet ved hjelp av funksjoner.

Disse 4 programmene nedenfor sjekker om heltallet som er angitt av brukeren, er et primtall eller ikke.

Resultatet av alle disse programmene nedenfor er det samme, og vi har opprettet en brukerdefinert funksjon i hvert eksempel. Tilnærmingen vi har tatt i hvert eksempel er imidlertid forskjellig.

Eksempel 1: Ingen argumenter bestått og ingen returverdi

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

Den checkPrimeNumber()funksjonen tar input fra brukeren, sjekker om det er et primtall eller ikke og viser det på skjermen.

De tomme parentesene i checkPrimeNumber();setningen inne i main()funksjonen indikerer at ingen argumenter blir sendt til funksjonen.

Funksjonens returtype er void. Derfor returneres ingen verdi fra funksjonen.

Eksempel 2: Ingen argumenter bestått, men en returverdi

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

De tomme parentesene i n = getInteger();uttalelsen indikerer at ingen argumenter blir overført til funksjonen. Og verdien som returneres fra funksjonen tildeles n.

Her getInteger()tar funksjonen innspill fra brukeren og returnerer den. Koden for å sjekke om et tall er primtall eller ikke er inne i main()funksjonen.

Eksempel 3: Argument bestått, men ingen returverdi

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

Heltallverdien som er angitt av brukeren, overføres til checkPrimeAndDisplay()funksjonen.

Her checkPrimeAndDisplay()sjekker funksjonen om argumentet som er sendt er et primtall eller ikke, og viser den aktuelle meldingen.

Eksempel 4: Argument bestått og returverdi

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

Inngangen fra brukeren overføres til checkPrimeNumber()funksjonen.

De checkPrimeNumber()funksjons sjekker om bestått argument er prime eller ikke.

Hvis det passerte argumentet er et primtall, returnerer funksjonen 0. Hvis det passerte argumentet er et ikke-primtall, returnerer funksjonen 1. Returverdien tildeles flaggvariabelen.

Avhengig av om flagget er 0 eller 1, skrives det ut en passende melding fra main()funksjonen.

Hvilken tilnærming er bedre?

Vel, det kommer an på problemet du prøver å løse. I dette tilfellet er det bedre å sende argument og returnere en verdi fra funksjonen (eksempel 4).

En funksjon skal utføre en bestemt oppgave. Den checkPrimeNumber()funksjonen tar ikke input fra brukeren eller den viser den aktuelle meldingen. Den sjekker bare om et tall er primtall eller ikke.

Interessante artikler...