Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος



Σχετικά έγγραφα
Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Ανάπτυξη και Σχεδίαση Λογισμικού

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Εισαγωγή στον Προγραμματισμό

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

Δομημένος Προγραμματισμός (ΤΛ1006)

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Δομημένος Προγραμματισμός (ΤΛ1006)

5 &6. Τύποι δεδομένων, τελεστές και

Διάλεξη 9η: Πίνακες (arrays)

Προγραμματισμός Ι (ΗΥ120)

Τύποι Δεδομένων Είσοδος/Έξοδος

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Κεφάλαιο 2.5: Τύποι εδοµένων, Τελεστές και Αριθµητικές Εκφράσεις. ( ιαλέξεις 5-6) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο)

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 )

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7)

Δεδομένα, Τύποι και Τιμές

Δεδομένα, τελεστές, είσοδος/έξοδος

Οικονόμου Βαγγέλησ Διάλεξη Νο 2. Δομημένοσ Προγραμματιςμόσ - Διάλεξη 2

Δομημένος Προγραμματισμός (ΤΛ1006)

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 2 Εντολές Εισόδου/Εξόδου Τελεστές. Δρ. Γιώργος Λαμπρινίδης 23/10/2015 Η - Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 1

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7) Είσοδος/ Έξοδος

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Κεφάλαιο 2.5: Τύποι Δεδομένων, Τελεστές και Αριθμητικές Εκφράσεις. (Διαλέξεις 5-6)

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Περιεχόμενα. Κεφάλαιο 2.5: Τύποι Δεδομένων, Τελεστές και Αριθμητικές Εκφράσεις. (Διαλέξεις 5-6) Τύποι Δεδομένων. Τελεστές. Αριθμητικές εκφράσεις

ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Στοιχειώδης προγραμματισμός σε C++

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Διάλεξη 11η: Δείκτες, μέρος 1

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Προγραµµατισµός. Τύποι Μεταβλητών Τελεστές Βασική Είσοδος/Έξοδος

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

Ανάπτυξη και Σχεδίαση Λογισμικού

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

8. Συνθήκες ελέγχου, λογικοί τελεστές

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Προγραμματισμός Ι (ΗΥ120)

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΚΑΙ ΠΙΝΑΚΕΣ

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

ΗΥ-150. Προγραμματισμός

Η γλώσσα προγραμματισμού C

Εισαγωγή στον Προγραμματισμό

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Γλώσσα Προγραμματισμού C

Εισαγωγή στην γλώσσα προγραμματισμού C

Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 131 Αρχές Προγραµµατισµού I 3-2

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Εισαγωγή στον Προγραμματισμό

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

Δομημένος Προγραμματισμός

Διαδικασία Ανάπτυξης Λογισμικού

Διάλεξη 15η: Αναδρομή, μέρος 1ο

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Διάλεξη 5η: Εντολές Επανάληψης

ΗΥ-150. Προγραμματισμός

Προγραμματισμός Ι (HY120)

Ενδεικτικές λύσεις και στατιστικά

Προγραμματισμός Ι. Θεματική ενότητα 3: Tελεστές. εκφράσεις

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμό για ΗΜΥ

Προγραμματισμός Ι (ΗΥ120)

printf Οι κωδικοί (format codes) του printf για διάφορους τύπους δεδοµένων είναι:

TMHMA TEXNΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛ/ΝΙΩΝ Προγραμματισμός Ι ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ , Α ΕΞΑΜΗΝΟ Βασίλης Μποζαντζής. Βασίλης Μποζαντζής

Προγραμματισμός Υπολογιστών με C++

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

Προγραμματισμός Ι (ΗΥ120)

Ανάπτυξη και Σχεδίαση Λογισμικού

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Εισαγωγή στη γλώσσα προγραμματισμού C++

ΣΥΝΟΠΤΙΚΟΣ ΟΔΗΓΟΣ ΓΛΩΣΣΑΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C

Προγραμματισμός Ι. Εγγραφές. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Η γλώσσα προγραμματισμού C

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 )

Ασκήσεις σε Επαναληπτικούς Βρόχους και Συναρτήσεις. Επανάληψη για την ενδιάμεση εξέταση. (Διάλεξη 13)

Προγραμματισμός Ι (ΗΥ120)

Εισαγωγή στον δομημένο προγραμματισμό

Η βασική συνάρτηση προγράμματος main()

Προγραμματισμός Ι (ΗΥ120)

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

3. Εκφράσεις και έλεγχος ροής

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++

Προγραμματισμός Ι (ΗΥ120)

Διάλεξη 22η: Επιπλέον στοιχεία της C

Transcript:

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 1 / 20

