Αρχικοποίηση μεταβλητών και σταθερές

Οι σταθερές (constants) χρησιμοποιούνται για τον ορισμό τιμών που δεν αλλάζουν σε ένα πρόγραμμα. Για παράδειγμα, η σταθερά 3.14159 θα μπορούσε να χρησιμοποιηθεί στην παράσταση

area = 3.14159 * r * r;

για τον κατά προσέγγιση υπολογισμό του εμβαδού ενός κύκλου με ακτίνα r. Μια ακέραια δεκαδική σταθερά όπως η 101 είναι τύπου int. Μια αριθμητική σταθερά που περιέχει κλασματικό μέρος ή εκθέτη ή και τα δύο είναι τύπου double. Σημειώνουμε εδώ ότι ο αριθμός 1.234 x 103 δηλώνεται στη C ως 1.234e3 ενώ ο -2.7181 x 10-5 ως -2.7181e-5.

Η τιμή μιας ακέραιας σταθεράς μπορεί να δωθεί όχι μόνο στο δεκαδικό αλλά και στο οκταδικό (octal) ή στο δεκαεξαδικό (hexadecimal) σύστημα. Έτσι, αν το πρώτο ψηφίο μιας ακέραιας σταθεράς είναι το μηδέν εννοείται ότι η σταθερά είναι γραμμένη στο οκταδικό σύστημα ενώ αν οι δύο πρώτοι χαρακτήρες είναι οι 0x ή 0X εννοείται ότι η σταθερά είναι γραμμένη στο δεκαεξαδικό σύστημα. Για παράδειγμα, ο αριθμός 25 στο δεκαδικό σύστημα παριστάνεται ως 31 στο οκταδικό σύστημα και ως 19 στο δεκαεξαδικό σύστημα. Αν δεν γνωρίζετε τι είναι το οκταδικό και το δεκαεξαδικό σύστημα δείτε την τελευταία παράγραφο.

Στη C είναι δυνατόν κατά τη δήλωση μιας μεταβλητής να της αποδώσουμε και μια αρχική τιμή. Για παράδειγμα, αν θέλουμε να δηλώσουμε την ακέραια μεταβλητή num με αρχική τιμή 23 μπορούμε να γράψουμε

int num = 23;

Στο επόμενο παράδειγμα, οι αρχικές τιμές των μεταβλητών είναι 23, 44 και 78, αντίστοιχα (γιατί;)

int a = 23, b = 0x2c, c = 0116;

Ένας ακόμα τύπος αριθμητικών σταθερών είναι οι σταθερές χαρακτήρα (character constants). Είδαμε στην προηγούμενη ενότητα ότι το σύστημα κωδικοποίησης ASCII αντιστοιχεί σε κάθε χαρακτήρα ένα μικρό ακέραιο αριθμό. Έτσι, αν θέλουμε να χρησιμοποιήσουμε τον κωδικό ενός χαρακτήρα σε μια παράσταση αρκεί να γράψουμε τον χαρακτήρα σε απλά εισαγωγικα. Για παράδειγμα, η εντολή a = 'A' + 2; αναθέτει στην μεταβλητή a τον κωδικό του χαρακτήρα A αυξημένο κατά δύο. Όπως έχουμε ήδη πεί οι σταθερές χαρακτήρα συμμετέχουν σε αριθμητικές πράξεις όπως και οι ακέραιοι. Οι χαρακτήρες διαφυγής που είδαμε σε προηγούμενη ενότητα είναι επίσης σταθερές χαρακτήρα. Θα μπορούσαμε επομένως να δούμε ποιός κωδικός αντιστοιχεί στον χαρακτήρα διαφυγής '\n' με την εντολή

printf("The code of \'\\n\' is %d\n", '\n');

