Τύποι εδοµένων (Data Types)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο

Υπολογισμός - Εντολές Ελέγχου

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

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

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

a = 10; a = k; int a,b,c; a = b = c = 10;

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

Υπολογισμός - Εντολές Επανάληψης

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

Στόχοι και αντικείμενο ενότητας. Προτάσεις επανάληψης. Έλεγχος ροής προγράμματος. #5.. Εντολές Επανάληψης

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

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

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

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

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

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

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

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

Β. Εισαγωγή στον Προγραμματισμό Η/Υ με την JavaScript

Διαδικασιακός Προγραμματισμός

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

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

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

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

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

Κεφάλαιο : Επαναλήψεις (oι βρόγχοιfor, do-while) (Διάλεξη 10) Εντολές Επανάληψης που θα καλυφθούν σήμερα

ΕΡΓΑΣΤΗΡΙΟ 2 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Εργαστήριο 2. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

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

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

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

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

Κεφάλαιο : Επαναλήψεις (for, do-while)

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

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

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

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

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

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

ΘΕΜΑΤΑ ΕΞΕΤΑΣΗΣ ΚΑΙ ΑΠΑΝΤΗΣΕΙΣ

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

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

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

Προγραμματισμός Η/Υ. Ενότητα 5: Εντολές Επανάληψης

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

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

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

Η Γλώσσα C Μία Σφαιρική Ανασκόπηση

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

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

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

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

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

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

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

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

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

Κεφάλαιο : Επαναλήψεις (oι βρόχος While) ( ιάλεξη 9) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

Η Γλώσσα Προγραμματισμού C (Μέρος 2 - Οι Bασικές Εντολές της C) Οι Βασικοί Τελεστές της C

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

Κεφάλαιο : Επαναλήψεις (o βρόγχος While) (Διάλεξη 9) Δομές Έλεγχου Προγράμματος

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

Αλγόριθμοι. Χρυσόστομος Στύλιος. Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής. Δομές Δεδομένων & Αλγόριθμοι 1

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

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

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

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

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

Λογικό "και" (AND) μας επιστρέφει 1 αν και οι δύο operands είναι όχι μηδέν, διαφορετικά 0)

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

Μεθόδων Επίλυσης Προβλημάτων

Η δήλωση πού δηµιουργεί αποθήκευση τών δεδοµένων ονοµαζεται ορισµός τής µεταβλητής.

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

Διαδικασιακός Προγραμματισμός

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

ΒΑΣΙΚΟΙ ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ

Transcript:

Μεταβλητές (Variables) Ονοµατισµένες θέσεις µνήµης Έγκυρα ονόµατα: ακολουθίες γραµµάτων και ψηφίων που αρχίζουν µε γράµµα (Το underscore (υπογράµµιση) _ θεωρείται γράµµα. Ν αποφεύγεται ως πρώτο γράµµα.) Πεζά και κεφαλαία γράµµατα είναι διαφορετικά. εν επιτρέπονται λέξεις-κλειδιά (keywords, reserved words) για ονόµατα µεταβλητών. Καλό είναι το όνοµα ναείναισχετικόµε το σκοπό που εξυπηρετεί η µεταβλητή. Όχι πολύ µεγάλα ονόµατα. Παραδείγµατα ονοµάτων (1) Έγκυρα: i num_1 y23_a23_19x _rate2 /* ν αποφεύγεται */ mu VARIANCE /* συνηθίζεται για σταθερές */ _ /* κακή επιλογή */ If /* θυµίζει τη λέξη κλειδί if */ 147 148 Παραδείγµατα ονοµάτων (2) Άκυρα: i@ /* περιέχει το @*/ 1_num /* δεν αρχίζει µε γράµµα */ Rate2#_ab /* περιέχει το # */ if /* είναι λέξη-κλειδί */ return /* όπως κι αυτή */ Τύποι εδοµένων (Data Types) Τύπος: Το σύνολο στο οποίο µπορεί να πάρει τιµές µια µεταβλητή. Βασικοί τύποι στη C: char : χαρακτήρας (1 byte) (character) int : ακέραιος (integer) float : κινητής υποδιαστολής απλής ακρίβειας (floating point) double : κινητής υποδιαστολής διπλής ακρίβειας (double precision) 149 150