Μεταβλητές Οι μεταβλητές είναι επώνυμες θέσεις μνήμης Στη C όλες οι μεταβλητές πρέπει να δηλώνονται Δηλώσεις: Της μορφής: τύπος όνομα; Πχ: int my_first_variable; Ονόματα μεταβλητών Καλύτερα να είναι μεγάλα και επεξηγηματικά παρά μικρά Πχ: sum, percentage_downloaded, και όχι x42, giorgos1983 Μέχρι 31 χαρακτήρες, ξεκινούν από γράμμα ή _, μπορούν να περιέχουν αριθμούς Είναι case-sensitive, πχ: vrbl1 Vrbl1 Δεν πρέπει να είναι δεσμευμένες λέξεις Πχ: if, else, while, for, break, continue, int, float, double, char, Καλό είναι να αρχικοποιούνται: int my_first_variable = 42 Δήλωση πολλών μεταβλητών int x, y = 0, z = 42; Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 2 / 20

Εμβέλεια Οι μεταβλητές μπορεί να είναι: Τοπικές (local) Έχει πρόσβαση σ αυτές μόνο η συνάρτηση που τις δηλώνει Δημιουργούνται στην αρχή της συνάρτησης Στο τέλος της συνάρτησης χάνονται Καθολικές (global) Έχουν πρόσβαση σ αυτές όλες οι συναρτήσεις που δηλώνονται στο ίδιο αρχείο Δημιουργούνται στην αρχή της εκτέλεσης Διατηρούνται καθ όλη την εκτέλεση του προγράμματος Προσοχή στη χρήση τους Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 3 / 20

Παράδειγμα: Καθολικές και τοπικές μεταβλητές variablesc int total_calls = 0; int next_of(int x) x = x + 1; total_calls = total_calls + 1; return x; int main() int x = 0; x = next_of(0); x = next_of(x); return 0; Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 4 / 20

Παράδειγμα: Καθολικές και τοπικές μεταβλητές variablesc int total_calls = 0; int next_of(int x) x = x + 1; total_calls = total_calls + 1; return x; int main() int x = 0; x = next_of(0); x = next_of(x); return 0; Δήλωση καθολικής μεταβλητής Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 4 / 20

Παράδειγμα: Καθολικές και τοπικές μεταβλητές variablesc int total_calls = 0; int next_of(int x) x = x + 1; total_calls = total_calls + 1; return x; int main() int x = 0; x = next_of(0); x = next_of(x); return 0; Συνάρτηση που επιστρέφει τον επόμενο ακέραιο Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 4 / 20

Παράδειγμα: Καθολικές και τοπικές μεταβλητές variablesc int total_calls = 0; int next_of(int x) x = x + 1; total_calls = total_calls + 1; return x; int main() int x = 0; x = next_of(0); x = next_of(x); return 0; Παράμετρος της next_of, λειτουργεί σαν τοπική μεταβλητή Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 4 / 20

Παράδειγμα: Καθολικές και τοπικές μεταβλητές variablesc int total_calls = 0; int next_of(int x) x = x + 1; total_calls = total_calls + 1; return x; int main() int x = 0; x = next_of(0); x = next_of(x); return 0; Αυξάνει τη μεταβλητή x κατά 1 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 4 / 20

Παράδειγμα: Καθολικές και τοπικές μεταβλητές variablesc int total_calls = 0; int next_of(int x) x = x + 1; total_calls = total_calls + 1; return x; Αυξάνει τη μεταβλητή total_calls κατά 1 int main() int x = 0; x = next_of(0); x = next_of(x); return 0; Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 4 / 20

Παράδειγμα: Καθολικές και τοπικές μεταβλητές variablesc int total_calls = 0; int next_of(int x) x = x + 1; total_calls = total_calls + 1; return x; int main() int x = 0; x = next_of(0); x = next_of(x); return 0; Επιστρέφει την τιμή του x Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 4 / 20

Παράδειγμα: Καθολικές και τοπικές μεταβλητές variablesc int total_calls = 0; int next_of(int x) x = x + 1; total_calls = total_calls + 1; return x; int main() int x = 0; x = next_of(0); x = next_of(x); return 0; Συνάρτηση main: αρχή της εκτέλεσης Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 4 / 20

Παράδειγμα: Καθολικές και τοπικές μεταβλητές variablesc int total_calls = 0; int next_of(int x) x = x + 1; total_calls = total_calls + 1; return x; int main() int x = 0; x = next_of(0); x = next_of(x); return 0; Τοπική μεταβλητή της main, δήλωση και αρχικοποίηση Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 4 / 20

Παράδειγμα: Καθολικές και τοπικές μεταβλητές variablesc int total_calls = 0; int next_of(int x) x = x + 1; total_calls = total_calls + 1; return x; int main() int x = 0; x = next_of(0); x = next_of(x); return 0; Πρώτη κλήση της next_of με παράμετρο 0 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 4 / 20

Παράδειγμα: Καθολικές και τοπικές μεταβλητές variablesc int total_calls = 0; int next_of(int x) x = x + 1; total_calls = total_calls + 1; return x; int main() int x = 0; x = next_of(0); x = next_of(x); return 0; Δεύτερη κλήση της next_of με παράμετρο το x της main Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 4 / 20

Παράδειγμα: Καθολικές και τοπικές μεταβλητές variablesc total_calls = 0 int total_calls = 0; int next_of(int x) x = x + 1; total_calls = total_calls + 1; return x; int main() int x = 0; x = next_of(0); x = next_of(x); return 0; Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 4 / 20

