Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές,...

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

Upload: others

Post on 10-Sep-2019

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

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

Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης

Εισαγωγή στην Επιστήμη Υπολογιστών

Βασίζεται σε διαφάνειες του Κ. Παναγιωτάκη

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 1 /20

Page 2: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

ΜεταβλητέςΟι μεταβλητές είναι “επώνυμες” θέσεις μνήμηςΣτη 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, 2019-2020 2 /20

Page 3: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Εμβέλεια

Οι μεταβλητές μπορεί να είναι:▶ Τοπικές (local)

⋆ Έχει πρόσβαση σ’αυτές μόνο η συνάρτηση που τις δηλώνει⋆ Δημιουργούνται στην αρχή της συνάρτησης⋆ Στο τέλος της συνάρτησης “χάνονται”

▶ Καθολικές (global)⋆ Έχουν πρόσβαση σ’αυτές όλες οι συναρτήσεις πουδηλώνονται στο ίδιο αρχείο

⋆ Δημιουργούνται στην αρχή της εκτέλεσης⋆ Διατηρούνται καθ’ όλη την εκτέλεση του προγράμματος⋆ Προσοχή στη χρήση τους

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 3 /20

Page 4: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Καθολικές και τοπικέςμεταβλητέςvariables.c

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, 2019-2020 4 /20

Page 5: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Καθολικές και τοπικέςμεταβλητέςvariables.c

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, 2019-2020 4 /20

Page 6: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Καθολικές και τοπικέςμεταβλητέςvariables.c

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, 2019-2020 4 /20

Page 7: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Καθολικές και τοπικέςμεταβλητέςvariables.c

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, 2019-2020 4 /20

Page 8: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Καθολικές και τοπικέςμεταβλητέςvariables.c

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, 2019-2020 4 /20

Page 9: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Καθολικές και τοπικέςμεταβλητέςvariables.c

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

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 4 /20

Page 10: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Καθολικές και τοπικέςμεταβλητέςvariables.c

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, 2019-2020 4 /20

Page 11: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Καθολικές και τοπικέςμεταβλητέςvariables.c

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, 2019-2020 4 /20

Page 12: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Καθολικές και τοπικέςμεταβλητέςvariables.c

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, 2019-2020 4 /20

Page 13: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Καθολικές και τοπικέςμεταβλητέςvariables.c

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, 2019-2020 4 /20

Page 14: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Καθολικές και τοπικέςμεταβλητέςvariables.c

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, 2019-2020 4 /20

Page 15: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Καθολικές και τοπικέςμεταβλητέςvariables.c

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, 2019-2020 4 /20

Page 16: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Καθολικές και τοπικέςμεταβλητέςvariables.c

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, 2019-2020 4 /20

Page 17: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Καθολικές και τοπικέςμεταβλητέςvariables.c

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, 2019-2020 4 /20

Page 18: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Καθολικές και τοπικέςμεταβλητέςvariables.c

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, 2019-2020 4 /20

Page 19: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Καθολικές και τοπικέςμεταβλητέςvariables.c

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, 2019-2020 4 /20

Page 20: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Καθολικές και τοπικέςμεταβλητέςvariables.c

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, 2019-2020 4 /20

Page 21: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Καθολικές και τοπικέςμεταβλητέςvariables.c

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, 2019-2020 4 /20

Page 22: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Καθολικές και τοπικέςμεταβλητέςvariables.c

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, 2019-2020 4 /20

Page 23: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Καθολικές και τοπικέςμεταβλητέςvariables.c

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, 2019-2020 4 /20

Page 24: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Καθολικές και τοπικέςμεταβλητέςvariables.c

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, 2019-2020 4 /20

Page 25: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Καθολικές και τοπικέςμεταβλητέςvariables.c

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, 2019-2020 4 /20

Page 26: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Καθολικές και τοπικέςμεταβλητέςvariables.c

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, 2019-2020 4 /20

Page 27: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Καθολικές και τοπικέςμεταβλητέςvariables.c

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, 2019-2020 4 /20

Page 28: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Καθολικές και τοπικέςμεταβλητέςvariables.c

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, 2019-2020 4 /20

