Académique Documents
Professionnel Documents
Culture Documents
όπου αρχική τιμή, συνθήκη τερματισμού και αύξηση είναι εκφράσεις της C.
1. Υπολογίζεται και τίθεται η αρχική τιμή . Συνήθως είναι μια εντολή εκχώρησης, η οποία θέτει μία
μεταβλητή σε μία συγκεκριμένη τιμή.
3. Εκτελείται η έκφραση αύξησης της τιμής και η εκτέλεση επιστρέφει στο βήμα 2
1/9
Σημείωση 1: Το μπλοκ εντολών στο σώμα της for μπορεί να αποτελείται από μία μόνο εντολή. Στην περίπτωση
αυτή αυτή τα άγκιστρα δεν είναι απαραίτητα.
Σημείωση 2: Το μπλοκ εντολών στο σώμα της for δεν εκτελείται καμία φορά εάν η συνθήκη τερματισμού είναι
ψευδής την πρώτη φορά που θα υπολογιστεί.
Σημείωση 3: Η εντολή for χρησιμοποιείται συνήθως όταν είναι γνωστός ή μπορεί να υπολογιστεί ο αριθμός των
επαναλήψεων που θέλουμε να εκτελεστούν.
Παράδειγμα κώδικα 1:
#include <stdio.h>
int main() {
int i;
/* Εκτυπώνει τους αριθμούς 1 εώς 20 */
for (i = 1; i <= 20; i++)
printf("%d ", i);
printf("\n");
/* Εκτυπώνει τους αριθμούς 20 εώς 1 */
for (i = 20; i > 0; i)
printf("%d ", i);
return 0;
}
Μια εντολή for μπορεί να εκτελεστεί μέσα σε μία άλλη εντολή for. Αυτό λέγεται εμφώλευση και μπορεί να
χρησιμοποιηθεί για την πραγματοποίηση πιο σύνθετων εργασιών. Το ακόλουθο παράδειγμα δεν επιτελεί κάποια
πολύπλοκη εργασία απλά δείχνει την εμφώλευση δύο εντολών for.
Παράδειγμα κώδικα 2:
#include <stdio.h>
#define ROW_NUM 20
#define COLUMN_NUM 10
int main() {
int row, column;
char symbol = 'x';
/* Εκτυπώνει ένα πίνακα 20 γραμμών και 10 στηλών με το χαρακτήρα x */
for ( row = 1; row <= ROW_NUM ; row++) {
for ( column = 1; column <= COLUMN_NUM; column++) {
printf("%c", symbol);
}
printf("\n");
}
return 0;
}
2/9
A.2. Η εντολή while
Η εντολή while, που λέγεται και βρόχος while, επιτρέπει την επαναλαμβανόμενη εκτέλεση μίας εντολής ή ένός
μπλοκ εντολών εφόσον παραμένει αληθής μία συγκεκριμένη συνθήκη. Η εντολή while έχει την εξής μορφή:
while (συνθήκη) {
εντολή_1;
εντολή_2;
...
εντολή_Ν;
}
όπου, συνθήκη είναι οποιαδήποτε έκφραση της C. Όταν εκτελείται μία εντολή while ακολουθούνται
τα εξής βήματα:
2. Εάν η συνθήκη είναι ψευδής, τερματίζεται η εντολή while και η εκτέλεση συνεχίζει με την εκτέλεση της
εντολής που έπεται της εντολή while
3. Εάν η συνθήκη είναι αληθής, εκτελείται το μπλοκ εντολών στο σώμα της while και η εκτέλεση
επιστρέφει στο βήμα 1
Σημείωση 4
Εάν η συνθήκη δεν είναι αληθής όταν εκτελεστεί για πρώτη φορά η εντολή while, δεν εκτελείται καμία φορά το
μπλοκ εντολών στο σώμα της while.
Σημείωση 5
Μία εντολή while είναι ουσιαστικά μία εντολή for, χωρίς τα συστατικά απόδοσης αρχικής τιμής και αύξησης. Έτσι,
η:
for (; συνθήκη_ελέγχου_τερματισμού ; )
while (συνθήκη)
Λόγω αυτής της ισοδυναμίας, οτιδήποτε μπορεί να γίνει με μια εντολή for, μπορεί επίσης να γίνει και με μια
εντολή while. Όταν εκτελείται μια εντολή while, οποιαδήποτε αναγκαία απόδοση αρχικών τιμών πρέπει να
εκτελείται πρώτα, σε ξεχωριστή εντολή, και η ενημέρωση (της συνθήκης) πρέπει να εκτελείται από μια εντολή
που θα είναι μέρος του μπλοκ εντολών στο σώμα της while.
3/9
Παράδειγμα κώδικα 3:
#include <stdio.h>
int main() {
int count;
/* Εκτυπώνει τους αριθμούς 1 εώς 20 */
count = 1;
while (count <= 20) {
printf("%d ", count);
count++;
}
printf("\n");
/* Εκτυπώνει τους αριθμούς 20 εώς 1 */
count = 20;
while (count > 0) {
printf("%d ", count);
count;
}
return 0;
}
Μια εντολή while μπορεί να εκτελεστεί μέσα σε μία άλλη εντολή while. Αυτό λέγεται εμφώλευση και μπορεί να
χρησιμοποιηθεί για την πραγματοποίηση πιο σύνθετων εργασιών. Το ακόλουθο παράδειγμα δεν επιτελεί κάποια
πολύπλοκη εργασία απλά δείχνει την εμφώλευση δύο εντολών while.
Παράδειγμα κώδικα 4:
#include <stdio.h>
#define ROW_NUM 20
#define COLUMN_NUM 10
int main() {
int row, column;
char symbol = 'x';
/* Εκτυπώνει ένα πίνακα 20 γραμμών και 10 στηλών με το χαρακτήρα x */
row = 1;
while ( row <= ROW_NUM ) {
column = 1;
while ( column <= COLUMN_NUM ) {
printf("%c", symbol);
column++;
}
printf("\n");
row++;
}
return 0;
}
4/9
A.3. Η εντολή do... while
Η τρίτη δομή βρόχου της C είναι ο βρόχος do...while, που εκτελεί μία εντολή ή ένα μπλοκ εντολών εφόσον είναι
αληθής μία καθορισμένη συνθήκη. Ο βρόχος do...while ελέγχει την συνθήκη στο τέλος κάθε βρόχου, κι όχι στην
αρχή, όπως κάνουν οι βρόχοι for και while. Η δομή του βρόχου do...while έχει ως εξής:
do {
εντολή_1;
εντολή_2;
...
εντολή_Ν;
} while (συνθήκη);
όπου, συνθήκη είναι οποιαδήποτε έκφραση της C. Όταν εκτελείται μία εντολή do...while
ακολουθούνται τα εξής βήματα:
Οι εντολές ενός βρόχου do...while εκτελούνται πάντοτε τουλάχιστον μία φορά. Αυτό συμβαίνει διότι η συνθήκη
ελέγχου υπολογίζεται στο τέλος και όχι στην αρχή του βρόχου. Αντιθέτως, οι βρόχοι for και while υπολογίζουν
τη συνθήκη ελέγχου στην αρχή του βρόχου και έτσι οι σχετικές εντολές δεν εκτελούνται καθόλου αν η συνθήκη
είναι αρχικά ψευδής.
Παράδειγμα κώδικα 5:
#include <stdio.h>
int main() {
int count;
/* Εκτυπώνει τους αριθμούς 1 εώς 20 */
count = 1;
do {
printf("%d ", count);
count++;
} while (count <= 20);
printf("\n");
/* Εκτυπώνει τους αριθμούς 20 εώς 1 */
count = 20;
do {
printf("%d ", count);
count;
} while (count > 0);
return 0;
}
5/9
Παράδειγμα κώδικα 6:
#include <stdio.h>
int main() {
int nbr;
/* Δέχεται αριθμούς έως ότου ο αριθμός είναι μεγαλύτερος από 99 */
do {
printf("Give a interger greater than 99:");
scanf("%d", &nbr);
} while (nbr <= 99);
return 0;
}
Αναφορές
1. Εγχειρίδιο της C, Peter Aitken & Bradley L. Jones.
6/9
Εκφώνηση Εργαστηριακή Άσκησης
Το τρίγωνο του Floyd είναι ένα ορθογώνιο τρίγωνο φυσικών αριθμών που πήρε το όνομά του από τον Robert
Floyd. Ορίζεται συμπληρώνοντας τις γραμμές του τριγώνου με διαδοχικούς φυσικούς αριθμούς, αρχίζοντας με 1
στην επάνω αριστερή γωνία. Για τέσσερις γραμμές το τρίγωνο είναι:
1
2 3
4 5 6
7 8 9 10
Γράψτε ένα πρόγραμμα σε C το οποίο θα δέχεται ως είσοδο από το πληκτρολόγιο τον αριθμό των γραμμών του
τριγώνου και θα εκτυπώνει το κατάλληλο τρίγωνο του Floyd στην οθόνη.
1. Τροποποιήστε το πρόγραμμα που κατασκευάσατε ώστε να εκτυπώνει το τρίγωνο στοιχισμένο από τα δεξιά:
1
2 3
4 5 6
7 8 9 10
3. Μελετήστε πώς συμπεριφέρεται το αρχικό πρόγραμμα και οι επεκτάσεις που κάνατε στην περίπτωση που
ζητηθεί η εκτύπωση ενός μεγάλου τριγώνου το οποίο περιέχει μονοψήφιους, διψήφιους ίσως και τριψήφιους
αριθμούς. Προσπαθήστε να πετύχετε όσο πιο συμμετρική εκτύπωση μπορείτε. Δείτε ένα παράδειγμα για
ισοσκελές τρίγωνο:
1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19 20 21
Στην επόμενη σελίδα ακολουθούν κάποιες προτάσεις για επεκτάσεις της 2ης
εργαστηριακής άσκησης (υπολογισμός Δείκτης Μάζας Σώματος) αξιοποιώντας την
ύλη του 3ου εργαστηρίου. Δείτε τις προτεινόμενες επεκτάσεις που ακολουθούν και
ως μια πρώτη προπόνηση για την πρώτη εξέταση του εργαστηρίου.
7/9
Επεκτάσεις και ιδέες για περαιτέρω μελέτη στη 2η εργαστηριακή άσκηση
Στη 2η εργαστηριακή άσκηση αναπτύξαμε ένα πρόγραμμα το οποίο υπολογίζει το δείκτη μάζας σώματος με βάση
το βάρος και το ύψος ενός ατόμου. Οι τιμές αυτές δίνονταν κατά την εκτέλεση του προγράμματος. Σε
περίπτωση μη έγκυρων τιμών τερματίζονταν η εκτέλεση του προγράμματος καθώς δεν είχαμε ακόμη
παρουσιάσει τις δομές επανάληψης. Τώρα που τις γνωρίζετε, μπορείτε να κάνετε τις παρακάτω ενδιαφέρουσες
επεκτάσεις του κώδικα που κατασκευάσατε (ή πάνω στον ενδεικτικό κώδικα που σας δόθηκε μετά το
εργαστήριο):
1. Να μην τερματίζεται το πρόγραμμα όταν δίνεται κάποια μη έγκυρη τιμή αλλά να συνεχίζει η εκτέλεση μέχρις
ότου δοθεί έγκυρη τιμή. Επίσης, να μην τερματίζεται το πρόγραμμα μετά τον υπολογισμό του δείκτη μάζας
σώματος και την εκτύπωση των σχετικών μηνυμάτων αλλά να δίνεται η δυνατότητα εκ νέου εισαγωγής τιμών
και υπολογισμών εφόσον ζητηθεί. Για το λόγο αυτό, μετά την εκτύπωση των μηνυμάτων το πρόγραμμα θα ρωτά
“Run again? (y/n)”. Αν δοθεί η τιμή ‘y’ τότε θα ξεκινά νέος γύρος εισαγωγής τιμών, υπολογισμού και εκτύπωσης
μηνυμάτων. Αν δοθεί η τιμή ‘n’ θα τερματίζεται η εκτέλεση του προγράμματος. Η συμπεριφορά του
προγράμματος για την περίπτωση άλλων τιμών, αφήνεται στη διακριτική σας ευχέρεια.
2. Αντί να εισάγεται το βάρος και το ύψος ενός συγκεκριμένου ατόμου για να υπολογιστεί ο δείκτης μάζας
σώματός του, να δίνονται όρια τιμών βάρους και ύψους και να δημιουργείται ένας πίνακας τιμών του δείκτη
μάζας σώματος για όλους τους συνδυασμούς τιμών βάρους-ύψους που προκύπτουν. Θα χρειαστεί, εκτός από τα
όρια τιμών να δίνεται και ένα βήμα μεταβολής της τιμής του βάρους και του ύψους αντίστοιχα ώστε να
παράγονται οι ενδιάμεσες τιμές μεταξύ των δοθέντων ορίων κατά τη δημιουργία του πίνακα. Προσπαθήστε να
τυπώνετε τον πίνακα με όμορφο τρόπο, με τις τιμές στοιχισμένες κατά στήλες και γραμμές. Η πρώτη γραμμή του
πίνακα θα δείχνει τις δυνατές τιμές του ύψους ενώ η πρώτη από τα αριστερά στήλη τις δυνατές τιμές του
βάρους. Χρησιμοποιείστε ένα ορισμένο αριθμό δεκαδικών ψηφίων κατά την εκτύπωση ώστε ο πίνακας να είναι
ευανάγνωστος. Δείτε πώς περίπου μπορεί να συμπεριφέρεται το πρόγραμμα που θα κατασκευάσετε:
Enter minimum weight in kilograms: 70
Enter maximum weight in kilograms: 110
Enter weight step in kilograms: 5
Enter minimum height in meters: 1.5
Enter maximum height in meters: 2
Enter height step in meters: 0.1
1.50 1.60 1.70 1.80 1.90 2.00
70.00 31.11 27.34 24.22 21.60 19.39 17.50
75.00 33.33 29.30 25.95 23.15 20.78 18.75
80.00 35.56 31.25 27.68 24.69 22.16 20.00
85.00 37.78 33.20 29.41 26.23 23.55 21.25
90.00 40.00 35.16 31.14 27.78 24.93 22.50
95.00 42.22 37.11 32.87 29.32 26.32 23.75
100.00 44.44 39.06 34.60 30.86 27.70 25.00
105.00 46.67 41.02 36.33 32.41 29.09 26.25
110.00 48.89 42.97 38.06 33.95 30.47 27.50
3. Επεκτείνετε περαιτέρω το προηγούμενο πρόγραμμα ώστε εκτός από τον πίνακα με τις τιμές του δείκτη μάζας
σώματος να τυπώνει και έναν δεύτερο πίνακα με το χαρακτηρισμό για κάθε συνδυασμό τιμών. Μπορείτε να
χρησιμοποιήσετε κάποια κωδικοποίηση των χαρακτηρισμών όπως:
UNDR αντί Underweight
NORM αντί Normal
OVER αντί Overweight
OBES αντί Obese
8/9
Δείτε και πάλι μια ενδεικτική συμπεριφορά που θα μπορούσε να έχει το πρόγραμμά σας:
Enter minimum weight in kilograms: 80
Enter maximum weight in kilograms: 100
Enter weight step in kilograms: 2
Enter minimum height in meters: 1.6
Enter maximum height in meters: 2.1
Enter height step in meters: 0.05
1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00 2.05 2.10
80.00 31.25 29.38 27.68 26.12 24.69 23.37 22.16 21.04 20.00 19.04 18.14
82.00 32.03 30.12 28.37 26.78 25.31 23.96 22.71 21.56 20.50 19.51 18.59
84.00 32.81 30.85 29.07 27.43 25.93 24.54 23.27 22.09 21.00 19.99 19.05
86.00 33.59 31.59 29.76 28.08 26.54 25.13 23.82 22.62 21.50 20.46 19.50
88.00 34.37 32.32 30.45 28.73 27.16 25.71 24.38 23.14 22.00 20.94 19.95
90.00 35.16 33.06 31.14 29.39 27.78 26.30 24.93 23.67 22.50 21.42 20.41
92.00 35.94 33.79 31.83 30.04 28.40 26.88 25.48 24.19 23.00 21.89 20.86
94.00 36.72 34.53 32.53 30.69 29.01 27.47 26.04 24.72 23.50 22.37 21.32
96.00 37.50 35.26 33.22 31.35 29.63 28.05 26.59 25.25 24.00 22.84 21.77
98.00 38.28 36.00 33.91 32.00 30.25 28.63 27.15 25.77 24.50 23.32 22.22
100.00 39.06 36.73 34.60 32.65 30.86 29.22 27.70 26.30 25.00 23.80 22.68
1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00 2.05 2.10
80.00 OBES OVER OVER OVER NORM NORM NORM NORM NORM UNDR UNDR
82.00 OBES OBES OVER OVER OVER NORM NORM NORM NORM UNDR UNDR
84.00 OBES OBES OVER OVER OVER NORM NORM NORM NORM UNDR UNDR
86.00 OBES OBES OVER OVER OVER OVER NORM NORM NORM NORM UNDR
88.00 OBES OBES OBES OVER OVER OVER NORM NORM NORM NORM UNDR
90.00 OBES OBES OBES OVER OVER OVER NORM NORM NORM NORM NORM
92.00 OBES OBES OBES OBES OVER OVER OVER NORM NORM NORM NORM
94.00 OBES OBES OBES OBES OVER OVER OVER NORM NORM NORM NORM
96.00 OBES OBES OBES OBES OVER OVER OVER OVER NORM NORM NORM
98.00 OBES OBES OBES OBES OBES OVER OVER OVER NORM NORM NORM
100.00 OBES OBES OBES OBES OBES OVER OVER OVER OVER NORM NORM
9/9