Παράδειγμα: Καθολικές και τοπικές μεταβλητές variablesc int total_calls = 0; int next_of(int x) x = x + 1; total_calls = total_calls + 1; return x; int main() int x = 0; x = next_of(0); x = next_of(x); return 0; total_calls = 0 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 4 / 20

Παράδειγμα: Καθολικές και τοπικές μεταβλητές variablesc int total_calls = 0; int next_of(int x) x = x + 1; total_calls = total_calls + 1; return x; int main() int x = 0; x = next_of(0); x = next_of(x); return 0; total_calls = 0, x = 0 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 4 / 20

Παράδειγμα: Καθολικές και τοπικές μεταβλητές variablesc int total_calls = 0; int next_of(int x) x = x + 1; total_calls = total_calls + 1; return x; int main() int x = 0; x = next_of(0); x = next_of(x); return 0; total_calls = 0, x (main) = 0, x (next_of) = 0 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 4 / 20

Παράδειγμα: Καθολικές και τοπικές μεταβλητές variablesc int total_calls = 0; int next_of(int x) x = x + 1; total_calls = total_calls + 1; return x; int main() int x = 0; x = next_of(0); x = next_of(x); return 0; total_calls = 0, x (main) = 0, x (next_of) = 0 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 4 / 20

Παράδειγμα: Καθολικές και τοπικές μεταβλητές variablesc int total_calls = 0; int next_of(int x) x = x + 1; total_calls = total_calls + 1; return x; int main() int x = 0; x = next_of(0); x = next_of(x); return 0; total_calls = 0, x (main) = 0, x (next_of) = 1 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 4 / 20

Παράδειγμα: Καθολικές και τοπικές μεταβλητές variablesc int total_calls = 0; int next_of(int x) x = x + 1; total_calls = total_calls + 1; return x; total_calls = 1, x (main) = 0, x (next_of) = 1 int main() int x = 0; x = next_of(0); x = next_of(x); return 0; Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 4 / 20

Παράδειγμα: Καθολικές και τοπικές μεταβλητές variablesc int total_calls = 0; int next_of(int x) x = x + 1; total_calls = total_calls + 1; return x; int main() int x = 0; x = next_of(0); x = next_of(x); return 0; total_calls = 1, x (main) = 0, x (next_of) = 1 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 4 / 20

Παράδειγμα: Καθολικές και τοπικές μεταβλητές variablesc int total_calls = 0; int next_of(int x) x = x + 1; total_calls = total_calls + 1; return x; int main() int x = 0; x = next_of(0); x = next_of(x); return 0; total_calls = 1, x (main) = 1 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 4 / 20

Παράδειγμα: Καθολικές και τοπικές μεταβλητές variablesc int total_calls = 0; int next_of(int x) x = x + 1; total_calls = total_calls + 1; return x; int main() int x = 0; x = next_of(0); x = next_of(x); return 0; total_calls = 1, x (main) = 1, x (next_of) = 1 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 4 / 20

Παράδειγμα: Καθολικές και τοπικές μεταβλητές variablesc int total_calls = 0; int next_of(int x) x = x + 1; total_calls = total_calls + 1; return x; int main() int x = 0; x = next_of(0); x = next_of(x); return 0; total_calls = 1, x (main) = 1, x (next_of) = 1 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 4 / 20

Παράδειγμα: Καθολικές και τοπικές μεταβλητές variablesc int total_calls = 0; int next_of(int x) x = x + 1; total_calls = total_calls + 1; return x; int main() int x = 0; x = next_of(0); x = next_of(x); return 0; total_calls = 1, x (main) = 1, x (next_of) = 2 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 4 / 20

Παράδειγμα: Καθολικές και τοπικές μεταβλητές variablesc int total_calls = 0; int next_of(int x) x = x + 1; total_calls = total_calls + 1; return x; total_calls = 2, x (main) = 1, x (next_of) = 2 int main() int x = 0; x = next_of(0); x = next_of(x); return 0; Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 4 / 20

Παράδειγμα: Καθολικές και τοπικές μεταβλητές variablesc int total_calls = 0; int next_of(int x) x = x + 1; total_calls = total_calls + 1; return x; int main() int x = 0; x = next_of(0); x = next_of(x); return 0; total_calls = 2, x (main) = 1, x (next_of) = 2 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 4 / 20

Παράδειγμα: Καθολικές και τοπικές μεταβλητές variablesc int total_calls = 0; int next_of(int x) x = x + 1; total_calls = total_calls + 1; return x; int main() int x = 0; x = next_of(0); x = next_of(x); return 0; total_calls = 2, x (main) = 2 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 4 / 20