Page 29: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα: Καθολικές και τοπικέςμεταβλητέςvariables.c

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, 2019-2020 4 /20

Page 30: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Στατικές (static) μεταβλητέςΑνάλογα με το είδος της εμβέλειας

▶ Στατικές τοπικές μεταβλητές:⋆ Δημιουργούνται και αρχικοποιούνται στην αρχή τηςεκτέλεσης

⋆ Έχουν τοπική εμβέλεια: μόνο στη συνάρτηση που τιςδηλώνει

⋆ Όπως οι τοπικές, αλλά δεν χάνονται στο τέλος τηςσυνάρτησης

⋆ Η συνάρτηση “θυμάται” την τιμή της μεταβλητής μεταξύδιαφορετικών κλήσεων

▶ Στατικές καθολικές μεταβλητές:⋆ Δημιουργούνται και αρχικοποιούνται στην αρχή τηςεκτέλεσης

⋆ Έχουν καθολική εμβέλεια: ορατές από όλες τις συναρτήσειςστο αρχείο

⋆ Δεν είναι ορατές από συναρτήσεις που δηλώνονται σε άλλααρχεία

⋆ Όταν ένα μικρό σύνολο από συναρτήσεις χρησιμοποιούν τηνίδια καθολική μεταβλητή, την κάνουμε στατική καθολικήκαι μπαίνουν αυτές οι συναρτήσεις στο ίδιο αρχείο

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 5 /20

Page 31: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα

staticvar.c

void f(){static int static_var = 500;printf(”%d\n”, static_var);static_var++;

}

int main(){f ();f ();f ();

}

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 6 /20

Page 32: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα

staticvar.c

void f(){static int static_var = 500;printf(”%d\n”, static_var);static_var++;

}

int main(){f ();f ();f ();

}

Η συνάρτηση δεν έχειορίσματα και δεν επιστρέφει

αποτέλεσμα

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 6 /20

Page 33: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα

staticvar.c

void f(){static int static_var = 500;printf(”%d\n”, static_var);static_var++;

}

int main(){f ();f ();f ();

}

Δήλωση της στατικήςτοπικής μεταβλητής, στηναρχή του προγράμματος έχει

την τιμή 500

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 6 /20

Page 34: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα

staticvar.c

void f(){static int static_var = 500;printf(”%d\n”, static_var);static_var++;

}

int main(){f ();f ();f ();

}

Τυπώνει την τιμή τηςstatic_var

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 6 /20

Page 35: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα

staticvar.c

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, 2019-2020 6 /20

Page 36: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα

staticvar.c

void f(){static int static_var = 500;printf(”%d\n”, static_var);static_var++;

}

int main(){f ();f ();f ();

}

Θα τυπώσει “500”

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 6 /20

Page 37: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα

staticvar.c

void f(){static int static_var = 500;printf(”%d\n”, static_var);static_var++;

}

int main(){f ();f ();f ();

}

Θα τυπώσει “501”

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 6 /20

Page 38: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παράδειγμα

staticvar.c

void f(){static int static_var = 500;printf(”%d\n”, static_var);static_var++;

}

int main(){f ();f ();f ();

}

Θα τυπώσει “502”

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 6 /20

Page 39: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Τύποι μεταβλητώνΌλες οι μεταβλητές έχουν ένα τύπο δεδομένωνΒασικοί τύποι:

▶ 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, 2019-2020 7 /20

Page 40: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Αναπαράσταση και εύρος τιμώνΟ τύπος char, έχει μέγεθος 8 bits: αναπαριστά 28

διαφορετικές τιμές, συνήθως ASCII χαρακτήρεςΟ τύπος int αναπαριστά ακέραιους αριθμούς, διαλέγουμεμέγεθος ανάλογα με το μέγιστο αριθμό που χρειαζόμαστεΟι τύποι float, double αναπαριστούν πραγματικούςαριθμούςΣε τυπικό 64-bit x86 επεξεργαστή:

Τύπος Εύρος byteschar 0 έως +255 ή -127 έως +127 1signed char -127 έως +127 1unsigned char 0 έως +255 1signed short int −(215 − 1) έως 215 − 1 2unsigned short int 0 έως +216 − 1 2signed int −(231 − 1) έως +231 − 1 4unsigned int 0 έως +232 − 1 4signed long int −(263 − 1) έως +263 − 1 8unsigned long int 0 έως +264 − 1 8signed long long int −(263 − 1) έως +263 − 1 8unsigned long long int 0 έως +264 − 1 8float -3.2×1038 έως +3.2×1038 4double -1.7×10308 έως +1.7×10308 8

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 8 /20

Page 41: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Αναπαράσταση και εύρος τιμώνΟ τύπος char, έχει μέγεθος 8 bits: αναπαριστά 28

διαφορετικές τιμές, συνήθως ASCII χαρακτήρεςΟ τύπος int αναπαριστά ακέραιους αριθμούς, διαλέγουμεμέγεθος ανάλογα με το μέγιστο αριθμό που χρειαζόμαστεΟι τύποι float, double αναπαριστούν πραγματικούςαριθμούςΣε τυπικό 64-bit x86 επεξεργαστή:

Τύπος Εύρος byteschar 0 έως +255 ή -127 έως +127 1signed char -127 έως +127 1unsigned char 0 έως +255 1signed short int −(215 − 1) έως 215 − 1 2unsigned short int 0 έως +216 − 1 2signed int −(231 − 1) έως +231 − 1 4unsigned int 0 έως +232 − 1 4signed long int −(263 − 1) έως +263 − 1 8unsigned long int 0 έως +264 − 1 8signed long long int −(263 − 1) έως +263 − 1 8unsigned long long int 0 έως +264 − 1 8float -3.2×1038 έως +3.2×1038 4double -1.7×10308 έως +1.7×10308 8

32767

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 8 /20

Page 42: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Αναπαράσταση και εύρος τιμώνΟ τύπος char, έχει μέγεθος 8 bits: αναπαριστά 28

διαφορετικές τιμές, συνήθως ASCII χαρακτήρεςΟ τύπος int αναπαριστά ακέραιους αριθμούς, διαλέγουμεμέγεθος ανάλογα με το μέγιστο αριθμό που χρειαζόμαστεΟι τύποι float, double αναπαριστούν πραγματικούςαριθμούςΣε τυπικό 64-bit x86 επεξεργαστή:

Τύπος Εύρος byteschar 0 έως +255 ή -127 έως +127 1signed char -127 έως +127 1unsigned char 0 έως +255 1signed short int −(215 − 1) έως 215 − 1 2unsigned short int 0 έως +216 − 1 2signed int −(231 − 1) έως +231 − 1 4unsigned int 0 έως +232 − 1 4signed long int −(263 − 1) έως +263 − 1 8unsigned long int 0 έως +264 − 1 8signed long long int −(263 − 1) έως +263 − 1 8unsigned long long int 0 έως +264 − 1 8float -3.2×1038 έως +3.2×1038 4double -1.7×10308 έως +1.7×10308 8

65535

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 8 /20

Page 43: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Αναπαράσταση και εύρος τιμώνΟ τύπος char, έχει μέγεθος 8 bits: αναπαριστά 28

διαφορετικές τιμές, συνήθως ASCII χαρακτήρεςΟ τύπος int αναπαριστά ακέραιους αριθμούς, διαλέγουμεμέγεθος ανάλογα με το μέγιστο αριθμό που χρειαζόμαστεΟι τύποι float, double αναπαριστούν πραγματικούςαριθμούςΣε τυπικό 64-bit x86 επεξεργαστή:

Τύπος Εύρος byteschar 0 έως +255 ή -127 έως +127 1signed char -127 έως +127 1unsigned char 0 έως +255 1signed short int −(215 − 1) έως 215 − 1 2unsigned short int 0 έως +216 − 1 2signed int −(231 − 1) έως +231 − 1 4unsigned int 0 έως +232 − 1 4signed long int −(263 − 1) έως +263 − 1 8unsigned long int 0 έως +264 − 1 8signed long long int −(263 − 1) έως +263 − 1 8unsigned long long int 0 έως +264 − 1 8float -3.2×1038 έως +3.2×1038 4double -1.7×10308 έως +1.7×10308 8