Προσδιοριστές (Qualifiers) Τύπων Για int µόνο: short : µικρός ακέραιος long : µεγάλος ακέραιος (Το int τότε δεν χρειάζεται: short int = short) Για char και int (και short int, long int): unsigned : µη-προσηµασµένος (παίρνει µηαρνητικές τιµές) signed : προσηµασµένος (εξ ορισµού για int) Για double: long : κινητής υποδιαστολής εκτεταµένης ακρίβειας 151 Μεγέθη Τύπων Εξαρτώνται από τον εκάστοτε Η/Υ (και µεταγλωττιστή). Βασικοί περιορισµοί ANSI: char = 1 byte short <= int long >= int unsigned int <= int double >= float long double >= double 152 Εύρεση µεγέθους σε bytes Τελεστής sizeof sizeof(char) ( 1) sizeof(int) (π.χ. 2) sizeof(long int) (π.χ. 8) sizeof(unsigned int) (π.χ. 2) 153 Πρόγραµµα εύρεσης µεγεθών #include <stdio.h> main() printf("a char is %2d bytes\n", sizeof(char)); printf("an int is %2d bytes\n", sizeof(int)); printf("a short is %2d bytes\n", sizeof(short)); printf("a long is %2d bytes\n", sizeof(long)); printf("an unsigned char is %2d bytes\n", sizeof(unsigned char)); printf("an unsigned int is %2d bytes\n", sizeof(unsigned int)); printf("an unsigned short is %2d bytes\n", sizeof(unsigned short)); printf("an unsigned long is %2d bytes\n", sizeof(unsigned long)); printf("a float is %2d bytes\n", sizeof(float)); printf("a double is %2d bytes\n", sizeof(double)); printf("a long double is %2d bytes\n", sizeof(long double)); return(0); 154

ήλωση (Declaration) Μεταβλητών (1) Μια µεταβλητή πρέπει να δηλωθεί πριν χρησιµοποιηθεί. ήλωση: όνοµα_τύπου όνοµα_µεταβλητής; int N; float fahr; char c; ήλωση (Declaration) Μεταβλητών (2) ήλωση περισσότερων µεταβλητών ίδιου τύπου: float fahr, celsius; int lower, upper, step; float x[max_n], s[max_n]; 155 156 ήλωση (Declaration) Μεταβλητών (3) Ελευθερία στην «κατανοµή» των µεταβλητών µεταξύ των δηλώσεων οι παρακάτω είναι ισοδύναµες int lower, upper, step; int lower; int upper; int step; int lower, upper; int step; κ.ο.κ. 157 ήλωση (Declaration) Μεταβλητών (4) Μια (αυτόµατη) µεταβλητή που δεν έχει πάρει ρητά αρχική τιµή έχει «απροσδιόριστη» τιµή. Αρχικοποίηση µεταβλητών: Μετά τη δήλωση: float fahr; fahr = 0; Κατά τη δήλωση: float fahr = 0; 158

Σταθερές (Constants) (1) Σταθερά: Τιµή που δεν µπορεί ν αλλάξει κατά την εκτέλεση του προγράµµατος. i = i + 1; /* το 1 είναι µια σταθερά */ celsius=(5.0/9.0)*(fahr-32.0); #define MAX_N 100 /* το MAX_N θα σηµαίνει 100 στο εξής */ Σταθερές (Constants) (2) Σταθερές: Κυριολεκτικές (literals): Τιµές (αριθµητικές, χαρακτήρες ή συµβολοσειρές) που δίνονται άµεσα (κυριολεκτικά) Συµβολικές (symbolic): Σταθερές στις οποίες έχουν δοθεί συµβολικά ονόµατα 159 160 Σταθερές (Constants) (3) Παραδείγµατα: Κυριολεκτικές 1 5.0 Hello, world!\n Συµβολικές MAX_N LOWER UPPER STEP Κυριολεκτικές Σταθερές (1) Αριθµητικές Ακέραιες 1 32 123456789L /* long σταθερά */ 3478U /* unsigned σταθερά */ 037 /* οκταδική σταθερά (=;) */ 0x1f /* δεκαεξαδική σταθερά (=;) */ 161 162

Κυριολεκτικές Σταθερές (2) Αριθµητικές Κινητής υποδιαστολής -1.2 /* είναι τύπου double */ 3e-2 /* εκτός εάν */ 32.0 /* έχουν κατάληξη F */ 3278F /* σταθερά float (=3278.0) */ 3278.64L /* σταθερά long double */ Κυριολεκτικές Σταθερές (3) Χαρακτήρα x /* οκωδικός(αριθµός) του χαρακτήρα x*/ 0 /* =48 (κώδικας ASCII) */ a /* =97 */ B /* =66 */ \n /*(=10) νέα γραµµή */ /* ακολουθία διαφυγής (escape sequence) */ 163 164 Κυριολεκτικές Σταθερές (4) Μερικές ακολουθίες διαφυγής: \n /* νέα γραµµή */ \a /* κουδούνι (bell) */ \b /* backspace */ \t /* οριζόντιος στηλογνώµονας (tab) */ \v /* κατακόρυφος στηλογνώµονας */ \ /* απλό εισαγωγικό */ \ /* διπλό εισαγωγικό */ \\ /* backslash (\) */ \0 /* χαρακτήρας µε κωδικό0 */ Κυριολεκτικές Σταθερές (5) Αλφαριθµητική σταθερά (string constant): ακολουθία χαρακτήρων Hello, world!\n %3d %6.1f\n ώσε την τιµή τουn: 165 166

