ΕΠΛ 032.3: Προγραµµατισµός ΜεθόδωνΕπίλυσηςΠροβληµάτων Αχιλλέας Αχιλλέως, Τµήµα Πληροφορικής, Πανεπιστήµιο Κύπρου Email: achilleas@cs.ucy.ac.cy
Κεφάλαιο 3 Εισαγωγήστη C
Θέµατα ιάλεξης Εισαγωγήστην C Σύνταξη και Σηµασιολογία σχόλια µεταβλητές και σταθερές τύποι δεδοµένων Μετάαυτέςτιςδυοδιαλέξειςθαµπορείτε να γράψετε και να κατανοήσετε απλά προγράµµατα στη C!!!
Οισχεδιαστέςτης C Dennis Ritchie Η γλώσσα C αναπτύχθηκε το 1972 απότον Dennis Ritchie στα ΑΤ&Τ (Bell) Laboratories.
Ηιστορίατης C Γλώσσαγενικούσκοπού Είναιµιααπότιςπιοδιαδεδοµένες γλώσσεςυψηλούεπιπέδου Χρησιµοποιήθηκεγιατην κατασκευήσυστηµάτων, π.χ. το λειτουργικόσύστηµα UNIX
ΓιατίηC? C είναι µικρή µε λίγες εντολές C είναι standard C είναιφορητή C είναιισχυρή C είναιαρθρωτή C είναιηβάσητης C++ καιτης Java C είναιγρήγορη
οµήπρογράµµατος C H γλώσσα C είναι απλά ένα σύνολο από συντακτικούς κανόνες. Ένα πρόγραµµα σε C, αποτελείται από εντολές (οργανωµένα συνήθως µέσα σε συναρτήσεις) και δεδοµένα (µεταβλητές).
οµήπρογράµµατος C (συν.) 1. Οδηγίες στον προεπεξεργαστή ενσωµάτωση βιβλιοθηκών δηλώσεις σταθερών 2. ηλώσεις συναρτήσεων 3. Ορισµός κύριας συνάρτησης (main) δηλώσεις µεταβλητών εντολές (εκφράσεις, κλήσεις συναρτήσεων κτλ) 4. Υλοποίηση συναρτήσεων 5. Σχόλια
οµήπρογράµµατος C (συν.) Παράδειγµα: Σχόλια Οδηγίες προεπεξεργαστή ήλωση σταθεράς Ορισµός κύριας συνάρτησης: main ήλωση µεταβλητών Ακολουθία εντολών
Α) Οδηγίες προς τον προεπεξεργαστή Οι πιο κοινές διαταγές (οδηγίες) στον προεπεξεργαστή (µε χρήση του συµβόλου #): #include, για ενσωµάτωση βιβλιοθήκης #define, για δήλωση σταθεράς Ηοδηγία: #include Χρησιµοποιείται για ενσωµάτωση βιβλιοθηκών στον πηγαίο κώδικα. Μια βιβλιοθήκη (library file) είναι µια συλλογή χρήσιµων συναρτήσεων και σταθερών. Σύνταξη: #include <standard library file> π.χ.: #include <stdio.h> #include <math.h> υπάρχουν πολλές διαθέσιµες C βιβλιοθήκες
Α) Οδηγίες προς τον προεπεξεργαστή (συν.) Ενσωµάτωση επιτρέπει τη χρήση συναρτήσεων και σταθερών µιας βιβλιοθήκης στον πηγαίο κώδικα. Παραδείγµατα: Η βιβλιοθήκη stdio.h περιέχει, ανάµεσα σε άλλα, τις συναρτήσεις printf(), γιαεκτύπωσηπληροφοριών, και scanf(), για εισδοχή πληροφοριών, καθώς επίσης όλη τη λειτουργικότητα για ανάγνωση / γραφή πληροφοριών σε αρχεία. Η βιβλιοθήκη math.h περιέχει διάφορες µαθηµατικές συναρτήσεις.
Ονοµασίεςσε C Προγράµµατα Γιασταθερές, µεταβλητές, συναρτήσεις. Κανόνες Σύνταξης: 1. Αποτελούνται από γράµµατα του αγγλικού αλφαβήτου (a z, A Z),ψηφία (0 9) και underscores ( _ ). 2. ε µπορεί να αρχίζουν µε ψηφίο. 3. σύµβολαόπως &, #, $δενεπιτρέπονται. 4. το όνοµα µιας µεταβλητής δε µπορεί να περιέχει κενό 5. εσµευµένες λέξεις (θα εξηγηθούν αργότερα) δε µπορούν να χρησιµοποιηθούν ως ονοµασίες για κάτι άλλο. 6. Ονοµασίες που ορίζονται σε κάποια από τις βασικές βιβλιοθήκες δεν πρέπει να ξαναορίζονται (πχ printf()) GOOD BAD RESERVED KMS_PER_MILE 1Letter double miles one new printf kms new-fn scanf
Ονοµασίες σε C Προγράµµατα (συν.) Η C ειναι CASE SENSITIVE, δηλαδή κεφαλαία και µικρά γράµµατα θεωρούνται διαφορετικά: foo και FOO είναι δυο διαφορετικά ονόµατα One, one και ONE είναι όλα διαφορετικά ονόµατα. Να χρησιµοποιείτε αυτοεπεξηγηµατικά ονόµατα Π.χ. η ονοµασία age είναι πολύ καλύτερη από την ονοµασία Α για µία µεταβλητή στην οποία θα καταχωρούνται ηλικίες.
Ονοµασίεςσε C Προγράµµατα (συν.): εσµευµένεςλέξεις(reserved Words) Λέξεις µε ειδική σηµασία για τη C. εν πρέπει να ορίζονται ξανά σαν ονόµατα. auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while
Β) Μεταβλητές Μια περιοχή στη µνήµη (RAM) του υπολογιστή όπου µπορούµε να αποθηκεύσουµε προσωρινά δεδοµένα. Κατά τη διάρκεια εκτέλεσης αυτή η τιµή µπορεί να αλλάξει όσες φορές θέλουµε/χρειάζεται π.χ. ένας µετρητής, η ηλικία του χρήστη, κτλ Οι τιµές προέρχονται από α) το δίσκο β) κάποια µονάδαεισόδου (π.χ. πληκτρολόγιο) γ) παράγονται κατά τη διάρκεια εκτέλεσης του προγράµµατος
Β) ΣηµασίαΜεταβλητών (συν.) Αποθήκευση και ανάγνωση τιµών Κάθεµεταβλητήέχει: τύπο βασικοί: int, char, float, double µέγεθος: 4Β, 1Β, 4Β, 8Β (κάθε κυψελίδα: Τιµή 1 Byte) (συµβολικό) όνοµα Εξαρτάται από το λειτουργικό σύστηµα το όνοµα αντιστοιχεί σε συγκεκριµένη διεύθυνση στη µνήµη
Β) ηλώσειςμεταβλητών (συν.) Σύνταξη: τύπος λίστα-µεταβλητών ; double miles; int count; double kms; double miles, kms; int count = 0; /* αρχικοποίηση παράλληλα µε δήλωση */ Κάθε µεταβλητή που χρησιµοποιείται σε κάποιο πρόγραµµα χρειάζεται να δηλωθεί. Ηδήλωσήτηςέχειωςαποτέλεσµατην παραχώρησηµνήµηςγιατηδηµιουργίατης. Οτύπος (double, int, κτλ) τηςµεταβλητής προσδιορίζει τον απαιτούµενο χώρο µνήµης.
Β) ηλώσειςμεταβλητών (συν.) Παράδειγµα: τύπος int count; count = 137; count = count + 142; όνοµα (διεύθυνση) 0 98760060...... τιµή 137 279
Β) ΣηµασίαΜεταβλητών (συν.) ΠΡΟΣΟΧΗ: Μια µεταβλητή πρέπει να δηλωθεί πριν χρησιµοποιηθεί Εάν η µεταβλητή βρίσκεται στα αριστερά του τελεστή ανάθεσης (=), η τιµή του αποτελέσµατος της έκφρασης στα δεξιά του τελεστή ανάθεσης αποθηκεύεται στη διεύθυνση της µεταβλητής. Αλλιώς χρησιµοποιείται η τιµή της µεταβλητής kms = KMS_PER_MILE * miles;
Γ) Σταθερές Οδηγία προς τον προεπεξεργαστή. Ακολουθούν τις οδηγίες προς τον προεπεξεργαστή για ενσωµάτωση βιβλιοθηκών. Σταθερές έχουν: τιµή όνοµα, όχι όµως διεύθυνση Μεταγλωττιστής αντικαθιστά το όνοµα µε την τιµή Η χρήση σταθερών Αυξάνει την αναγνωσιµότητα του προγράµµατος ιευκολύνει τροποποιήσεις Μια σταθερά πρέπει να δηλωθεί στην αρχή του προγράµµατος πριν χρησιµοποιηθεί Ε µπορεί να αλλάξει τιµή κατά τη διάρκεια εκτέλεσης ενός προγράµµατος.
Γ) ηλώσειςσταθερών (συν.) Σύνταξη: #define ονοµασία τιµή #define PI 3.1453 #define FALSE 0 #define TRUE 1 #define KMS_PER_MILE 1.609
) ΚύριαΣυνάρτηση: main() Συνάρτηση Σύνολο εντολών που προσδιορίζουν τις υπολογιστικές λειτουργίες που θα γίνουν (εκτέλεση µιας συγκεκριµένης εργασίας). Κάθε C πρόγραµµα έχει µία συνάρτηση µε το όνοµα main() από όπου αρχίζει η εκτέλεση του προγράµµατος. Σύνταξη: int main (void) { σώµασυνάρτησης } Παράδειγµα: Επιστρέφει σήµα στο λειτουργικό σύστηµα για φυσιολογικό τερµατισµό του προγράµµατος #include <stdio.h> int main (void) { int a; a = 5; printf( Hello %d\n,a); return (0); } δήλωση εντολές Το σώµα µίας συνάρτησης αποτελείται από δηλώσεις (declarations) καιεντολές (executable statements).
ΡοήΈλεγχου (control flow) Η ροή ελέγχου στη C είναι ακολουθιακής µορφής - sequential Ξεκινά από την πρώτη εντολή της main() Εντολές εκτελούνται σε σειρά Υπαρχουν γλώσσες µή-ακολουθιακές αλλά δε θα µας απασχολήσουν σ αυτό το µάθηµα.
Ε) Χρήσησχολίωνστη C Σύνταξη: ξεκινούνµε /*καιτελειώνουνµε */ Καµιά σηµασία αλλά πολύ σηµαντικό µέρος ενός προγράµµατος (τεκµηρίωση) Ο µεταγλωττιστής αγνοεί τα σχόλια /* auto einai ena syntaktika ortho sxolio*/ /* kai auto * einai * syntaktika * ortho */
E) Χρήσησχολίωνσε C (συν.) Παράδειγµα /*program example1.c this program prints on your screen the expression University of Cyprus*/ #include <stdio.h> /* use of pre-processor */ int main (void ) { printf ("University of Cyprus\n"); /* printing University of Cyprus */ return (0); }
E) Χρήσησχολίωνσε C (συν.) /* auto * ti* einai **/ /***********ayto??? ***************/ /* lathos sxolio */ giati? */ */ einai lathos??? /* */ ayto? * /
Περίληψη Βασικών Σηµείων Προγράµµατος σε C Προσοχή όλα µε µικρά γράµµατα (Lower case) Πρόγραµµα σε C Aποτέλεσµα #include <stdio.h> int main (void ){ printf ("University of Cyprus\n"); return (0); }
Περίληψη Βασικών Σηµείων Προγράµµατος σε C (συν.) 1. #include <stdio.h> περιέχεται στην αρχή κάθε προγράµµατος και περιλαµβάνει οδηγίες για τον προεπεξεργαστή 2. main ( ) Το σηµείο έναρξης του προγράµµατος είναι η «κύρια» συνάρτηση main. 3. { } δηλώνουντοχώροτωνδηλώσεωνκαιτωνεντολών, οι οποίες περιλαµβάνονται στη συνάρτηση main και πρέπει να εκτελεσθούν
Περίληψη Βασικών Σηµείων Προγράµµατος σε C (συν.) 4. printf() είναι µια συνάρτηση της βιβλιοθήκης stdio.h της C και εµφανίζει στην οθόνη ότι δίνεται µέσα στην παρένθεση 5. \n κινεί το δροµέα (cursor) να πάει στην επόµενη γραµµή εξόδου 6. ; όλες οι δηλώσεις και εντολές των C-προγραµµάτων καταλήγουνσεαυτότοσύµβολο (semicolon). Χρησιµοποιείται προκειµένου να φανεί πού τελειώνει µια δήλωση 7. /* */ Μεταξύ των συµβόλων αυτών γράφονται τα σχόλια.
Παράδειγµα Προγραµµατισµού Γράψετε ένα πρόγραµµα που µετατρέπεικυπριακέςλίρεςσεευρώ.
ΚατανόησηκαιΑρχικήΛύση Παράδειγµα: 10 λίρες, 1.71 ευρώστη λίρα >>>>>> 17.1 ευρώ εδοµένα (εισόδου): λίρες Σταθερή τιµή για τη µετατροπή: RATE εδοµένα (εξόδου): ευρώ Υπολογισµός: ευρώ = λίρες * RATE
Υλοποίηση µε γλώσσα προγραµµατισµού (C) επεξεργαστή κειµένου Πηγαίος κώδικας: αρχείο exchange.c /* programma poy metatrepei lires se euro */ #define RATE 1.71 int main(){ float lires; /* input*/ float euro; /* output*/ } euro = lires * RATE; return 0; Λείπει επικοινωνία µε το χρήστη
Υλοποίηση Μεεπικοινωνία /* programma poy metatrepei lires se euro */ #include <stdio.h> #define RATE 1.71 int main(){ float lires; /* input*/ float euro; /* output*/ /* eisagwgh dedomenwn */ printf( Enter lires: ); scanf( %f,&lires); euro = lires * RATE; } /*exagwgh dedomenwn*/ printf( %.2f lires antistoixoun se %.2f euro\n, lires, euro); return 0;
ΡοήΕλέγχου /* programma poy metatrepei lires se euro */ #include <stdio.h> #define RATE 1.71 int main(){ float lires; /* input*/ float euro; /* output*/ /* eisagwgh dedomenwn */ printf( Enter lires: ); scanf( %f,&lires); euro = lires * RATE; /*exagwgh dedomenwn*/ printf( %.2f lires antistoixoun se %.2f euro\n, lires, euro); } return 0;
Ροή εδοµένων /* programma poy metatrepei lires se euro */ #include <stdio.h> #define RATE 1.71 int main(){ float lires; /* input*/ float euro; /* output*/ /* eisagwgh dedomenwn */ printf( Enter lires: ); scanf( %f,&lires); euro = lires * RATE; /*exagwgh dedomenwn*/ printf( %.2f lires antistoixoun se %.2f euro\n, lires, euro); } return 0;
οκιµή: Mεταγλωττισµός, Εκτέλεση > gcc exchange.c o exchange > exchange Enter lires:100 100.00 lires antistoixoun se 171.00 euro > exchange Enter lires:5.5 5.50 lires antistoixoun se 9.58 euro > Κατακρίβειαν 9.576 αλλά επειδή ζητήσαµε µόνο 2 δεκαδικά ψηφία %.2f γι αυτόγίνεται στρογγυλοποίηση στο κοντινότερο δεκαδικό ( έστε αργότερα)
Τέλος 3 ου Κεφαλαίου