Ηβασικήσυνάρτηση προγράμματος main()

Σχετικά έγγραφα
Ηβασικήσυνάρτηση προγράμματος main()

Η βασική συνάρτηση προγράμματος main()

Πίνακες. Χρησιμοποιούνται για αποθήκευση συνόλου δεδομένων του ίδιου τύπου. Γραμμική Διάταξη Δήλωση Τύπος Δεδομένων ΌνομαΠίνακα[ length ]

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

Προγραμματισμός Ι (ΗΥ120)

ΣΥΝΑΡΤΗΣΕΙΣ (Functions)

Η γλώσσα προγραμματισμού C

Απλά Προγράμματα. Βήματα: 1. Καθορισμός παράστασης δεδομένων στη μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων

Εξοικ Εξ ε οικ ίωση ε με το το πρόγ ραμμα πρόγ DEV C++ Επικοι Επικ νωνία οι Χρήσ Χρήστη τη Υπολ Υπο ογισ λ τή

Η γλώσσα προγραμματισμού C

Βήματα: μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων. Δομές Δεδομένων + Αλγόριθμοι = Προγράμματα

Εισαγωγή στον Προγραμματισμό

Εξοικείωση με το πρόγραμμα DEV C++ Επικοινωνία Χρήστη - Υπολογιστή

Προγραμματισμός Η/Υ (ΤΛ2007 )

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

Δομημένος Προγραμματισμός

Ορισμός μεταβλητών δεικτών και αρχικοποίηση

Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2)

Προγραμματισμός Η/Υ (ΤΛ2007 )

Δομημένος Προγραμματισμός (ΤΛ1006)

Σε γενικές γραμμές, είναι καλή πρακτική να γράϕουμε προγράμματα C που αποτελούνται από πολλές και μικρές συναρτήσεις, παρά από λίγες και μεγάλες.

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Πίνακες. Χρησιμοποιούνται για αποθήκευση συνόλου δεδομένων του ίδιου τύπου. Γραμμική Διάταξη Δήλωση Τύπος Δεδομένων ΌνομαΠίνακα[ length ]

Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C (2)

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Μεθόδων Επίλυσης Προβλημάτων

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Διαδικασιακός Προγραμματισμός

Διαδικασία Ανάπτυξης Λογισμικού

ΣΧΕΔΙΑΣΗ ΚΑΙ ΥΛΟΠΟΙΗΣΗ ΛΟΓΙΣΜΙΚΟΥ

Μεθόδων Επίλυσης Προβλημάτων

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

Προγραμματισμός Η/Υ. Ενότητα 7: Συναρτήσεις

Γλώσσα Προγραμματισμού C

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

Ανάπτυξη και Σχεδίαση Λογισμικού

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Παραδείγματα. Γράψτε ένα πρόγραμμα που να τυπώνει τη μέση τιμή ενός συνόλου μη αρνητικών αριθμών

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. Δείκτες (Διάλεξη 14)

Η γλώσσα προγραμματισμού C

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Ανάπτυξη και Σχεδίαση Λογισμικού

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. (Διάλεξη 14) Παράδειγμα: Αλλαγή τιμής μεταβλητής μόνο τοπικά

ΑΡ Χ Ε Ι Α Κ Ε Ι Μ Ε Ν Ο Υ (text files)

Προγραµµατιστικές Τεχνικές

Ανάπτυξη και Σχεδίαση Λογισμικού

Εισαγωγή στον Προγραμματισμό (με. τη C)

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Προγραμματισμός Συστημάτων

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (Programming in the large)

Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις. Επανάληψη για την ενδιάμεση εξέταση. (Διάλεξη 13)

ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Προγραμματισμός Ι (ΗΥ120)