Κυριολεκτικές Σταθερές (6) Συµβολικές Σταθερές (1) H Κάθε αλφαριθµητικό (string) (ή συµβολοσειρά) τελειώνει µε το χαρακτήρα \0. Hello, world!\n e l l o, w o r l d! \n \0 #define όνοµα κείµενο_αντικατάστασης #define MAX_N 100 #define LOWER 0 #define GREETING Hello, world!\n printf(greeting); /* ισοδύναµο τουprintf( Hello, world!\n ); */ 167 168 Συµβολικές Σταθερές (2) Με χρήση του προσδιοριστή const : const τύπος όνοµα_µεταβλητής=σταθερά; const int step = 20; fahr = fahr + step; /* fahr = fahr + 20 */ step = 30; /* δεν επιτρέπεται αλλαγή τιµής */ Εκφράσεις (Expressions) (1) Απλή έκφραση σταθερά (π.χ. 32.0, Hello, MAX_N) µεταβλητή (π.χ. i, fahr) Σύνθετη έκφραση: Άλλες εκφράσεις και τελεστές (operators) Π.χ. (5.0 / 9.0) * (fahr - 32.0) i = 1 N<0 N>MAX_N 169 170

Εκφράσεις (Expressions) (2) Κάθε έκφραση έχει µια τιµή: της σταθεράς ή µεταβλητής για απλές εκφράσεις του αποτελέσµατος της εφαρµογής των τελεστών για σύνθετες εκφράσεις Εκφράσεις (Expressions) (3) Παραδείγµατα 32.0 /* τιµή = 32.0 */ i=1 /* τιµή = 1 */ i /* τιµή τηςi (=1) */ i+1 /* τιµή = 2 */ N=5 /* τιµή = 5 */ N<0 N>MAX_N /* τιµή = 0 (ψευδής) */ 171 172 Τελεστές Καταχώρησης (assignment) Αριθµητικοί Συσχετιστικοί Λογικοί Μοναδιαίας αύξησης/µείωσης Πράξεων µε bits Αντικατάστασης Συνθήκης (και µερικοί ακόµη) Καταχώρηση (Assignment) µεταβλητή = έκφραση Υπολογίζεται η έκφραση και η τιµή της καταχωρείται στη µεταβλητή. fahr = 0; celsius=(5.0/9.0)*(fahr-32.0); 173 174

Αριθµητικοί Τελεστές (1) Μοναδιαίοι (Unary): + (π.χ. +1, +34.56) - (π.χ. 2, -x) υαδικοί (Binary): Πρόσθεση + Αφαίρεση Πολλαπλασιασµός * ιαίρεση / Υπόλοιπο ακέραιας διαίρεσης % 175 Αριθµητικοί Τελεστές (2) Παραδείγµατα 5 + 3 * 8 / 2 + 2 /* 19 */ (5 + 3) * 8 / (2 + 2) /* 16 */ 5 / 9 /* 0 */ 5.0 / 9.0 /* 0.555 */ 5 % 9 /* 5 */ 10 % 3 /* 1 */ 10 % (5 3) /* 0 */ 10 % 5 3 /* -3 */ 10.0 % 2 /* Λάθος. Ο % εφαρµόζεται µόνο σε ακεραίους */ 176 Προτεραιότητα (1) Unary + - * / % + - Υψηλή = Χαµηλή Παρενθέσεις για αλλαγή προτεραιότητας Προσεταιριστικότητα Οι περισσότεροι τελεστές προσεταιρίζονται από αριστερά προς τα δεξιά. 3-2.1+4 ισοδυναµεί µε (3-2.1)+4 Οτελεστής= ανήκει στις εξαιρέσεις. x=y=z/2 ισοδυναµεί µε x=(y=z/2) 177 178

Προτεραιότητα (2) Παραδείγµατα: 10 % 5 3 ισοδυναµεί µε (10 % 5) 3 δηλαδή 3 10 % (5 3) ισοδυναµεί µε 10 % 2 δηλαδή 0 x = -1 ισοδυναµεί µε x = (-1) y = z = x + 2 + 32 / 8 % 3 6 / 3.0 ισοδυναµεί µε y = (z = ((x + 2) + ((32 / 8) % 3)) (6 / 3.0)) x = -1 + 1 /* τιµή = 0, x=0 */ (x = -1) + 1 /* τιµή = 0, x=-1 */ Συσχετιστικοί Τελεστές (1) Για έλεγχο σχέσεων: < είναι µικρότερο; <= είναι µικρότερο ή ίσο; > είναι µεγαλύτερο; >= είναι µεγαλύτερο ή ίσο; == είναι ίσα;!= είναι διαφορετικά; exp1 op exp2 = 1 (αληθής) 0 (ψευδής) 179 180 Προτεραιότητα (3) Συσχετιστικοί Τελεστές (2) Unary + - * / % + - < <= > >= ==!= = Υψηλή Χαµηλή Παραδείγµατα 5 == 5 /* 1 */ 5 == 3 + 2 /* 1 */ (5 == 3) + 2 /* 2 */ 1 == 3 > 2.4!= 5 % 4 /* (1 == (3 > 2.4))!= (5 % 4) 0 */ 181 182