2147483647

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 8 /20

Page 44: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Αναπαράσταση και εύρος τιμώνΟ τύπος char, έχει μέγεθος 8 bits: αναπαριστά 28

διαφορετικές τιμές, συνήθως ASCII χαρακτήρεςΟ τύπος int αναπαριστά ακέραιους αριθμούς, διαλέγουμεμέγεθος ανάλογα με το μέγιστο αριθμό που χρειαζόμαστεΟι τύποι float, double αναπαριστούν πραγματικούςαριθμούςΣε τυπικό 64-bit x86 επεξεργαστή:

Τύπος Εύρος byteschar 0 έως +255 ή -127 έως +127 1signed char -127 έως +127 1unsigned char 0 έως +255 1signed short int −(215 − 1) έως 215 − 1 2unsigned short int 0 έως +216 − 1 2signed int −(231 − 1) έως +231 − 1 4unsigned int 0 έως +232 − 1 4signed long int −(263 − 1) έως +263 − 1 8unsigned long int 0 έως +264 − 1 8signed long long int −(263 − 1) έως +263 − 1 8unsigned long long int 0 έως +264 − 1 8float -3.2×1038 έως +3.2×1038 4double -1.7×10308 έως +1.7×10308 8

4294967295

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 8 /20

Page 45: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Αναπαράσταση και εύρος τιμώνΟ τύπος char, έχει μέγεθος 8 bits: αναπαριστά 28

διαφορετικές τιμές, συνήθως ASCII χαρακτήρεςΟ τύπος int αναπαριστά ακέραιους αριθμούς, διαλέγουμεμέγεθος ανάλογα με το μέγιστο αριθμό που χρειαζόμαστεΟι τύποι float, double αναπαριστούν πραγματικούςαριθμούςΣε τυπικό 64-bit x86 επεξεργαστή:

Τύπος Εύρος byteschar 0 έως +255 ή -127 έως +127 1signed char -127 έως +127 1unsigned char 0 έως +255 1signed short int −(215 − 1) έως 215 − 1 2unsigned short int 0 έως +216 − 1 2signed int −(231 − 1) έως +231 − 1 4unsigned int 0 έως +232 − 1 4signed long int −(263 − 1) έως +263 − 1 8unsigned long int 0 έως +264 − 1 8signed long long int −(263 − 1) έως +263 − 1 8unsigned long long int 0 έως +264 − 1 8float -3.2×1038 έως +3.2×1038 4double -1.7×10308 έως +1.7×10308 8

9223372036854775807

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 8 /20

Page 46: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Αναπαράσταση και εύρος τιμώνΟ τύπος char, έχει μέγεθος 8 bits: αναπαριστά 28

διαφορετικές τιμές, συνήθως ASCII χαρακτήρεςΟ τύπος int αναπαριστά ακέραιους αριθμούς, διαλέγουμεμέγεθος ανάλογα με το μέγιστο αριθμό που χρειαζόμαστεΟι τύποι float, double αναπαριστούν πραγματικούςαριθμούςΣε τυπικό 64-bit x86 επεξεργαστή:

Τύπος Εύρος byteschar 0 έως +255 ή -127 έως +127 1signed char -127 έως +127 1unsigned char 0 έως +255 1signed short int −(215 − 1) έως 215 − 1 2unsigned short int 0 έως +216 − 1 2signed int −(231 − 1) έως +231 − 1 4unsigned int 0 έως +232 − 1 4signed long int −(263 − 1) έως +263 − 1 8unsigned long int 0 έως +264 − 1 8signed long long int −(263 − 1) έως +263 − 1 8unsigned long long int 0 έως +264 − 1 8float -3.2×1038 έως +3.2×1038 4double -1.7×10308 έως +1.7×10308 8

18446744073709551615

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 8 /20

Page 47: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Τύποι σταθερών

Ο τύπος μιας σταθεράς εξαρτάται από τον τρόπο πουεκφράζεται