Στατικές (static) μεταβλητές Ανάλογα με το είδος της εμβέλειας Στατικές τοπικές μεταβλητές: Δημιουργούνται και αρχικοποιούνται στην αρχή της εκτέλεσης Έχουν τοπική εμβέλεια: μόνο στη συνάρτηση που τις δηλώνει Όπως οι τοπικές, αλλά δεν χάνονται στο τέλος της συνάρτησης Η συνάρτηση θυμάται την τιμή της μεταβλητής μεταξύ διαφορετικών κλήσεων Στατικές καθολικές μεταβλητές: Δημιουργούνται και αρχικοποιούνται στην αρχή της εκτέλεσης Έχουν καθολική εμβέλεια: ορατές από όλες τις συναρτήσεις στο αρχείο Δεν είναι ορατές από συναρτήσεις που δηλώνονται σε άλλα αρχεία Όταν ένα μικρό σύνολο από συναρτήσεις χρησιμοποιούν την ίδια καθολική μεταβλητή, την κάνουμε στατική καθολική και μπαίνουν αυτές οι συναρτήσεις στο ίδιο αρχείο Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 5 / 20

Παράδειγμα staticvarc void f() static int static_var = 500; printf( %d\n, static_var); static_var++; int main() f (); f (); f (); Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 6 / 20

Παράδειγμα staticvarc void f() static int static_var = 500; printf( %d\n, static_var); static_var++; int main() f (); f (); f (); Η συνάρτηση δεν έχει ορίσματα και δεν επιστρέφει αποτέλεσμα Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 6 / 20

Παράδειγμα staticvarc void f() static int static_var = 500; printf( %d\n, static_var); static_var++; Δήλωση της στατικής τοπικής μεταβλητής, στην αρχή του προγράμματος έχει την τιμή 500 int main() f (); f (); f (); Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 6 / 20

Παράδειγμα staticvarc void f() static int static_var = 500; printf( %d\n, static_var); static_var++; Τυπώνει την τιμή της static_var int main() f (); f (); f (); Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 6 / 20

Παράδειγμα staticvarc void f() static int static_var = 500; printf( %d\n, static_var); static_var++; int main() f (); f (); f (); Αυξάνει την static_var κατά 1 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 6 / 20

Παράδειγμα staticvarc void f() static int static_var = 500; printf( %d\n, static_var); static_var++; int main() f (); f (); f (); Θα τυπώσει 500 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 6 / 20

Παράδειγμα staticvarc void f() static int static_var = 500; printf( %d\n, static_var); static_var++; int main() f (); f (); f (); Θα τυπώσει 501 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 6 / 20

Παράδειγμα staticvarc void f() static int static_var = 500; printf( %d\n, static_var); static_var++; int main() f (); f (); f (); Θα τυπώσει 502 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 6 / 20

Τύποι μεταβλητών Όλες οι μεταβλητές έχουν ένα τύπο δεδομένων Βασικοί τύποι: char: Ακέραιος αριθμός μεγέθους 1 χαρακτήρα, συνήθως 1 byte (8 bits) int: Ακέραιος αριθμός μεγέθους 1 λέξης (ορίζεται ανάλογα με τη μηχανή) float: Αριθμός κινητής υποδιαστολής, απλής ακρίβειας, μεγέθους 32 bits double: Αριθμός κινητής υποδιαστολής, διπλής ακρίβειας, μεγέθους 64 bits Επιπλέον προσδιορισμοί σε κάποιους τύπους signed, unsigned: Προσδιορίζει αν ένας τύπος ακεραίων (char, int) αναπαριστά προσημασμένους αριθμούς ή όχι short, long, long long: Προσδιορισμός μεγέθους ακεραίων (int), ορίζει το εύρος τιμών και το χώρο στη μνήμη Σε κάθε σημείο που χρησιμοποιείται μια μεταβλητή έχει τον τύπο με τον οποίο δηλώθηκε Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 7 / 20

Αναπαράσταση και εύρος τιμών Ο τύπος char, έχει μέγεθος 8 bits: αναπαριστά 2 8 διαφορετικές τιμές, συνήθως ASCII χαρακτήρες Ο τύπος int αναπαριστά ακέραιους αριθμούς, διαλέγουμε μέγεθος ανάλογα με το μέγιστο αριθμό που χρειαζόμαστε Οι τύποι float, double αναπαριστούν πραγματικούς αριθμούς Σε τυπικό 64-bit x86 επεξεργαστή: Τύπος Εύρος bytes char 0 έως +255 ή -127 έως +127 1 signed char -127 έως +127 1 unsigned char 0 έως +255 1 signed short int (2 15 1) έως 2 15 1 2 unsigned short int 0 έως +2 16 1 2 signed int (2 31 1) έως +2 31 1 4 unsigned int 0 έως +2 32 1 4 signed long int (2 63 1) έως +2 63 1 8 unsigned long int 0 έως +2 64 1 8 signed long long int (2 63 1) έως +2 63 1 8 unsigned long long int 0 έως +2 64 1 8 float -32 10 38 έως +32 10 38 4 double -17 10 308 έως +17 10 308 8 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 8 / 20