Αληθείς και Ψευδείς Εκφράσεις Αληθής (True) έκφραση: Έκφραση µε µη-µηδενική τιµή (π.χ. 2+3*4) Ψευδής (False) έκφραση: Έκφραση µε µηδενική τιµή (π.χ. x = 2-(1+1)) Λογικοί Τελεστές (1) «ΚΑΙ» (AND) && exp1 && exp2 1 (exp1 και exp2 µη-µηδενικές) 0 (exp1=0 ή/και exp2=0) «Ή» (OR) exp1 exp2 1 (exp1 ή/και exp2 µη-µηδενική) «ΌΧΙ» (NOT)! 0 (exp1=exp2=0)!exp 1 (exp=0) 0 (exp µη-µηδενική) 183 184 Προτεραιότητα (4) Λογικοί Τελεστές (2) Unary + -! * / % + - < <= > >= ==!= && = Υψηλή Χαµηλή Οι λογικές εκφράσεις υπολογίζονται από τα αριστερά προς τα δεξιά. Ο υπολογισµός σταµατά µόλις εξακριβωθεί το αληθές ή ψευδές του αποτελέσµατος. Π.χ. N = -5; if (N < 0 N > MAX_N) =1 εν υπολογίζεται 185 186

Λογικοί Τελεστές (3) Παραδείγµατα: 5 == 5 && 6!= 6 /* 0 (ψευδής) */ (5 == 5 && 6)!= 6 /* 1 (αληθής) */ x == 2 x == 3 x == 4 /* ισοδυναµεί µε */ x >= 2 && x <= 4 y == 0 /* ισοδυναµεί µε */!y (x = 2) (x =!(3 >= 1)) /* x =? */ x = 2 x =!(3 >= 1) /* Λάθος. Ισοδυναµεί µε x = ((2 x) =!(3 >= 1)). */ Μοναδιαίας Αύξησης/Μείωσης (1) Μοναδιαία αύξηση ++ Προθεµατική (prefix) µορφή: ++var /* Πρώτα var=var+1 και µετά χρήση της var */ Μεταθεµατική (postfix) µορφή: var++ /* Πρώτα χρήση της var και µετά var=var + 1 */ Μοναδιαία µείωση -- Παρόµοια µε το ++, αλλά µείωση κατά 1. 187 188 Μοναδιαίας Αύξησης/Μείωσης (2) Παραδείγµατα: i = 1; x = ++i; /* τώρα x = i = 2 */ /* Ισοδυναµεί µε: i = 1; i = i + 1; x = i; */ i = 1; x = i++; /* τώρα i = 2 ενώ x = 1 */ /* Ισοδυναµεί µε i = 1; x = i; i = i + 1; */ Προτεραιότητα (5) Unary + -! ++ -- * / % + - < <= > >= ==!= && Υψηλή Χαµηλή = 189 190

Τελεστές Αντικατάστασης (Σύνθετης Καταχώρησης) (1) Τελεστές Αντικατάστασης (Σύνθετης Καταχώρησης) (2) var op= expr ισοδυναµεί µε var = var op (expr) Μην ξεχνάτε τις παρενθέσεις op ένας από τους -,+,*,/,%,κ.ά. i += 2 /* i = i + 2 */ x -= y + 1 /* x = x (y + 1) και όχι x = x y + 1 */ 191 Προσεταιριστικότητα: Από τα δεξιά προς τ αριστερά (όπως και ο =) x = y += z %= 2; ισοδυναµεί µε x = (y += (z %= 2)); δηλαδή z = z % 2; y = y + z; x = y; 192 Προτεραιότητα (6) Unary + -! ++ -- * / % + - < <= > >= ==!= && = += -= *= /= %= Υψηλή Χαµηλή Τελεστής Συνθήκης (Conditional Operator) (1) exp1? exp2 : exp3 τιµή τηςexp2 (exp1 αληθής) τιµή τηςexp3 (exp1 ψευδής) Τριαδικός (Ternary) τελεστής Προσεταιρίζεται από δεξιά προς τ αριστερά. ( Θυµηθείτε από το Excel: =IF(exp1;exp2;exp3) ) 193 194