▶ Σταθερές χαρακτήρων⋆ ’x’ : σταθερά τύπου int (προσοχή: όχι char) με τιμή τοναντίστοιχο ακέραιο ASCII

▶ Ακέραιες σταθερές⋆ 42 : σταθερά τύπου int⋆ 42U : σταθερά τύπου unsigned int⋆ 42L : σταθερά τύπου long int

▶ Σταθερές κινητής υποδιαστολής⋆ 3.14159 : σταθερά τύπου double⋆ 3.14159f : σταθερά τύπου float

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 9 /20

Page 48: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Τελεστές και προτεραιότητα

1 Παρένθεση ( )2 Άρνηση !3 Πολλαπλασιασμός *, διαίρεση /, υπόλοιπο %4 Πρόσθεση +, αφαίρεση -5 Ανισότητες <, >, <=, >=6 Ισότητα ==, μη ισότητα !=,7 Λογικό “και” &&8 Λογικό “ή” ||

Όταν δεν είστε σίγουροι, χρησιμοποιήστε παρενθέσεις

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 10 /20

Page 49: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Εκφράσεις

Έκφραση (expression)▶ Στα ελληνικά: μια σειρά από λέξεις που έχει ένα νόημα▶ Στη C: μια σειρά από “λέξεις” που περιγράφει έναν απλόυπολογισμό

▶ Το αποτέλεσμα του υπολογισμού είναι η τιμή της έκφρασηςΟι μεταβλητές και οι σταθερές είναι “βασικές” εκφράσεις(λέξεις)

▶ x, 42, ”Hello, world!”Οι τελεστές συνδυάζουν μικρότερες εκφράσεις σεμεγαλύτερες

▶ x + y, (x != 2) && (y - 5 + z * 3 > x), ’a’ + 2

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 11 /20

Page 50: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Τύπος έκφρασης

Κάθε έκφραση υπολογίζει μια τιμήΚάθε έκφραση έχει ένα τύπο

▶ Η έκφραση 1 + 1 έχει τύπο int και τιμή 2▶ Η έκφραση 5/2 έχει τύπο int και τιμή 2▶ Η έκφραση 5.0/2 εχει τύπο double και τιμή 2.5▶ Η έκφραση 1 == 0 έχει τύπο int και τιμή 0

Οι τελεστές έχουν τον “μεγαλύτερο” από τους τύπουςτων τελεσταίωνΟι λογικοί τελεστές επιστρέφουν 1 για “αληθές” ή 0 για“ψευδές”

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 12 /20

Page 51: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Μετατροπές τύπων

Τί γινεται αν αποθηκεύσουμε μια τιμή ενός τύπου σεμεταβλητή άλλου τύπου;Κάποιες μετατροπές γίνονται αυτόματα, π.χ: int →doubleΚάποιοι τύποι “χωράνε” ακριβώς σε άλλους, π.χ: char →intΠρόβλημα: η μετατροπή μπορεί να χάνει δεδομένα!

▶ int x = 15.0/2.0;▶ char x = 256;▶ Ο τύπος char μπορεί να είναι unsigned ή signed ανάλογαμε το μεταφραστή

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 13 /20

Page 52: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Ρητή μετατροπή τύπων

Type casting: η ρητή μετατροπή δεδομένων από τηναναπαράσταση ενός τύπου σε αναπαράσταση άλλουτύπου

▶ Π.χ: αν το y είναι char▶ x = (int) y

Γενική μορφή▶ έκφραση1 = (τύπος) έκφραση2▶ Η τιμή της έκφραση2 μετατρέπεται στην αναπαράστασητύπος και αποθηκεύεται στην έκφραση1

Προσοχή: επιτρέπεται ακόμα και όταν δεν έχει νόημα!▶ x = (unsigned int) -1▶ Συχνή αιτία λαθών σε προγράμματα C

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 14 /20

Page 53: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Τελεστές αύξησης-μείωσης

Τελεστής ++▶ Η μεταβλητή i αυξάνεται κατά 1

Τελεστής --▶ Η μεταβλητή i μειώνεται κατά 1