Αναπαράσταση και εύρος τιμών Ο τύπος char, έχει μέγεθος 8 bits: αναπαριστά 2 8 διαφορετικές τιμές, συνήθως ASCII χαρακτήρες Ο τύπος int αναπαριστά ακέραιους αριθμούς, διαλέγουμε μέγεθος ανάλογα με το μέγιστο αριθμό που χρειαζόμαστε Οι τύποι float, double αναπαριστούν πραγματικούς αριθμούς Σε τυπικό 64-bit x86 επεξεργαστή: Τύπος Εύρος bytes char 0 έως +255 ή -127 έως +12732767 1 signed char -127 έως +127 1 unsigned char 0 έως +255 1 signed short int (2 15 1) έως 2 15 1 2 unsigned short int 0 έως +2 16 1 2 signed int (2 31 1) έως +2 31 1 4 unsigned int 0 έως +2 32 1 4 signed long int (2 63 1) έως +2 63 1 8 unsigned long int 0 έως +2 64 1 8 signed long long int (2 63 1) έως +2 63 1 8 unsigned long long int 0 έως +2 64 1 8 float -32 10 38 έως +32 10 38 4 double -17 10 308 έως +17 10 308 8 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 8 / 20

Αναπαράσταση και εύρος τιμών Ο τύπος char, έχει μέγεθος 8 bits: αναπαριστά 2 8 διαφορετικές τιμές, συνήθως ASCII χαρακτήρες Ο τύπος int αναπαριστά ακέραιους αριθμούς, διαλέγουμε μέγεθος ανάλογα με το μέγιστο αριθμό που χρειαζόμαστε Οι τύποι float, double αναπαριστούν πραγματικούς αριθμούς Σε τυπικό 64-bit x86 επεξεργαστή: Τύπος Εύρος bytes char 0 έως +255 ή -127 έως +127 1 signed char -127 έως +127 165535 unsigned char 0 έως +255 1 signed short int (2 15 1) έως 2 15 1 2 unsigned short int 0 έως +2 16 1 2 signed int (2 31 1) έως +2 31 1 4 unsigned int 0 έως +2 32 1 4 signed long int (2 63 1) έως +2 63 1 8 unsigned long int 0 έως +2 64 1 8 signed long long int (2 63 1) έως +2 63 1 8 unsigned long long int 0 έως +2 64 1 8 float -32 10 38 έως +32 10 38 4 double -17 10 308 έως +17 10 308 8 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 8 / 20

Αναπαράσταση και εύρος τιμών Ο τύπος char, έχει μέγεθος 8 bits: αναπαριστά 2 8 διαφορετικές τιμές, συνήθως ASCII χαρακτήρες Ο τύπος int αναπαριστά ακέραιους αριθμούς, διαλέγουμε μέγεθος ανάλογα με το μέγιστο αριθμό που χρειαζόμαστε Οι τύποι float, double αναπαριστούν πραγματικούς αριθμούς Σε τυπικό 64-bit x86 επεξεργαστή: Τύπος Εύρος bytes char 0 έως +255 ή -127 έως +127 1 signed char -127 έως +127 1 unsigned char 0 έως +255 2147483647 1 signed short int (2 15 1) έως 2 15 1 2 unsigned short int 0 έως +2 16 1 2 signed int (2 31 1) έως +2 31 1 4 unsigned int 0 έως +2 32 1 4 signed long int (2 63 1) έως +2 63 1 8 unsigned long int 0 έως +2 64 1 8 signed long long int (2 63 1) έως +2 63 1 8 unsigned long long int 0 έως +2 64 1 8 float -32 10 38 έως +32 10 38 4 double -17 10 308 έως +17 10 308 8 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 8 / 20

Αναπαράσταση και εύρος τιμών Ο τύπος char, έχει μέγεθος 8 bits: αναπαριστά 2 8 διαφορετικές τιμές, συνήθως ASCII χαρακτήρες Ο τύπος int αναπαριστά ακέραιους αριθμούς, διαλέγουμε μέγεθος ανάλογα με το μέγιστο αριθμό που χρειαζόμαστε Οι τύποι float, double αναπαριστούν πραγματικούς αριθμούς Σε τυπικό 64-bit x86 επεξεργαστή: Τύπος Εύρος bytes char 0 έως +255 ή -127 έως +127 1 signed char -127 έως +127 1 unsigned char 0 έως +255 1 signed short int (2 15 1) έως 2 15 1 4294967295 2 unsigned short int 0 έως +2 16 1 2 signed int (2 31 1) έως +2 31 1 4 unsigned int 0 έως +2 32 1 4 signed long int (2 63 1) έως +2 63 1 8 unsigned long int 0 έως +2 64 1 8 signed long long int (2 63 1) έως +2 63 1 8 unsigned long long int 0 έως +2 64 1 8 float -32 10 38 έως +32 10 38 4 double -17 10 308 έως +17 10 308 8 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 8 / 20