Προτεραιότητα (7) Unary + -! ++ -- * / % + - < <= > >= ==!= &&?: = += -= *= /= %= Υψηλή Χαµηλή Τελεστής Συνθήκης (Conditional Operator) (2) Παραδείγµατα: 5 < 1? 3 : 4 + 2 /* 6 */ 5 > 1? 3 > 2? 1 : 0 : 4 /* ισοδυναµεί µε */ (5 > 1)? ((3 > 2)? 1 : 0) : 4 /* 1 */ z = x > y? x : y /* z=max(x,y) */ a = x >= 0? x : -x /*? */ 195 196 Τελεστές Πράξεων µε Bits (1) Εφαρµόζονται µόνο σε char, short, int και long. «ΚΑΙ» (AND) για bit & «Ή» (OR)για bit «Αποκλειστικό Ή» (XOR)για bit ^ Ολίσθηση αριστερά << Ολίσθηση δεξιά >> Συµπλήρωµα ωςπροςένα ~ 197 Προτεραιότητα (8) Unary + -! ++ -- ~ * / % + - << >> < <= > >= ==!= & ^ &&?: = += -= *= /= %= &= = ^= <<= >>= Υψηλή Χαµηλή 198

Τελεστές Πράξεων µε Bits (2) Παραδείγµατα: ~077 /* ~(00 0111111) 11 1000000 άσοι και στο τέλος 6 µηδενικά */ x & ~077 /* µηδενισµός των 6 τελευταίων bits του x */ x ~077 /* ενεργοποίηση ( 1) των bits του x πλην των τελευταίων 6 */ x << 3 /* πολλαπλασιασµός του x µε το 2 3 =8 */ x >> 3 /* διαίρεση του (unsigned) x µε το8 */ Σειρά Υπολογισµών (1) Η C δεν καθορίζει µε ποιασειράθα υπολογιστούν οι exp1, exp2 στην έκφραση exp1 op exp2. Εξαίρεση αποτελούν τελεστές όπως =, &&,,?:. 200 199 Σειρά Υπολογισµών (2) Παράδειγµα: y = 1; x = (y == 2) + (y = 2); ή (1 == 2) + 2 0 + 2 2 (2 == 2) + 2 1 + 2 3 Προσοχή! Μην γράφετε κώδικα που εξαρτάται από τη σειρά υπολογισµών, αν δεν είστε σίγουροι γι αυτή. Χρησιµοποιείτε παρενθέσεις για να κάνετε τις εκφράσεις σας πιο ευανάγνωστες και για ν αποφύγετε σφάλµατα. 201 202

Μετατροπές Τύπων (1) Ποιος ο τύπος της έκφρασης expr1 op expr2 αν οι δύο εκφράσεις έχουν διαφορετικούς τύπους; Αυτόµατη µετατροπή τύπου: Ο «κατώτερος» τύπος προάγεται στον «ανώτερο». Σε καταχώρηση, γίνεται µετατροπή του δεξιού µέλους στον τύπο του αριστερού µέλους. Μετατροπές Τύπων (2) «Ιεραρχία» signed τύπων: long double double float long int char, short Υψηλή Χαµηλή 203 204 Μετατροπές Τύπων (3) Παραδείγµατα: char + int int + int float / int float / float int * double double * double float f; int i = 1; f = i; /* µετατροπή της i σε float πριν την καταχώρηση f = 1.0 */ f = 3.2; i = f; /* µετατροπή της f σε int i = 3 */ Μετατροπές Τύπων (4) Ρητή µετατροπή τύπου (casting): (όνοµα_τύπου)έκφραση τελεστής προσαρµογής (cast) int i1 = 100, i2 = 40; float f; f = i1 / i2; /* f = 2.0 */ f = (float)i1 / i2; /* f = 100.0 / 40 = 2.5 */ 5 / 9 /* 0 */ 5.0 / 9 /* 0.5555 */ 205 206

Προτεραιότητα (9) Unary + -! ++ -- ~ (τύπος) * / % + - << >> < <= > >= ==!= & ^ &&?: = += -= *= /= %= &= = ^= <<= >>= Υψηλή Χαµηλή 207 Σύνθετη Εντολή (Block) Απλή εντολή. celsius=(5.0/9.0)*(fahr-32.0); Σύνθετη εντολή (Compound Statement ή Block): Πολλές εντολές ως µία. /* αρχίζουµε µε */ celsius=(5.0/9.0)*(fahr-32.0); fahr = fahr + 20; /* τελειώνουµε µε */ 208 Εντολές Ροής Ελέγχου (Control Flow) (1) Εντολές Ροής Ελέγχου (Control Flow) (2) Η κανονική ροή εκτέλεσης είναι από την αρχή στο τέλος µε τησειράπου εµφανίζονται οι εντολές. Εντολές ροής ελέγχου: Επιτρέπουν την αλλαγή της σειράς εκτέλεσης των εντολών ανάλογα µε τοανισχύουνή όχι κάποιες συνθήκες. Εντολές: if (-else) switch while for do-while break continue goto 209 210