Μεταθεματικοί (postfix): ο τελεστής μετά τον τελεσταίο▶ Η έκφραση i++ έχει την τιμή του i πριν την αύξηση

Προθεματικοί (prefix): ο τελεστής πριν τον τελεσταίο▶ Η έκφραση ++i έχει την τελευταία (αυξημένη) τιμή του i

Αν δεν χρησιμοποιείται η τιμή της έκφρασης είναιισοδύναμαΠροτεραιότητα όπως η πρόσθεση

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 15 /20

Page 54: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Τελεστές αντικατάστασης

Αύξηση: 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, 2019-2020 16 /20

Page 55: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Είσοδος - Έξοδος

printf συνάρτηση εξόδουscanf συνάρτηση εισόδουΗ πρώτη παράμετρος είναι η συμβολοσειρά μορφής(format string) και περιγράφει πόσες παράμετροιακολουθούν, και πως θα εκτυπωθούνΑκολουθούν οι παράμετροι που περιγράφονται στησυμβολοσειρά μορφής, πρέπει να είναι του σωστού τύπουΠαράμετροι

▶ %c — Χαρακτήρας (char)▶ %d — Ακέραιος σε δεκαδικό (signed int)▶ %X — Ακέραιος σε δεκαεξαδικό (unsigned int)▶ %f — Κινητής υποδιαστολής (float)▶ %lf — Κινητής υποδιαστολής, διπλής ακρίβειας (double)▶ Για περισσότερα: “man 3 printf”

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 17 /20

Page 56: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παραδείγματαio1.c

#include<stdio.h>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);

}

io2.c

#include<stdio.h>int main() {float x;scanf(”%f”, &x);printf(”x = %f\n, x);printf(”x ~= %.2f\n”, x);

}

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 18 /20

Page 57: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παραδείγματαio1.c

#include<stdio.h>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);

}

Περιμένει έναν δεκαδικόακέραιο από την είσοδο

io2.c

#include<stdio.h>int main() {float x;scanf(”%f”, &x);printf(”x = %f\n, x);printf(”x ~= %.2f\n”, x);

}

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 18 /20

Page 58: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παραδείγματαio1.c

#include<stdio.h>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

io2.c

#include<stdio.h>int main() {float x;scanf(”%f”, &x);printf(”x = %f\n, x);printf(”x ~= %.2f\n”, x);

}

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 18 /20

Page 59: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παραδείγματαio1.c

#include<stdio.h>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

io2.c

#include<stdio.h>int main() {float x;scanf(”%f”, &x);printf(”x = %f\n, x);printf(”x ~= %.2f\n”, x);

}

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 18 /20

Page 60: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παραδείγματαio1.c

#include<stdio.h>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να εκτυπωθεί ως δεκαδικός

ακέραιος

io2.c

#include<stdio.h>int main() {float x;scanf(”%f”, &x);printf(”x = %f\n, x);printf(”x ~= %.2f\n”, x);

}

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 18 /20

Page 61: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παραδείγματαio1.c

#include<stdio.h>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

io2.c

#include<stdio.h>int main() {float x;scanf(”%f”, &x);printf(”x = %f\n, x);printf(”x ~= %.2f\n”, x);

}

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 18 /20

Page 62: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παραδείγματαio1.c

#include<stdio.h>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);

}

Το επόμενο όρισμα ναεκτυπωθεί ως χαρακτήρας

io2.c

#include<stdio.h>int main() {float x;scanf(”%f”, &x);printf(”x = %f\n, x);printf(”x ~= %.2f\n”, x);

}

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 18 /20

Page 63: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παραδείγματαio1.c

#include<stdio.h>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”

io2.c

#include<stdio.h>int main() {float x;scanf(”%f”, &x);printf(”x = %f\n, x);printf(”x ~= %.2f\n”, x);

}

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 18 /20

Page 64: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παραδείγματαio1.c

#include<stdio.h>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);

}

Το επόμενο όρισμα ναεκτυπωθεί ως δεκαδικός

ακέραιος

io2.c

#include<stdio.h>int main() {float x;scanf(”%f”, &x);printf(”x = %f\n, x);printf(”x ~= %.2f\n”, x);

}

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 18 /20

