Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές,...
TRANSCRIPT
...
.
...........................
.
...
.
...
.
Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές,Είσοδος/Έξοδος
Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης
Εισαγωγή στην Επιστήμη Υπολογιστών
Βασίζεται σε διαφάνειες του Κ. Παναγιωτάκη
Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 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, 2019-2020 2 /20
...
.
...........................
.
...
.
...
.
Εμβέλεια
Οι μεταβλητές μπορεί να είναι:▶ Τοπικές (local)
⋆ Έχει πρόσβαση σ’αυτές μόνο η συνάρτηση που τις δηλώνει⋆ Δημιουργούνται στην αρχή της συνάρτησης⋆ Στο τέλος της συνάρτησης “χάνονται”
▶ Καθολικές (global)⋆ Έχουν πρόσβαση σ’αυτές όλες οι συναρτήσεις πουδηλώνονται στο ίδιο αρχείο
⋆ Δημιουργούνται στην αρχή της εκτέλεσης⋆ Διατηρούνται καθ’ όλη την εκτέλεση του προγράμματος⋆ Προσοχή στη χρήση τους
Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 3 /20
...
.
...........................
.
...
.
...
.
Παράδειγμα: Καθολικές και τοπικέςμεταβλητές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
...
.
...........................
.
...
.
...
.
Παράδειγμα: Καθολικές και τοπικέςμεταβλητές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
...
.
...........................
.
...
.
...
.
Παράδειγμα: Καθολικές και τοπικέςμεταβλητές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
...
.
...........................
.
...
.
...
.
Παράδειγμα: Καθολικές και τοπικέςμεταβλητές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
...
.
...........................
.
...
.
...
.
Παράδειγμα: Καθολικές και τοπικέςμεταβλητές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
...
.
...........................
.
...
.
...
.
Παράδειγμα: Καθολικές και τοπικέςμεταβλητές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
...
.
...........................
.
...
.
...
.
Παράδειγμα: Καθολικές και τοπικέςμεταβλητές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
...
.
...........................
.
...
.
...
.
Παράδειγμα: Καθολικές και τοπικέςμεταβλητές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
...
.
...........................
.
...
.
...
.
Παράδειγμα: Καθολικές και τοπικέςμεταβλητές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
...
.
...........................
.
...
.
...
.
Παράδειγμα: Καθολικές και τοπικέςμεταβλητές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
...
.
...........................
.
...
.
...
.
Παράδειγμα: Καθολικές και τοπικέςμεταβλητές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
...
.
...........................
.
...
.
...
.
Παράδειγμα: Καθολικές και τοπικέςμεταβλητές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
...
.
...........................
.
...
.
...
.
Παράδειγμα: Καθολικές και τοπικέςμεταβλητές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
...
.
...........................
.
...
.
...
.
Παράδειγμα: Καθολικές και τοπικέςμεταβλητές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
...
.
...........................
.
...
.
...
.
Παράδειγμα: Καθολικές και τοπικέςμεταβλητές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
...
.
...........................
.
...
.
...
.
Παράδειγμα: Καθολικές και τοπικέςμεταβλητές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
...
.
...........................
.
...
.
...
.
Παράδειγμα: Καθολικές και τοπικέςμεταβλητές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
...
.
...........................
.
...
.
...
.
Παράδειγμα: Καθολικές και τοπικέςμεταβλητές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
...
.
...........................
.
...
.
...
.
Παράδειγμα: Καθολικές και τοπικέςμεταβλητές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
...
.
...........................
.
...
.
...
.
Παράδειγμα: Καθολικές και τοπικέςμεταβλητές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
...
.
...........................
.
...
.
...
.
Παράδειγμα: Καθολικές και τοπικέςμεταβλητές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
...
.
...........................
.
...
.
...
.
Παράδειγμα: Καθολικές και τοπικέςμεταβλητές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
...
.
...........................
.
...
.
...
.
Παράδειγμα: Καθολικές και τοπικέςμεταβλητές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
...
.
...........................
.
...
.
...
.
Παράδειγμα: Καθολικές και τοπικέςμεταβλητές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
...
.
...........................
.
...
.
...
.
Παράδειγμα: Καθολικές και τοπικέςμεταβλητές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
...
.
...........................
.
...
.
...
.
Παράδειγμα: Καθολικές και τοπικέςμεταβλητές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
...
.
...........................
.
...
.
...
.
Στατικές (static) μεταβλητέςΑνάλογα με το είδος της εμβέλειας
▶ Στατικές τοπικές μεταβλητές:⋆ Δημιουργούνται και αρχικοποιούνται στην αρχή τηςεκτέλεσης
⋆ Έχουν τοπική εμβέλεια: μόνο στη συνάρτηση που τιςδηλώνει
⋆ Όπως οι τοπικές, αλλά δεν χάνονται στο τέλος τηςσυνάρτησης
⋆ Η συνάρτηση “θυμάται” την τιμή της μεταβλητής μεταξύδιαφορετικών κλήσεων
▶ Στατικές καθολικές μεταβλητές:⋆ Δημιουργούνται και αρχικοποιούνται στην αρχή τηςεκτέλεσης
⋆ Έχουν καθολική εμβέλεια: ορατές από όλες τις συναρτήσειςστο αρχείο
⋆ Δεν είναι ορατές από συναρτήσεις που δηλώνονται σε άλλααρχεία
⋆ Όταν ένα μικρό σύνολο από συναρτήσεις χρησιμοποιούν τηνίδια καθολική μεταβλητή, την κάνουμε στατική καθολικήκαι μπαίνουν αυτές οι συναρτήσεις στο ίδιο αρχείο
Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 5 /20
...
.
...........................
.
...
.
...
.
Παράδειγμα
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
...
.
...........................
.
...
.
...
.
Παράδειγμα
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
...
.
...........................
.
...
.
...
.
Παράδειγμα
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
...
.
...........................
.
...
.
...
.
Παράδειγμα
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
...
.
...........................
.
...
.
...
.
Παράδειγμα
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
...
.
...........................
.
...
.
...
.
Παράδειγμα
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
...
.
...........................
.
...
.
...
.
Παράδειγμα
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
...
.
...........................
.
...
.
...
.
Παράδειγμα
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
...
.
...........................
.
...
.
...
.
Τύποι μεταβλητώνΌλες οι μεταβλητές έχουν ένα τύπο δεδομένωνΒασικοί τύποι:
▶ 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
...
.
...........................
.
...
.
...
.
Αναπαράσταση και εύρος τιμώνΟ τύπος 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
...
.
...........................
.
...
.
...
.
Αναπαράσταση και εύρος τιμώνΟ τύπος 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
...
.
...........................
.
...
.
...
.
Αναπαράσταση και εύρος τιμώνΟ τύπος 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
...
.
...........................
.
...
.
...
.
Αναπαράσταση και εύρος τιμώνΟ τύπος 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
...
.
...........................
.
...
.
...
.
Αναπαράσταση και εύρος τιμώνΟ τύπος 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
...
.
...........................
.
...
.
...
.
Αναπαράσταση και εύρος τιμώνΟ τύπος 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
...
.
...........................
.
...
.
...
.
Αναπαράσταση και εύρος τιμώνΟ τύπος 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
...
.
...........................
.
...
.
...
.
Τύποι σταθερών
Ο τύπος μιας σταθεράς εξαρτάται από τον τρόπο πουεκφράζεται
▶ Σταθερές χαρακτήρων⋆ ’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
...
.
...........................
.
...
.
...
.
Τελεστές και προτεραιότητα
1 Παρένθεση ( )2 Άρνηση !3 Πολλαπλασιασμός *, διαίρεση /, υπόλοιπο %4 Πρόσθεση +, αφαίρεση -5 Ανισότητες <, >, <=, >=6 Ισότητα ==, μη ισότητα !=,7 Λογικό “και” &&8 Λογικό “ή” ||
Όταν δεν είστε σίγουροι, χρησιμοποιήστε παρενθέσεις
Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 10 /20
...
.
...........................
.
...
.
...
.
Εκφράσεις
Έκφραση (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
...
.
...........................
.
...
.
...
.
Τύπος έκφρασης
Κάθε έκφραση υπολογίζει μια τιμήΚάθε έκφραση έχει ένα τύπο
▶ Η έκφραση 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
...
.
...........................
.
...
.
...
.
Μετατροπές τύπων
Τί γινεται αν αποθηκεύσουμε μια τιμή ενός τύπου σεμεταβλητή άλλου τύπου;Κάποιες μετατροπές γίνονται αυτόματα, π.χ: int →doubleΚάποιοι τύποι “χωράνε” ακριβώς σε άλλους, π.χ: char →intΠρόβλημα: η μετατροπή μπορεί να χάνει δεδομένα!
▶ int x = 15.0/2.0;▶ char x = 256;▶ Ο τύπος char μπορεί να είναι unsigned ή signed ανάλογαμε το μεταφραστή
Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 13 /20
...
.
...........................
.
...
.
...
.
Ρητή μετατροπή τύπων
Type casting: η ρητή μετατροπή δεδομένων από τηναναπαράσταση ενός τύπου σε αναπαράσταση άλλουτύπου
▶ Π.χ: αν το y είναι char▶ x = (int) y
Γενική μορφή▶ έκφραση1 = (τύπος) έκφραση2▶ Η τιμή της έκφραση2 μετατρέπεται στην αναπαράστασητύπος και αποθηκεύεται στην έκφραση1
Προσοχή: επιτρέπεται ακόμα και όταν δεν έχει νόημα!▶ x = (unsigned int) -1▶ Συχνή αιτία λαθών σε προγράμματα C
Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 14 /20
...
.
...........................
.
...
.
...
.
Τελεστές αύξησης-μείωσης
Τελεστής ++▶ Η μεταβλητή i αυξάνεται κατά 1
Τελεστής --▶ Η μεταβλητή i μειώνεται κατά 1
Μεταθεματικοί (postfix): ο τελεστής μετά τον τελεσταίο▶ Η έκφραση i++ έχει την τιμή του i πριν την αύξηση
Προθεματικοί (prefix): ο τελεστής πριν τον τελεσταίο▶ Η έκφραση ++i έχει την τελευταία (αυξημένη) τιμή του i
Αν δεν χρησιμοποιείται η τιμή της έκφρασης είναιισοδύναμαΠροτεραιότητα όπως η πρόσθεση
Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 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, 2019-2020 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, 2019-2020 17 /20
...
.
...........................
.
...
.
...
.
Παραδείγματα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
...
.
...........................
.
...
.
...
.
Παραδείγματα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
...
.
...........................
.
...
.
...
.
Παραδείγματα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
...
.
...........................
.
...
.
...
.
Παραδείγματα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
...
.
...........................
.
...
.
...
.
Παραδείγματα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
...
.
...........................
.
...
.
...
.
Παραδείγματα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
...
.
...........................
.
...
.
...
.
Παραδείγματα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
...
.
...........................
.
...
.
...
.
Παραδείγματα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
...
.
...........................
.
...
.
...
.
Παραδείγματα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
...
.
...........................
.
...
.
...
.
Παραδείγματα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
...
.
...........................
.
...
.
...
.
Παραδείγματα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
...
.
...........................
.
...
.
...
.
Παραδείγματα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
...
.
...........................
.
...
.
...
.
Παραδείγματα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
...
.
...........................
.
...
.
...
.
Παραδείγματα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
...
.
...........................
.
...
.
...
.
Παραδείγματα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
...
.
...........................
.
...
.
...
.
Παραδείγματα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
...
.
...........................
.
...
.
...
.
Παραδείγματα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
...
.
...........................
.
...
.
...
.
Παραδείγματα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
...
.
...........................
.
...
.
...
.
Συχνά λάθηprintf
▶ Λιγότερα ορίσματα από όσα περιγράφει το format string▶ Διαφορετικά ορίσματα από αυτά που περιγράφει το formatstring
scanf▶ Όλα τα παραπάνω▶ Ξεχασμένο &
Λάθη σε μετατροπές τύπων▶ Αυτόματες μετατροπές, αναθέσεις μεταξύ διαφορετικώντύπων, κλπ
Λάθος τελεστές▶ Π.χ., ανάθεση αντί ισότητας▶ if (x = 5) αντί if (x == 5)
Ξεχασμένο semicolon “;”▶ Ή semicolon σε θέση όπου δεν χρειάζεται
Πρατικάκης (CSD) Μεταβλητές, Τελεστές, I/O CS100, 2019-2020 19 /20
...
.
...........................
.
...
.
...
.
Τί θα τυπώσει;
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
...
.
...........................
.
...
.
...
.
Τί θα τυπώσει;
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