Ηεντολήif (1) if (έκφραση) εντολή1 εντολή2... Αν η έκφραση είναι αληθής (µη-µηδενική), εκτέλεσε την εντολή1. Εκτέλεσε την εντολή2... Η εντολή1 µπορεί να είναι σύνθετη. Η εντολή if (2) Αρχή έκφραση=0? ΝΑΙ Τέλος ΟΧΙ εντολή1 211 212 Παράδειγµα #include <stdio.h> main() int x, y; printf( ώσε το x: ); scanf( %d, &x); printf( ώσε το y: ); scanf( %d, &y); if (x == y) printf( x ίσο µε y\n ); if (x > y) printf( x µεγαλύτερο του y\n ); if (x < y) printf( x µικρότερο του y\n ); return(0); 213 Ηφράσηelse if (συνθήκη) else εντολή1 εντολή2 Οι εντολή1, εντολή2 µπορεί να είναι σύνθετες. Κι αν η εντολή2 είναι εντολή if; 214

Η else if (1) Η else if (2) if (συνθήκη1) εντολή1 else if (συνθήκη2) εντολή2 else if...... else if (συνθήκηn) εντολήν else εντολή ΝAI ΝAI έκφραση2=0? Αρχή έκφραση1=0? ΟΧΙ εντολή2 ΟΧΙ εντολή1 Τέλος 215 216 Παράδειγµα #include <stdio.h> main() int x, y; printf( ώσε το x: ); scanf( %d, &x); printf( ώσε το y: ); scanf( %d, &y); if (x == y) printf( x ίσο µε y\n ); else if (x > y) printf( x µεγαλύτερο του y\n ); else printf( x µικρότερο του y\n ); return(0); 217 if-else και Τελεστής Συνθήκης Παράδειγµα: Υπολογισµός απόλυτης τιµής της x if (x >= 0) a = x; else a = -x; a = x >= 0? x : -x; 218

Ένα ακόµη παράδειγµα: Menu (1) #include <stdio.h> main() short choice; float a, b; printf( Το πρόγραµµα εκτελεί τις παρακάτω πράξεις:\n"); printf("1. Πρόσθεση\n2. Αφαίρεση\n3. Πολλαπλασιασµός\n4. ιαίρεση\n"); printf( ώστε δύο αριθµούς: "); scanf("%f", &a); scanf("%f", &b); printf( Επιλέξτε πράξη: "); scanf("%d", &choice); Ηεντολήswitch (1) switch (έκφραση) case σταθ. έκφρ1: case σταθ. έκφρ2:... εντολή1 εντολή2 case σταθ. έκφρν-1: εντολήν-1 default: εντολήν 219 222 if (choice == 1) printf("%f + %f = %f\n", a, b, a + b); else if (choice == 2) printf("%f - %f = %f\n", a, b, a - b); else if (choice == 3) printf("%f * %f = %f\n", a, b, a * b); else if (choice == 4) if (b == 0) fprintf(stderr, ιαίρεση µε µηδέν!\n"); return(1); else printf("%f / %f = %f\n", a, b, a / b); else fprintf(stderr, Άκυρη επιλογή!\n"); return(2); return(0); Ηεντολήswitch (2) έκφραση=? σταθ.έκφρ1 σταθ.έκφρ2 σταθ.έκφρν-1 ο,τιδήποτε άλλο εντολή1 εντολή2 εντολήν-1 εντολήν Τέλος 221 223

