Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων 3 &4. Εισαγωγήστη C Ιωάννης Κατάκης
Σήμερα o Εισαγωγή στη C o Σύνταξη και σημασιολογία Σχόλια Μεταβλητές και σταθερές Τύποι δεδομένων Μετά από τις δύο διαλέξεις θα μπορείτε να γράψετε και να κατανοήσετε απλά προγράμματα στη C
Ιστορία Η γλώσσα C αναπτύχθηκε το 1972 από τον DennisRitchieστα ΑΤ&Τ (Bell) Laboratories
Ιστορία o Γλώσσα γενικού σκοπού o Μεγάλη συσχέτιση με το UNIX o Μεγάλο μέρος του UNIX γράφτηκε στη C o όπως και του Linux
Διάγραμμα εξέλιξης
Γιατί C; o Είναι μικρή με λίγες εντολές o H γλώσσα του Unix/Linux o Είναι standard o Είναι φορητή o Είναι ισχυρή o Είναι αρθρωτή (δομημένη) o Είναι βάση τηςc++ και τηςjava o Είναι γρήγορη
ANSI C Standard o H γλώσσα C είναι απλά ένα σύνολο από συντακτικούς κανόνες o Για να εκτελεστεί ένα πρόγραμμα C πρέπει να χρησιμοποιηθεί ένας μεταγλωττιστής (compiler) o Οι compilers παράγονται από διάφορες εταιρείες και οργανισμούς o Για να υπάρχει κάποιο πρότυπο, τοamerican National Standard Institutes (ANSI)δημιούργησε το πρότυπο ANSI C το οποίο καλούνται οι διάφορες εταιρείες να ακολουθούν Microsoft ΑΝSI C Others Borland
Δομή προγράμματος C A. Οδηγίες προς στον προεπεξεργαστή B. Δηλώσεις σταθερών C. Ορισμός συνάρτησης main Δηλώσεις μεταβλητών Εντολές D. Σχόλια
Δομή προγράμματοςστη C Οδηγίες προεπεξεργαστή ήλωση σταθεράς Ορισµός συνάρτησης main ήλωση µεταβλητών Εντολές
A. Οδηγίες προς τον προεπεξεργαστή o Εισαγωγή Βιβλιοθηκών: #include o Σύνταξη: #include <header file> #include <stdio.h> #include <math.h> o Mία βιβλιοθήκη (library) είναι µία συλλογή χρήσιµων συναρτήσεων και συμβόλων o Άλλες βιβλιοθήκες: time.h, string.h, signal.h,. o Οι μοντέρνες γλώσσες (4ης γενιάς Java) έχουν ένα τεράστιο σύνολο από βιβλιοθήκες. Αυτό τις καθιστά ουσιαστικά πιο ισχυρές για την επίλυση προβλημάτων o Άλλες διαταγές στον προ-επεξεργαστή: #define, #ifdef, #if, #else, #endif, #undef
Βιβλιοθήκες o Βιβλιοθήκη stdio, περιέχει βασικές συναρτήσεις printf(εκτύπωση πληροφοριών) scanf(εισαγωγή πληροφοριών) Ανάγνωση από / Αποθήκευση σε αρχεία o Βιβλιοθήκη math Μαθηματικές συναρτήσεις
Β. Σταθερές, μεταβλητές, συναρτήσεις Ένα πρόγραμμα σε C, ανεξαρτήτως μεγέθους, αποτελείται από : o εντολές(οργανωμένα μέσα σε συναρτήσεις -functions) o δεδομένα(οργανωμένα μέσα σε μεταβλητές - variables). o Συνάρτηση Σύνολοεντολώνπου προσδιορίζουν τις υπολογιστικές λειτουργίες που θα γίνουν o Μεταβλητές Αποθηκεύουν τιμές που χρησιμοποιούνται κατά τον υπολογισμό. Οι τιμές προέρχονται από α) το δίσκο β) κάποια μονάδα εισόδου (πχ πληκτρολόγιο) ή γ) παράγονται κατά την διάρκεια εκτέλεσης του προγράμματος
Σταθερές vs. Μεταβλητές o Μεταβλητή(variable) Μια περιοχή στη μνήμη (RAM)του υπολογιστή όπου μπορούμε να αποθηκεύσουμε προσωρινά δεδομένα. Κατά τη διάρκεια εκτέλεσης αυτή η τιμή μπορεί να αλλάξει όσες φορές θέλουμε π.χ. ένας μετρητής, η ηλικία του χρήστη, κτλ o Σταθερά(constant) Μια περιοχή στην μνήμη (RAM) του υπολογιστή όπου μπορούμε να αποθηκεύσουμε δεδομένα τα οποία δεν αλλάζουν κατά την διάρκεια εκτέλεσης ενός προγράμματος π.χ. kms_per_mile= 1.609 (ένα μίλι είναι πάντοτε 1.609 χιλιόμετρα)
Ονοματολογία Για σταθερές, μεταβλητές, συναρτήσεις, κτλ. o Κανόνες Σύνταξης 1. Αποτελούνται από γράμματα, ψηφία και underscores( _ ) 2. Δεν μπορεί να αρχίζουν µε ψηφίο 3. Σύμβολα όπως &, #, $ δεν επιτρέπονται 4. Το όνομα μιας μεταβλητής δεν μπορεί να περιέχει κενό 5. Δεσμευμένες λέξεις (θα εξηγηθούν αργότερα) δεν μπορούν να χρησιμοποιηθούν ως ονομασίες για κάτι άλλο 6. Ονομασίες που ορίζονται σε κάποια από τις βασικές βιβλιοθήκες δεν πρέπει να ξαναορίζονται (πχ printf())
Ονοματολογία (συνέχεια) o Η C είναι case sensitive Κεφαλαία και μικρά θεωρούνται διαφορετικά foo και FOO είναι δυο διαφορετικά ονόματα One, one και ONE είναι όλες διαφορετικές μεταβλητές o Χρησιμοποιείτε αυτοεπεξηγηματικά ονόματα π.χ. η ονοµασίαageείναι πολύ καλύτερη από την ονοµασία Α για µία μεταβλητή στην οποία θα καταχωρούνται ηλικίες
Δεσμευμένες λέξεις (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 Για περισσότερες Πληροφορίες: http://tigcc.ticalc.org/doc/keywords.html#auto
Ορισμοί σταθερών o Σύνταξη #define ονομασία τιμή o Η χρήσησταθερών Αυξάνει την αναγνωσιμότητα του προγράμματος Διευκολύνει τροποποιήσεις o Σταθερές έχουν Τιμή Όνομα όχι όμως διεύθυνση Μεταγλωττιστής αντικαθιστά το όνομα με την τιμή
Συνάρτηση main o Κάθε πρόγραμμα έχει µία συνάρτηση µε το όνομα mainαπό όπου αρχίζει η εκτέλεση του προγράμματος Σύνταξη: voidmain(void) { σώμα συνάρτησης } #include <stdio.h> void main (void) { inta; a = 5; printf( Hello %d\n,a); } δήλωση εντολή o Το σώμα μίας συνάρτησης αποτελείται από δηλώσεις (declarations) και εντολές(executable statements)
Μεταβλητές o Αποθήκευση και ανάγνωση τιμών o Κάθε μεταβλητή έχει Τύπο Βασικοί: int, char, float, double Μέγεθος: 4Byte, 1Byte, 4Byte, 8Byte Τιμή Εξαρτάται από το λειτουργικό σύστημα
Δηλώσεις (declarations)μεταβλητών o Σύνταξη τύπος λίστα-μεταβλητών; double miles; doulbe miles, kms; intcount; intcount = 0; double kms; /*αρχικοποίηση και δήλωση*/ o Κάθε μεταβλητή που χρησιμοποιείται σε κάποιο πρόγραμμα χρειάζεται να δηλωθεί o Η δήλωσή της έχει ως αποτέλεσμα την παραχώρηση μνήμης για τη δημιουργία της o Ο τύπος (double, int, κτλ)της μεταβλητής προσδιορίζει τον απαιτούμενο χώρο μνήμης
Σχόλια στη C o Σύνταξη /*ξεκινούν τα σχόλια, τελειώνουν τα σχόλια */ // Έτσι επιτρέπεται να βάλουμε σχόλια σε μία γραμμή (χωρίς //να τα κλείσουμε) o Ο μεταγλωττιστής τα αγνοεί αλλά τα σχόλια αποτελούν πολύ σημαντικό μέρος ενός προγράμματος /* auto einai ena syntaktika ortho sxolio*/ /* kaiauto * einai * syntaktika * ortho */
Παράδειγμα 1 /*program example1.c this program prints on your screen the expression University of Cyprus*/ #include <stdio.h> // use of pre-processor intmain () { printf("university of Cyprus\n"); /* printing UCY */ return 0; }
Παράδειγμα 2 /*********************************************** ** PROJECT: P1 ** FILE NAME: example1.c ** AUTHOR: Demetris Zeinalipour ** DATE: 19 September 2005 ***********************************************/ #include <stdio.h> /*use of pre-processor*/ intmain () { printf("university of Cyprus\n"); /*use of printf*/ return 0; }
Παράδειγμα 3 /************************************************* ** EPL032.1 Programmatismos Methodwn Epilyshs Provlimatwn ** AUTHOR: Demetris Zeinalipour ** ID: 1234566 ** DATE: 20 January 2006 ** FILE NAME: example1.c *************************************************/ /* this program prints on your screen the expression University of Cyprus */ #include <stdio.h> /*use of pre-processor*/ intmain () { printf("university of Cyprus\n"); return 0; }
Σωστό ή λάθος; /* auto * ti* einai*/ Σωστό! /***********auto??? ***************/ Σωστό! /* swsto h lathos? */ giati*/ Λάθος! */ einailathos??? /* Λάθος!
Ανάλυση προγράμματος #include <stdio.h> voidmain (void) { printf("university of Cyprus\n"); } Αποτέλεσμα: University of Cyprus
Ανάλυση #include <stdio.h> o Περιέχεται στην αρχή κάθε προγράμματος και περιλαμβάνει οδηγίες για τον προεπεξεργαστή main () o Το σημείο έναρξης του προγράμματος είναι η «κύρια» συνάρτηση main { } o Δηλώνουν τον χώρο των εντολών, οι οποίες περιλαμβάνονται στη συνάρτηση main και πρέπει να εκτελεσθούν
Ανάλυση printf o Είναι μια συνάρτηση της βιβλιοθήκης της C και εμφανίζει στην οθόνη ότι δίνεται μέσα στην παρένθεση \n o οδηγεί τον κέρσορα (cursor) να πάει στην επόμενη γραμμή ; o όλες οι δηλώσεις των C-προγραμμάτων καταλήγουν σε αυτό το σύμβολο (semicolon). Χρησιμοποιείται προκειμένου να φανεί που τελειώνει μια δήλωση /* */ o Μεταξύ των συμβόλων αυτών γράφονται τα σχόλια.
Ανάλυση Πηγαίος κώδικας (source) hello.c Μεταγλωττιστής C (compiler) stdio.h Αρχεία επικεφαλίδας (header files) Object code hello.o Εκτελέσιµο πρόγραµµα (executable) hello Συνδέτης (linker) printf Βιβλιοθήκη (library)
Άσκηση Γράψτε ένα πρόγραμμα που μετατρέπει κυπριακές λίρες σε ερυώ
Κατανόηση και αρχική λύση o Παράδειγμα: 10 λίρες, 2.12ευρώ κάθε λίρα >>>>>> 21.2ευρώ o Δεδομένα (εισόδου): λίρες, rate o Δεδομένα (εξόδου): ευρώ o Υπολογισμός: ευρώ = λίρες * rate
Υλοποίηση o Γλώσσα επιλογής : C o Πρόγραμμα ανάπτυξης ή επεξεργαστής κειμένου /* programma poy metatrepei lires se euro */ intmain() { float lires, rate; /* inputs*/ floateuro; euro = lires* rate; return 0; /* output*/ } //Λείπει η επικοινωνία με το χρήστη!
Υλοποίηση /* programma poy metatrepei lires se euro */ #include <stdio.h> intmain() { } float lires, rate; /* inputs*/ float euro; /* output*/ printf( Enter lireskairate: ); /* eisagwghdedomenwn*/ scanf( %f%f,&lires, &rate); euro = lires* rate; /*ektypwsh dedomenwn*/ printf( %.2f lires antistoixoun se %.2f euro\n, lires, euro); return 0;
Ροή Ελέγχου /* programma poy metatrepei lires se euro */ #include <stdio.h> int main() { float lires, rate; /* inputs*/ float euro; /* output*/ /* eisagwgh dedomenwn */ printf( Enter lires kai rate: ); scanf( %f%f,&lires, &rate); 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> int main() { float lires, rate; /* inputs*/ float euro; /* output*/ /* eisagwgh dedomenwn */ printf( Enter lires kai rate: ); scanf( %f%f,&lires, &rate); euro = lires * rate; /*exagwgh dedomenwn*/ printf( %.2f lires antistoixoun se %.2f euro\n, lires, euro); } return 0;
Δοκιμή: Μεταγλώττιση και Εκτέλεση > gcc exchange.c o exchange > exchange Enter lires kai rate: 100 1.78 100.00 lires antistoixoun se 178.00 euro > exchange Enter lires kai rate: 5.5 1.62634 5.50 lires antistoixoun se 8.95 euro > Κατακρίβειαν 8.94487 αλλά επειδή ζητήσαµε µόνο.2f για αυτό γίνεται rounding στο κοντινότερο δεκαδικό
Ροή Έλεγχου(control flow) o Η ροή ελέγχου στην C είναι ακολουθιακής μορφής - sequential Ξεκινά από την πρώτη εντολή της main Εντολές εκτελούνται σε σειρά o Υπάρχουνγλώσσες μή-ακολουθιακές αλλά δεν θα μας απασχολήσουν σε αυτό το μάθημα
Τέλος διάλεξης