Συναρτήσεις στον Προγραμματισμό C με Παραδείγματα: Αναδρομικό & Ενσωματωμένο
Τι είναι μια συνάρτηση στο C;
Λειτουργία στον προγραμματισμό C είναι ένα επαναχρησιμοποιήσιμο μπλοκ κώδικα που κάνει ένα πρόγραμμα πιο κατανοητό, τον έλεγχο και μπορεί εύκολα να τροποποιηθεί χωρίς να αλλάξει το πρόγραμμα κλήσης. Οι συναρτήσεις διαιρούν τον κώδικα και διαμορφώνουν το πρόγραμμα για καλύτερα και αποτελεσματικά αποτελέσματα. Εν ολίγοις, ένα μεγαλύτερο πρόγραμμα χωρίζεται σε διάφορα υποπρογράμματα τα οποία ονομάζονται συναρτήσεις
Όταν διαιρείτε ένα μεγάλο πρόγραμμα σε διάφορες λειτουργίες, γίνεται εύκολο να διαχειριστείτε κάθε λειτουργία ξεχωριστά. Κάθε φορά που παρουσιάζεται ένα σφάλμα στο πρόγραμμα, μπορείτε εύκολα να διερευνήσετε ελαττωματικές λειτουργίες και να διορθώσετε μόνο αυτά τα σφάλματα. Μπορείτε εύκολα να καλέσετε και να χρησιμοποιήσετε λειτουργίες όποτε απαιτούνται, γεγονός που οδηγεί αυτόματα στην εξοικονόμηση χρόνου και χώρου.
Βιβλιοθήκη Vs. Λειτουργίες που καθορίζονται από το χρήστη
Κάθε πρόγραμμα «C» έχει τουλάχιστον μία λειτουργία που είναι η κύρια λειτουργία, αλλά ένα πρόγραμμα μπορεί να έχει οποιονδήποτε αριθμό συναρτήσεων. Η κύρια () συνάρτηση στο C είναι το σημείο εκκίνησης ενός προγράμματος.
Στον προγραμματισμό «C», οι συναρτήσεις χωρίζονται σε δύο τύπους:
- Λειτουργίες βιβλιοθήκης
- Λειτουργίες που καθορίζονται από το χρήστη
Η διαφορά μεταξύ της βιβλιοθήκης και των συναρτήσεων που ορίζονται από το χρήστη στο C είναι ότι δεν χρειάζεται να γράψουμε κώδικα για μια συνάρτηση βιβλιοθήκης. Υπάρχει ήδη μέσα στο αρχείο κεφαλίδας το οποίο συμπεριλαμβάνουμε πάντα στην αρχή ενός προγράμματος. Απλά πρέπει να πληκτρολογήσετε το όνομα μιας συνάρτησης και να τη χρησιμοποιήσετε μαζί με τη σωστή σύνταξη. Printf, scanf είναι τα παραδείγματα μιας συνάρτησης βιβλιοθήκης.
Ενώ, μια συνάρτηση που ορίζεται από το χρήστη είναι ένας τύπος συνάρτησης στην οποία πρέπει να γράψουμε ένα σώμα μιας συνάρτησης και να καλέσουμε τη συνάρτηση κάθε φορά που απαιτούμε από τη συνάρτηση να εκτελέσει κάποια λειτουργία στο πρόγραμμά μας.
Μια συνάρτηση που ορίζεται από το χρήστη στο C γράφεται πάντα από τον χρήστη, αλλά αργότερα μπορεί να είναι μέρος της βιβλιοθήκης 'C'. Είναι ένα σημαντικό πλεονέκτημα του προγραμματισμού «C».
Οι λειτουργίες προγραμματισμού C χωρίζονται σε τρεις δραστηριότητες όπως:
- Δήλωση συνάρτησης
- Ορισμός συνάρτησης
- Κλήση λειτουργίας
Δήλωση λειτουργίας
Δήλωση συνάρτησης σημαίνει τη σύνταξη ενός ονόματος ενός προγράμματος. Είναι ένα υποχρεωτικό μέρος για τη χρήση συναρτήσεων σε κώδικα. Σε μια δήλωση συνάρτησης, απλώς καθορίζουμε το όνομα μιας συνάρτησης που πρόκειται να χρησιμοποιήσουμε στο πρόγραμμά μας σαν μια δήλωση μεταβλητής. Δεν μπορούμε να χρησιμοποιήσουμε μια συνάρτηση αν δεν έχει δηλωθεί σε ένα πρόγραμμα. Μια δήλωση συνάρτησης ονομάζεται επίσης "Function πρωτότυπο. "
Οι δηλώσεις συναρτήσεων (που ονομάζονται πρωτότυπο) γίνονται συνήθως πάνω από την κύρια συνάρτηση () και έχουν τη γενική μορφή:
return_data_type function_name (data_type arguments);
- Τα Διαχωριστικά επιστροφή_δεδομένων_τύπος: είναι ο τύπος δεδομένων της συνάρτησης τιμής που επιστρέφεται στη δήλωση κλήσης.
- Τα Διαχωριστικά όνομα_λειτουργίας: ακολουθείται από παρένθεση
- Επιχειρήματα Τα ονόματα με τις δηλώσεις τύπου δεδομένων τους τοποθετούνται προαιρετικά μέσα στις παρενθέσεις.
Θεωρούμε το ακόλουθο πρόγραμμα που δείχνει πώς να δηλώσετε μια συνάρτηση κύβου για να υπολογίσετε την τιμή του κύβου μιας ακέραιας μεταβλητής
#include <stdio.h> /*Function declaration*/ int add(int a,b); /*End of Function declaration*/ int main() {
Λάβετε υπόψη ότι μια συνάρτηση δεν επιστρέφει απαραίτητα μια τιμή. Σε αυτήν την περίπτωση, χρησιμοποιείται η λέξη-κλειδί void.
Για παράδειγμα, η δήλωση συνάρτησης output_message υποδεικνύει ότι η συνάρτηση δεν επιστρέφει μια τιμή: void output_message();
Ορισμός λειτουργίας
Ορισμός συνάρτησης σημαίνει απλώς την εγγραφή του σώματος μιας συνάρτησης. Ένα σώμα μιας συνάρτησης αποτελείται από εντολές που πρόκειται να εκτελέσουν μια συγκεκριμένη εργασία. Ένα σώμα συνάρτησης αποτελείται από ένα ή ένα μπλοκ εντολών. Είναι επίσης υποχρεωτικό μέρος μιας λειτουργίας.
int add(int a,int b) //function body { int c; c=a+b; return c; }
Κλήση λειτουργίας
Μια κλήση συνάρτησης σημαίνει την κλήση μιας συνάρτησης όποτε απαιτείται σε ένα πρόγραμμα. Κάθε φορά που καλούμε μια συνάρτηση, εκτελεί μια λειτουργία για την οποία σχεδιάστηκε. Μια κλήση συνάρτησης είναι ένα προαιρετικό μέρος ενός προγράμματος.
result = add(4,5);
Εδώ, είναι ο πλήρης κώδικας:
#include <stdio.h> int add(int a, int b); //function declaration int main() { int a=10,b=20; int c=add(10,20); //function call printf("Addition:%d\n",c); getch(); } int add(int a,int b) //function body { int c; c=a+b; return c; }
Παραγωγή:
Addition:30
Επιχειρήματα Λειτουργίας
Τα ορίσματα μιας συνάρτησης χρησιμοποιούνται για τη λήψη των απαραίτητων τιμών από την κλήση συνάρτησης. Αντιστοιχίζονται ανά θέση. το πρώτο όρισμα μεταβιβάζεται στην πρώτη παράμετρο, το δεύτερο στη δεύτερη παράμετρο και ούτω καθεξής.
Από προεπιλογή, τα ορίσματα περνούν κατά τιμή στην οποία δίνεται αντίγραφο δεδομένων στην καλούμενη συνάρτηση. Η μεταβλητή που πέρασε πραγματικά δεν θα αλλάξει.
Θεωρούμε το ακόλουθο πρόγραμμα που δείχνει παραμέτρους που μεταβιβάζονται με τιμή:
int add (int x, int y); int main() { int a, b, result; a = 5; b = 10; result = add(a, b); printf("%d + %d\ = %d\n", a, b, result); return 0;} int add (int x, int y) { x += y; return(x);}
Η έξοδος του προγράμματος είναι:
5 + 10 = 15
Λάβετε υπόψη ότι οι τιμές των a και b μεταβιβάστηκαν για να προσθέσετε συνάρτηση δεν άλλαξαν επειδή μόνο η τιμή της μεταβιβάστηκε στην παράμετρο x.
Μεταβλητό εύρος
Μεταβλητό εύρος σημαίνει την ορατότητα των μεταβλητών σε έναν κώδικα του προγράμματος.
Στο C, οι μεταβλητές που δηλώνονται μέσα σε μια συνάρτηση είναι τοπικές σε αυτό το μπλοκ κώδικα και δεν μπορούν να αναφέρονται εκτός της συνάρτησης. Ωστόσο, οι μεταβλητές που δηλώνονται εκτός όλων των συναρτήσεων είναι καθολικές και προσβάσιμες από ολόκληρο το πρόγραμμα. Σταθερές που δηλώνονται με α #καθορίζω στην κορυφή ενός προγράμματος είναι προσβάσιμα από ολόκληρο το πρόγραμμα. Λαμβάνουμε υπόψη το ακόλουθο πρόγραμμα που εκτυπώνει την τιμή της καθολικής μεταβλητής τόσο από την κύρια όσο και από την καθορισμένη από το χρήστη συνάρτηση:
#include <stdio.h> int global = 1348; void test(); int main() { printf("from the main function : global =%d \n", global); test () ; return 0;} void test (){ printf("from user defined function : global =%d \n", global);}
Αποτέλεσμα:
from the main function : global =1348 from user defined function : global =1348
Συζητάμε τις λεπτομέρειες του προγράμματος:
- Δηλώνουμε μια ακέραια καθολική μεταβλητή με 1348 ως αρχική τιμή.
- Δηλώνουμε και ορίζουμε μια συνάρτηση test() που ούτε λαμβάνει ορίσματα ούτε επιστρέφει τιμή. Αυτή η συνάρτηση εκτυπώνει μόνο την καθολική τιμή μεταβλητής για να αποδείξει ότι οι καθολικές μεταβλητές είναι προσβάσιμες οπουδήποτε στο πρόγραμμα.
- Εκτυπώνουμε την καθολική μεταβλητή μέσα στην κύρια συνάρτηση.
- Καλούμε τη συνάρτηση δοκιμής για να εκτυπώσουμε την καθολική τιμή της μεταβλητής.
Στο C, όταν τα ορίσματα μεταβιβάζονται σε παραμέτρους συνάρτησης, οι παράμετροι λειτουργούν ως τοπικές μεταβλητές που θα καταστραφούν κατά την έξοδο από τη συνάρτηση.
Όταν χρησιμοποιείτε καθολικές μεταβλητές, χρησιμοποιήστε τα με προσοχή γιατί μπορεί να οδηγήσουν σε σφάλματα και μπορούν να αλλάξουν οπουδήποτε σε ένα πρόγραμμα. Θα πρέπει να αρχικοποιηθούν πριν από τη χρήση.
Στατικές Μεταβλητές
Οι στατικές μεταβλητές έχουν τοπική εμβέλεια. Ωστόσο, δεν καταστρέφονται κατά την έξοδο από τη λειτουργία. Επομένως, μια στατική μεταβλητή διατηρεί την τιμή της για πάντα και μπορεί να προσπελαστεί όταν η συνάρτηση εισαχθεί ξανά. Μια στατική μεταβλητή αρχικοποιείται όταν δηλώνεται και χρειάζεται το πρόθεμα static.
Το παρακάτω πρόγραμμα χρησιμοποιεί μια στατική μεταβλητή:
#include <stdio.h> void say_hi(); int main() { int i; for (i = 0; i < 5; i++) { say_hi();} return 0;} void say_hi() { static int calls_number = 1; printf("Hi number %d\n", calls_number); calls_number ++; }
Το πρόγραμμα εμφανίζει:
Hi number 1 Hi number 2 Hi number 3 Hi number 4 Hi number 5
Αναδρομικές συναρτήσεις
Θεωρήστε το παραγοντικό ενός αριθμού που υπολογίζεται ως εξής 6! =6* 5 * 4 * 3 * 2 * 1.
Αυτός ο υπολογισμός γίνεται ως επαναλαμβανόμενος υπολογισμός του γεγονότος * (γεγονός -1) έως ότου το γεγονός ισούται με 1.
Μια αναδρομική συνάρτηση είναι μια συνάρτηση που καλεί τον εαυτό της και περιλαμβάνει μια συνθήκη εξόδου για να ολοκληρώσει τις αναδρομικές κλήσεις. Στην περίπτωση του υπολογισμού του παραγοντικού αριθμού, η συνθήκη εξόδου είναι γεγονός ίση με 1. Η αναδρομή λειτουργεί με «στοίβαξη» κλήσεων έως ότου η συνθήκη εξόδου είναι αληθής.
Για παράδειγμα:
#include <stdio.h> int factorial(int number); int main() { int x = 6; printf("The factorial of %d is %d\n", x, factorial(x)); return 0;} int factorial(int number) { if (number == 1) return (1); /* exiting condition */ else return (number * factorial(number - 1)); }
Το πρόγραμμα εμφανίζει:
The factorial of 6 is 720
Εδώ, συζητάμε τις λεπτομέρειες του προγράμματος:
- Δηλώνουμε την αναδρομική παραγοντική μας συνάρτηση που παίρνει μια ακέραια παράμετρο και επιστρέφει το παραγοντικό αυτής της παραμέτρου. Αυτή η λειτουργία θα καλέσει τον εαυτό της και θα μειώσει τον αριθμό μέχρι να επιτευχθεί η έξοδος ή η βασική συνθήκη. Όταν η συνθήκη είναι αληθής, οι τιμές που δημιουργήθηκαν προηγουμένως θα πολλαπλασιαστούν η μία με την άλλη και θα επιστραφεί η τελική παραγοντική τιμή.
- Δηλώνουμε και αρχικοποιούμε μια ακέραια μεταβλητή με τιμή”6″ και στη συνέχεια εκτυπώνουμε την παραγοντική της τιμή καλώντας την παραγοντική μας συνάρτηση.
Εξετάστε το παρακάτω διάγραμμα για να κατανοήσετε καλύτερα τον αναδρομικό μηχανισμό που συνίσταται στην κλήση της συνάρτησης από μόνη της μέχρι να επιτευχθεί η βασική περίπτωση ή η συνθήκη διακοπής και μετά συλλέγουμε τις προηγούμενες τιμές:
Ενσωματωμένες Λειτουργίες
Η συνάρτηση στον προγραμματισμό C χρησιμοποιείται για την αποθήκευση των εντολών που χρησιμοποιούνται πιο συχνά. Χρησιμοποιείται για τη διαμόρφωση του προγράμματος.
Κάθε φορά που καλείται μια συνάρτηση, ο δείκτης εντολών μεταβαίνει στον ορισμό της συνάρτησης. Μετά την εκτέλεση μιας συνάρτησης, ο δείκτης εντολών επιστρέφει στη δήλωση από όπου μεταπήδησε στον ορισμό της συνάρτησης.
Όποτε χρησιμοποιούμε λειτουργίες, χρειαζόμαστε ένα επιπλέον δείκτης κατευθυνθείτε για να μεταβείτε στον ορισμό της συνάρτησης και να επιστρέψετε στη δήλωση. Για να εξαλείψουμε την ανάγκη τέτοιων κεφαλών δεικτών, χρησιμοποιούμε ενσωματωμένες συναρτήσεις.
Σε μια ενσωματωμένη λειτουργία, μια κλήση συνάρτησης αντικαθίσταται απευθείας από έναν πραγματικό κωδικό προγράμματος. Δεν μεταπηδά σε κανένα μπλοκ επειδή όλες οι λειτουργίες εκτελούνται εντός της ενσωματωμένης συνάρτησης.
Οι ενσωματωμένες συναρτήσεις χρησιμοποιούνται κυρίως για μικρούς υπολογισμούς. Δεν είναι κατάλληλα όταν εμπλέκονται μεγάλοι υπολογιστές.
Μια ενσωματωμένη συνάρτηση είναι παρόμοια με την κανονική συνάρτηση με τη διαφορά ότι η λέξη-κλειδί ενσωματωμένη βρίσκεται πριν από το όνομα της συνάρτησης. Οι ενσωματωμένες συναρτήσεις δημιουργούνται με την ακόλουθη σύνταξη:
inline function_name () { //function definition }
Ας γράψουμε ένα πρόγραμμα για την υλοποίηση μιας ενσωματωμένης συνάρτησης.
inline int add(int a, int b) //inline function declaration { return(a+b); } int main() { int c=add(10,20); printf("Addition:%d\n",c); getch(); }
Παραγωγή:
Addition: 30
Το παραπάνω πρόγραμμα δείχνει τη χρήση μιας ενσωματωμένης συνάρτησης για πρόσθεση δύο αριθμών. Όπως μπορούμε να δούμε, έχουμε επιστρέψει την πρόσθεση σε δύο αριθμούς εντός της συνάρτησης inline μόνο χωρίς να γράψουμε επιπλέον γραμμές. Κατά την κλήση συνάρτησης μόλις περάσαμε τιμές στις οποίες πρέπει να κάνουμε πρόσθεση.
Σύνοψη
- Μια συνάρτηση είναι ένα μίνι πρόγραμμα ή ένα υποπρόγραμμα.
- Οι συναρτήσεις χρησιμοποιούνται για τη διαμόρφωση του προγράμματος.
- Η βιβλιοθήκη και η καθορισμένη από τον χρήστη είναι δύο τύποι συναρτήσεων.
- Μια συνάρτηση αποτελείται από μια δήλωση, σώμα συνάρτησης και ένα τμήμα κλήσης συνάρτησης.
- Η δήλωση λειτουργίας και το σώμα είναι υποχρεωτικά.
- Μια κλήση συνάρτησης μπορεί να είναι προαιρετική σε ένα πρόγραμμα.
- Το πρόγραμμα C έχει τουλάχιστον μία λειτουργία. είναι η κύρια συνάρτηση ().
- Κάθε συνάρτηση έχει ένα όνομα, τύπο δεδομένων επιστρεφόμενης τιμής ή ένα κενό, παραμέτρους.
- Κάθε συνάρτηση πρέπει να οριστεί και να δηλωθεί στο πρόγραμμά σας C.
- Λάβετε υπόψη ότι το συνηθισμένο μεταβλητές σε μια συνάρτηση C καταστρέφονται μόλις βγούμε από την κλήση συνάρτησης.
- Τα ορίσματα που μεταβιβάζονται σε μια συνάρτηση δεν θα αλλάξουν επειδή πέρασαν από τιμή καμία ανά διεύθυνση.
- Το εύρος της μεταβλητής αναφέρεται ως η ορατότητα των μεταβλητών μέσα σε ένα πρόγραμμα
- Υπάρχουν καθολικές και τοπικές μεταβλητές C προγραμματισμού