Μορφές Εντολών
Είδη εντολών Απλές εντολές Εκτελούν κάποια ενέργεια Εντολές ελέγχου Ορίζουν τον τρόπο με τον οποίο εκτελούνται άλλες εντολές
Εντολές και παραστάσεις Μιαεντολήείναιμιαπαράστασηπου ακολουθείται από τον χαρακτήρα τέλους εντολής ; παράσταση;
Απλές εντολές Ανάθεσης x = 0; x = GetInteger(); Κλήση συνάρτησης printf( You typed: %d\n, x); Κενή εντολή ; /* Έγκυρη */ Μπλοκ εντολών { εντολή; εντολή;
Σύντομη ανάθεση Έστω ότι η μεταβλητή balance πρόκειταινααυξηθείκατάτην ποσότητα deposit. Η νέα τιμή μπορεί να ανατεθεί σε μια νέα μεταβλητή newbalance = balance + deposit; Και στη συνέχεια η νέα τιμή ανατίθεται στην balance. balance = newbalance; Η παραπάνω ανάθεση μπορεί να γραφεί ως: balance = balance + deposit; Προσοχή: Ο τελεστής = δεν δηλώνει ισότητα αλλά ανάθεση τιμής. Η παραπάνω εντολή μπορεί να γραφεί συντομευμένα ως balance += deposit; Δηλαδή: Αύξησε την τιμή της balance κατά deposit. Αντίστοιχα ορίζονται οι τελεστές -= *= /=
Παράδειγμα: Αντιμετάθεση τιμών /* Δήλωση μεταβλητών */ int first, second, temp; /* Αρχική ανάθεση τιμών */ first = 1; second = 2; /* Αντιμετάθεση */ temp = first; first = second; second = temp; /* Τώρα ισχυει: first = 2 και second = 1 */
Τελεστές αύξησης και μείωσης Μια συνηθισμένη πράξη πάνω σε ακέραιες μεταβλητές είναι η αύξηση ή μείωση κατά μια μονάδα: x = x + 1; ή x += 1; Η παραπάνω ανάθεση γράφεται x++; ή αντίστοιχα για μείωση: x--;
Εντολές ελέγχου Υπό συνθήκη εντολές if, switch Παράδειγμα: αν ο αριθμός είναι θετικός, τότε Εντολές επανάληψης while, for Παράδειγμα: εκτέλεσε την εντολή 10 φορές Θα παρουσιαστούν αναλυτικά στη συνέχεια
Λογικά δεδομένα Τα χειρίζονται παραστάσεις που αποτιμώνται ως αληθείς (TRUE) ήψευδείς (FALSE) Παράδειγμα: Ο αριθμός 2 είναι μεγαλύτερος του 1.
Τελεστές για λογικά δεδομένα Αριθμητικοί τελεστές (έχουν ήδη αναφερθεί) + - * / % Σχεσιακοί τελεστές ==!= < > <= >= Λογικοί τελεστές! λογική άρνηση (όχι) && λογική σύζευξη (και) λογική διάζευξη (ή) Παράδειγμα: (x % 3!= 0 &&! finished)
Σημασία λογικών τελεστών: Πίνακες αλήθειας Λογική σύζευξη && Λογική άρνηση! P Q P && Q P! P FALSE FALSE FALSE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE FALSE TRUE TRUE TRUE Λογική διάζευξη P FALSE FALSE TRUE TRUE Q FALSE TRUE FALSE TRUE P Q FALSE TRUE TRUE TRUE
Λογικοί τύποι Ισχύουν οι κανόνες της άλγεβρας Boole Στη C δεν υπάρχει ιδιαίτερος τύπος για τις λογικές μεταβλητές. Στη βιβλιοθήκη genlib του βιβλίου ορίζεται οτύποςboole. Οι αληθείς εκφράσεις αποτιμώνται ως TRUE (π.χ. η έκφραση2 > 1 έχει τιμή TRUE) Οι ψευδείς εκφράσεις αποτιμώνται ως 0 (π.χ. ηέκφραση2 > 3 έχει τιμή FALSE).
Ένα παράδειγμα υπολογισμού λογικής τιμής Ένα έτος είναι δίσεκτο (έχει 366 ημέρες) αν ικανοποιείται μία από τις ακόλουθες συνθήκες: Το έτος να διαιρείται με το 4 αλλά όχι και με το 100 Το έτος να διαιρείται με το 400 Αν το έτος περιέχεται στη μεταβλητή y, η ακόλουθη λογική παράσταση δίνει το σωστό αποτέλεσμα ((y % 4 == 0) && (y %100)!= 0 )) (y % 400 == 0)
Ηεντολήif Η if ορίζει την εντολή ή τις εντολές που θα εκτελεστούν σε ένα πρόγραμμα ανάλογα με το αποτέλεσμα ενός ελέγχου main() { int y; bool isleapyear; printf( What year? ); y = GetInteger(); isleapyear = ((y % 4 == 0) && (y %100)!= 0 )) (y % 400 == 0); if (isleapyear) { printf( %d is leap\n,y); else { printf( %d is not leap\n,y);
Το προηγούμενο παράδειγμα (απόσπασμα) if (isleapyear) { printf( %d is leap\n,year); else { printf( %d is not leap\n,year);
Μορφές της εντολής if Εντολή if μιας γραμμής if (συνθήκη) εντολή; Παράδειγμα: if (a >= b) max = a;
Μορφές της εντολής if (2) Σύνταξη if (συνθήκη) { εντολή1; εντολή2; Παράδειγμα: if (balance < 0) { printf( This is negative\n ); balance -=10;
Εντολή if-else Σύνταξη if-else if (συνθήκη) { εντολές1; else { εντολές2; Παράδειγμα if (a >= b){ max = a; min = b; else { max = b; min = a;
Εντολές if σε μορφή «στοίβας» Σύνταξη: if (συνθήκη1) { εντολές1; else if (συνθήκη2) { εντολές2; else if (συνθήκη3) { εντολές3; else { εντολές0; Παράδειγμα: int n; n = GetInteger(); if (n > 0) { printf( Positive ); else if (n == 0) { printf( Zero ); else { printf( Negative ); printf( \n );
Το πρόβλημα του «αιωρούμενου» else Έστω το παρακάτω παράδειγμα if (συνθήκη1) εντολή1; if (συνθήκη2) εντολή2; else (συνθήκη3) εντολή3; Σε ποιο if αντιστοιχεί το else; Κανόνας: το else αντιστοιχεί στο πιο πρόσφατο if για το οποίο δεν υπάρχει κάποιος όρος else.
Ένθετα (nested) if Σε ένα μπλοκ εντολών if είναι δυνατόν να περιέχεται μια νέα εντολή if: if (n > 0) { if (k >0) printf( n and k are both positive\n );
Παράδειγμα: Υπολογισμός ρίζας διωνύμου Δίνονται οι συντελεστές a,b της εξίσωσης : ax + b=0 με ακέραιους συντελεστές. Να βρεθεί η ρίζα της εξίσωσης. H ρίζα υπολογίζεται ως εξής: αν a 0 τότε r = -b/a αν a=0 τότε αν b 0 ηρίζαδενυπάρχει(αδύνατη εξίσωση) αλλιώς η ρίζα είναι οποιοσδήποτε αριθμός (αόριστη εξίσωση).
Πρόγραμμα υπολογισμού της ρίζας main() { int a,b; double r; printf( a = ); a = GetInteger(); printf( b = ); b = GetInteger(); if (a!= 0) { r = (double) b/a; printf( Ρίζα: %g\n,r); else { if (b!= 0) printf( Αδύνατη\n ); else printf( Αόριστη\n ); /* To else ταιριάζει με το τελευταίο if (b!=0) οπότε τα κόκκινα { δεν είναι απαραίτητα */
Ηεντολήswitch Η σύνταξη της εντολής switch είναι η ακόλουθη: switch(παράσταση) { case στ 1 : εντολές; break; case στ 2 : εντολές; break; και άλλοι όροι case default: break;
Παράδειγμα με την εντολή switch main() { int k; printf( What is the rank of the card (1-13)? ); k = GetInteger(); switch (k) { case 1: printf( Ace\n ); break; case 11: printf( Jack\n ); break; case 12: printf( Queen\n ); break; case 13: printf( King\n ); break; default: printf( %d\n,k); break;
Ηεντολήwhile Σύνταξη της while while(συνθήκη) { εντολές ψευδής συνθήκη αληθής εντολές int i,s; i = 1; s = 0; while (i <= 10) { s += i; i++;
Παράδειγμα χρήσης της while main() { int n, dsum; printf( Enter a positive integer: ); n = GetInteger(); dsum = 0; while (n > 0) { dsum += n % 10; n /=10; printf( The sum of the digits is %d\n,dsum);
Παράδειγμα χρήσης της while Το παραπάνω πρόγραμμα υπολογίζει το άθροισμα των ψηφίων ενός αριθμού που δίνεται από το πληκτρολόγιο.
Παράδειγμα εκτέλεσης του βρόχου while Έστω ο αριθμός 1821. Η εκτέλεση της εντολής while περιλαμβάνει τα παρακάτω βήματα: Επανά ληψη (αρχικά) 1 n % 10-1 n 1821 182 dsum 0 1 while (n > 0) { dsum += n % 10; n /=10; 2 2 18 3 3 8 1 11 4 1 0 12
Ηεντολήfor Σύνταξη της for for (αρχή; συνθήκη; βήμα) { εντολές int i, s = 0; for (i=1; i <= 10; i++) s += i; αρχή συνθήκη αληθής εντολές ψευδής βήμα
Παράδειγμα χρήσης της for /* A program for counting down */ main() { int t; for (t = 10; t >= 0; t--) { printf( %d\n,t); printf( Lift Off! );
Παράδειγμα χρήσης της for Το παραπάνω πρόγραμμα εκτελεί αντίστροφη μέτρηση από το 10 ως το 0 10 9 8 7 6 5 4 3 2 1 0 Lift Off!
Ηεντολήbreak int x; while (TRUE) { x = GetInteger(); if (x == 0) break; printf( You typed %d\n,x);
Προτεραιότητα τελεστών - ++ --! (μετατροπή τύπου) * / % + - < > <= >= ==!= && = += -= *= /=
Παράδειγμα: Οι αριθμοί Fibonacci Οι αριθμοί Fibonacci ορίζονται ως εξής: F 0 = 0 F 1 = 1 F n = F n-1 + F n-2 Να γίνει ένα πρόγραμμα που να διαβάζει έναν ακέραιο, k, από το πληκτρολόγιο και υπολογίζει και εκτυπώνει τους αριθμούς Fibonacci από F 0 έως F k.