int abs( int x ), επιστρέφει την απόλυτη τιμή του ακεραίου x Πχ abs( 11) ισούται με 11, abs(34) ισούται με 34 double fb( fabs( double x ), επιστρέφει

2 Ορισμός Κλάσεων. Παράδειγμα: Μηχανή για Εισιτήρια. Δομή μιας Κλάσης. Ο Σκελετός της Κλάσης για τη Μηχανή. Ορισμός Πεδίων 4/3/2008

Η γλώσσα προγραμματισμού C

scanf() scanf() stdin scanf() printf() int float double %lf float

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Προγραµµατισµός. Αναδροµή (1/2)

Εισαγωγή στον δομημένο προγραμματισμό

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΗΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Παραδείγματα με συναρτήσεις στη C

Κεφάλαιο Πίνακες Ι. (Διάλεξη 16)

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7) Είσοδος/ Έξοδος

Εργαστήριο 1: Επανάληψη Βασικών Εννοιών στη Γλώσσα C

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7)

Εισαγωγή στον Προγραμματισμό με C++

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

Εισαγωγή στην γλώσσα προγραμματισμού C

Προγραμματισμός Η/Υ (ΤΛ2007 )

12. Συναρτήσεις (Μέρος ΙI)

Εισαγωγή στον Προγραμματισμό

Διαδικασιακός Προγραμματισμός

Συναρτήσεις. Εισαγωγή

Προγραμματισμός Η/Υ (ΤΛ2007 )

7. ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΣΥΝΑΡΤΗΣΕΙΣ

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Δομημένος Προγραμματισμός (ΤΛ1006)

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Εισαγωγή στις Συναρτήσεις

Transcript:

