Académique Documents
Professionnel Documents
Culture Documents
1/6
Σημείωση 1
Το “αληθές” θεωρείται ίδιο με το “ναι”, που επίσης θεωρείται ίδιο με το 1. Το “ψευδές” θεωρείται
ίδιο με το “όχι” που επίσης θεωρείται ίδιο με το 0.
Σημείωση 2
Μη συγχέετε το ==, το σχεσιακό τελεστή, με το =, τον τελεστή εκχώρησης.
AΡΙΟΣ.2. Η εντολή if
Οι σχεσιακοί τελεστές χρησιμοποιούνται κυρίως για να δημιουργήσουν συγκριτικές εκφράσεις που
χρησιμοποιούνται στην εντολή if. Στη βασική της μορφή, η εντολή if υπολογίζει μία έκφραση και
οδηγεί στην εκτέλεση του προγράμματος ανάλογα με το αποτέλεσμα αυτού του υπολογισμού. Η
μορφή μιας εντολής if έχει ως εξής:
if (έκφραση)
εντολή;
Εάν ο υπολογισμός της έκφρασης δώσει αληθές αποτέλεσμα, εκτελείται η εντολή, διαφορετικά
δεν εκτελείται. Και στις δύο περιπτώσεις, η εκτέλεση συνεχίζεται στον κώδικα που έπεται της
εντολής if.
Μια εντολή if μπορεί να ελέγξει την εκτέλεση πολλών εντολών μέσω της χρήσης ενός μπλοκ.
Ένα μπλοκ είναι μία ομάδα δύο ή περισσοτέρων εντολών, που περιβάλλονται από άγκιστρα. Ένα
μπλοκ μπορεί να χρησιμοποιηθεί οπουδήποτε μπορεί να χρησιμοποιηθεί μία μόνο πρόταση. Έτσι η
πιο γενική μορφή της εντολής if έχει ως εξής:
if (έκφραση) {
εντολή_1;
εντολή_2;
...
εντολή_Ν;
}
Σημείωση 3
Δημιουργείτε εσοχές στις εντολές μέσα σε ένα μπλοκ, για να τις κάνετε πιο ευανάγνωστες.
Σημείωση 4
Μην κάνετε το λάθος να βάλετε Ελληνικό ερωτηματικό στο τέλος μιας εντολής if.
Στο παραπάνω (λανθασμένο) παράδειγμα η εντολή_1 εκτελείται είτε το x ισούται με 2, είτε όχι,
επειδή κάθε πρόταση εκτελείται ως ξεχωριστή εντολή, και όχι όλες μαζί όπως θα θέλαμε.
Παράδειγμα κώδικα 1:
#include <stdio.h>
int main() {
int x, y;
2/6
scanf("%d", &x);
printf("\n Insert an integer value for y:");
scanf("%d", &y);
return 0;
}
if (έκφραση)
εντολή_1;
else
εντολή_2;
Εάν η έκφραση είναι αληθής, εκτελείται η εντολή_1. Εάν η έκφραση είναι ψευδής, εκτελείται η
εντολή_2. Και η εντολή_1 και η εντολή_2 μπορεί να είναι ένα μπλοκ εντολών:
if (έκφραση) {
εντολή_1;
εντολή_2;
...
εντολή_Ν;
}
else {
εντολή_3;
εντολή_4;
...
εντολή_Μ;
}
Στη γενική περίπτωση μια εντολή if μπορεί να αποτελεί μέρος των εντολών μιας φράσης else,
δηλαδή μπορεί να έχουμε την εξής γενική μορφή:
if (εκφραση1)
εντολή_1;
else if (εκφραση2)
εντολή_2;
else if (έκφραση3)
εντολή_3;
else
εντολή_4;
επόμενη εντολή;
3/6
if (εκφραση1) {
εντολή_1;
εντολή_2;
...
εντολή_Ν;
} else if (εκφραση2) {
εντολή_3;
εντολή_4;
...
εντολή_M;
}
else {
εντολή_5;
εντολή_6;
...
εντολή_K;
}
επόμενη εντολή;
Σημείωση 5
Η C ακολουθεί τον κανόνα ότι μια φράση else ανήκει στην κοντινότερη εντολή if η οποία δεν έχει
ήδη «ταιριάξει» με μια φράση else. Ο προγραμματιστής μπορεί να αλλάξει τον κανόνα αυτό
χρησιμοποιώντας κατάλληλα τις αγκύλες {}.
Παράδειγμα κώδικα 2:
#include <stdio.h>
int main() {
int x, y;
return 0;
}
Αναφορές
1. Εγχειρίδιο της C, Peter Aitken & Bradley L. Jones.
4/6
Ο Δείκτης Μάζας Σώματος (ΔΜΣ), είναι μια αμφιλεγόμενη στατιστική μέτρηση που συγκρίνει το
βάρος και το ύψος ενός ατόμου. Μπορεί να είναι ένα χρήσιμο εργαλείο για την εκτίμηση ενός
υγιούς σωματικού βάρους με βάση το πόσο ψηλό είναι ένα άτομο. Λόγω της ευκολίας της
μέτρησης και του υπολογισμού του, είναι το πιο ευρέως χρησιμοποιούμενο διαγνωστικό εργαλείο
για τον εντοπισμό προβλημάτων βάρους εντός ενός πληθυσμού.
Γράψτε ένα πρόγραμμα σε C το οποίο θα δέχεται ως είσοδο από το πληκτρολόγιο το βάρος ενός
ατόμου σε κιλά και το ύψος του σε μέτρα. Το πρόγραμμά σας θα πρέπει να ελέγχει για τυχόν
λανθασμένες τιμές εισόδου και συγκεκριμένα για αρνητικές ή μηδενικές τιμές. Στη συνέχεια το
πρόγραμμά σας θα πρέπει να υπολογίζει το ΔΜΣ του ατόμου. Έχοντας υπολογίσει το ΔΜΣ το
πρόγραμμά σας θα πρέπει να κατατάσσει το άτομο σε μια από τις ακόλουθες κατηγορίες
εκτυπώνοντας το κατάλληλο μήνυμα στην οθόνη. Συγκεκριμένα:
εάν ο ΔΜΣ είναι <= 20 το άτομο κατατάσσεται στην κατηγορία underweight και
εκτυπώνεται το μήνυμα “Underweight” στην οθόνη.
Εάν ο ΔΜΣ είναι > 20 και <= 25 το άτομο κατατάσσεται στην κατηγορία normal και
εκτυπώνεται το μήνυμα “Normal” στην οθόνη.
Εάν ο ΔΜΣ είναι > 25 και <= 30 το άτομο κατατάσσεται στην κατηγορία overweight και
εκτυπώνεται το μήνυμα “Overweight” στην οθόνη.
Εάν ο ΔΜΣ είναι > 30 το άτομο κατατάσσεται στην κατηγορία obese και εκτυπώνεται το
μήνυμα “Obese” στην οθόνη.
5/6
Επεκτάσεις και ιδέες για περαιτέρω μελέτη
Μάθετε να ενεργοποιείτε τον debugger, να τρέχετε γραμμή γραμμή τον κώδικά σας και να
βλέπετε τις αλλαγές που συμβαίνουν στις τιμές των μεταβλητών. Για σχετικές οδηγίες
ανατρέξτε στις πέντε τελευταίες σελίδες στο “Εισαγωγικό Εγχειρίδιο Code::Blocks” που
σας έχουμε ήδη δώσει από τη δεύτερη εβδομάδα του μαθήματος. Υπάρχει για να το
κατεβάσετε στις εργαστηριακές σημειώσεις του μαθήματος.
Αν έχετε χρόνο και διάθεση να ασχοληθείτε περισσότερο με το πρόγραμμα αυτής της
άσκησης, σας προτείνουμε, εφόσον το υλοποιήσετε ακολουθώντας τις παραπάνω
προδιαγραφές, να προσπαθήσετε να το επεκτείνετε ως εξής:
◦ Εφόσον το άτομο δεν καταταχθεί στην κατηγορία normal, να υπολογίζει και να
εκτυπώνει το πόσα κιλά κατ' ελάχιστο θα πρέπει να αυξηθεί (ή να μειωθεί) το βάρος
του ώστε να καταταχθεί στην κατηγορία normal.
◦ Εφόσον το άτομο καταταχθεί στην κατηγορία normal να υπολογίζει και να εκτυπώνει
το πόσα κιλά το πολύ μπορεί να αυξηθεί ή να μειωθεί το βάρος του και να παραμείνει
στην κατηγορία normal.
Αφού ολοκληρώσετε την άσκηση (με ή χωρίς την προηγούμενη επέκταση) δοκιμάστε, όπως
και στην πρώτη εργαστηριακή άσκηση, να “χαλάσετε” τον κώδικα. Δείτε μετά τι μηνύματα
σας δίνει ο μεταφραστής ώστε να εξοικειωθείτε με τα μηνύματα αυτά τα οποία, πολλές
φορές, είναι δυσνόητα για τον αμύητο. Ενδεικτικά, μπορείτε να δοκιμάσετε:
◦ Να σβήσετε κάποιο ειδικό χαρακτήρα όπως τον ‘;’ στο τέλος κάθε εντολής, το
χαρακτήρα ‘,’ ανάμεσα στα ορίσματα των συναρτήσεων, τους χαρακτήρες ‘{’ ή ‘}’ που
σηματοδοτούν την αρχή και το τέλος του μπλοκ εντολών της main, τους ‘#’, ‘<’ ή ‘>’
στο #include κ.λ.π.
◦ Να γράψετε λανθασμένα (σβήνοντας χαρακτήρες ή εισάγοντας νέους ή αλλάζοντας
κάποιους) τα ονόματα των συναρτήσεων και τις δεσμευμένες λέξεις που
χρησιμοποιούνται όπως main, printf, scanf, return, int, float κ.λ.π.
◦ Να γράψετε σε κάποιο σημείο λανθασμένα το όνομα κάποιας μεταβλητής.
◦ Να σβήσετε το χαρακτήρα ‘&’ (τελεστής διεύθυνσης) μπροστά από το όνομα των
μεταβλητών που διαβάζετε με scanf. Αυτό είναι ένα πολύ συνηθισμένο λαθάκι που
κάνουμε όταν αναπτύσσουμε κώδικα. Επειδή δεν εντοπίζει συντακτικό σφάλμα ο
μεταφραστής δεν μπορούν εύκολα να το εντοπίσουν οι αρχάριοι. Συνήθως η
συμπεριφορά του προγράμματος όταν το εκτελέσουμε (εφόσον υπάρχει αυτό το λαθάκι)
είναι να σταματήσει η εκτέλεση αναπάντεχα (το πρόγραμμα “σκάει”). Εξοικειωθείτε με
αυτή τη συμπεριφορά και μάθετε να αναζητάτε αιτίες όπως η παράλειψη του τελεστή
διεύθυνσης σε scanf για να διορθώσετε τον κώδικά σας. Μελλοντικά θα δούμε και
άλλες περιπτώσεις λαθών που προκαλούν ανάλογη συμπεριφορά κατά την εκτέλεσή
των προγραμμάτων.
Ζητήστε από κάποιον συμφοιτητή σας να καταστρέψει τον κώδικα που φτιάξατε χωρίς να
βλέπετε τι κάνει. Μετά προσπαθήστε να τον διορθώσετε. Κάντε κι εσείς το ίδιο με τον
κώδικα του συμφοιτητή σας. Μπορείτε να μετατρέψετε αυτή την άσκηση σε ένα
διασκεδαστικό παιχνίδι προσπαθώντας με τις λιγότερες δυνατές αλλαγές στον κώδικα ο
ένας του άλλου να δείτε ποιος βρίσκει ταχύτερα τα λάθη. Για περιπτώσεις λογικών λαθών
(δηλαδή σε περιπτώσεις όπου ο μεταφραστής δεν συναντά συντακτικά λάθη αλλά το
πρόγραμμα δεν εκτελείται σωστά) χρησιμοποιείστε τον debugger προκειμένου να τα
εντοπίσετε και να τα διορθώσετε πιο εύκολα.
Δοκιμάστε να τρέξετε και να κάνετε ανάλογες “καταστροφές” των παραδειγμάτων κώδικα
που παρουσιάστηκαν κατά τη διάλεξη του μαθήματος.
6/6