Ηεντολήswitch (3) Η έκφραση µπορεί να είναι µόνο ακέραιου τύπου (int, char) Αν δεν υπάρχει εντολή break, έχει σηµασία η σειρά των περιπτώσεων (cases). Να συµπεριλαµβάνεται πάντα η «εξ ορισµού» (default) περίπτωση (ακόµη κιανδεν χρειάζεται). Είναι πιο ευανάγνωστος τρόπος από τη φωλιασµένη (nested) if όταν υπάρχουν περισσότερες των δύο (αληθής, ψευδής) περιπτώσεων. 224 Παράδειγµα: Menu (2) #include <stdio.h> main() short choice; float a, b; printf( Το πρόγραµµα εκτελεί τις παρακάτω πράξεις:\n"); printf("1. Πρόσθεση\n2. Αφαίρεση\n3. Πολλαπλασιασµός\n4. ιαίρεση\n"); printf( ώστε δύο αριθµούς: "); scanf("%f", &a); scanf("%f", &b); printf( Επιλέξτε πράξη: "); scanf("%d", &choice); 225 switch (choice) case 1: printf("%f + %f = %f\n", a, b, a + b); case 2: printf("%f - %f = %f\n", a, b, a - b); case 3: printf("%f * %f = %f\n", a, b, a * b); case 4: if (b == 0) fprintf(stderr, ιαίρεση µε µηδέν!\n"); return(1); else printf("%f / %f = %f\n", a, b, a / b); default: fprintf(stderr, Άκυρη επιλογή!\n"); return(2); return(0); 226 Παράδειγµα: Συνδυασµός περιπτώσεων #include <stdio.h> #include <ctype.h> main() int ch; printf( ώστε ένα Λατινικό γράµµα: ); ch = getchar(); if (!isalpha(ch)) fprintf(stderr, εν είναι γράµµα!\n ); return(1); ch = tolower(ch); switch (ch) case a : case e : case i : case o : case u : printf( Είναι φωνήεν.\n ); default: printf( Είναι σύµφωνο.\n ); /* εν είναι απαραίτητη εδώ. */ return(0); 227

Βρόχος (loop) while (1) Βρόχος (loop) while (2) while (έκφραση) Αρχή εντολή Όσο η έκφραση είναι αληθής (µη µηδενική) Εκτέλεσε την εντολή. έκφραση = 0? ΝΑΙ ΟΧΙ εντολή Τέλος 228 229 Ένα γνώριµο παράδειγµα (1) #include <stdio.h> #define LOWER 0 #define UPPER 300 #define STEP 20 main() int fahr; fahr = LOWER; while (fahr <= UPPER) printf("%3d %6.1f\n", fahr, (5.0 / 9.0) * (fahr - 32.0)); fahr = fahr + STEP; return(0); 230

Βρόχος for (1) for (έκφρ1; έκφρ2; έκφρ3) εντολή Υπολόγισε την έκφρ1 Όσο η έκφρ2 είναι αληθής Εκτέλεσε την εντολή Υπολόγισε την έκφρ3 Βρόχος for (2) Αρχή Υπολόγισε έκφρ1 έκφρ2 = 0? ΝΑΙ ΟΧΙ Υπολόγισε έκφρ3 εντολή Τέλος 231 232 Βρόχος for (3) Πώς υλοποιείται µε while: έκφρ1; /* συνήθως αρχικοποίηση */ while (έκφρ2) εντολή έκφρ3; /* συνήθως αύξηση ή µείωση */ 233 Ένα γνώριµο παράδειγµα (2) #include <stdio.h> #define LOWER 0 #define UPPER 300 #define STEP 20 main() int fahr; for (fahr = LOWER; fahr <= UPPER; fahr += STEP) printf("%3d %6.1f\n", fahr, (5.0 / 9.0) * (fahr - 32.0)); return(0); fahr=fahr+step; 234

Βρόχος do-while (1) do εντολή while (έκφραση); Βρόχος do-while (2) Αρχή εντολή Εκτέλεσε την εντολή Όσο η έκφραση είναι αληθής Η εντολή εκτελείται τουλάχιστον µία φορά. έκφραση = 0? Τέλος ΝΑΙ ΟΧΙ 235 236 Ένα γνώριµο παράδειγµα (3) #include <stdio.h> #define LOWER 0 #define UPPER 300 #define STEP 20 main() int fahr; fahr = LOWER; do printf("%3d %6.1f\n", fahr, (5.0 / 9.0) * (fahr - 32.0)); fahr += STEP; while (fahr <= UPPER); return(0); 237

Παράδειγµα χρήσηςτηςfor (1) Αλγόριθµος υπολογισµού του αθροίσµατος των πρώτων Ν θετικών φυσικών αριθµών Είσοδος: Ν Έξοδος: S = 1+2+3+ +N Βήµα 1: ιάβασε το Ν Βήµα 2: S 0 Βήµα 3: Για i από 1 έως και N S S+i Βήµα 4: Εµφάνισε το S Παράδειγµα χρήσηςτηςfor (2) #include <stdio.h> main() int N; int S, i; Συνήθης printf( ώστε το N: ); χρήση scanf( %d, &N); S = 0; for (i = 1; i <= N; i++) S = S + i; /* ή S += i; */ printf( 1+2+ +N=%d\n, S); printf( N(N+1)/2=%d\n, N * (N + 1) / 2); /* Gauss formula */ return(0); 238 239 Πρόωρος τερµατισµός βρόχου Εντολή break : Τερµατίζει τον τρέχοντα βρόχο. «Βγαίνει» από case της switch. while (expr) 240 Παράδειγµα Βρείτε τον πρώτο αρνητικό αριθµό στοδιάνυσµα ακεραίων numbers int numbers[max_n]; int i; for (i = 0; i < MAX_N; i++) if (numbers[i] < 0) printf( %d\n, numbers[i]); Εναλλακτικά: Ορθή σειρά (γιατί;) for (i = 0; i < MAX_N && numbers[i] >= 0; i++) ; /* Κενή εντολή */ printf( %d\n, numbers[i]); 241