Page 65: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παραδείγματαio1.c

#include<stdio.h>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”

io2.c

#include<stdio.h>int main() {float x;scanf(”%f”, &x);printf(”x = %f\n, x);printf(”x ~= %.2f\n”, x);

}

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 18 /20

Page 66: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παραδείγματαio1.c

#include<stdio.h>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);

}

io2.c

#include<stdio.h>int main() {float x;scanf(”%f”, &x);printf(”x = %f\n, x);printf(”x ~= %.2f\n”, x);

}

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 18 /20

Page 67: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παραδείγματαio1.c

#include<stdio.h>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);

}

io2.c

#include<stdio.h>int main() {float x;scanf(”%f”, &x);printf(”x = %f\n, x);printf(”x ~= %.2f\n”, x);

}Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 18 /20

Page 68: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παραδείγματαio1.c

#include<stdio.h>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);

}

io2.c

#include<stdio.h>int main() {float x;scanf(”%f”, &x);printf(”x = %f\n, x);printf(”x ~= %.2f\n”, x);

}

Περιμένει έναν δεκαδικόαριθμό με υποδιαστολή από

την είσοδο

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 18 /20

Page 69: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παραδείγματαio1.c

#include<stdio.h>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);

}

io2.c

#include<stdio.h>int main() {float x;scanf(”%f”, &x);printf(”x = %f\n, x);printf(”x ~= %.2f\n”, x);

}

Αποθηκεύει την τιμή πουδιάβασε στο x ως αριθμόκινητής υποδιαστολής

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 18 /20

Page 70: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παραδείγματαio1.c

#include<stdio.h>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);

}

io2.c

#include<stdio.h>int main() {float x;scanf(”%f”, &x);printf(”x = %f\n, x);printf(”x ~= %.2f\n”, x);

}

Το όρισμα της printf μετά τοformat string να εκτυπωθεί ως

αριθμός κινητήςυποδιαστολής

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 18 /20

Page 71: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παραδείγματαio1.c

#include<stdio.h>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);

}

io2.c

#include<stdio.h>int main() {float x;scanf(”%f”, &x);printf(”x = %f\n, x);printf(”x ~= %.2f\n”, x);

}

Το επόμενο όρισμα ναεκτυπωθεί με 2 ακριβώς

ψηφία μετά την υποδιαστολή

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 18 /20

Page 72: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παραδείγματαio1.c

#include<stdio.h>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);

}

io2.c

#include<stdio.h>int main() {float x;scanf(”%f”, &x);printf(”x = %f\n, x);printf(”x ~= %.2f\n”, x);

}Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 18 /20

Page 73: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Παραδείγματαio1.c

#include<stdio.h>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);

}

io2.c

#include<stdio.h>int main() {float x;scanf(”%f”, &x);printf(”x = %f\n, x);printf(”x ~= %.2f\n”, x);

}Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 18 /20

Page 74: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Συχνά λάθηprintf

▶ Λιγότερα ορίσματα από όσα περιγράφει το format string▶ Διαφορετικά ορίσματα από αυτά που περιγράφει το formatstring

scanf▶ Όλα τα παραπάνω▶ Ξεχασμένο &

Λάθη σε μετατροπές τύπων▶ Αυτόματες μετατροπές, αναθέσεις μεταξύ διαφορετικώντύπων, κλπ

Λάθος τελεστές▶ Π.χ., ανάθεση αντί ισότητας▶ if (x = 5) αντί if (x == 5)

Ξεχασμένο semicolon “;”▶ Ή semicolon σε θέση όπου δεν χρειάζεται

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 19 /20

Page 75: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Τί θα τυπώσει;

example1.c

#include <stdio.h>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, 2019-2020 20 /20

Page 76: Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδοςhy100/Lecture03.pdf · Μεταβλητές Οιμεταβλητέςείναι“επώνυμες”θέσειςμνήμης

...

.

...........................

.

...

.

...

.

Τί θα τυπώσει;

example1.c

#include <stdio.h>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);

}

Outputx = 2a = 2y = 2b = 2

Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 20 /20