Ηβασικήσυνάρτηση προγράμματος main() HEADER FILES main(){ ΔΗΛΩΣΕΙΣ ΜΕΤΑΒΛΗΤΩΝ ΕΝΤΟΛΕΣ (σειριακές, επιλογής ή επανάληψης) ΕΠΙΣΤΡΕΦΟΜΕΝΟΣ ΤΥΠΟΣ (return 0;)

Συναρτήσεις Ησυνάρτησηείναι ένα υποπρόγραμμα που εκτελεί συγκεκριμένες λειτουργίες και ανάλογα με τα δεδομένα εισόδου (παράμετροι συνάρτησης) υπολογίζει τα δεδομένα εξόδου (επιστρεφόμενος τύπος). Δεδομένα Εισόδου ΣΥΝΑΡΤΗΣΗ Δεδομένα Eξόδου Πχ η τριγωνομετρική συνάρτηση sin(x), υπολογίζει το ημίτονο της γωνίας x.

Δήλωση Συνάρτησης (Επικεφαλίδα) Τύπος Δεδομένων ΌνομαΣυνάρτησης ( Παράμετροι ); Αν δεν επιστρέφεται τίποτα: void Αν δεν υπάρχουν: void Αν υπάρχουν λίστα τυπικών παραμέτρων: Τύπος1 μεταβλ1,..,τύποςν μεταβλν Παράδειγμα: int CalculateSum( int a, int b );

Υλοποίηση Συνάρτησης Τύπος Δεδομένων ΌνομαΣυνάρτησης ( Παράμετροι ) { Δηλώσεις μεταβλητών Εντολές Επιστροφή τύπου δεδομένων (όταν υπάρχει)

Κλήση Συνάρτησης ΌνομαΣυνάρτησης( Λίστα Πραγματικών Παραμέτρων ); Αν δεν υπάρχουν, κενό Πχ. Function1(); Αν υπάρχουν, λίστα μεταβλητών ή αριθμητικών τιμών, διαχωρισμένες με κόμμα Πχ. Function1(12,4,a,b);

Κλήση H ροή ελέγχου του προγράμματος είναι σειριακή και εκτελούνται οι εντολές και συναρτήσεις της main. Όταν κληθεί μια συνάρτηση ο έλεγχος του προγράμματος μεταφέρεται στην καλούμενη συνάρτηση. Κάθε συνάρτηση μπορεί να καλέσει και άλλες συναρτήσεις. (Δεν μπορεί να καλέσει τη main.)

Συναρτήσεις Δομή προγράμματος Όλες οι συναρτήσεις πρέπει να δηλωθούν Ηδήλωσηγίνεταιπάνταπριντηmain. Η υλοποίηση μπορεί να γίνει ταυτόχρονα με τη δήλωση, ή ξεχωριστά πριν ή μετά τη main.

Συναρτήσεις Δομή προγράμματος 1 HEADER FILES ΔΗΛΩΣΗ ΚΑΙ ΥΛΟΠΟΙΗΣΗ ΣΥΝΑΡΤΗΣΗΣ main(){ Δηλώσεις Μεταβλητών ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΗΣ return 0; Σώμα εντολών

Παράδειγμα 1 Δήλωση μαζί με #include <stdio.h> #include <stdlib.h> υλοποίηση void ektyposi_epilogwn( void ) { printf( 1. Method 1\n ); printf( 2. Method 2\n ); printf( 3. Method 3\n );

Παράδειγμα 1 - Κλήση main(){ ektyposi_epilogwn(); system( pause ); return 0;

HEADER FILES ΔΗΛΩΣΗ ΣΥΝΑΡΤΗΣΗΣ main(){ Δηλώσεις Μεταβλητών Συναρτήσεις Δομή προγράμματος 2 ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΗΣ Σώμα εντολών return 0; ΥΛΟΠΟΙΗΣΗ ΣΥΝΑΡΤΗΣΗΣ

Παράδειγμα 2 Δήλωση #include <stdio.h> #include <stdlib.h> void ektyposi_epilogwn( void ) ;

Παράδειγμα 2 - Κλήση main(){ ektyposi_epilogwn(); system( pause ); return 0;

Παράδειγμα 2 - Υλοποίηση void ektyposi_epilogwn( void ) { printf( 1. Method 1\n ); printf( 2. Method 2\n ); printf( 3. Method 3\n );

Συναρτήσεις με επιστρεφόμενο τύπο int CalculateSum( int a, int b ) { int c; c = a + b; return c ; Ηεντολήreturn παραλείπεται ΜΟΝΟ στην περίπτωση που η συνάρτηση δεν επιστρέφει κάποιο τύπο δεδομένων (void). Με την εντολή return ο έλεγχος ροής του προγράμματος επιστρέφει στο σημείο απ όπου κλήθηκε η συνάρτηση.

Κλήση main(){ int k; k = CalculateSum(5,2); printf( Calculated:%d,k); system( pause ); return 0;

Παράμετροι Λίστα τυπικών παραμέτρων στη δήλωση: int CalculateSum( int a, int b ) ; Λίστα πραγματικών παραμέτρων στην κλήση int k=2,l=5; CalculateSum( k, l ) ; Μεταβλητές ή αριθμητικές τιμές Οι τιμές των πραγματικών παραμέτρων αντιγράφονται στις τυπικές παραμέτρους όταν καλείται η συνάρτηση

Παράδειγμα Φτιάξτε μία συνάρτηση που να προσδιορίζει το πρόσημο ενός αριθμού (τύπος δεδομένων float).

Αλγόριθμος 1. Ζητάω από το χρήστη να δώσει έναν πραγματικό 2. Διαβάζεται ο αριθμός που θα δώσει ο χρήστης 3. Φτιάχνω συνάρτηση με παράμετρο τον αριθμό και επιστρεφόμενο τύπο χαρακτήρα 4. Αν ο αριθμός είναι αρνητικός επιστρέφεται -, διαφορετικά επιστρέφεται + 5. Εκτύπωση του χαρακτήρα

Επικεφαλίδα Συνάρτησης char CalcProsimo( float a ); Έξοδος: χαρακτήρας που δηλώνει το πρόσημο του a Είσοδος: ο πραγματικός αριθμός

Πρόγραμμα #include <stdio.h> #include <stdlib.h> char CalcProsimo( float a) { if (a < 0) return - ; else return + ; Η εντολή return θα πρέπει να υπάρχει σε όλες τις περιπτώσεις

Πρόγραμμα main(){ float w; char c; printf( Input float\n ); scanf( %f,&w); c = CalcProsimo( w ); printf( To prosimo einai: %c,c); system( pause ); return 0; Η αριθμητική τιμή της w θα αντιγραφεί στην τυπική παράμετρο a της συνάρτησης CalcProsimo Αναθέτω στη c την τιμή που επιστρέφει η συνάρτηση

Παράδειγμα Γράψτε μια συνάρτηση που να επιστρέφει το μεγαλύτερο από 3 ακέραιους αριθμούς.

Αλγόριθμος 1. Ζητώαπότοχρήστηναδώσει3 αριθμούς 2. Διαβάζονται οι αριθμοί 3. Σχεδιάζω συνάρτηση με παραμέτρους τους 3 ακεραίους και επιστρεφόμενη τιμή ακέραιο (για το μέγιστο)

Αλγόριθμος 4. Θα χρησιμοποιήσω μια μεταβλητή για να κρατήσω προσωρινό μέγιστο 5. Αν ο 1 ος ακέραιος είναι μεγαλύτερος από τον 2 ο, ο προσωρινός μέγιστος θα έχει την τιμή του 1 ου, διαφορετικά θα έχει την τιμή του δεύτερου 6. Αν ο 3ος ακέραιος είναι μεγαλύτερος από τον προσωρινό μέγιστο, ο προσωρινός μέγιστος θα πάρει την τιμή του 3 ου ακεραίου.

Σχηματικά 7. Επιστρέφεται ο προσωρινός ακέραιος 1 ος ακέραιος int arithmos1; 2 ος ακέραιος int arithmos2; 3 ος ακέραιος int arithmos3; 1. Αν arithmos1>arithmos2 Max = arithmos1 2. Διαφορετικά Max = arithmos2 1. Αν arithmos3>max Max = arithmos3

Επικεφαλίδα συνάρτησης int FindMax (int number1, int number2, int number3);

Πρόγραμμα #include <stdio.h> #include <stdlib.h> int FindMax( int number1, int number2, int number3) { int max; if ( number1 > number2) max = number1; else max = number2;

Πρόγραμμα if ( number3 > max) max = number3; return max;

Πρόγραμμα main(){ int a,b,c,result; printf( Input 3 integers\n ); scanf( %d%d%d,&a,&b,&c); result = FindMax(a,b,c); printf( Max number is:%d\n,result); system( pause ); return 0;

Παράδειγμα Ένα πρόγραμμα που να βρίσκει το μεγαλύτερο από 5 αριθμούς χρησιμοποιώντας τη συνάρτηση FindMax

Πρόγραμμα main(){ int a,b,c,d,e,result; printf( Input 5 integers\n ); scanf( %d%d%d%d%d,&a,&b,&c,&d,&e); result = FindMax(a,b,c); result = FindMax(result,d,e); printf( Max number is:%d\n,result); system( pause ); return 0;

Κατάσταση Μνήμης Ημνήμηείναι οργανωμένη σε «κελιά». Στα κελιά αποθηκεύονται οι τιμές των μεταβλητών και κάθε κελί έχει μία μοναδική διεύθυνση. 1000 1001 1002 1003 1004 132 8 5 43 1 1005 1006 1007 1008 1009 a 0 16000 b 800 1010 1011 1012 1013 1014 7 13 C 3 21

Μεταβλητές και μνήμη 1000 1001 1002 1003 1004 132 8 5 43 1 1005 1006 1007 1008 1009 a 0 16000 b 800 Οι μεταβλητές είναι συμβολικά ονόματα που χρησιμοποιούμε γιανααναφερθούμε σε δεδομένα που είναι αποθηκευμένα στη μνήμη. 1010 1011 1012 1013 1014 7 13 C 3 21 int x = 21;

Μεταβλητές και μνήμη Μετά την εκτέλεση κάθε εντολής, αλλάζει η κατάσταση της μνήμης. Πχ με εντολή x=2; Αλλάζει η αριθμητική τιμή της x

Χαρακτηριστικά Μεταβλητών Εμβέλεια (ορατότητα) Διάρκεια ζωής (δημιουργία καταστροφή) Θέση στη μνήμη

Καθολικές (public) Μεταβλητές Δηλώνονται έξω από τη main Εμβέλεια: Είναι ορατές από όλες τις συναρτήσεις που ακολουθούν της δήλωσης Διάρκεια: Δημιουργούνται με την εκκίνηση εκτέλεσης του προγράμματος και καταστρέφονται με το τέλος εκτέλεσης Θέση στη μνήμη: Τοποθετούνται σε θέσεις οι οποίες υπάρχουν καθόλη τη διάρκεια εκτέλεσης του προγράμματος

Παράδειγμα #include <stdio.h> #include <stdlib.h> int a; void print(void){ printf( To a exei timh:%d\n, a ); main(){ a = 4; print(); system( pause ); return 0; Καθολική (public). Ορατή από όλες τις συναρτήσεις που έχουν δηλωθεί ΠΑΡΑΚΑΤΩ

Βρείτε το λάθος #include <stdio.h> #include <stdlib.h> void menu(void){ printf( Value of a is:%d, a ); int a; void print(void){ printf( To a exei timh:%d\n, a ); main(){ a = 4; menu(); print(); system( pause ); return 0; Μήνυμα λάθους από τον Compiler: To a δεν έχει δηλωθεί

Τοπικές (local) μεταβλητές Δηλώνονται μέσα σε κάποιο σώμα εντολών ή σε σώμα συνάρτησης Εμβέλεια: Είναι ορατές μόνο στο σώμα συνάρτηση που τις εμπεριέχει Διάρκεια: Δημιουργούνται κατά την εκκίνηση του σώματος εντολών ή της συνάρτησης και καταστρέφονται με το τέλος εκτέλεσης του σώματος ή της συνάρτησης Θέση στη μνήμη: Τοποθετούνται σε θέσεις που δεσμεύονται μόνο για την εκτέλεση του σώματος εντολών ή της συνάρτησης

Σχηματικά 1000 1001 9.8 1002 1003 3 1004 124 1005 26 Διευθύνσεις μνήμης που δεσμεύονται για τις τοπικές μεταβλητές της main. Διευθύνσεις μνήμης πουvoid print(void){ δεσμεύονται για τις τοπικές μεταβλητές της print. int a,b,k; a =3; b=124; k = 26; printf( A:%d,B:%d,k:%d,a,b,k); main(){ double k; k=9.8; print(); printf( k:%d,k);

Έλεγχος ροής προγράμματος 4. Δέσμευση μνήμης για τοπικές μεταβλητές της print 5. 6. 7. 8. 1. Δέσμευση μνήμης για τοπικές μεταβλητές της main 2. 3. 9. void print(void){ int a,b,k; a =3; b=124; k = 26; printf( A:%d,B:%d,k:%d,a,b,k); main(){ double k; k=9.8; print(); printf( k:%d,k);

Βρείτε τι θα εκτυπωθεί int CalculateDiff(int a, int b ) { int c=9; printf( Value of c is:%d,9); return (a b); main() { int a=3, b=1, c=7, d=2; printf( Difference is : %d\n, CalculateDiff( c, d ) );

Στατικές Μεταβλητές - Static Δήλωση: static τύπος ΌνομαΜεταβλητής Πχ static int a=0; Οι στατικές μεταβλητές δεσμεύουν θέσεις μνήμης καθόλη τη διάρκεια του προγράμματος (η μνήμηδεν αποδεσμεύεται στο τέλος εκτέλεσης της συνάρτησης)

Παράδειγμα void printvalue(void){ static int k = 0; k++; printf( To k:%d\n,k); main(){ printvalue(); printvalue(); printvalue(); Η αρχικοποίηση γίνεται κατά το compilation Η μεταβλητή k δεν καταστρέφεται στο τέλος εκτέλεσης της συνάρτησης. Η τιμή της διατηρείται μέχρι το τέλος εκτέλεσης του προγράμματος. Θα εκτυπωθεί To k:1 To k:2 To k:3

Τι θα εκτυπωθεί void print(){ int k = 0; while(k<5) k++; printf( To k:%d\n,k); main() { print(); print(); void print(){ static int k = 0; while(k<5) k++; printf( To k:%d\n,k); main() { print(); print();

Δείκτες και παράμετροι συναρτήσεων Κλήση με τιμή (call by value) Όταν η λίστα τυπικών παραμέτρων περιέχει τους κλασικούς τύπους δεδομένων Πχ: Δήλωση: Int CalculateSum(int x,int y ); Κλήση: CalculateSum( a, b ); Αντιγραφή των τιμών των μεταβλητών a,b στις τοπικές μεταβλητές της CalculateSum x,y. Αλλαγές των τιμών x,y μέσα από τη συνάρτηση δεν επηρεάζουν τα a,b

Δείκτες και παράμετροι συναρτήσεων Κλήση με αναφορά (call by reference) Όταν η λίστα τυπικών παραμέτρων περιέχει δείκτες Πχ: Δήλωση: Int CalculateSum(int *x,int y ); Κλήση από τη main: CalculateSum( &a, b ); Στην τοπική μεταβλητή x της συνάρτησης CalculateSum, αντιγράφεται η διεύθυνση της τοπικής μεταβλητής a της main. (Η x δείχνει τη διεύθυνση της a) Αλλαγή στο περιεχόμενο της διεύθυνσης που δείχνει η x, αλλάζει και την τιμή της μεταβλητής a

Δείκτες και παράμετροι συναρτήσεων Call by value void swap( int x, int y) { int temp; temp = x; x = y; y = temp; main(){ int a=8,b=9; swap(a,b); Δέσμευση μνήμης για τις τοπικές μεταβλητές της swap Δέσμευση μνήμης για τις τοπικές μεταβλητές της main 1001 8 1003 8 1005 8 1002 9 1004 1006 9 Δεν αντιμετατίθενται οι τιμές των a,b

Δείκτες και παράμετροι συναρτήσεων Call by reference void swap( int *x, int *y) { int temp; temp = *x; *x = *y; *y = temp; main(){ int a=8,b=9; swap(&a,&b); Δέσμευση μνήμης για τις τοπικές μεταβλητές της swap Δέσμευση μνήμης για τις τοπικές μεταβλητές της main 1001 1005 1003 8 1005 8 1002 1006 1004 1006 9 Αντιμετατίθενται οι τιμές των a,b

Παράδειγμα Υλοποιήστε μια συνάρτηση που να υπολογίζει το μέγιστο 2 ακεραίων. Η συνάρτηση να μην έχει επιστρεφόμενο τύπο (void). Να χρησιμοποιηθεί call by reference για το μέγιστο.

Πρόγραμμα void maximum(int a, int b, int *meg){ if (a>b) *meg= a; else *meg = b;

Πρόγραμμα main(){ int a,b,max; printf( Input numbers\n ); scanf( %d%d,&a,&b); maximum(a,b,&max); printf( Megistos:%d\n,max);

Αναδρομή Μία συνάρτηση που περιέχει κλήση του εαυτού της στο σώμα εντολών της, ονομάζεται αναδρομική Αναγωγή του αρχικού προβλήματος σε μικρότερα προβλήματα του ίδιου τύπου Απλοποιείται η λύση του προβλήματος με τη δημιουργία αναδρομικών επιπέδων

Παράδειγμα Υπολογισμός int factorial(int n) Παραγοντικού { if (n == 0) return 1; else return (n*(factorial(n-1)); Ειδική Περίπτωση που δίνεται η λύση (κατάσταση διακοπής) Αναδρομικό Βήμα

Παράδειγμα Factorial(3) Αναδρομικό Επίπεδο 0 factorial(3) 1 3*factorial(2) 2 2*factorial(1) 3 1*factorial(0) 1 6 2 1

Αναδρομή Με κάθε αναδρομική κλήση δημιουργείται ένα αναδρομικό επίπεδο (νέα δέσμευση μνήμης για αποθήκευση των παραμέτρων) Οι εντολές μετά την αναδρομή τίθενται σε αναμονή, και εκτελούνται όταν ο έλεγχος ροής επιστρέψει στο αναδρομικό επίπεδο

Παράδειγμα Να γραφεί ένα πρόγραμμα που να διαβάζει μια γραμμή χαρακτήρων και να την εκτυπώνει με αντίστροφη φορά

Πρόγραμμα #include <stdio.h> #include <stdlib.h> void antistrofh(void){ char xar; scanf("%c",&xar); if (xar!='\n') antistrofh(); Εκτελείται στην προς τα κάτω διαδικασία Αναδρομικό Βήμα printf("%c",xar); Εκτελείται στην προς τα πάνω διαδικασία (επιστροφή στο προηγούμενο αναδρομικό επίπεδο)

Πρόγραμμα main(){ printf("input character stream\n"); antistrofh(); system("pause"); return 0;

Παράδειγμα Φτιάξτε ένα πρόγραμμα (με χρήση αναδρομικής συνάρτησης) που να υπολογίζει και να τυπώνει τους Ν αριθμούς της ακολουθίας Fibonacci A 0 = 0 A 1 = 1 A ν = A ν-1 + Α ν-2

Συνάρτηση Fibonacci int Fibonacci (int N){ if (N == 0) return 0; else if (N == 1) return 1; else return (Fibonacci(N-1) + Fibonacci(N-2));

Δήλωση Πίνακεςωςπαράμετροι συναρτήσεων double athroisma(int vathmos[ ], int megethos); Ισοδύναμη με τη δήλωση double athroisma(int *vathmos, int megethos); Κλήση: athroisma(vathmos,300);

Πίνακες Το πέρασμα των πινάκων σε συναρτήσεις γίνεται με αναφορά (by reference), περνάμε τη διεύθυνση του πρώτου στοιχείου του πίνακα. Αλλαγές σε στοιχεία του πίνακα που περνιέται σαν όρισμα στη συνάρτηση, είναι μόνιμα Δεν υποστηρίζεται επιστροφή πίνακα από συνάρτηση

Άσκηση Φτιάξτε ένα πρόγραμμα που να διαβάζει 10 ακεραίους από το stream εισόδου και να τους αποθηκεύει σε έναν πίνακα. Στη συνέχεια μια συνάρτηση που να επιστρέφει το πλήθος εμφάνισης συγκεκριμένου ακεραίου στον πίνακα. Υπόδειξη: Η επικεφαλίδα της συνάρτησης int IntCount(int A[],int k); Θέλουμε να επιστρέφεται το πλήθος εμφάνισης του k στον πίνακα Α[].

Πρόγραμμα #include <stdio.h> #include <stdlib.h> int IntCount(int A[ ], int k){ int i,count =0; for (i =0; i<10; i++) if (A[i] == k) count++; return count;

Πρόγραμμα main(){ int Input[20], a, i; printf("input 10 int\n"); for (i =0; i<10; i++) scanf("%d",&input[i]); printf("input integer to be searched\n"); scanf("%d",&a); printf("%d sequences\n",intcount(input,a)); system("pause"); return 0;

Άσκηση Τροποποιήστε το προηγούμενο πρόγραμμα ώστε η προσπέλαση των στοιχειών του πίνακα να γίνεται με χρήση δείκτη.

Πρόγραμμα #include <stdio.h> #include <stdlib.h> int IntCount(int A[ ], int k){ int i,count =0; for (i =0; i<10; i++) if ( *(A + i) == k) count++; return count;

Πρόγραμμα main(){ int Input[20], a, i; printf("input 10 int\n"); for (i =0; i<10; i++) scanf("%d, Input+i ); printf("input integer to be searched\n"); scanf("%d",&a); printf("%d sequences \n",intcount(input,a),a); system("pause"); return 0;

Δήλωση Πολυδιάστατοι πίνακες ως παράμετροι συναρτήσεων double athroisma(int vathmos[ ][sthles], int grammes); Κλήση: double athroisma[grammes][sthles] athroisma(vathmos,grammes);

Άσκηση Σε ένα τμήμα 5 φοιτητών φτιάξτε ένα πρόγραμμα που να δέχεται τους βαθμούς κάθε φοιτητή για 4 ασκήσεις και να εκτυπώνειτομέσοόρο. Υλοποιήστε μία συνάρτηση για την είσοδο δεδομένων, μία γιατηνεύρεσημέσουόρουκαιμίαγιατην εκτύπωση αποτελέσματος.

#include <stdio.h> #include <stdlib.h> #define grammes 5 #define sthles 4 Πρόγραμμα void eisodos(double A[ ][sthles]) { int i,j; printf("insert student grades\n"); for (i=0; i<grammes; i++) for (j=0;j<sthles;j++) { printf("student:%d, exercise:%d\n",i,j); scanf("%lf",&a[i][j]);

Πρόγραμμα double MesosOros(double A[ ][sthles], int line){ int j; double result = 0.0; for (j=0;j<sthles; j++) result+=a[line][j]; return (double)result/sthles;

Πρόγραμμα void print(double A[][sthles]){ int i,j; for (i=0;i<grammes; i++) printf("student:%d, Mean:%.2f\n",i,MesosOros(A,i));

Πρόγραμμα main(){ double A[grammes][sthles]; eisodos(a); print(a); system("pause"); return 0;

Συμβολοσειρές Μια σταθερή συμβολοσειρά είναι η ακολουθία χαρακτήρων που πλαισιώνεται από διπλά εισαγωγικά Πχ Kalimera Αποθηκεύεται σε πίνακα χαρακτήρων με τερματικό χαρακτήρα το \0.

Συμβολοσειρές και πίνακες Πχ char Symvoloseira[15] = kalimera ; Symvoloseira k a l i m e r a \0?????? 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Συμβολοσειρές και δείκτες Δήλωση συμβολοσειράς με χρήση δείκτη char *symvoloseira = kalimera ; Σε αυτήν την περίπτωση δημιουργείται ο παρακάτω πίνακας χαρακτήρων. Χωρίς την αρχικοποίηση ο δείκτης δεν περιέχει έγκυρη διεύθυνση. symvoloseira k a l i m e r a \0

Εκτύπωση Συμβολοσειράς Χρήση του προσδιοριστή %s Πχ char *City = Athens ; printf( %s, City);

Διάβασμα Συμβολοσειράς Χρήση του προσδιοριστή %s char City[10] ; scanf( %s, City); (Χωρίς &) Αποθηκεύεται στον πίνακα City ηπρώτη λέξη που θα εισαχθεί από τον χρήστη και στοτέλοςοχαρακτήρας\0. Προσοχή δεν πρέπει μην γίνει υπερχείλιση (υπέρβαση του πλήθους στηλών του πίνακα)

Άσκηση Υλοποιήστε τη συνάρτηση int strlen(char *s) Που επιστρέφει το μέγεθος της συμβολοσειράς s

Πρόγραμμα #include <stdio.h> #include <stdlib.h> int strlen(char *s){ int i; for (i=0;s[i]!='\0';i++); return i;

main(){ char name[50]; //Δήλωση συμβολοσειράς printf("input name\n"); scanf("%s",name); printf("length is:%d\n",strlen(name)); system("pause"); return 0;

Άσκηση Υλοποιήστε τη συνάρτηση int strcmp(char *s, char *t); Για τη σύγκριση των συμβολοσειρών s, t. Αν s>t επιστρέφει θετικό, αν s<t επιστρέφει αρνητικό και αν s==t επιστρέφει 0.

Πρόγραμμα #include <stdio.h> #include <stdlib.h> int strcmp(char *s, char *t){ int i; for (i=0;s[i]== t[i];i++); if(s[i] == '\0') return 0; return s[i] - t[i];

Πρόγραμμα main(){ char name1[50]; char name2[50]; printf("input 1st name\n"); scanf("%s",name1); printf("input 2nd name\n"); scanf("%s",name2); printf("diff is:%d\n",strcmp(name1,name2)); system("pause"); return 0;