ΕΠΛ 032.3: 3: Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy
Επανάληψη για την τελική εξέταση
Επανάληψη 1. Οδηγίες στον προεπεξεργαστή Εντολή: include Σύνταξη: #include <αρχείο επικεφαλίδας> Λειτουργία: Επιτρέπει τη χρήση μιας ομάδας συναρτήσεων (βιβλιοθήκης) τα πρότυπα των οποίων βρίσκονται στο αρχείο επικεφαλίδας. Παράδειγμα: #include <stdio.h> Επιτρέπει ανάμεσα σε άλλα τη χρήση των συναρτήσεων printf, scanf Σημ: Να θυμάστε τις βιβλιοθήκες stdio.h, math.h, stdlib.h, time.h και χαρακτηριστικές εντολές που περιλαμβάνονται σε αυτές ( ιάλεξη 12) Εντολή: define Σύνταξη: #define όνομα-σταθεράς τιμή Λειτουργία: ηλώνει και αναθέτει τιμή σε μία σταθερα. Παράδειγμα: #define pi 3.14
2. Μεταβλητές ήλωση μεταβλητών: Σύνταξη: τύπος λίστα-µεταβλητών ; Βασικοί τύποι μεταβλητών: int, char, double, float Ανάθεση τιμών σε μεταβλητές: Σύνταξη: μεταβλητή=τιμή; Παραδείγματα: int length; int width; or int length,width; length=5; width= 10; int length=5, width=10;
3. Ονοµασίες σε Προγράμματα Για σταθερές, μεταβλητές, συναρτήσεις, κτλ. Κανόνες Σύνταξης: 1. Αποτελούνται από γράµµατα, δεκαδικά ψηφία και underscores ( _ ). 2. εν µπορεί να αρχίζουν µε δεκαδικό ψηφίο. 3. σύμβολα όπως &, #, $ δεν επιτρέπονται. 4. το όνομα μιας μεταβλητής δεν μπορεί να περιέχει κενό 5. εσµευµένες λέξεις (θα εξηγηθούν αργότερα) δεν µπορούν να χρησιµοποιηθούν ως ονοµασίες για κάτι άλλο. 6. Ονοµασίες που ορίζονται σε κάποια από τις βασικές βιβλιοθήκες δεν πρέπει να ξαναορίζονται (πχ printf()) GOOD BAD RESERVED KMS_PER_MILE 1Letter double miles one new printf kms new-fn scanf
4. Εκφράσεις Σύνταξη: a τ b ή τ a τ είναι ο τελεστής (operator) a, b είναι τελεσταίοι (operands) τελεσταίοι μπορεί να είναι Σταθερές (π.χ. KMS_PER_MILE * miles) Μεταβλητές (π.χ. c = a + b) κλήση συνάρτησης που επιστρέφει αριθμό (π.χ c = sum(a,b) + sum(b,a) ) έκφραση (χρήση παρενθέσεων) Παραδείγματα: int a=3, b=5, t; t=a+b; t=a<b; t=(a<=b) && (b==a);
5. Τελεστές Τλ Τελεστής Είδος Προτεραιότητα () ++ -- Παρενθέσεις Αύξησης, Μείωσης + -! (Μοναδιαίοι) Αριθμητικοί, Λογικός * / % Αριθμητικοί + - ( υαδικοί) δ Αριθμητικοί < > <= >=0 Σχεσιακοί ==!= Σχεσιακοί && Λογικός Λογικός =+=-=*=/= %= Ανάθεσης, Σύνθετοι Ψηλότερη Χαμηλότερη
5. Τελεστές int τ int => int 5/2 2 double τ double => double 5.0/2.0 2.5 int τ double => double 5/2.0 2.5 double τ int => double 5.0/2 2.5 int τ char => int 5+ a 102 Μετατροπή τύπων δεδομένων: (a) Με τον τελεστή ανάθεσης: Π.χ int a, floatx=53;a=x;toaείναι x=5.3; a=x; a ίσο με 5. (b) Με casting: float x=5.3; printf( %d, (int) x); Θα τυπωθεί 5
6. Η εντολή printf Σύνταξη: printf(μορφή εξόδου, λίστα εκφράσεων); printf( The total count is %d\n, count); a) Δεδομένα εξόδου b) όρισμα c) ειδικός χαρακτήρας Ειδικοί χαρακτήρες: d) έκφραση (μεταβλητή) β η \n μετάφερε τον δρομέα στην επόμενη γραμμή \t μετάφερε τον δρομέα στην επόμενη δεξιά στήλη \ εκτύπωσε \\ εκτύπωσε \
6. Η εντολή printf Όρισμα: %f double %f float %d integer %c character Όρισμα: Για εκτύπωση ακεραίου το %nd έχει την ακόλουθη σημασία: χρησιμοποίηση n θέσεων για την εκτύπωση του ακέραιου αριθμού. Εάν ο αριθμός έχει λιγότερα από n ψηφία, τοποθετούνται κενά στα αριστερά (δεξιά ευθυγράμμιση). Εάν ο αριθμός έχει περισσότερα ψηφία, εκτυπώνονται όλα. Για εκτύπωση double ή float το %n.mf έχει την ακόλουθη σημασία: χρησιμοποίηση τουλάχιστο n θέσεων για την εκτύπωση του αριθμού (συμπεριλαμβάνει την. και το,αν χεριάζετε) Τo m ψηφία είναι αριθμός των δεκαδικών ψηφίων.
7. Η εντολή scanf Σύνταξη: scanf(μορφή εισόδου, λίστα διευθύνσεων μεταβλητών); Παράδειγμα: int numbera, numberb; scanf( %d%d,&numbera, &numberb); ορίσματα Ορίσματα: %lf double %f float %d integer %c character διευθύνσεις μεταβλητών
8. Εντολές Επιλογής - Η εντολή if-else Σύνταξη: if (συνθήκη) { εντολές; else { εντολές; Εάν υπάρχει μόνο μία εντολή οι παρενθέσεις μπορούν να αποφεύγονται.
9. Η εντολή if-else if-else Σύνταξη: if (συνθήκη1) { εντολές; else if (συνθήκη2){ εντολές;.. else{ εντoλές;
10. H εντολή switch Σύνταξη: switch (έκφραση) { case τιμή 1: εντολές; break; case τιμή 2: εντολές; break;.. case τιμή n: εντολές; break; default: εντολές; Η έκφραση (και οι τιμές) μπορεί να είναι μόνο τύπου char ή int.
11. Επαναλήψεις Η εντολή while Σύνταξη: while (έκφραση) εντολή; συνθ. while (έκφραση){ εντολη1; εντολη2;... Παράδειγμα: int x = 0; while (x < 5) { printf( %d\n,x); x++; false true Επόμενες εντολές
12. H εντολή for Σύνταξη: for(αρχικοποίηση; συνθήκη επανάληψης ; ενημέρωση) εντολή; for(αρχικοποίηση; συνθήκη επανάληψης; Ενημέρωση){ εντολη; εντολη;.. Παράδειγμα: int x; for (x=0; x<5; x++){ printf( %d\n,x); αρχικ. συνθ. true εντολές ενημ. Επόμενες εντολές
13. H εντολή do while Σύνταξη: do εντολή; while(συνθήκη); body do{ εντολή; εντολή; while(συνθήκη); Παράδειγμα: συνθ do { scanf( %d, &a); false sum+=a; while (a!=0); συνθ. true
14. Συναρτήσεις Σύνταξη: Η δήλωση (πρότυπο) ρ μιας συνάρτησης ρη ηςτοποθετείτε πριν την συνάρτηση main() και έχει την ακόλουθη σύνταξη: Τύπος-εξόδου όνομα-συνάρτησης (λίστα-τύπων-παραμέτρων); Π.χ int sum(int, int); ή int sum(int x, int y); Ο ορισμός μιας συνάρτησης τοποθετείται συνήθως μετά τη συνάρτηση main() και έχει την ακόλουθη σύνταξη: Τύπος-εξόδου όνομα-συνάρτησης (λίστα-παραμέτρων) { εντολές; Π.χ. int sum(int a,int b) { int athrisma=a+b; return athrisma; Η συνάρτηση επιστρέφει την τιμή εξόδου με τη χρήση της εντολής return η οποία έχει την ακόλουθη σύνταξη: return έκφραση; H κλήση της συνάρτησης έχει την ακόλουθη σύνταξη: Όνομα συναρτησης(λίστα παραμέτρων); Π.χ sum(num1,num2);
15. είκτες (Pointers) ήλωση δεικτών: Σύνταξη: τύπος *δείκτης; π.χ. int *yearp; Ανάθεση τιμών σε δείκτες: Συνταξη: δί δείκτης= & μεταβλητή; π.χ. yearp = &year; yearp 3643847 1995 year
16. είκτες και συναρτήσεις Σύνταξη: Η δήλωση (πρότυπο) μιας συνάρτησης τοποθετείτε πριν την συνάρτηση main() και έχει την ακόλουθη σύνταξη: Τύπος-εξόδου όνομα-συνάρτησης (λίστα-τύπων-παραμέτρων); π.χ void calc(int *, int *, int, int); ή void calc(int *sump, int *subp, int a, int b); Ο ορισμός μιας συνάρτησης τοποθετείται συνήθως μετά τη συνάρτηση main() και έχει την ακόλουθη σύνταξη: Τύπος-εξόδου όνομα-συνάρτησης ρη ης( (λίστα-παραμέτρων) ρ μ ρ { εντολές; π.χ. void calc(int *sump, int *subp, int a, int b) { *sump=a+b; *subp=a-b; H κλήση της συνάρτησης έχει την ακόλουθη σύνταξη: Όνομα συναρτησης(λίστα παραμέτρων); π.χ calc(&sum, &sub, x, y);
17. Αρχεία στη C Άνοιγμα αρχείων με την εντολή fopen: Σύνταξη: FILE *fopen(char *filename, char *mode); π.χ. main() { FILE *fp; fp = fopen("myfile.txt", "r");. Κλείσιμο αρχείων με την εντολή fclose: Σύνταξη: int fclose(file *fp); π.χ. main() { FILE *fp; fp = fopen("myfile.txt", "r"); fclose(fp);.
18. Άνοιγμα Αρχείων H παράμετρος mode υποδεικνύει τον τρόπο με τον οποίο θέλουμε να προσπελάσουμε το αρχείο Mode r w a Σημασία Μόνο Aνάγνωση. Αν το αρχείο δεν υπάρχει, επιστρέφεται NULL Μόνο Eγγραφή. Αν το αρχείο δεν υπάρχει δημιουργείται, αν υπάρχει τα περιεχόμενά του καταστρέφονται. Προσθήκη. Αν το αρχείο δεν υπάρχει, δημιουργείται. r+ Ανάγνωση και εγγραφή. Αν το αρχείο δεν υπάρχει, επιστρέφεται NULL. w+ Ανάγνωση και εγγραφή. Αν το αρχείο δεν υπάρχει δημιουργείται, αν υπάρχει τα περιεχόμενά του καταστρέφονται. a+ Προσθήκη και ανάγνωση. Αν το αρχείο δεν υπάρχει, δημιουργείται. 13-22
19. Ανάγνωση/Εγγραφή Η εντολή fprintf: Σύνταξη: printf(file *fp, μορφή εξόδου, λίστα εκφράσεων); Η εντολή fscanf: Σύνταξη: scanf(file *fp, μορφή εισόδου, λίστα διευθύνσεων μεταβλητών); main() { FILE *fp; int a; fp = fopen("myfile.txt", a+ ) // ιάβασε ένα αριθμό από το αρχείο fscanf(fp, %d, &a); // Γράψε τον αριθμό στο αρχείο fprintf(fp, %d, a); // Close the file fclose(fp);
20. Πίνακες ήλωση μόνο. Σύνταξη: τύπος όνομα[αριθμός στοιχείων]; π.χ. int md[10]; Σημ: αριθμός στοιχείων= πλήθος στοιχείων= μέγεθος πίνακα. Αρχικοποίηση: md[0] 0 md[1] 0 md[2] 0 md[9] 0 Όταν δηλωθεί ένας πίνακας η αρχικοποίηση των στοιχείων του γίνεται μόνο στοιχειό με στοιχείο. π.χ for (i=0; i<10; i++) md[i]=0;
20. Πίνακες ήλωση-αρχικοποίηση: 1 ος τρόπος: τύπος όνομα[αριθμός στοιχείων]={λίστα τιμών; π.χ. int md[10]={0,0,0,..,0; 0 0 0 Σημ: Εάν ο αριθμός των τιμών που περιλαμβάνονται στις αγκύλες είναι μικρότερος από τον αριθμό των στοιχείων, τότε αρχικοποιούνται με τις τιμές που δίνονται τα πρώτα στοιχεία του πίνακα και τα υπόλοιπα στοιχεία εξισώνονται με 0. 2 ος τρόπος: τύπος όνομα[ ]={λίστα τιμών; π.χ. int md[ []={1,2,3; Το μέγεθος του πίνακα είναι τρία στοιχεία.
21. Πίνακες και συναρτήσεις Σε μια συνάρτηση ρη ηπερνούμε σαν παράμετρο ρ την διεύθυνση του πρώτου στοιχείου του πίνακα. Σύνταξη: Η δήλωση (πρότυπο) μιας συνάρτησης τοποθετείτε πριν την συνάρτηση main() και έχει την ακόλουθη σύνταξη: Τύπος-εξόδου όνομα-συνάρτησης ρη ης( (λίστα-τύπων-παραμέτρων); ρ μ ρ Π.χ void calc(int [ ], float, char *); ή void calc(int *, float, char *); ή void calc(int array[ ], float x, char *letterp); Ο ορισμός μιας συνάρτησης τοποθετείται συνήθως μετά τη συνάρτηση main() και έχει την ακόλουθη σύνταξη: Τύπος-εξόδου όνομα-συνάρτησης (λίστα-παραμέτρων) { εντολές; Π.χ. void calc(int array[ ], float x, char *letterp){ Εντολές; H κλήση της συνάρτησης έχει την ακόλουθη σύνταξη: Όνομα συναρτησης(λίστα παραμέτρων); Π.χ calc(array, a, &b);
22. Πολυδιάστατοι πίνακες ήλωση μόνο. Σύνταξη: τύπος όνομα[αριθμός στοιχείων][αριθμός στοιχείων]; π.χ. int md[3][7]; Αρχικοποίηση: Όταν δηλωθεί ένας πίνακας η αρχικοποίηση των στοιχείων του γίνεται μόνο στοιχειό με στοιχείο. π.χ for (i=0; i<3; i++) for (j=0; j<7; j++) md[i][j]=0; ήλωση-αρχικοποίηση: τύπος όνομα[αριθμός [ μ στοιχείων][αριθμός στοιχείων]={{λίστα ] τιμών,{λίστα τιμών, ; π.χ. int md[3][7]={{1,2,{2;
23. Πολυδιάστατοι πίνακες και συναρτήσεις Σε μια συνάρτηση περνούμε σαν παράμετρο την διεύθυνση του πρώτου στοιχείου του πίνακα. Σύνταξη: Η δήλωση (πρότυπο) μιας συνάρτησης τοποθετείτε πριν την συνάρτηση main() και έχει την ακόλουθη σύνταξη: Τύπος-εξόδου όνομα-συνάρτησης (λίστα-τύπων-παραμέτρων); Π.χ void calc(int [ ][4], int [ ], float, char *); ή void calc(int dim2array[ ][4], int array[ ], float x, char *letterp); Ο ορισμός μιας συνάρτησης τοποθετείται συνήθως μετά τη συνάρτηση main() και έχει την ακόλουθη σύνταξη: Τύπος-εξόδου όνομα-συνάρτησης (λίστα-παραμέτρων) { εντολές; Π.χ. void calc(int dim2array[ ][4], int array[ [], float x, char *letterp){ Εντολές; H κλήση της συνάρτησης έχει την ακόλουθη σύνταξη: Όνομα συναρτησης(λίστα παραμέτρων); Π.χ calc(md, array, a, &b);
24. Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) String είναι ένας πίνακας από χαρακτήρες που τελειώνουν με το χαρακτήρα NULL(\0). ήλωση μόνο. Σύνταξη: char όνομα[αριθμός στοιχείων]; π.χ. char name[7]; Σημ: αριθμός στοιχείων= πλήθος στοιχείων= μέγεθος πίνακα. Αρχικοποίηση: Όταν δηλωθεί ένα string η αρχικοποίηση των στοιχείων του γίνεται μόνο στοιχειό με στοιχείο. π.χ. name[0]= M ; name[1]= a ; name[2]= r ; name[3]= i ; name[4]= o ; name[5]= s ; name[6]= \0 ;
25. Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) ήλωση-αρχικοποίηση: 1 ος τρόπος: char όνομα[αριθμός στοιχείων]={λίστα χαρακτήρων; π.χ. char name[10]={ M, a, r, i, o, s ; Σημ: Εάν ο αριθμός των χαρακτήρων που περιλαμβάνονται στις αγκύλες είναι μικρότερος από τον αριθμό των στοιχείων, τότε αρχικοποιούνται με τους χαρακτήρες που δίνονται τα πρώτα στοιχεία του πίνακα και τα υπόλοιπα στοιχεία εξισώνονται με 0. 2 ος τρόπος: char όνομα[ ]={λίστα χαρακτήρων; π.χ. char name[ ]={ M, a, r, i, o, s, \0 ; {M,a,r,i,o,s,\0; Το μέγεθος του πίνακα είναι 7 στοιχεία.
26. Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) Το αρχείο επικεφαλίδα (header file), string.h παρέχει συναρτήσεις για χειρισμό strings Περιέχει ιάφορες Συναρτήσεις, πχ. strlen(s), υπολογίζει το μέγεθος του string strcpy(s1,s2), αντιγράφει το s2 στο s1 strcat(s1,s2), προσθέτει το s2 στο s1. strcmp(s1,s2), συγκρίνει το s1 με s2 και επιστρέφει θετική τιμή εάν s1 μεγαλύτερο (αλφαβητικά) από το s2, μηδέν αν είναι ίσα, και αρνητική τιμή εάν s1 μικρότερο από s2.