Πρόωρος τερµατισµός επανάληψης Εντολή continue : Ξεκινά την αµέσως επόµενη επανάληψη. for loop: Εκτελείται πρώτα η έκφρ3. while (expr) continue; Παράδειγµα Εµφάνισε όλους τους άρτιους αριθµούς στο διάνυσµα numbers int numbers[max_n]; int i; for (i = 0; i < MAX_N; i++) if (numbers[i] % 2!= 0) continue; printf( %d\n, numbers[i]); 242 243 Ατέρµων Βρόχος (Infinite Loop) Επανάληψη που δεν σταµατάει χωρίς παρέµβαση. while (1) εντολή for (exp1; ;exp3) εντολή do εντολή while (1); Παράδειγµα: Menu (3) #include <stdio.h> main() short choice; float a, b; printf( Το πρόγραµµα εκτελεί τις παρακάτω πράξεις:\n"); printf("1. Πρόσθεση\n2. Αφαίρεση\n3. Πολλαπλασιασµός\n4. ιαίρεση\n"); while (1) /* ατέρµων βρόχος */ printf( ώστε δύο αριθµούς: "); scanf("%f", &a); scanf("%f", &b); printf( Επιλέξτε πράξη: "); scanf("%d", &choice); 244 245

switch (choice) case 1: printf("%f + %f = %f\n", a, b, a + b); case 2: printf("%f - %f = %f\n", a, b, a - b); case 3: printf("%f * %f = %f\n", a, b, a * b); case 4: if (b == 0) fprintf(stderr, ιαίρεση µε µηδέν!\n"); continue; /* διάβασε άλλους αριθµούς */ else printf("%f / %f = %f\n", a, b, a / b); default: fprintf(stderr, Άκυρη επιλογή!\n"); return(2); /* Με break δεν βγαίνει από το βρόχο */ /* end switch */ /* end while */ /* return(0); δεν χρειάζεται πλέον */ Ηεντολήgoto (1) goto ετικέττα;... ετικέττα:... Μεταφέρει την εκτέλεση στο σηµείο του προγράµµατος που επιγράφεται µε την ετικέττα. 246 247 Ηεντολήgoto (2) Υπερβολική χρήση της δηµιουργεί «κώδικα σπαγγέτι»: if ( ) goto label1; label4: if ( ) goto label2; label1: goto label3; label2: goto label4; label3: 248 Ένα γνώριµο παράδειγµα #include <stdio.h> main() int fahr; float celsius; fahr = 0; next: /* επόµενη επανάληψη */ if (fahr > 300) goto end; celsius = (5.0 / 9.0) * (fahr - 32.0); printf("%3d %6.1f\n", fahr, celsius); fahr = fahr + 20; goto next; end: /* τέλος */ return(0); Εντολές goto 249

Ηεντολήgoto (3) Χρήσιµη για έξοδο από εσωτερικό βρόχο (η break δεν βοηθάει τότε). for ( ; ; ) while ( ) for ( ; ; ) goto out; /* εσωτερικό for */ /* while */ /* εξωτερικό for */ out: 250 Παράδειγµα: Μετατροπή ακεραίου από το δεκαδικό στο δυαδικό σύστηµα Αλγόριθµος µετατροπής (µη-αρνητικού) ακεραίου στη δυαδική του µορφή Είσοδος: Μη αρνητικός ακέραιος n Έξοδος: Η δυαδική του αναπαράσταση µε την αντίστροφη σειρά των bits Βήµα 1: ιάβασε τον n Βήµα 2: q πηλίκο διαίρεσης του nµετο2 Βήµα 3: r υπόλοιπο διαίρεσης του nµετο2 Βήµα 4: n q Βήµα 5: Τύπωσε το r. Βήµα 6: Αν q µη-µηδενικό, πήγαινε στο Βήµα 2. Βήµα 7: Τέλος 251 #include <stdio.h> main() unsigned n; /* αριθµός προς µετατροπή */ unsigned q; /* πηλίκο διαίρεσης µε 2*/ char r; /* υπόλοιπο (bit) */ printf( ώστε ένα µη-αρνητικό ακέραιο: "); scanf("%d", &n); printf( Η δυαδικήτουµορφή (µε αντίστροφη σειρά) είναι: "); do q = n >> 1; /* q = n / 2 */ r = n - 2 * q; /* r = n % 2 */ n = q; printf("%d", r); /* εµφάνισε τα bits µε την αντίστροφη σειρά */ while (q!= 0); return(0); 252