Αναπαράσταση και εύρος τιμών Ο τύπος char, έχει μέγεθος 8 bits: αναπαριστά 2 8 διαφορετικές τιμές, συνήθως ASCII χαρακτήρες Ο τύπος int αναπαριστά ακέραιους αριθμούς, διαλέγουμε μέγεθος ανάλογα με το μέγιστο αριθμό που χρειαζόμαστε Οι τύποι float, double αναπαριστούν πραγματικούς αριθμούς Σε τυπικό 64-bit x86 επεξεργαστή: Τύπος Εύρος bytes char 0 έως +255 ή -127 έως +127 1 signed char -127 έως +127 1 unsigned char 0 έως +255 1 signed short int (2 15 1) έως 2 15 1 2 unsigned short int 0 έως +2 16 1 9223372036854775807 2 signed int (2 31 1) έως +2 31 1 4 unsigned int 0 έως +2 32 1 4 signed long int (2 63 1) έως +2 63 1 8 unsigned long int 0 έως +2 64 1 8 signed long long int (2 63 1) έως +2 63 1 8 unsigned long long int 0 έως +2 64 1 8 float -32 10 38 έως +32 10 38 4 double -17 10 308 έως +17 10 308 8 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 8 / 20

Αναπαράσταση και εύρος τιμών Ο τύπος char, έχει μέγεθος 8 bits: αναπαριστά 2 8 διαφορετικές τιμές, συνήθως ASCII χαρακτήρες Ο τύπος int αναπαριστά ακέραιους αριθμούς, διαλέγουμε μέγεθος ανάλογα με το μέγιστο αριθμό που χρειαζόμαστε Οι τύποι float, double αναπαριστούν πραγματικούς αριθμούς Σε τυπικό 64-bit x86 επεξεργαστή: Τύπος Εύρος bytes char 0 έως +255 ή -127 έως +127 1 signed char -127 έως +127 1 unsigned char 0 έως +255 1 signed short int (2 15 1) έως 2 15 1 2 unsigned short int 0 έως +2 16 1 2 signed int (2 31 1) έως +2 31 18446744073709551615 1 4 unsigned int 0 έως +2 32 1 4 signed long int (2 63 1) έως +2 63 1 8 unsigned long int 0 έως +2 64 1 8 signed long long int (2 63 1) έως +2 63 1 8 unsigned long long int 0 έως +2 64 1 8 float -32 10 38 έως +32 10 38 4 double -17 10 308 έως +17 10 308 8 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 8 / 20

Τύποι σταθερών Ο τύπος μιας σταθεράς εξαρτάται από τον τρόπο που εκφράζεται Σταθερές χαρακτήρων x : σταθερά τύπου int (προσοχή: όχι char) με τιμή τον αντίστοιχο ακέραιο ASCII Ακέραιες σταθερές 42 : σταθερά τύπου int 42U : σταθερά τύπου unsigned int 42L : σταθερά τύπου long int Σταθερές κινητής υποδιαστολής 314159 : σταθερά τύπου double 314159f : σταθερά τύπου float Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 9 / 20

Τελεστές και προτεραιότητα 1 Παρένθεση ( ) 2 Άρνηση! 3 Πολλαπλασιασμός *, διαίρεση /, υπόλοιπο % 4 Πρόσθεση +, αφαίρεση - 5 Ανισότητες <, >, <=, >= 6 Ισότητα ==, μη ισότητα!=, 7 Λογικό και && 8 Λογικό ή Όταν δεν είστε σίγουροι, χρησιμοποιήστε παρενθέσεις Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 10 / 20

Εκφράσεις Έκφραση (expression) Στα ελληνικά: μια σειρά από λέξεις που έχει ένα νόημα Στη C: μια σειρά από λέξεις που περιγράφει έναν απλό υπολογισμό Το αποτέλεσμα του υπολογισμού είναι η τιμή της έκφρασης Οι μεταβλητές και οι σταθερές είναι βασικές εκφράσεις (λέξεις) x, 42, Hello, world! Οι τελεστές συνδυάζουν μικρότερες εκφράσεις σε μεγαλύτερες x + y, (x!= 2) && (y - 5 + z * 3 > x), a + 2 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 11 / 20

Τύπος έκφρασης Κάθε έκφραση υπολογίζει μια τιμή Κάθε έκφραση έχει ένα τύπο Η έκφραση 1 + 1 έχει τύπο int και τιμή 2 Η έκφραση 5/2 έχει τύπο int και τιμή 2 Η έκφραση 50/2 εχει τύπο double και τιμή 25 Η έκφραση 1 == 0 έχει τύπο int και τιμή 0 Οι τελεστές έχουν τον μεγαλύτερο από τους τύπους των τελεσταίων Οι λογικοί τελεστές επιστρέφουν 1 για αληθές ή 0 για ψευδές Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 12 / 20

Μετατροπές τύπων Τί γινεται αν αποθηκεύσουμε μια τιμή ενός τύπου σε μεταβλητή άλλου τύπου; Κάποιες μετατροπές γίνονται αυτόματα, πχ: int double Κάποιοι τύποι χωράνε ακριβώς σε άλλους, πχ: char int Πρόβλημα: η μετατροπή μπορεί να χάνει δεδομένα! int x = 150/20; char x = 256; Ο τύπος char μπορεί να είναι unsigned ή signed ανάλογα με το μεταφραστή Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 13 / 20

