Τελεστές σύγκρισης, λογικής και επαναλήψεις
Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr
Τελεστές σύγκρισης
Οι αριθμητικές τιμές της C μπορούν να συγκριθούν με τη
χρήση των παρακάτω τελεστών:
Σύγκριση | Τελεστής της C |
Ίσο | == |
Διάφορο | != |
Μικρότερο | < |
Μεγαλύτερο | > |
Μικρότερο ή ίσο | <= |
Μεγαλύτερο ή ίσο | >= |
- Για τον υπολογισμό μιας τιμής, πρώτα εκτελούνται οι πράξεις ανάμεσα
στους τελεστές * / %, μετά οι πράξεις ανάμεσα στους τελεστές + -,
μετά ανάμεσα στους τελεστές < > <= >= και μετά
ανάμεσα στους τελεστές == και !=.
- Η παραπάνω σειρά μπορεί να μεταβληθεί με τη χρήση παρενθέσεων.
- Το αποτέλεσμα της κάθε σύγκρισης είναι
1 (αληθές (true)) αν το αποτέλεσμα της σύγκρισης είναι
αληθές και
0 (ψευδές (false)) αν το αποτέλεσμα της σύγκρισης είναι
ψευδές.
Παραδείγματα
- printf("%d\n", 1 + 1 == 2); /* Τυπώνει 1 */
- printf("%d\n", 1 > 2); /* Τυπώνει 0 */
- printf("%d\n", 5 != 5); /* Τυπώνει 0 */
- printf("%d\n", 1 <= 5); /* Τυπώνει 1 */
- printf("%d\n", 1 <= 1); /* Τυπώνει 1 */
- printf("%d\n", 1 <= 0); /* Τυπώνει 0 */
Βρόχοι με την εντολή while
- Μπορούμε να επαναλάβουμε την εκτέλεση ορισμένων εντολών με τη
δομή ελέγχου (control structure) while.
- Αυτή χρησιμοποιείται ως εξής:
while (συνθήκη)
εντολή;
- Τις περισσότερες φορές θέλουμε να εκτελέσουμε πάνω από μια εντολή
πολλαπλές φορές οπότε περικλείουμε όλες τις αντίστοιχες εντολές μέσα σε
αγκύλες "{" και "}":
while (συνθήκη) {
εντολή1;
εντολή2;
εντολή3;
}
- Η εντολή που ακολουθεί το while εκτελείται όσο η συνθήκη είναι
αληθής, δηλαδή έχει τιμή διάφορη του 0.
Παράδειγμα (τυπώνει τους αριθμούς από το 0 μέχρι το 9):
#include <stdio.h>
main()
{
int i;
i = 0;
while (i < 10) {
printf("%d\n", i);
i = i + 1;
}
}
- Αν η συνθήκη δεν είναι αληθής όταν εκτελεστεί το while για πρώτη
φορά τότε η εντολή που περιέχεται σε αυτό δε θα εκτελεστεί.
- Η δομή ελέγχου while μπορεί να χρησιμοποιηθεί οπουδήποτε θα μπορούσε
και οποιαδήποτε άλλη εντολή (π.χ. η printf) δηλαδή ακόμα και μέσα σε μια άλλη
while.
Το παρακάτω παράδειγμα τυπώνει στην οθόνη ένα τριγωνικό σχήμα:
#include <stdio.h>
main()
{
int row, stars;
row = 0;
while (row < 10) {
stars = row;
while (stars > 0) {
printf("*");
stars = stars - 1;
}
row = row + 1;
printf("\n");
}
}
όπως αυτό:
*
**
***
****
*****
******
*******
********
*********
Βρόχοι με την εντολή do while
- Ορισμένες φορές θέλουμε να ελέγχουμε τη συνθήκη στο τέλος
του βρόχου, δηλαδή η εντολή να εκτελεστεί τουλάχιστον μια φορά.
Στις περιπτώσεις αυτές χρησιμοποιούμε τη δομή ελέγχου do while
- Αυτή χρησιμοποιείται ως εξής:
do
εντολή;
while (συνθήκη);
- Τις περισσότερες φορές θέλουμε να εκτελέσουμε πάνω από μια εντολή
πολλαπλές φορές οπότε περικλείουμε όλες τις αντίστοιχες εντολές μέσα σε
αγκύλες "{" και "}":
do {
εντολή1;
εντολή2;
εντολή3;
} while (συνθήκη);
- Η εντολή που ακολουθεί το do εκτελείται μια φορά και συνεχίζει
να εκτελείται όσο η συνθήκη είναι αληθής, δηλαδή έχει τιμή διάφορη του 0.
- Σημαντικό ρόλο έχει αυτή η δομή ελέγχου όταν διαβάζουμε στοιχεία
από το χρήστη και θέλουμε να ελέγξουμε την είσοδο για λάθη.
Παράδειγμα (εισάγει έναν αριθμό μικρότερο του 10):
#include <stdio.h>
main()
{
int number;
do {
printf("Enter a number less than 10: ");
scanf("%d", &number);
} while (number >= 10);
printf("You entered %d\n", number);
}
όπως φαίνεται από το παρακάτω παράδειγμα:
Enter a number less than 10: 34
Enter a number less than 10: 50
Enter a number less than 10: 2
You entered 2
- Αν η συνθήκη δεν είναι αληθής όταν εκτελεστεί το do για πρώτη
φορά τότε η εντολή που περιέχεται σε αυτό θα εκτελεστεί τουλάχιστον μια φορά.
- Η δομή ελέγχου do μπορεί να χρησιμοποιηθεί οπουδήποτε θα μπορούσε
και οποιαδήποτε άλλη εντολή (π.χ. η printf) δηλαδή ακόμα και μέσα σε μια άλλη
do ή while.
Λογικοί τελεστές
Τα λογικά αποτελέσματα στη C μπορούν να συνδυαστούν με τη
χρήση των παρακάτω λογικών τελεστών:
Παράδειγμα
Ο παρακάτω βρόχος μπορεί να αποτελεί τμήμα του προγράμματος
ελέγχου ενός τραπεζικού μηχανήματος αυτομάτων συναλλαγών:
{
int secret, pin, tries;
secret = 1234; /* Customer's secret PIN */
tries = 0;
do {
printf("Δώστε το PIN σας: ");
scanf("%d", &pin);
tries = tries + 1;
} while (pin != secret && tries < 4);
/* Correct PIN entered or number of tries exhausted */
}
Βιβλιογραφία
- Brian W. Kernighan, Dennis M. Ritchie
Η γλώσσα προγραμματισμού C. σ. 26, 67-69, 305-306 (τμήματα)
Δεύτερη έκδοση.
Κλειδάριθμος, 1988.
- Brian W. Kernighan and Dennis M. Ritchie.
The C Programming Language, pages 10, 41-42, 223-224 (parts).
Prentice-Hall, second edition, 1988.
Ασκήσεις
Βρόχοι
- Να γράψετε ένα πρόγραμμα που να τυπώνει τον πίνακα της
προπαίδειας όπως στο παρακάτω παράδειγμα:
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100
Για να μπορέσουν οι αριθμοί να εμφανιστούν σε στήλες μπορείτε
να χρησιμοποιήσετε στην printf τον κωδικό εξόδου %4d
(εμφάνιση του αριθμού σε χώρο 4 χαρακτήρων) αντί του κωδικού %d.