Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων 5 &6. Τύποι δεδομένων, τελεστές και αριθμητικές εκφράσεις Ιωάννης Κατάκης
Σήμερα o Τύποι δεδομένων int, char, float, double o Τελεστές = + - * / % o Αριθμητικές εκφράσεις a+b,
Τύποι δεδομένων Ένας τύπος δεδομένων είναι ένα σύνολο τιμών και ένα σύνολο λειτουργιών (πράξεων) που μπορούν να εφαρμοστούν σε αυτές τις τιμές o Βασικοί τύποι δεδομένων char, int, float, double o Σύνθετοι τύποι δεδομένων:(πίνακες, δομές) π.χ. struct time { }; inthours; intminutes; intseconds; 3
Ακέραιοι (Integers) o int o Χειρισμός ακέραιων αριθμών o Μέγεθος: 4bytes o Πεδίο τιμών: από 2 έως 2 1, δηλ. -2 δις έως +2 δις o Πράξεις Πρόσθεση, αφαίρεση, πολλαπλασιασμός, διαίρεση, κτλ o Παραδείγματα τιμών -21844 0 50 +4234-3233 2432455
Κινητής υποδιαστολής(float) o float Κινητής υποδιαστολής απλής ακρίβειας o Πραγματικοί αριθμοί o Μέγεθος: 4bytes o Πράξεις Πρόσθεση, αφαίρεση, πολλαπλασιασμός, διαίρεση o Παραδείγματα 3.01 110.8-0.01
Κινητής υποδιαστολής (double) o double o Κινητής υποδιαστολής διπλής ακρίβειας o Ίδιος τύπος μεfloat αλλά με μεγαλύτερη ακρίβεια (περιέχει δηλαδή διπλό αριθμό δεκαδικών ψηφίων απ ότι η μεταβλητή float) o Μέγεθος: 8 bytes o Παραδείγματα 1.04583934
Χαρακτήρες (char) o Χειρισμός χαρακτήρων ατομικών Α-Z, a-z, 0-9,!@$%&#, ειδικά σύμβολα \n Μέγεθος 1 byte Εσωκλείονται σε αποστρόφους Α, a, 9,,, *, \n, \, κτλ Κατά την είσοδο από το πληκτρολόγιο δε χρειάζονται απόστροφοι Παραδείγματα a είναι ο χαρακτήρας a b είναι ο χαρακτήρας b 9 είναι ο χαρακτήρας 9 * είναι ο χαρακτήρας *
Χαρακτήρες o Αντιστοιχούν σε ένα μοναδικό κωδικό o ΣτηCο κωδικός αναφέρεται στον πίνακα ASCII Αλφαβητικοί, ψηφιακοί, ειδικοί (\n, \t) 0 ascii:48, 1 ascii:49,.., 9 ascii:57 A ascii:65,, Z ascii:90 a ascii:97,, z ascii:122
Πίνακας ASCII
Οι τύποι δεδομένων περιληπτικά Τύπος Μέγεθος Πεδίο Τιµών char, 1byte a.. z A.. Z 0.. 9 int, 4 bytes -2 31..2 31-1 float, 4 bytes 10-37..10 38 double 8 bytes 10-307..10 308 *δείκτης 4 bytes διευθύνσεις (0..2 32-1) *Δεν θα μελετηθεί σε αυτό το μάθημα
Παράδειγμα
Παράδειγμα
Επιλογή του σωστού τύπου δεδομένων Μαθητές σε ένα σχολείο o int Βάρος, Μάζα o float / double Εμβαδό, Όγκος o float / double Όνομα o char (string) Αριθμός ταυτότητας o int
Αριθμητικές εκφράσεις Σύνταξη <τελεσταίος> <τελεστής> <τελεσταίος> ή <τελεστής><τελεσταίος> τελεστής (operator) τελεσταίος(operands) Τελεσταίοι o Σταθερές (KMS_PER_MILE * miles) o Μεταβλητές (c=a+b) o Κλήση συνάρτησης που επιστρέφει αριθμό (c=sum(a,b)+sum(b,a)) o Έκφραση (χρήση παρενθέσεων) (a+3)*(b/c)
Αριθμητικοί τελεστές Όνομα Τελεστής Παράδειγμα Πρόσθεση + num1 + num2 Αφαίρεση - initial - spent Πολλ/σμός * age * 6 Διαίρεση / sum / count Υπόλοιπο % m % n
Τελεστής ανάθεσης (=) o Assignment operator o Σύνταξη <μεταβλητή> = <έκφραση>; area = PI* radius * radius; count = count + 1; new_number = old_nmber; average = total / count Hτιμή της έκφρασης αποθηκεύεται στην μεταβλητή και ο τύπος της τιμής της έκφρασης μετατρέπεται στον τύπο της μεταβλητής
Τύπος έκφρασης o Προκύπτει από τους τύπους των τελεσταίων o char, int, float, double 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 Όπου τ οποιοσδήποτε τελεστής Τί παρατηρείτε; Υπάρχει κάποιος κανόνας;
Εκφράσεις στη C Παραστάσεις m 2 -n 2 ax 2 + bx+ c Στην γλώσσα C m*m -n*n ή (m*m)-(n*n) a*x*x + b*x + c -b + 4ac -b + 4 * a* c (2*a*b)/(c+d) ((-a)b)+((-c)d) -a*b + -c*d
Κανόνας προτεραιότητας τελεστών o Τελεστές στην ίδια έκφραση αποτιμούνται σύμφωνα με τις προτεραιότητές τους o Οι προτεραιότητες των αριθμητικών τελεστών, σε φθίνουσα σειρά περιγράφονται στην επόμενη διαφάνεια
Τελεστές και προτεραιότητα Τελεστές Προτεραιότητα () Εάν είναι φωλιασμένο,τότε προτεραιότητα δίνεται στον πιο εσωτερικό. Εάν υπάρχουν πολλοί στο ίδιο επίπεδο τότε η προτεραιότητα είναι από αριστερά προς τα δεξιά (x+(y+z)(x-y)*3) +- (Μοναδιαίοι) Εάνυπάρχουν πολλοί, η προτεραιότητα είναι από δεξιά προς αριστερά x=++y+--z; * / % Εάνυπάρχουν πολλοί, η προτεραιότητα είναι από αριστερά προς τα δεξιά 3*7*y/x + -(Δυαδικοί) Εάν υπάρχουν πολλοί,η προτεραιότητα είναι από αριστερά προς τα δεξιά 3+x-y = Εάν υπάρχουν πολλοί η προτεραιότητα είναι από δεξιά προς αριστερά x=y=3
Κανόνας παρενθέσεων o Κάθε έκφραση σε παρένθεση αποτιμάται ξεχωριστά. Φωλιασμένες παρενθετικές εκφράσεις, ((..)), αποτιμώνται από μέσα προς τα έξω o Όπου είσαστε αβέβαιοι χρησιμοποιείτε παρενθέσεις
Παράδειγμα αποτίμησης x*y*z+a/b c*d (((x*y)*z)+(a/b)) (c*d) Και τα δύο είναι σωστά Η δεύτερη έκφραση εκφράζει ξεκάθαρα τη σειρά εκτέλεσης
Παραδείγματα αποτίμησης εκφράσεων o x = 5; y= 3; z = -4; o (x-y)*z -8 o x-(y*z) 17 o x-y*z 17 -a*b=-(a*b) ή -a*b=(-a)*b???
Υπόλοιπο % o Η έκφραση m % n επιστρέφει το υπόλοιπο της διαίρεσης του m με το n o Tomodulo είναι ακέραιος τελεστής και οι δύο τελεσταίοι πρέπει να είναι ακέραιοι o Παραδείγματα 17 % 5 = 2 6 % 3 = 0 9 % 2 = 1 5 % 8 = 5
Ακέραια διαίρεση o Εάν και οι δύο τελεσταίοι είναι ακέραιοι τότε θα πάρετε ακέραιο ως απάντηση(ακέραιο πηλίκο). o Παραδείγματα 17 / 5 =3 4 / 3 = 1 35 / 9 = 3 o Εάν ένας εκ των δύοτελεσταίων είναι float (ή double)το αποτέλεσμα θα είναι float (ή double) 17 / 5.0 = 3.400000
Εξάσκηση στην αποτίμηση εκφράσεων Έστω οι ακέραιοa, b, c, d, όπουa = 1, b = 2, c = 3, d = 4 Τι προκύπτει από τις παρακάτω προτάσεις; o a+b-c+d =4 o a*b/c =0 o 1+a*b%c =3 o a+d%b-c =-2 o d+c/b-a =4
Διαίρεση με το 0 o Μαθηματικά δεν ορίζεται διαίρεση με το 0 o Αν επιτρέψετε διαίρεση με το 0 σε ένα πρόγραμμα θα προκληθεί σφάλμα o Η εκτέλεση του προγράμματος θα τερματίσει απότομα - runtime error o Θα μάθουμε πώς να αποφεύγουμε τη διαίρεση με το 0
Μετατροπή τύπων o Αυτόματη μετατροπή Σε ανάθεση, η τιμή στα δεξιά του = μετατρέπεται στον τύπο της μεταβλητής στα αριστερά του = intx = 3.14; //στοx τελικά καταχωρείται η τιμή 3 float x = (2/3);//στο xκαταχωρείται η τιμή 0.0000 o Ρητή μετατροπή (Casting) x1 = 2/3; x2 = (float)2/3; x3 = 2/(float)3; x4 = (float)(2/3); x1=0.0000 x2=0.6666 x3=0.6666 x4=0.0000
Εντολές printfκαι scanf o Παράδειγμα printf( That equals %f kilometers and %e meters.\n, kms, mtrs); o Παράδειγμα scanf scanf( %d%f,&arithmos1,&arithmos2); Τύπος δεδομένων printf scanf float %f %f double %f ή %e %lf int %d %d char %c %c
Παράδειγμα προγράμματος /* This program divides two integers and displays the quotient and the remainder */ /* Input: Two integers * Output: The quotient and the remainder */ #include <stdio.h> main() { /* Dilosimetablhtvn*/ intinput1,input2; /* Eisodoi*/ intquotient,remainder; /* Eksodoi*/ /* Eisagogidedomenon*/ printf("write two integers \n"); scanf("%d%d", &input1,&input2); /* Ipologismoi*/ quotient=input1/input2; /*Ipologismospilikou*/ remainder=input1%input2; /*Ipologismosipolipou*/ /*Ektiposiapotelesmatos*/ printf("the quotient is %d and the remainder %d\n",quotient, remainder); }
Τέλος διάλεξης