Εισαγωγή στην C Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Σύνταξη και Σηµασιολογία της C Σχολιασµός Μεταβλητές / Σταθερές Τύποι εδοµένων και Τελεστές Βιβλίο µαθήµατος: Chapter 2,, Sec. 1-21 & 4-54 ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-1 Γλώσσα Προγραµµατισµού C Είναι µια από τις πιο διαδοµένες γλώσσες υψηλού επιπέδου Σχεδιάστηκε το 1972 από τον Dennis M. Ritchie στα εργαστήρια Bell της AT&T (εξέλιξη της γλώσσας Β) Χρησιµοποιήθηκε για την κατασκευή συστηµάτων, π.χτολειτουργικό σύστηµα UNIX Συνεχής εξέλιξη της γλώσσας µέχρι σήµερα ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-2 1
/* programma poy metatrepei euro se dolaria */ #include <stdio.h> int main() { float euro, timi; float dolaria; /* inputs*/ /* output*/ /* eisagwgh dedomenwn */ printf( Enter euro kai timi: ); scanf( %f%f,&euro, &timi); dolaria = euro * timi; /*exagwgh dedomenwn*/ printf( %.2f euro antistoixoun se %.2f dolaria\n, euro, dolaria); } return 0; 3-3 Γενικές Παρατηρήσεις για C Kατανοητή Αποτελείται από εντολες και δηλώσεις µεταβλητών Όλες οι εντολές και δηλώσεις τελειώνουν µε ; Χρήση συναρτήσεων stdio (printf, scanf) printfεκτυπώνει \n κινεί τον δροµέα (cursor) στην επόµενη γραµµή scanf διαβάζει από τον χρήστη ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-4 2
οµή προγράµµατος C Σχόλια παντού Οδηγίες στον προεπεξεργαστή Ορισµός συνάρτησης main δηλώσεις µεταβλητών εντολές (εκφράσεις, κλήσεις συναρτήσεων κτλ) ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-5 Σχόλια Σύνταξη: ξεκινούν µε /* και τελειώνουν µε */ Καµία σηµασία (ο µεταγλωττιστής αγνοεί τα σχόλια) αλλά πολύ σηµαντικό µέρος ενός προγράµµατος (τεκµηρίωση/επεξήγηση) /* auto einai ena syntaktika ortho sxolio*/ /* kai auto * einai * syntaktika * ortho */ ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-6 3
Σχόλια (συνέχεια) /* auto * ti* einai */ /***********auto??? ***************/ /* lathos sxolio */ giati */ */ einai lathos??? /* ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-7 #include Οδηγία στον προεπεξεργαστή για ενσωµάτωση βιβλιοθηκών Μια βιβλιοθήκη (library ή header file) είναι µια συλλογή χρήσιµων συναρτήσεων και σταθερών Σύνταξη: #include <header file> πχ: #include <stdio.h> ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-8 4
#include (συνέχεια) Ενσωµάτωση επιτρέπει την χρήση συναρτήσεων και σταθερών µιας βιβλιοθήκης πχ η βιβλιοθήκη stdio περιέχει, ανάµεσα σε άλλα, τις συναρτήσεις printf, για εκτύπωση πληροφοριών, και scanf, για εισδοχή πληροφοριών Άλλες διαταγές στον προεπεξεργαστή: define, ifdef, if, else, endif, undef ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-9 Ονόµατα στην C Για σταθερές, µεταβλητές, συναρτήσεις Η C είναι CASE SENSITIVE, κεφαλαία και µικρά γράµµατα είναι διαφορετικά foo και FOO είναι δυο διαφορετικά ονόµατα Να χρησιµοποιείτε αυτοεπεξηγηµατικά ονόµατα Ονόµατα δεν πρέπει να χρησιµοποιούν δεσµευµένες λέξεις ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-10 5
εσµευµένες Λέξεις (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 ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-11 Σύνταξη Ονόµατος όνοµα L _ L N _ L: letters a-z A-Z N: numbers 0-9 _ : underscore πχ metavliti rectangle_area _index_123 1variable %super^ se tria meroi ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-12 6
Σηµασία Μεταβλητής (variable) Αποθήκευση και ανάγνωση τιµών Κάθε µεταβλητή έχει: τύπο βασικοί: int, char, float, double µέγεθος: 4Β, 1Β, 4Β, 8Β (κάθε κυψελίδα 1 Byte) (συµβολικό) όνοµα το όνοµα αντιστοιχεί σε συγκεκριµένη διεύθυνση στην µνήµη τιµή Εξαρτάται από το λειτουργικό σύστηµα ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-13 Σηµασία Μεταβλητής (συνέχεια) int count; τύπος όνοµα (διεύθυνση) τιµή count = 137; count = count + 142; &count; 0 98760060... ιεύθυνση του count 137 279... Τύπος διεύθυνσης ονοµάζεται δείκτης (pointer) πχ int *deikths; ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-14 7
ήλωση Μεταβλητής char ήλωση µεταβλητής µε βασικό τύπο int float double ονοµα, ; char $foo; char f; int count, sum; float area, double volume; int index; cost; double charge; float angle, income; ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-15 ΠΡΟΣΟΧΗ Μια µεταβλητή πρέπει να δηλωθεί πριν χρησιµοποιηθεί Εαν η µεταβλητή βρίσκεται στα αριστερά του τελεστή ανάθεσης ( = ) ητιµή του αποτελέσµατος της έκφρασης (expression) στα δεξιά του τελεστή ανάθεσης αποθηκεύεται στην διεύθυνση της µεταβλητής Αλλιώς χρησιµοποιείται η τιµήτηςµεταβλητής dolaria = euro * timi; ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-16 8
Σηµασία Σταθεράς (constant) Σταθερές έχουν: τιµή όνοµα όχι όµως διεύθυνση µεταγλωτιστής αντικαθιστά το όνοµα µετηντιµή ιευκολύνει: τροποποιήσεις διάβασµαενόςπρογράµµατος (PI ή 3.1453) Μια σταθερά πρέπει να δηλωθεί πριν χρησιµοποιηθεί εν µπορείνααλλάξειτιµή κατά την εκτέλεση του προγράµµατος ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-17 ήλωση Σταθεράς ήλωση σταθεράς #define όνοµα τιµή #define PI 3.1453 #define EURO_DOLLAR_RATE 0.452551 #define YES 1 #define NO 0 #define TRUE 1 #define PISQUARE PI*PI #define ERROR_SPACE_MESSAGE error:run out of space ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-18 9
Τύποι εδοµένων Ένας τύπος δεδοµένων είναι ένα σύνολο τιµών και ένα σύνολο πράξεων που µπορούν να εφαρµοστούν σε αυτές τις τιµές βασικοί (char, int, float, double) σύνθετοι (arrays, structs) ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-19 char (χαρακτήρας) Αναπαριστά ατοµικούς χαρακτήρες A-Z, a-z, 0-9,!@#$%^&, ειδικά σύµβολα \n, κτλ Μέγεθος 1 byte. Πόσες µοναδικές τιµές? Κυριολεκτικές τιµές εσωκλείονται σε αποστρόφους, π.χ. Α, a, 9,,, *, \n, \, κτλ Οι απόστροφοι δεν χρειάζονται όταν εισάγονται χαρακτήρες ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-20 10
int (ακέραιος) Αναπαριστά ακεραίους αριθµούς Μέγεθος 4 bytes, πεδίο τιµών -2 31.. +2 31-1 Παραδείγµατα κυριολεκτικών τιµών: -2189456 0 50 +24562 3245 13576313 Πράξεις: πρόσθεση (+), αφαίρεση (-), πολλαπλασιασµός (*), διαίρεση (/), υπόλοιπο (%). ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-21 float (κινητής υποδιαστολής µονής ακριβείας) Αναπαριστά τους πραγµατικούς αριθµούς Μέγεθος: 4 bytes, 1x10 37,1x10-37 Πράξεις: πρόσθεση (+), αφαίρεση (-), πολλαπλασιασµός (*), διαίρεση (/) Σηµειογραφία για κυριολεκτικές τιµές: 1.258 10 6 = 1258000.0 = 1.258e6 = 1.258E6 8.9 x 10-4 = 0.00089 = 8.9e-4 = 8.9E-4 ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-22 11
double (κινητής υποδιαστολής διπλής ακριβείας) Ίδιος τύπος µε float αλλά µε µεγαλύτερη ακρίβεια Μέγεθος 8 bytes ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-23 Tελεστής Ανάθεσης (assignment) Σύνταξη: µεταβλητή = έκφραση; area = PI * radius * radius; count = count + 1; new_number = old_number; average = total / count; Ητιµή της έκφρασης αποθηκεύεται στην µεταβλητή ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-24 12
Τελεστές (operators) Αριθµητικοί για int, char, float, double δυαδικοί (binary) + - * / % c=a+b; πρóσθεση c=a-b; αφαíρεση c=a*b; γινóµενο c=a/b; διαíρεση c=a%b; υπóλοιπο (για int και char µóνο) µοναδιαιoί (unary) -+(πρόσηµο) c=-a; ή c = -a + b; c=+a; ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-25 Τελεστής Υπολοίπου % (mod) Εαν x and y ειναι int ή char x y x/y x % y 4 2 2 0 4 3 1 1 35 8 ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-26 13
Αριθµητικές Εκφράσεις Σύνταξη: a τ b ή τ a τ είναι ο τελεστής (operator) a, b είναι τελεστέοι (operands) τελεστέοι µπορεί να είναι σταθερές µεταβλητές κλήση συνάρτησης που επιστρέφει αριθµό έκφραση (χρήση παρενθέσεων) ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-27 Κανόνας Προτεραιότητας Τελεστών Τελεστές στην ίδια έκφραση αποτιµούνται σύµφωνα µε τις προτεραιότητές τους. Οι προτεραιότητες των αριθµητικών τελεστών, σε φθίνουσα σειρά, είναι: µοναδιαίοι +, υψηλότερη προτεραιότητα *, /, % ενδιάµεση προτεραιότητα δυαδικοί +, χαµηλότερη προτεραιότητα ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-28 14
Κανόνας Εταιρικότητας Μοναδιαίοι τελεστέοι στην ίδια υποέκφραση και µε την ίδια προτεραιότητα αποτιµούνται από τα δεξιά προς τα αριστερά δεξιά εταιρικότητα υαδικοί τελεστέοι στην ίδια υποέκφραση και µετην ίδια προτεραιότητα αποτιµούνται από τα αριστερά προς τα δεξιά αριστερή εταιρικότητα ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-29 Κανόνας Παρενθέσεων Κάθε έκφραση σε παρένθεση αποτιµείται ξεχωριστά. Φωλιασµένες παρενθετικές εκφράσεις, ((..)), αποτιµούνται από τα µέσαπροςταέξω Όπου είσαστε αβέβαιοι χρησιµοποιείτε παρενθέσεις Μην το παρακάνετε όµως! ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-30 15
ΠαράδειγµαΑποτίµησης x = 5; y= 3; z = -4; Έκφραση (x-y)*z x- (y* z) x - y * z Τιµή -8 17 17 ψηλότερης προτεραιότητας ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-31 ΠαράδειγµαΑποτίµησης x = 5; y= 3; z = -4; Έκφραση (x-y)*-z x- (y* -z) x - y * -z Τιµή ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-32 16
ΠαράδειγµαΑποτίµησης x * y * z + a / b c * d (((x * y) * z) + (a / b)) (c * d) ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-33 Τύπος Έκφρασης Ορίζεται από τους τύπους των τελεστών char, int, float, double intτ int int 5/2 2 intτ double double 5/2.0 2.5 intτ char int 5+ a 102 intτ float float π.χ. int x=2; float y=3.0; y/x /* 3.0/2.0 */ Προσοχή στην περικοπή που προκύπτει στις πράξεις ακεραίων, κυρίως στην διαίρεση (µπορείναοδηγήσεισεδιαίρεσηµε τοµηδέν) π.χ. int x=2, y=3; 3.0/(x/y) /* διαίρεση µε µηδέν */ ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-34 17
Αυτόµατη και Ρητή Μετατροπή Σε ανάθεση (αυτόµατα) ητιµήδεξιατου = µετατρέπετε στον τύπο της µεταβλητής στα αριστερά του = int x = 3.14; /* 3 */ float x = 2/3; /* 0.0 */ Ρητή Μετατροπή (Casting) int x=2, y=3; float z = (float) x/y; /* 2.0/3, 2.0/3.0, 0.66666 */ float z = (float) (x/y); /* 0.0 */ ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-35 Μετατροπή Εκφράσεων σε C m 2 -n 2 ax 2 + bx + c. -b + 4ac 2ab c+d ((-a)b) + ((-c)d) m*m - n*n ή (m*m)-(n*n) a*x*x + b*x + c -b + 4 * a* c (2*a*b)/(c+d) -a*b + -c*d ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-36 18
Επιλογή Κατάλληλου Τύπου εδοµένων Aριθµός µαθητών σε ένα σχολείο Βάρος, Μάζα Εµβαδό, Όγκος Όνοµα Αριθµός Ταυτότητας int float, double float, double char (string) int ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-37 Περίληψη Σχόλια (/* */) Εντολή #include Ονόµατα στη C Μεταβλητές και Σταθερές Σηµασία, ήλωση, Χρήση Τύποι δεδοµένων char, int, float, double Τελεστές Ανάθεσης, αριθµητικοί τελεστές Αριθµητικές εκφράσεις Σύνταξη, κανόνες προτεραιότητας και εταιρικότητας τελεστών, κανόνας παρενθέσεων, τύπος εκφράσεων (προσοχή στην περικοπή), casting Επιλογή τύπου δεδοµένων ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-38 19