Ρητή μετατροπή τύπων Type casting: η ρητή μετατροπή δεδομένων από την αναπαράσταση ενός τύπου σε αναπαράσταση άλλου τύπου Πχ: αν το y είναι char x = (int) y Γενική μορφή έκφραση1 = (τύπος) έκφραση2 Η τιμή της έκφραση2 μετατρέπεται στην αναπαράσταση τύπος και αποθηκεύεται στην έκφραση1 Προσοχή: επιτρέπεται ακόμα και όταν δεν έχει νόημα! x = (unsigned int) -1 Συχνή αιτία λαθών σε προγράμματα C Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 14 / 20

Τελεστές αύξησης-μείωσης Τελεστής ++ Η μεταβλητή i αυξάνεται κατά 1 Τελεστής -- Η μεταβλητή i μειώνεται κατά 1 Μεταθεματικοί (postfix): ο τελεστής μετά τον τελεσταίο Η έκφραση i++ έχει την τιμή του i πριν την αύξηση Προθεματικοί (prefix): ο τελεστής πριν τον τελεσταίο Η έκφραση ++i έχει την τελευταία (αυξημένη) τιμή του i Αν δεν χρησιμοποιείται η τιμή της έκφρασης είναι ισοδύναμα Προτεραιότητα όπως η πρόσθεση Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 15 / 20

Τελεστές αντικατάστασης Αύξηση: x += y; Ισοδύναμο με x = x + y; Μείωση: x += y; Πολλαπλασιασμός: x *= y; Διαίρεση: x /= y; κλπ Γενικά: έκφραση1 τελεστής= έκφραση2 Υπολογίζονται πρώτα οι έκφραση1, έκφραση2 Μετά, εφαρμόζεται ο τελεστής στις τιμές τους Το αποτέλεσμα αποθηκεύεται στην θέση της έκφραση1 Πχ: το x *= y + 2; είναι ισοδύναμο με x = x * (y + 2); Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 16 / 20

Είσοδος - Έξοδος printf συνάρτηση εξόδου scanf συνάρτηση εισόδου Η πρώτη παράμετρος είναι η συμβολοσειρά μορφής (format string) και περιγράφει πόσες παράμετροι ακολουθούν, και πως θα εκτυπωθούν Ακολουθούν οι παράμετροι που περιγράφονται στη συμβολοσειρά μορφής, πρέπει να είναι του σωστού τύπου Παράμετροι %c Χαρακτήρας (char) %d Ακέραιος σε δεκαδικό (signed int) %X Ακέραιος σε δεκαεξαδικό (unsigned int) %f Κινητής υποδιαστολής (float) %lf Κινητής υποδιαστολής, διπλής ακρίβειας (double) Για περισσότερα: man 3 printf Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 17 / 20

Παραδείγματα io1c #include<stdioh> int main() int x; char c; scanf( %d, &x); c = a ; printf( x = %d\n, x); printf( c(char) = %c\n, c); printf( c(int) = %d\n, c); Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 18 / 20

Παραδείγματα io1c #include<stdioh> int main() Περιμένει έναν δεκαδικό int x; ακέραιο από την είσοδο char c; scanf( %d, &x); c = a ; printf( x = %d\n, x); printf( c(char) = %c\n, c); printf( c(int) = %d\n, c); Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 18 / 20

Παραδείγματα io1c #include<stdioh> int main() int x; char c; scanf( %d, &x); c = a ; printf( x = %d\n, x); printf( c(char) = %c\n, c); printf( c(int) = %d\n, c); Αποθηκεύει την τιμή που διάβασε στο x Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 18 / 20

Παραδείγματα io1c #include<stdioh> int main() int x; char c; scanf( %d, &x); c = a ; printf( x = %d\n, x); printf( c(char) = %c\n, c); printf( c(int) = %d\n, c); Η μεταβλητή c περιέχει την τιμή ASCII του συμβόλου a, 97 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 18 / 20

Παραδείγματα io1c #include<stdioh> int main() int x; char c; scanf( %d, &x); c = a ; printf( x = %d\n, x); printf( c(char) = %c\n, c); printf( c(int) = %d\n, c); Το επόμενο όρισμα της printf μετά το format string να εκτυπωθεί ως δεκαδικός ακέραιος Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 18 / 20

Παραδείγματα io1c #include<stdioh> int main() int x; char c; scanf( %d, &x); c = a ; printf( x = %d\n, x); printf( c(char) = %c\n, c); printf( c(int) = %d\n, c); Περιέχει τον αριθμό που διαβάστηκε από την είσοδο, αντιστοιχεί στο %d Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 18 / 20

Παραδείγματα io1c #include<stdioh> int main() int x; char c; scanf( %d, &x); c = a ; printf( x = %d\n, x); printf( c(char) = %c\n, c); printf( c(int) = %d\n, c); Το επόμενο όρισμα να εκτυπωθεί ως χαρακτήρας Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 18 / 20

Παραδείγματα io1c #include<stdioh> int main() int x; char c; scanf( %d, &x); c = a ; printf( x = %d\n, x); printf( c(char) = %c\n, c); printf( c(int) = %d\n, c); Περιέχει την τιμή 97, που αντιστοιχεί στο a Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 18 / 20