Βεβαιωθείται ότι καταλαβαίνετε την παραπάνω εντολή... Ο πίνακας που ακολουθεί συνοψίζει τους κωδικούς ASCII. Οι αριθμοί στα αριστερά και πάνω από τον πίνακα βοηθούν στο να βρεί κανείς γρήγορα τον κωδικό κάποιου χαρακτήρα. Για παράδειγμα, το χαρακτήρας e βρίσκεται στην γραμμή 100, στήλη 1, επομένως ο κωδικός του είναι 101.

 0123456789
0\000\001\002\003\004\005\006 \a\b\t
10\n\v\f\r\016\017\020\021 \022\023
20\024\025\026\027\030\031\032\033 \034\035
30\036\037κενό!"#$% &'
40()*+,-./01
5023456789:;
60<=>?@ABCDE
70FGHIJKLMNO
80PQRSTUVWXY
90Z[\]^_`abc
100defghijklm
110nopqrstuvw
120xyz{|}~\177   

Το οκταδικό και το δεκαεξαδικό σύστημα

Όλοι γνωρίζουμε ότι το δεκαδικό σύστημα χρησιμοποιεί τα ψηφία 0,1,...,9 για να παραστήσει οποιοδήποτε αριθμό και ότι γράφοντας τον αριθμό 374 εννοούμε 3x102+7x101+4x100. Το οκταδικό σύστημα χρησιμοποιεί τα ψηφία 0,1,...,7 και γράφοντας τον αριθμό 6237 στο οκταδικό σύστημα εννοούμε 6x83+2x82+3x81+7x80, δηλαδή τον αριθμό 3231 στο δεκαδικό σύστημα. Αντίθετα, το δεκαεξαδικό σύστημα χρησιμοποιεί τα ψηφία 0,1,...,9 και τα γράμματα a, b, c, d, e, f για να παραστήσει τις τιμές 0,1,...,9,10,11,12,13,14,15. Επομένως ο αριθμός 5a7f στο δεκαεξαδικό σύστημα δηλώνει τον αριθμό 23167 στο δεκαδικό σύστημα.

Η μετατροπή αριθμών από το δεκαδικό σύστημα σε ένα οποιοδήποτε άλλο σύστημα γίνεται βάση του παρακάτω αλγόριθμου: Έστω Ν ο αριθμός στο δεκαδικό σύστημα που θέλουμε να μετατρέψουμε στο σύστημα με βάση b, και έστω didi-1...d2d1 τα ψηφία του.
Βήμα 1: Θέτουμε i = 1.
Βήμα 2: di = N % b
Βήμα 3: N = (N - di) / b
Βήμα 4: Αν το Ν είναι μηδέν ο αλγόριθμος τερματίζει, διαφορετικά αυξάνουμε το i κατά ένα και επιστρέφουμε στο Βήμα 2.

Μπορεί κανείς εύκολα να βεβαιωθεί ότι η παραπάνω στρατηγική είναι όντως αλγόριθμος και ότι υπολογίζει σωστά τα ψηφία του αριθμού στη βάση b. Εμείς θα αρκεστούμε σε ένα παράδειγμα. Έστω N = 3165 και b = 16. Το τελευταίο ψηφίο του N στο δεκαεξαδικό σύστημα είναι το υπόλοιπο της διαίρεσής του με το 16, δηλαδή 13 το οποίο αναπαρίσταται στο δεκαεξαδικό σύστημα με το γράμμα d. Τώρα το N γίνεται (3165-13) / 16 = 197. Το υπόλοιπο της διαίρεσης του 197 με το 16 είναι 5 και αυτό είναι το δεύτερο ψηφίο του N δεκαεξαδικό σύστημα. Τώρα το N γίνεται (197-5)/16 = 12. Το υπόλοιπο της διαίρεσης του 12 με το 16 είναι 12 το οποίο παριστάνεται ως c στο δεκαεξαδικό σύστημα και αυτό είναι το τρίτο ψηφίο του N. Τώρα το Ν γίνεται (12-12) / 16 = 0 και ο αλγόριθμος τερματίζει. Επομένως ο αριθμός 3165 γράφεται στο δεκαεξαδικό σύστημα ως c5d.