ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα 2: Τύποι δεδομένων, Μεταβλητές, Τελεστές και παραστάσεις Κουκουλέτσος Κώστας Τμήμα Μηχανικών Ηλεκτρονικών Υπολογιστικών Συστημάτων
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3
Σκοποί ενότητας Oι διδακτικοί σκοποί της ενότητας είναι ο σπουδαστής: Να είναι σε θέση να ορίζει και να αρχικοποιεί μεταβλητές και σταθερές Να έχει κατανοήσει της ιδιότητες και τους περιορισμούς των ακέραιων και πραγματικών μεταβλητών Να υλοποιεί αριθμητικές παραστάσεις και εκχωρήσεις Να εξοικειωθεί με την χρήση των τελεστών και την προτεραιότητα τους Να κατανοήσει την χρήση των τύπων δεδομένων και τις διαφορές τους
Περιεχόμενα ενότητας 1. Τύποι δεδομένων 2. Ακεραίου και Πραγματικού τύπου δεδομένα 3. Μέγεθος δεδομένων και ακρίβεια 4. Δηλώσεις μεταβλητών 5. Σταθερές 6. Συχνά λάθη με τις μεταβλητές 7. Ακέραιοι τύποι δεδομένων και υπερχείλιση 8. Τελεστές 9. Λογικοί τελεστές και αποτίμηση λογικών παραστάσεων 10. Προτεραιότητα τελεστών 11. Ο τύπος char 12. Ο τύπος int (Σύνοψη) 13. Ο τύπος float και ο τύπος double (Σύνοψη) 14. Ασκήσεις
Τύποι δεδομένων Ένας τύπος δεδομένων είναι ένα πεδίο τιμών καθώς και το σύνολο των πράξεων που επιτρέπεται στις τιμές αυτές Οι τύποι δεδομένων χωρίζονται σε δύο μεγάλες κατηγορίες: Βασικούς (fundamental) τύπους δεδομένων Integer types Floating Type Character types Παραγόμενους (derived) τύπους δεδομένων Arrays Pointers Structures Enumeration Με την χρήση διαφόρων τύπων δεδομένων επιτυγχάνεται καλύτερος έλεγχος του προγράμματος και οικονομία χώρου που καταλαμβάνουν οι μεταβλητές
Integer Ακεραίου τύπου Ο παρακάτω πίνακας εμφανίζει τους τύπους δεδομένων που είναι ακέραιοι το μέγεθος που καταλαμβάνουν στην μνήμη του υπολογιστή και το πεδίο τιμών που μπορεί να πάρει ο τύπος Tύπος Μέγεθος Τιμές char 1 byte -128 έως 127 ή 0 έως 255 unsigned char 1 byte 0 έως 255 signed char 1 byte -128 έως 127 int 2 ή 4 bytes -32,768 έως 32,767 ή -2,147,483,648 έως 2,147,483,647 unsigned int 2 ή 4 bytes 0 έως 65,535 or 0 έως 4,294,967,295 short 2 bytes -32,768 έως 32,767 unsigned short 2 bytes 0 έως 65,535 long 4 bytes -2,147,483,648 έως 2,147,483,647 unsigned long 4 bytes 0 έως 4,294,967,295
Floating - Πραγματικού τύπου (κινητής υποδιαστολής) Ο παρακάτω πίνακας εμφανίζει τους τύπους δεδομένων που είναι πραγματικοί το μέγεθος που καταλαμβάνουν στην μνήμη του υπολογιστή και το πεδίο τιμών που μπορεί να πάρει ο τύπος O long double είναι ο νεότερος τύπος για μεγάλη ακρίβεια Tύπος Μέγεθος Τιμές Ακρίβεια σε δεκαδικά ψηφία float 4 byte 1.2E-38 έως 3.4E+38 6 double 8 byte 2.3E-308 έως 1.7E+308 15 long double 10 byte 3.4E-4932 έως 1.1E+4932 19
Μέγεθος δεδομένων Η C εύκολα μπορεί να εμφανίσει το μέγεθος ( σε bytes) που καταλαμβάνει ένας τύπος δεδομένων ή μία μεταβλητής στην μνήμη Αυτό γίνεται με χρήση της συνάρτησης (τελεστή) sizeof
Ακρίβεια δεδομένων Επίσης μπορούμε να εμφανίσουμε την μεγαλύτερη, την μικρότερη και την ακρίβεια ενός τύπου πχ. του float
Δηλώσεις μεταβλητών (1) Δηλώνονται (ορίζονται) σε οποιοδήποτε σημείο του προγράμματος αρκεί να γίνει η δήλωση πριν από την χρήση Η δήλωση καθορίζει το τύπο της μεταβλητή» float a, b, c;» int fpa= 18, kefalaio=100000;» int totalfpa;» int ipoloipo;» ipoloipo=kefalaio-foros;» char c= Α
Δηλώσεις μεταβλητών (2) Στο παραπάνω παράδειγμα υπάρχουν δηλώσεις ακεραίων και πραγματικών μεταβλητών με ταυτόχρονη εκχώρηση τιμών Η ταυτόχρονη εκχώρηση τιμής, σε κάποιες περιπτώσεις xωρίς να είναι υποχρεωτική, λέγεται αρχικοποίηση (initialization) Δηλώσεις για μεταβλητές του ιδίου τύπου μπορούν να γίνουν στην ίδια γραμμή.
Μεταβλητές με σταθερή τιμή (1/3) Σε ένα πρόγραμμα υπάρχουν κάποιες τιμές που είναι σταθερές και δεν αλλάζουν (π=3.1515, g=9.81 ΦΠΑ=23 ) Εάν θέλουμε η τιμή μιας μεταβλητής να μην αλλάξει κατά την εκτέλεση τότε χρησιμοποιούμε το πρόθεμα const (από τη λέξη constant, σταθερά) πριν τον τύπο δεδομένων της μεταβλητής και ταυτόχρονα εκχωρείται και μία τιμή στην σταθερά (γίνεται αρχικοποίηση) Παράδειγμα» int main ( )» {» const int FPA=23;» const int BONUS = 3;» } Στο παραπάνω παράδειγμα σε περίπτωση που ο προγραμματιστής προσπαθήσει με μία εντολή να αλλάξει την τιμή ο επεξεργαστής εμφανίζει μήνυμα λάθους. Συνηθίζεται αυτού του τύπου οι σταθερές να έχουν ονόματα με κεφαλαία ώστε να γίνεται εύκολα ο διαχωρισμός τους από τις κανονικές μεταβλητές
Μεταβλητές με σταθερή τιμή (2/3) Το ίδιο επιτυγχάνεται και με την οδηγία #define προς τον preprocessor Ο προ-επεξεργαστής μας επιτρέπει να ορίσουμε συμβολοσειρές οι οποίες κατά την διάρκεια εκτέλεσης του, αντικαθίστανται με τις εκάστοτε τιμές.» #define FPA 18 //xoris ; sto telos kai xori ekxorisi» #define PI 3.1415926535897932384626433832795
Μεταβλητές με σταθερή τιμή (3/3) Παράδειγμα» int main ( ){» float rad,emvado;» const float PI=3.1415 ;» printf("dose aktina tou kiklou" );» scanf("%f", &rad);»» emvado = PI * rad * rad ;» printf("%.3f\n",emvado);»» return 0;» }
Συχνά λάθη με τις μεταβλητές (1/2) Χρήση μη ορισμένης μεταβλητής Ο ορισμός μπορεί να γίνει οπουδήποτε όμως μία μεταβλητή πρέπει να οριστεί πριν χρησιμοποιηθεί.» ekptosi= poso*0.12;» float poso=2000; Οι εντολές μεταγλωττίζονται από την αρχή προς το τέλος. Στην πρώτη εντολή ο compiler δεν αναγνωρίζει την μεταβλητή poso και για τον λόγο αυτό εμφανίζει μήνυμα λάθους.
Συχνά λάθη με τις μεταβλητές (2/2) Η αρχικοποίηση μίας μεταβλητής δεν είναι υποχρεωτική Όμως μόλις οριστεί μία μεταβλητή καταλαμβάνει κάποιο χώρος στην μνήμη. Αρχικό περιεχόμενο της μεταβλητής είναι ότι υπήρχε στο χώρο που κατέλαβε το οποίο είναι και απροσδιόριστο ή απρόβλεπτο Μερικοί compilers για να αποφύγουν τέτοια λάθη μηδενίζουν μία μεταβλητή που δεν έχει αρχικοποιηθεί Το αποτέλεσμα στο παρακάτω πρόγραμμα είναι απρόβλεπτο ή 0» float metra;» float axia=2500*metra;»» printf("axia= %f\n", axia );
Ακέραιοι τύποι δεδομένων και υπερχείλιση Ο ακέραιος τύπος έχει περιορισμένο εύρος αριθμών τους οποίους μπορεί να αποθηκεύσει. Όταν ο ακέραιος καταλαμβάνει 4 bytes το εύρος αυτό είναι από -2,147,483,648 έως 2,147,483,647 Για τα περισσότερα προβλήματα ή εφαρμογές το εύρος αυτό είναι αρκετό Αν η τιμή που προκύπτει είναι εκτός εύρους τότε έχουμε υπερχείλιση (overflow) αλλά δεν εμφανίζεται ΛΑΘΟΣ Η υπερχείλιση έχει σαν αποτέλεσμα η μεταβλητή να μην περιέχει το σωστό αποτέλεσμα και οφείλεται στον τρόπο που αναπαρίστανται οι αριθμοί στον υπολογιστή.
Παράδειγμα υπερχείλισης (1/2) Οι ακέραιοι έχουν μία κυκλική συμπεριφορά στον τρόποι αποθήκευσής τους στον υπολογιστή Στο παρακάτω παράδειγμα γίνεται χρήση του ακέραιου τύπου signed char και μετά του ακεραίου int
Παράδειγμα υπερχείλισης (2/2)
Τελεστές Ένας τελεστής (operator) είναι ένα σύμβολο ή μία λέξη της που αναπαριστά μία συγκεκριμένη διεργασία σε ένα ή περισσότερα δεδομένα. Τα δεδομένα καλούνται τελεστέοι (operands) και μπορούν να είναι μεταβλητές, σταθερές ή και κλήσεις συναρτήσεων. Οι τελεστές χρησιμοποιούνται για το σχηματισμό εκφράσεων (expressions). πχ a=b+c; C διαθέτει 6 κατηγορίες τελεστών. Οι κατηγορίες αυτές είναι: Αριθμητικοί ανάθεσης ή εκχώρησης συσχέτισης λογικοί δυαδικών ψηφίων και ειδικοί τελεστές
Αριθμητικοί τελεστές (1/2) Δυαδικοί (αφορούν δύο operands) +, -, *, /, % (τελεστής υπολοίπου) Οι τελεστές + και χρησιμοποιούνται και σαν μοναδιαίοι (unary) τελεστές πχ x=-4; y=-x; Όλοι αυτοί οι αριθμητικοί τελεστές έχουν προσεταιριστικότητα (associativity) Η προσεταιριστικότητα καθορίζει την φορά εκτέλεσης των πράξεων. Η προσεταιριστικότητα των αριθμητικών τελεστών είναι από αριστερά προς τα δεξιά.
Αριθμητικοί τελεστές (2/2) Ο τελεστής υπόλοιπου % Επιστρέφει το υπόλοιπο της ακέραιας διαίρεσης δύο ακεραίων (πρέπει υποχρεωτικά να είναι ακέραιοι αλλιώς ο compiler εμφανίζει μήνυμα λάθους) 3%3 το αποτέλεσμα είναι 0 4%3 το αποτέλεσμα είναι 1 5%3 το αποτέλεσμα είναι 2 6%3 το αποτέλεσμα είναι 0
Παράδειγμα Ένα πόσο που δίνεται σε Ευρώ σε πόσα νομίσματα των 200 των 50 των 10 και του ενός ευρώ αντιστοιχεί.
Πράξεις με ανάμειξη τύπων Το αποτέλεσμα της πράξης με ένα τελεστή εξαρτάται από τον τύπο των τελεστέων. Αν είναι ιδίου τύπου τότε το αποτέλεσμα είναι ίδιο ενώ αν είναι διαφορετικοί ο ποιο ασθενής τύπος προβιβάζεται στον πιο ισχιρό και το αποτέλεσμα είναι ίδιο και πάλι (πχ ο int προβιβάζεται σε float) Επομένως 10/4 η πράξη έχει σαν αποτέλεσμα το 2 10./4, 10/4., 10./4. έχει σαν αποτέλεσμα το 2.5
Τελεστής εκχώρησης Ο τελεστής εκχώρησης ή τελεστής ανάθεσης = χρησιμοποιείται για την εκχώρηση μίας τιμής σε μία μεταβλητή Υπάρχουν και άλλοι τελεστές εκχώρησης οι λεγόμενοι τελεστές σύνθετης εκχώρησης Ο τελεστής εκχώρησης έχει προσεταιριστικότητα από τα αριστερά προς το δεξιά δηλαδή εκτελούνται οι πράξεις στο δεύτερο μέλος και μετά το αποτέλεσμα εκχωρείται στο πρώτο» int x=5;» x=x+2; Στην δεύτερη εντολή αφού διαπιστωθεί ποια η τιμή της μεταβλητής, που είναι 5, προστίθεται το 2 στο 5 και μετά το αποτέλεσμα αντιγράφεται στην θέση της μνήμης που καταλαμβάνει η μεταβλητή x. Tώρα η τιμή της χ είναι 7. Επιτρέπεται να γίνεται πολλαπλή εκχώρηση σε κάποιες μεταβλητές» int x, y, z;» x=y=z=20;
Τελεστής εκχώρησης (Παρατηρήσεις I) Η μεταβλητή με την τιμή που εκχωρείται πρέπει να είναι του ιδίου τύπου δηλ. ακέραιος αριθμός πρέπει να εκχωρείται σε μεταβλητή ακεραίου τύπου κλπ Σε περίπτωση που υπάρχει ασυμβατότητα μεταξύ των δύο τελεστέων ο προγραμματιστής πρέπει να έχει υπόψη τα παρακάτω Εκχώρηση πραγματικού σε ακέραιο» int x=5.9; H τιμή της χ είναι 5 (χωρίς υποδιαστολή) δηλαδή αποκόπτονται τα δεκαδικά ψηφία Εκχώρηση ακέραιου σε πραγματικό» float x=5; H τιμή της χ είναι 5.0 δηλαδή η ακέραια τιμή 5 αποθηκεύεται σαν 5.0 (με υποδιαστολή) στην μεταβλητή
Τελεστής εκχώρησης (Παρατηρήσεις II) Παράδειγμα Αυτό που γίνεται στην παραπάνω περίπτωση είναι μία μετατροπή (conversion). Περισσότερα για μετατροπές θα δούμε σε επόμενη διάλεξη Η τιμή που εκχωρείται στην μεταβλητή πρέπει να είναι μέσα στο πεδίο τιμών που επιτρέπεται να πάρει η μεταβλητή (δηλαδή να χωρά αλλιώς ο αριθμός που θα εκχωρηθεί θα είναι λάθος χωρίς προειδοποίηση από την C» char c=127, d=128, e=129;» printf("%d %d %d\n",c, d, e); Στο παραπάνω παράδειγμα θα εμφανιστούν οι τιμές 127-127 -126 (Γιατί;)
Τελεστής ++ και - (1/2) Μοναδιαίοι (αφορούν ένα τελεστέο operand) τελεστές αύξησης και μείωσης ++, -- Ο τελεστής ++ αυξάνει μία μεταβλητή κατά 1 και ο -- την μειώνει κατά 1. Μοναδιαίοι Προπορευόμενοι (prefix) π.χ. ++x η αύξηση ή η ελάττωση γίνεται πριν να χρησιμοποιηθεί η τιμή της μεταβλητής στον υπολογισμό της τιμής της έκφρασης στην οποία συμμετέχει Παρελκόμενοι ( suffix) π.χ. x++ η αύξηση ή η ελάττωση γίνεται μετά τον υπολογισμό της τιμής της έκφρασης στην οποία συμμετέχει
Τελεστής ++ και - (2/2) Οι εκφράσεις x++ και ++x έχουν διαφορά μόνο όταν υπάρχει εκχώρηση τιμής σε μία μεταβλητή. Σε αυτήν την περίπτωση η μεταβλητή x αυξάνει μετά ή πριν την ανάθεση To ίδιο συμβαίνει και για τις εκφράσεις --x και x--
Παράδειγμα
Παρατηρήσεις (προσεταιριστικότητα) Προσεταιριστικότητα καθορίζει την σειρά εκτέλεσης τελεστών που είναι στο ίδιο επίπεδο προτεραιότητας +, -, * και / είναι αριστερής προσεταιριστικότητας (εφαρμόζεται από αριστερά προς τα δεξιά) Τελεστής ανάθεσης είναι δεξιάς προσεταιριστικότητας» num_1 = num_2 = 5 ; // ισοδυναμεί με num_1=(num_2=5)» m1=m2=m3=m4=10; // ισοδυναμεί με m1=(m2=(m3=(m4=10)))» int x=5;int y; y=x=x-2; // το y και το x έχουν τιμή 3
Σχεσιακοί τελεστές (1/3) Οι σχεσιακοί τελεστές (ή τελεστές σύγκρισης) χρησιμοποιούνται για συγκρίσεις που σχηματίζουν λογικές προτάσεις. Το αποτέλεσμα είναι μία λογική τιμή, είτε αληθής (true) είτε ψευδής (false). == ίσο!= διάφορο > μεγαλύτερο < μικρότερο >= μεγαλύτερο ή ίσο <= μικρότερο ή ίσο Το αποτέλεσμα μιας έκφρασης που περιλαμβάνει ένα τελεστή σύγκρισης, είναι αληθές (true) ή ψευδές (false). Η C αναπαριστά τις τιμές αυτές με ακέραια μεταβλητή όπου το μηδέν (0) αντιστοιχεί στην τιμή false και κάθε άλλη τιμή στην τιμή true (συνήθως όμως με 1).
Σχεσιακοί τελεστές (2/3) Επομένως η τιμή μιας έκφρασης που περιέχει τελεστή συσχέτισης είναι ακέραια 0 για false και 1 για true.» printf( %d\n, 1<5); //Εμφανίζει το 1» printf( %d\n, 1>5); //Εμφανίζει το 0
Σχεσιακοί τελεστές (3/3) Οι τελεστές συσχέτισης χρησιμοποιούνται συνήθως σε δομές ελέγχου για να γίνει έλεγχος μίας λογικής πρότασης. H επόμενη εντολή εξετάζει αν η μεταβλητή χ είναι αρνητική» if (x<0) Ο τελεστής εκχώρησης δεν πρέπει να χρησιμοποιείται αντί του τελεστή ισότητας. Σε τέτοιες περιπτώσεις το πρόγραμμα εκτελείται ενώ υπάρχει σοβαρό λάθος στην λογική του προγράμματος Το διάφορο στην C αναπαριστάται με το τελεστή!= και όχι με άλλους τελεστές που χρησιμοποιούνται στα μαθηματικά ή σε άλλες γλώσσες
Παράδειγμα 1 Ποιό το αποτέλεσμα του παρακάτω προγράμματος
Παράδειγμα 2 Ποιό το αποτέλεσμα του παρακάτω προγράμματος
Σύνθετες εκχωρήσεις Οι σύνθετες εκχωρήσεις γίνονται με χρήση των αντίστοιχων τελεστών (compound assignment operators) και συνδυάζουν ένα αριθμητικό τελεστή με την εκχώρηση (+=, -=, *=, /=, %= ) Αλλάζει η τιμή της μεταβλητής με πράξη που εφαρμόζεται στην τρέχουσα τιμή της μεταβλητής.
Λογικοί τελεστές Οι λογικοί τελεστές χρησιμοποιούνται για να σχηματίσουν λογικές προτάσεις! (not) && (and) (or) Ο τελεστής && έχει σαν αποτέλεσμα η λογική παράσταση να είναι αληθής μόνο όταν και τα δύο μέλη της παράστασης είναι αληθή. Σε όλες τις άλλες περιπτώσεις η παράσταση είναι ψευδής. Ο τελεστής έχει σαν αποτέλεσμα η λογική παράσταση να είναι ψευδής μόνο όταν και τα δύο μέλη της παράστασης είναι ψευδή. Σε όλες τις άλλες περιπτώσεις η παράσταση είναι αληθής. Ο τελεστής! αντιστρέφει την τιμή μίας λογικής παράστασης
Λογικοί τελεστές Πίνακας τιμών των λογικών τελεστών a b a && b a b false false false false false true false true true false false true true true true true
Αποτίμηση λογικών παραστάσεων (1/2) Ποιά η εκτίμηση της παρακάτω παράστασης» a=(2>5) && (2==2) && (7>5) H τιμή του a είναι 0 Κάποιος που έχει υπόψη του την λειτουργία του λογικού && δεν χρειάζεται να αποτιμήσει και τις 3 λογικές εκφράσεις, επειδή η πρώτη έκφραση (2>5) είναι ψευδής τότε δεν χρειάζεται να γίνει έλεγχος για τις υπόλοιπες εκφράσεις.
Αποτίμηση λογικών παραστάσεων (2/2) Ποια η εκτίμηση της παρακάτω παράστασης» a=(5>2) (2==2) (7>5) Η τιμή του a είναι 1 Πάλι εδώ δεν χρειάζεται να γίνει έλεγχος όλων των εκφράσεων επειδή το (5>2) Ο μεταγλωττιστής δουλεύει με αυτό τον τρόπο δηλαδή μόλις ένας όρος μπορεί να καθορίζει την τιμή μίας λογικής παράστασης ο μεταγλωττιστής δεν συνεχίζει στο υπόλοιπο μέρος. Η τεχνική αυτή αναφέρεται ως lazy evaluation
Σχεσιακοί και Λογικοί τελεστές - Παραδείγματα» (8 == 3) // είναι false.» (6 > 4) // είναι true.» (3!= 2) // είναι true.» (8 >= 8) // είναι true.» (3 < 3) // είναι false.» int k;» k=(7==5)&&(5>4);
Προτεραιότητα τελεστών 44
Εκφράσεις και Προτεραιότητα τελεστών (1/2) Οι πράξεις εκτελούνται σύμφωνα με την προτεραιότητα Πράξεις της ιδίας προτεραιότητας εκτελούνται σύμφωνα με την προσεταιριστικότα τους Επειδή οι παρενθέσεις () υπολογίζονται πρώτα (από τα αριστερά προς τα δεξιά) χρησιμοποιούνται παρενθέσεις για να αλλαχτεί η εκτέλεση των πράξεων Εάν υπάρχουν ένθετες παρενθέσεις υπολογίζονται πρώτα οι εσωτερικές» a=6/2+1;» a=6/(2+1);» b=a+2+6/2;» a= (a+2+6)/2;
Εκφράσεις και Προτεραιότητα τελεστών (2/2) Παράδειγμα H παρακάτω παράσταση» w= x*y*z+a/b c*d Μπορεί να γραφτεί και» W=(((x*y)*z) + (a/b)) (c*d) Η χωρίς να γίνεται υπερβολική χρήση παρενθέσεων» W=(x* y*z) + (a/b) (c*d)
Ο τύπος char Ο τύπος char χρησιμοποιείται για να αποθηκεύουμε χαρακτήρες.» int main ( )» {» char c ;» c = 'x' ;» } Στην C οι χαρακτήρες κωδικοποιούνται με αριθμούς χρησιμοποιώντας την κωδικοποίηση ASCII. Έχει 95 εκτυπώσιμους χαρακτήρες από 32 έως 126 Οι χαρακτήρες από 0 έως 31 είναι ειδικοί χαρακτήρες για τον έλεγχο των συσκευών εξόδου, πχ το 8 είναι το BACKSPACE, to 13 είναι το ENTER και το 27 είναι το ESC.
Πίνακας ASCII
Εμφάνιση χαρακτήρων printf και χαρακτήρες» #include < stdio.h>» int main ( ){» char c = 'a' ;» printf ("character %c is number %d in ASCII encoding\n", c, c);» } Το πρόγραμμα εμφανίζει :» character a is number 97 in ASCII encoding
Ο τύπος int (Σύνοψη) Ο τύπος int αποθηκεύει ακέραιες τιμής Το μέγεθος του εξαρτάται από την αρχιτεκτονική του υπολογιστή στον οποίο βρισκόμαστε Παλαιότερα ήταν 2 bytes και οι τις τιμές που μπορούσε να πάρει ήταν στο διάστημα [ 32768, 32767] Σε σύγχρονες αρχιτεκτονικές μπορεί να πάρει όλες τις τιμές στο διάστημα [ 2.147.483.648, 2.147.483.647] και καταλαμβάνει 4 bytes
Ο τύπος float και ο τύπος double (Σύνοψη) Είναι ένας τύπος για πραγματικούς αριθμούς. Στην ουσία οι αριθμοί αυτοί αναπαριστούνται κατά προσέγγιση Στα περισσότερα συστήματα ο τύπος float (αποθηκεύεται σε 4 bytes) δίνει ακρίβεια για 6 δεκαδικά ψηφία και το τύπος double (8 bytes) για περίπου 15. Ο τύπος long double (10 ή 12 bytes ανάλογα με το σύστημα) τυπικά δίνει ακρίβεια για 16 έως 30 δεκαδικά ψηφία που είναι πολύ περισσότερα από ότι απαιτείται για τις περισσότερες εφαρμογές. Λόγω του μεγέθους χρησιμοποιείται σπάνια. Προσοχή: H εντολή scanf πρέπει να έχει τον specifier %f για float και τον specifier %lf για double Αυτό θα αναλυθεί στην επόμενη διάλεξη
Άσκηση 1 Να εισάγεται ένας τριψήφιος ακέραιος θετικός αριθμός και να εμφανίζεται ο αντίστοιχος θετικός με ανάποδα τα ψηφία του αρχικού αριθμού
Άσκηση 2 Ποιό το αποτέλεσμα του παρακάτω προγράμματος
Άσκηση 3 Να εισάγεται ο αριθμός των δευτερολέπτων σε ένα πρόγραμμα σαν ένας ακέραιος θετικός αριθμός και να εμφανίζεται σε πόσες ώρες, λεπτά και δευτερόλεπτα αντιστοιχεί ο αριθμός αυτός. 54
Notice All the Issues Covered So Far» /*This program computes the volume (in liters) of a six-pack of sodacans and the total volume of a six-pack and a two-liter bottle.*/» int main(){» int cans_per_pack = 6;» const double CAN_VOLUME = 0.355; // Liters in a 12-ounce can» double total_volume = cans_per_pack * CAN_VOLUME;» cout << "A six-pack of 12-ounce cans contains "» << total_volume << " liters." << endl;» const double BOTTLE_VOLUME = 2; // Two-liter bottle» total_volume = total_volume + BOTTLE_VOLUME;» cout << "A six-pack and a two-liter bottle contain "» << total_volume << " liters." << endl;» return 0;» }
Εκφράσεις στη C Παραστάσεις Στη γλώσσα C m2 - n2 m*m - n*n ax2 + bx + c a*x*x + b*x + c -b + 4ac -b + 4 * a* c 2ab c+d ((-a)b) + ((-c)d) (2*a*b)/(c+d) -a*b + -c*d
Τέλος Ενότητας