Βρόχοι επανάληψης στη C και η εντολή while

Βρόχοι επανάληψης στη C και η εντολή while

C και η εντολή while

Οι Βρόχοι επανάληψης στη C με την εντολή while έχουν γενική μορφή (σύνταξη) ως εξής :

while (έκφραση)
πρόταση

Η έκφραση είναι μια σύγκριση τιμών και έχει γενικά ένα λογικό αποτέλεσμα. Η πρόταση μπορεί να είναι μια απλή πρόταση με το σύμβολο ; στο τέλος της ή μια σύνθετη πρόταση κλεισμένη ανάμεσα στις αγκύλες { και }. Αν η έκφραση είναι αληθής (δηλ. γενικότερα μη μηδενική), η πρόταση εκτελείται μία φορά και συνεχίζει μέχρι η έκφραση να γίνει ψευδής (δηλ. γενικότερα μηδενική).

Φυσικά, θα πρέπει η τιμή της έκφρασης ελέγχου να αλλάζει τιμή, έτσι ώστε η έκφραση τελικά να γίνει ψευδής και να βγούμε από τον βρόχο.

Υπάρχει, βέβαια, και η περίπτωση η έκφραση να είναι ψευδής και να μην μπούμε καθόλου μέσα στο σώμα του βρόχου.

C και η εντολή while: Ακολουθεί ένα παράδειγμα με μια εντολή while:

while (scanf(“%d“, &num) == 1) { … ;}
/* παραλείπει την είσοδο που είναι ακέραιος */

το τμήμα αυτό του προγράμματος παραλείπει (αγνοεί) τις ακέραιες τιμές και συνεχίζει μόνο όταν συναντήσει μια μη ακέραια τιμή.

Βρόχοι επανάληψης στη C και εντολή while – Παράδειγμα

Θα δούμε τώρα τον βρόχο while σ’ ένα πρόγραμμα που αθροίζει ακέραιες τιμές που εισάγονται από το πληκτρολόγιο.

/* αθροίζει ακεραίους που δίνονται διαλογικά */
#include <stdio.h>
main()
{
   long num;
   long sum = 0L; /* αρχική τιμή της sum = 0 */
   int status;
   printf("Δώστε έναν ακέραιο. ");
   printf("Δώστε q για να σταματήσετε. \n ");
   status = scanf(" %ld", &num);
   
   while (status == 1) { /* το == σημαίνει ‘ίσο με‘ */
     sum = sum + num;
     printf("Δώστε τον επόμενο ακέραιο. ");
     printf("Δώστε q για να σταματήσετε. \n");
     status = scanf(“ %ld“, &num); 
   }
   printf("Οι ακέραιοι αριθμοί έχουν άθροισμα %ld. \n“, sum);
}

Μια εκτέλεση του προγράμματος θα μπορούσε να είναι:

Δώστε έναν ακέραιο. Δώστε q για να σταματήσετε. 20
Δώστε τον επόμενο ακέραιο. Δώστε q για να σταματήσετε. 5
Δώστε τον επόμενο ακέραιο. Δώστε q για να σταματήσετε. 30
Δώστε τον επόμενο ακέραιο. Δώστε q για να σταματήσετε. Q
Οι ακέραιοι αριθμοί έχουν άθροισμα 55.

Ας δούμε λίγες ενδιαφέρουσες λεπτομέρειες του προγράμματος. Κατ’ αρχήν, ο τελεστής == είναι ο τελεστής ισότητας της C, ενώ η εντολή status=1 θα καταχωρούσε το 1 στη μεταβλητή status. Το πρόγραμμα τελειώνει όταν η status πάρει μια τιμή διαφορετική από το 1, οπότε σταματάει ο βρόχος και το πρόγραμμα εμφανίζει την τελική τιμή του αθροίσματος.

Βλέπουμε, όμως, ότι με την χρήση της scanf() πετύχαμε δύο πράγματα : διαβάζουμε μια καινούργια τιμή για την μεταβλητή num και ταυτόχρονα κάνουμε χρήση της επιστρεφόμενης τιμής της scanf(). Η scanf() επιστρέφει τον αριθμό των στοιχείων που διάβασε με επιτυχία.

Αν, δηλ., διαβάσει έναν ακέραιο, τότε επιστρέφει την τιμή 1, η οποία και καταχωρείται στην μεταβλητή status, αλλιώς αν δώσουμε μια μη αριθμητική είσοδο, όπως το q, τότε κανένα στοιχείο δεν διαβάζεται και η επιστρεφόμενη τιμή της status γίνεται ίση με 0.

Έτσι, με την χρήση της scanf() πετύχαμε μαζί με το διάβασμα μιας τιμής και τον έλεγχο της εξόδου από τον βρόχο. Βλέπουμε ακόμη ότι έχουμε μια εντολή scanf() πριν μπούμε στον βρόχο while, για να μπορέσει έτσι να γίνει ο αρχικός έλεγχος της συνθήκης και επίσης μια εντολή scanf() στο τέλος του βρόχου για να μπορούν να συνεχίζονται οι επαναλήψεις.

C και η εντολή while:Θα μπορούσαμε να γράψουμε την εντολή while και ως εξής:

while (scanf(“%ld”, &num) == 1)

 

Οι Αληθείς και οι Ψευδείς Τιμές

Ακολουθεί ένα παράδειγμα :

/* οι αληθείς και οι ψευδείς τιμές στη C */
#include <stdio.h>
main(){
  int true, false;
  true = (5>2); /* τιμή μιας αληθούς σχέσης */
  false = (5==2); /* τιμή μιας ψευδούς σχέσης */
  printf("αληθής = %d; ψευδής = %d \n", true, false);
}

Το αποτέλεσμα του προγράμματος θα είναι:

αληθής = 1; ψευδής = 0

Δηλαδή, στη C μια αληθής έκφραση έχει τιμή 1 και μια ψευδής έκφραση έχει τιμή 0.

C και η εντολή while: Ο παρακάτω βρόχος δεν σταματάει ποτέ:

while (1) { … }

Από το επόμενο παράδειγμα συμπεραίνουμε ότι στη C αληθείς θεωρούνται όλες οι μη μηδενικές τιμές και μόνο το 0 αναγνωρίζεται σαν ψευδές. Έτσι, ουσιαστικά στη C γίνεται αριθμητικός έλεγχος και όχι έλεγχος αληθούς/ψευδούς.

Βρόχοι επανάληψης στη C με την εντολή while – Παράδειγμα 2

/* οι αληθείς και οι ψευδείς τιμές */
#include <stdio.h>
main(){
  int n = 3;
  while (n)  /* δεν χρειάζονται άγκιστρα εφόσον η while έχει μόνο μια εντόλή */
    printf(“%d\n”, n- -);

  n = -3;

  while (n)  /* δεν χρειάζονται άγκιστρα εφόσον η while έχει μόνο μια εντόλή */
    printf(“%2d\n”, n++);
}

Το αποτέλεσμα θα είναι:

3
2
1
-3
-2
-1

Έτσι, στη C η έκφραση while (a!=0) θα μπορεί να γραφεί και ως εξής : while (a)

 

Απάντηση

Αυτός ο ιστότοπος χρησιμοποιεί το Akismet για να μειώσει τα ανεπιθύμητα σχόλια. Μάθετε πώς υφίστανται επεξεργασία τα δεδομένα των σχολίων σας.