Παραδείγματα io1c #include<stdioh> int main() int x; char c; scanf( %d, &x); c = a ; printf( x = %d\n, x); printf( c(char) = %c\n, c); printf( c(int) = %d\n, c); Το επόμενο όρισμα να εκτυπωθεί ως δεκαδικός ακέραιος Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 18 / 20

Παραδείγματα io1c #include<stdioh> int main() int x; char c; scanf( %d, &x); c = a ; printf( x = %d\n, x); printf( c(char) = %c\n, c); printf( c(int) = %d\n, c); Περιέχει την τιμή 97, που αντιστοιχεί στο a Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 18 / 20

Παραδείγματα io1c #include<stdioh> int main() int x; char c; scanf( %d, &x); c = a ; printf( x = %d\n, x); printf( c(char) = %c\n, c); printf( c(int) = %d\n, c); Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 18 / 20

Παραδείγματα io1c #include<stdioh> int main() int x; char c; scanf( %d, &x); c = a ; printf( x = %d\n, x); printf( c(char) = %c\n, c); printf( c(int) = %d\n, c); io2c #include<stdioh> int main() float x; scanf( %f, &x); printf( x = %f\n, x); printf( x ~= %2f\n, x); Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 18 / 20

Παραδείγματα io1c #include<stdioh> int main() int x; char c; scanf( %d, &x); c = a ; printf( x = %d\n, x); printf( c(char) = %c\n, c); printf( c(int) = %d\n, c); io2c #include<stdioh> int main() float x; scanf( %f, &x); printf( x = %f\n, x); printf( x ~= %2f\n, x); Περιμένει έναν δεκαδικό αριθμό με υποδιαστολή από την είσοδο Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 18 / 20

Παραδείγματα io1c #include<stdioh> int main() int x; char c; scanf( %d, &x); c = a ; printf( x = %d\n, x); printf( c(char) = %c\n, c); printf( c(int) = %d\n, c); io2c #include<stdioh> int main() float x; scanf( %f, &x); printf( x = %f\n, x); printf( x ~= %2f\n, x); Αποθηκεύει την τιμή που διάβασε στο x ως αριθμό κινητής υποδιαστολής Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 18 / 20

Παραδείγματα io1c #include<stdioh> int main() int x; char c; scanf( %d, &x); c = a ; printf( x = %d\n, x); printf( c(char) = %c\n, c); printf( c(int) = %d\n, c); io2c #include<stdioh> int main() float x; scanf( %f, &x); printf( x = %f\n, x); printf( x ~= %2f\n, x); Το όρισμα της printf μετά το format string να εκτυπωθεί ως αριθμός κινητής υποδιαστολής Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 18 / 20

Παραδείγματα io1c #include<stdioh> int main() int x; char c; scanf( %d, &x); c = a ; printf( x = %d\n, x); printf( c(char) = %c\n, c); printf( c(int) = %d\n, c); io2c #include<stdioh> int main() float x; scanf( %f, &x); printf( x = %f\n, x); printf( x ~= %2f\n, x); Το επόμενο όρισμα να εκτυπωθεί με 2 ακριβώς ψηφία μετά την υποδιαστολή Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 18 / 20

Παραδείγματα io1c #include<stdioh> int main() int x; char c; scanf( %d, &x); c = a ; printf( x = %d\n, x); printf( c(char) = %c\n, c); printf( c(int) = %d\n, c); io2c #include<stdioh> int main() float x; scanf( %f, &x); printf( x = %f\n, x); printf( x ~= %2f\n, x); Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 18 / 20

Παραδείγματα io1c #include<stdioh> int main() int x; char c; scanf( %d, &x); c = a ; printf( x = %d\n, x); printf( c(char) = %c\n, c); printf( c(int) = %d\n, c); io2c #include<stdioh> int main() float x; scanf( %f, &x); printf( x = %f\n, x); printf( x ~= %2f\n, x); Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 18 / 20

Συχνά λάθη printf Λιγότερα ορίσματα από όσα περιγράφει το format string Διαφορετικά ορίσματα από αυτά που περιγράφει το format string scanf Όλα τα παραπάνω Ξεχασμένο & Λάθη σε μετατροπές τύπων Αυτόματες μετατροπές, αναθέσεις μεταξύ διαφορετικών τύπων, κλπ Λάθος τελεστές Πχ, ανάθεση αντί ισότητας if (x = 5) αντί if (x == 5) Ξεχασμένο semicolon ; Ή semicolon σε θέση όπου δεν χρειάζεται Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 19 / 20

Τί θα τυπώσει; example1c #include <stdioh> int main() int a = 1, b = 1, x = 0, y = 0; double w; x = 1 + a++; printf( x = %d\n, x); printf( a = %d\n, a); y = ++b; printf( y = %d\n, y); printf( b = %d\n, b); Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 20 / 20

Τί θα τυπώσει; example1c #include <stdioh> int main() int a = 1, b = 1, x = 0, y = 0; double w; x = 1 + a++; printf( x = %d\n, x); printf( a = %d\n, a); y = ++b; printf( y = %d\n, y); printf( b = %d\n, b); Output x = 2 a = 2 y = 2 b = 2 Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2015-2016 20 / 20