Κεφάλαιο 3: Μεταβλητές και Τύποι Δεδομένων

Δήλωση, Αρχικοποίηση και Χρήση Μεταβλητών

3.1 Τι είναι οι Μεταβλητές

🔍 Ορισμός Μεταβλητής

Μια μεταβλητή είναι ένας δεσμευμένος χώρος μνήμης του υπολογιστή που μπορεί να αποθηκεύσει δεδομένα. Η τιμή της μπορεί να αλλάξει κατά τη διάρκεια εκτέλεσης του προγράμματος.

Χαρακτηριστικά Μεταβλητών

📊 Παράσταση Μεταβλητής στη Μνήμη

int age = 25;

age
25
0x1000

Όνομα      Τιμή      Διεύθυνση

Bit (Binary Digit)

Το πιο μικρό κομμάτι δεδομένων. Μπορεί να είναι 0 ή 1

Byte

Ένα byte αποτελείται από 8 bits.

Πώς Δουλεύουν τα Δεδομένα

🔸 Βήμα 1: Από bit → σε Byte

➡️ Κάθε κουτάκι είναι 1 bit (0 ή 1).

➡️ 8 τέτοια κουτάκια μαζί = 1 Byte

➡️ Αυτό το Byte μπορεί να αντιπροσωπεύει π.χ. το γράμμα "A".

🔸 Βήμα 2: Από Bytes → σε Kilobyte

Byte Binary Χαρακτήρας
Byte 1 01001000 "H"
Byte 2 01100101 "e"
Byte 3 01101100 "l"
Byte 4 01101100 "l"
Byte 5 01101111 "o"

Αν ενώσεις αυτά τα 5 Bytes, ο υπολογιστής διαβάζει τη λέξη "Hello".

Μονάδες Μέτρησης

1 Byte (B)

= 8 bits

Μπορεί να αποθηκεύσει 1 χαρακτήρα (π.χ. το γράμμα "A")

1 Kilobyte (KB)

= 1,024 bytes = 210 bytes

210 = 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 = 1,024

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

1 Megabyte (MB)

= 1,024 Kilobytes = 1,048,576 bytes

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

1 Gigabyte (GB)

= 1,024 Megabytes

Μπορεί να αποθηκεύσει μια ταινία σε καλή ανάλυση

Τι είναι η διεύθυνση μνήμης στη C;

Κάθε θέση (κελί) της μνήμης του υπολογιστή έχει ένα μοναδικό "νούμερο", δηλαδή μια διεύθυνση. Αυτή δείχνει πού ακριβώς βρίσκεται αποθηκευμένη μια τιμή (π.χ. μιας μεταβλητής) μέσα στη RAM.

🔹 Παράδειγμα: 0x1000

Η τιμή 0x1000 είναι μια διεύθυνση μνήμης, δηλαδή ένας αριθμός που δείχνει το σημείο στη μνήμη όπου υπάρχει κάτι αποθηκευμένο.

Αναλυτικά:

Στοιχείο Εξήγηση
0x Δείχνει ότι ο αριθμός είναι σε δεκαεξαδική μορφή (hexadecimal)
1000 Η τιμή της διεύθυνσης στη δεκαεξαδική μορφή (αν το μετατρέψουμε σε δεκαδικό είναι 4096)

Άσκηση: Μνήμη Υπολογιστή

Μελέτησε τον πίνακα μνήμης και απάντησε την ερώτηση

Πίνακας Μνήμης

Address Value
0x00 01001010
0x01 10111010
0x02 01011111
0x03 00100100
0x04 01000100
0x05 10100000
0x06 01110100
0x07 01101111
0x08 10111011
... ...
0xFE 11011110
0xFF 10111011

Πληροφορίες:

Στο σχήμα απεικονίζεται μια μνήμη με τις διευθύνσεις κάθε θέσης και τυχαία δεδομένα

Ερώτηση 1: Ποια είναι η χωρητικότητα της μνήμης;

3.2 Βασικοί Τύποι Δεδομένων

Η γλώσσα C παρέχει διάφορους βασικούς τύπους δεδομένων για την αποθήκευση διαφορετικών ειδών πληροφοριών:

🔢 Ακέραιοι Αριθμοί (Integer Types)

Τύπος Μέγεθος (bytes) Εύρος Παράδειγμα
char 1 -128 έως 127 char grade = 'A';
int 4 -2,147,483,648 έως 2,147,483,647 int age = 25;
short 2 -32,768 έως 32,767 short year = 2024;
long 8 -9,223,372,036,854,775,808 έως 9,223,372,036,854,775,807 long population = 7800000000L;

🌊 Αριθμοί Κινητής Υποδιαστολής (Floating Point Types)

Τύπος Μέγεθος (bytes) Ακρίβεια Παράδειγμα
float 4 ~6-7 δεκαδικά ψηφία float pi = 3.14159f;
double 8 ~15-17 δεκαδικά ψηφία double precise = 3.141592653589793;
long double 16 ~19+ δεκαδικά ψηφία long double exact = 3.141592653589793238L;

✅ Λογικός Τύπος (Boolean - από C99)

Για να χρησιμοποιήσετε boolean τύπους, πρέπει να συμπεριλάβετε τη βιβλιοθήκη #include <stdbool.h>

#include <stdbool.h> bool isReady = true; bool isFinished = false;

3.3 Δήλωση Μεταβλητών

Σύνταξη Δήλωσης

τύπος_δεδομένων όνομα_μεταβλητής;

🔢 Ακέραιοι

int age; int count; int temperature;

🌊 Δεκαδικοί

float height; double salary; float weight;

🔤 Χαρακτήρες

char grade; char initial; char symbol;

Πολλαπλές Δηλώσεις

Μπορείτε να δηλώσετε πολλές μεταβλητές του ίδιου τύπου στην ίδια γραμμή:

int x, y, z; float width, height, depth; char first, middle, last;

3.4 Αρχικοποίηση Μεταβλητών

💡 Τι είναι η Αρχικοποίηση;

Η αρχικοποίηση είναι η διαδικασία δήλωσης μιας μεταβλητής και ταυτόχρονης ανάθεσης αρχικής τιμής σε αυτήν.

Τρόποι Αρχικοποίησης

1. Αρχικοποίηση κατά τη Δήλωση

int age = 25; float pi = 3.14159f; char grade = 'A'; double salary = 50000.50;

2. Αρχικοποίηση μετά τη Δήλωση

int count; count = 10; float temperature; temperature = 36.5f;

3. Αρχικοποίηση Πολλαπλών Μεταβλητών

int x = 5, y = 10, z = 15; float a = 1.5f, b = 2.5f;

⚠️ Προσοχή!

Στη C, οι μεταβλητές δεν αρχικοποιούνται αυτόματα. Αν δεν δώσετε αρχική τιμή, μπορεί να περιέχουν τυχαίες τιμές ("garbage values").

int uninitializedVar; // Περιέχει τυχαία τιμή! printf("%d", uninitializedVar); // Απρόβλεπτο αποτέλεσμα

3.5 Κανόνες Ονομασίας

📋 Κανόνες για Ονόματα Μεταβλητών

  1. Πρέπει να ξεκινούν με γράμμα (a-z, A-Z) ή underscore (_)
  2. Μπορούν να περιέχουν γράμματα, αριθμούς και underscores
  3. Δεν μπορούν να περιέχουν κενά ή ειδικούς χαρακτήρες
  4. Δεν μπορούν να είναι δεσμευμένες λέξεις της C
  5. Είναι case-sensitive (myVar ≠ MyVar ≠ MYVAR)

Παραδείγματα Έγκυρων και Μη Έγκυρων Ονομάτων

Έγκυρα ✅ Μη Έγκυρα ❌ Λόγος
age 2age Ξεκινά με αριθμό
student_name student name Περιέχει κενό
_temp int Δεσμευμένη λέξη
myVar123 my-var Περιέχει παύλα
firstName first@name Περιέχει ειδικό χαρακτήρα

Δεσμευμένες Λέξεις της C

auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while

📦 Πού γράφει η printf();

Η printf() εμφανίζει τα αποτελέσματα στην οθόνη του υπολογιστή σου. (Αυτό ονομάζεται "standard output" ή stdout — απλώς σημαίνει οθόνη.)

✏️ Πώς τη χρησιμοποιούμε

Η printf() γράφεται έτσι:

printf("κείμενο που θες να εμφανίσεις");

Παράδειγμα:

printf("Γεια σου κόσμε!");

👉 Αυτό θα εμφανίσει:

Γεια σου κόσμε!

🔹 Αν θέλουμε να δείξουμε μια μεταβλητή

Αντί να γράφουμε μόνο κείμενο, μπορούμε να δείξουμε και τιμές (όπως αριθμούς ή λέξεις από μεταβλητές).

Γράφουμε:

printf("κείμενο %τύπος", μεταβλητή);

Το %τύπος λέει στη printf() τι είδους τιμή θα εμφανίσει.

💡 Παραδείγματα

🔸 1. Ακέραιος αριθμός (int)

int age = 20; printf("Η ηλικία μου είναι %d ετών.", age);

👉 Εμφανίζει:

Η ηλικία μου είναι 20 ετών.

Το %d σημαίνει "ακέραιος αριθμός".

🔸 2. Μεγάλος ακέραιος (long)

long population = 7800000000L; printf("Ο πληθυσμός είναι %ld άτομα.", population);

👉 Εμφανίζει:

Ο πληθυσμός είναι 7800000000 άτομα.

Το %ld σημαίνει "μεγάλος ακέραιος (long)".

🔸 3. Δεκαδικός αριθμός (float ή double)

double pi = 3.14159; printf("Η τιμή του π είναι %f", pi);

👉 Εμφανίζει:

Η τιμή του π είναι 3.141590

(Μπορείς να περιορίσεις τα δεκαδικά έτσι: %.2f → 2 δεκαδικά ψηφία.)

🔸 4. Αλφαριθμητικό (λέξη)

printf("Το όνομά μου είναι %s", "Μαρία");

👉 Εμφανίζει:

Το όνομά μου είναι Μαρία

Το %s σημαίνει "string" (δηλαδή λέξη ή πρόταση).

📘 Κάποια χρήσιμα σύμβολα

Σύμβολο Τι κάνει
\n πάει σε νέα γραμμή (σαν Enter)
\t κάνει ένα tab (κενό)

Παράδειγμα:

printf("Γεια!\nΠώς είσαι;");

👉 Εμφανίζει:

Γεια! Πώς είσαι;

Ακολουθίες διαφυγής

🧩 1. \a → Ήχος (beep)

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

#include <stdio.h> int main() { printf("Προσοχή!\a\n"); return 0; }

👉 Εμφανίζει:

Προσοχή!

και (αν το σύστημα το υποστηρίζει) κάνει ένα μπιπ 🔔.

🧩 2. \b → Backspace (διαγραφή ενός χαρακτήρα πίσω)

Σβήνει τον προηγούμενο χαρακτήρα (σαν να πάτησες backspace).

#include <stdio.h> int main() { printf("Γεια σου κοσμε\b!\n"); return 0; }

👉 Εμφανίζει:

Γεια σου κοσμ!

(το "ε" σβήστηκε από το \b)

🧩 3. \n → Νέα γραμμή (Enter)

Πάει τον δρομέα στην επόμενη γραμμή.

#include <stdio.h> int main() { printf("Γεια!\nΠώς είσαι;\n"); return 0; }

👉 Εμφανίζει:

Γεια! Πώς είσαι;

🧩 4. \r → Επιστροφή στην αρχή της γραμμής (carriage return)

Ο δρομέας γυρίζει στην αρχή της ίδιας γραμμής και γράφει πάνω στα παλιά γράμματα.

#include <stdio.h> int main() { printf("Καλημέρα\rΑντίο\n"); return 0; }

👉 Εμφανίζει:

Αντίορα

(το "Αντίο" έγραψε πάνω στο "Καλημέρα")

🧩 5. \t → Οριζόντιο tab

Βάζει ένα κενό σαν πίνακα, όπως το πλήκτρο Tab.

#include <stdio.h> int main() { printf("Όνομα\tΗλικία\n"); printf("Μαρία\t20\n"); printf("Νίκος\t25\n"); return 0; }

👉 Εμφανίζει:

Όνομα Ηλικία Μαρία 20 Νίκος 25

🧩 6. \\ → Εμφάνιση ανάστροφης κάθετης (backslash)

Αν θέλεις να εμφανίσεις το \, πρέπει να γράψεις διπλό \\.

#include <stdio.h> int main() { printf("Αυτό είναι ένα backslash: \\\n"); return 0; }

👉 Εμφανίζει:

Αυτό είναι ένα backslash: \

🧩 7. \" → Εμφάνιση διπλών εισαγωγικών

Για να εμφανίσεις διπλά εισαγωγικά μέσα σε κείμενο, χρησιμοποιείς \".

#include <stdio.h> int main() { printf("Ο δάσκαλος είπε: \"Διάβασε C κάθε μέρα!\"\n"); return 0; }

👉 Εμφανίζει:

Ο δάσκαλος είπε: "Διάβασε C κάθε μέρα!"

🧠 Μικρή σύνοψη

Ακολουθία Τι κάνει Παράδειγμα
\a Ήχος beep printf("Προσοχή!\a");
\b Διαγράφει 1 χαρακτήρα πίσω printf("Hello\b!");
\n Νέα γραμμή printf("Γεια!\n");
\r Επιστροφή στην αρχή γραμμής printf("Καλημέρα\rΑντίο");
\t Tab (κενό) printf("Όνομα\tΗλικία");
\\ Backslash printf("\\");
\" Διπλά εισαγωγικά printf("\"Γεια\"");

Προσδιοριστικό μετατροπής

🎯 Τι είναι οι προσδιοριστικοί μετατροπής

Όταν γράφουμε printf(), συχνά θέλουμε να εμφανίσουμε μεταβλητές (όχι μόνο κείμενο). Για να ξέρει η printf() πώς να τις δείξει, χρησιμοποιούμε σύμβολα που ξεκινούν με %.

Παράδειγμα:

printf("Η ηλικία είναι %d", age);

Το %d λέει στη printf():

"Η μεταβλητή age είναι ακέραιος αριθμός."

📘 Αναλυτικά παραδείγματα

🔹 %c → Εμφανίζει έναν χαρακτήρα

#include <stdio.h> int main() { char letter = 'A'; printf("Το γράμμα είναι: %c\n", letter); return 0; }

👉 Εμφανίζει:

Το γράμμα είναι: A

🔹 %d ή %i → Εμφανίζει έναν ακέραιο

#include <stdio.h> int main() { int age = 20; printf("Η ηλικία είναι: %d ετών\n", age); return 0; }

👉 Εμφανίζει:

Η ηλικία είναι: 20 ετών

🔹 %u → Εμφανίζει unsigned ακέραιο (χωρίς πρόσημο)

#include <stdio.h> int main() { unsigned int x = 4000000000; printf("Αριθμός: %u\n", x); return 0; }

👉 Εμφανίζει:

Αριθμός: 4000000000

🔹 %f → Εμφανίζει πραγματικό αριθμό (float/double)

#include <stdio.h> int main() { double pi = 3.14159; printf("Η τιμή του π είναι: %f\n", pi); return 0; }

👉 Εμφανίζει:

Η τιμή του π είναι: 3.141590

(Από προεπιλογή δείχνει 6 δεκαδικά ψηφία — μπορείς να αλλάξεις π.χ. με %.2f για 2 δεκαδικά.)

🔹 %s → Εμφανίζει αλφαριθμητικό (string)

#include <stdio.h> int main() { printf("Το όνομά μου είναι %s\n", "Μαρία"); return 0; }

👉 Εμφανίζει:

Το όνομά μου είναι Μαρία

🔹 %e ή %E → Εμφανίζει επιστημονική μορφή

(όπως 1.23e+05)

#include <stdio.h> int main() { double num = 123456.789; printf("Επιστημονική μορφή: %e\n", num); printf("Ή με κεφαλαίο: %E\n", num); return 0; }

👉 Εμφανίζει:

Επιστημονική μορφή: 1.234568e+05 Ή με κεφαλαίο: 1.234568E+05

🔹 %g ή %G → Δείχνει τον αριθμό σε απλή ή επιστημονική μορφή, ανάλογα με το μέγεθος

#include <stdio.h> int main() { double num = 12345.6789; printf("Κανονικά: %g\n", num); printf("Με κεφαλαίο: %G\n", num); return 0; }

👉 Εμφανίζει:

Κανονικά: 12345.7 Με κεφαλαίο: 12345.7

🔹 %p → Εμφανίζει διεύθυνση μνήμης (pointer)

#include <stdio.h> int main() { int x = 10; printf("Η διεύθυνση του x είναι: %p\n", &x); return 0; }

👉 Εμφανίζει κάτι σαν:

Η διεύθυνση του x είναι: 0x7ffee56b8a8c

🔹 %x ή %X → Εμφανίζει αριθμό σε δεκαεξαδική μορφή

#include <stdio.h> int main() { int number = 255; printf("Δεκαεξαδικό (πεζά): %x\n", number); printf("Δεκαεξαδικό (κεφαλαία): %X\n", number); return 0; }

👉 Εμφανίζει:

Δεκαεξαδικό (πεζά): ff Δεκαεξαδικό (κεφαλαία): FF

🔹 %o → Εμφανίζει αριθμό σε οκταδική μορφή

#include <stdio.h> int main() { int number = 64; printf("Οκταδικό: %o\n", number); return 0; }

👉 Εμφανίζει:

Οκταδικό: 100

(Επειδή το 64 σε οκταδικό είναι 100.)

🔹 %% → Εμφανίζει το ίδιο το σύμβολο %

#include <stdio.h> int main() { printf("Το ποσοστό είναι 100%%!\n"); return 0; }

👉 Εμφανίζει:

Το ποσοστό είναι 100%!

✅ Συνοπτικός πίνακας

Προσδιοριστικό Εμφανίζει... Παράδειγμα
%c χαρακτήρα 'A'
%d ή %i ακέραιο (int) 10
%u unsigned int 4000000000
%f δεκαδικό 3.14
%s string "Γεια"
%e, %E επιστημονική μορφή 1.23e+05
%g, %G απλή ή επιστημονική 12345.7
%p διεύθυνση μνήμης 0x7ffee56b8a8c
%x, %X δεκαεξαδικό ff ή FF
%o οκταδικό 100
%% το σύμβολο % %

3.6 Σταθερές (Constants)

🔒 Τι είναι οι Σταθερές;

Οι σταθερές είναι τιμές που δεν μπορούν να αλλάξουν κατά τη διάρκεια εκτέλεσης του προγράμματος.

🧩 Τι είναι σταθερές

Μια σταθερά (constant) είναι σαν μια μεταβλητή, αλλά η τιμή της δεν αλλάζει ποτέ όσο τρέχει το πρόγραμμα.

👉 Δηλαδή: τη δηλώνεις μία φορά, της δίνεις τιμή, και μετά δεν μπορείς να τη μεταβάλεις.

🔹 1. Δήλωση σταθερών με const

Η λέξη const σημαίνει "σταθερό". Δηλώνεις μια σταθερά όπως μια μεταβλητή, απλώς βάζεις μπροστά το const.

📘 Παράδειγμα 1 — ακέραια σταθερά

#include <stdio.h> int main() { const int days_in_week = 7; printf("Μια εβδομάδα έχει %d ημέρες.\n", days_in_week); // days_in_week = 8; ❌ ΔΕΝ επιτρέπεται! (θα βγάλει σφάλμα) return 0; }

👉 Εμφανίζει:

Μια εβδομάδα έχει 7 ημέρες.

📘 Παράδειγμα 2 — δεκαδική σταθερά

#include <stdio.h> int main() { const float pi = 3.14159; printf("Η τιμή του π είναι περίπου %.2f\n", pi); return 0; }

👉 Εμφανίζει:

Η τιμή του π είναι περίπου 3.14

📘 Παράδειγμα 3 — χαρακτήρας ή αλφαριθμητικό

#include <stdio.h> int main() { const char grade = 'A'; const char message[] = "Συγχαρητήρια!"; printf("Βαθμός: %c\n", grade); printf("%s\n", message); return 0; }

👉 Εμφανίζει:

Βαθμός: A Συγχαρητήρια!

🔹 2. Δήλωση σταθερών με #define

Η οδηγία #define δηλώνει μια σταθερά πριν ξεκινήσει το πρόγραμμα (πριν τη main()).

Δεν χρησιμοποιεί ίσον = και δεν τελειώνει με ;.

📘 Παράδειγμα 1 — απλός αριθμός

#include <stdio.h> #define DAYS_IN_YEAR 365 int main() { printf("Ένα έτος έχει %d ημέρες.\n", DAYS_IN_YEAR); return 0; }

👉 Εμφανίζει:

Ένα έτος έχει 365 ημέρες.

📘 Παράδειγμα 2 — δεκαδικός αριθμός

#include <stdio.h> #define PI 3.14159 int main() { printf("Η τιμή του π είναι περίπου %.3f\n", PI); return 0; }

👉 Εμφανίζει:

Η τιμή του π είναι περίπου 3.142

📘 Παράδειγμα 3 — συμβολοσειρά (string)

#include <stdio.h> #define MESSAGE "Καλώς ήρθες στο μάθημα της C!" int main() { printf("%s\n", MESSAGE); return 0; }

👉 Εμφανίζει:

Καλώς ήρθες στο μάθημα της C!

📘 Παράδειγμα 4 — χρήση και των δύο (const και #define)

#include <stdio.h> #define MAX_SCORE 100 const int MIN_SCORE = 0; int main() { printf("Βαθμοί από %d έως %d\n", MIN_SCORE, MAX_SCORE); return 0; }

👉 Εμφανίζει:

Βαθμοί από 0 έως 100

🧠 Διαφορές const και #define

const #define
Είδος μεταβλητή σταθερή μακροεντολή (αντικατάσταση κειμένου)
Τύπος δεδομένων έχει τύπο (π.χ. int, float) δεν έχει τύπο
Έλεγχος από compiler ναι όχι (αντικαθίσταται πριν τη μεταγλώττιση)
Παράδειγμα const int a = 5; #define A 5
Τελειώνει με ; ✅ ναι ❌ όχι

🧩 1️⃣ Τι κάνει το #define

Η εντολή #define είναι εντολή του μεταγλωττιστή (compiler). Λέει στην C:

"Πριν ξεκινήσεις το πρόγραμμα, όπου βλέπεις αυτή τη λέξη, αντικατέστησέ την με αυτή την τιμή."

ΔΕΝ δημιουργεί πραγματική μεταβλητή, απλώς αντικαθιστά κείμενο.

📘 Παράδειγμα με #define

#include <stdio.h> #define PI 3.14159 int main() { double r = 5.0; double area = PI * r * r; // ο compiler βλέπει: 3.14159 * 5.0 * 5.0 printf("Εμβαδόν κύκλου: %.2f\n", area); return 0; }

👉 Ο compiler δεν βλέπει "PI". Την αντικαθιστά και βλέπει:

double area = 3.14159 * r * r;

🧩 2️⃣ Τι κάνει το const

Η λέξη const δημιουργεί πραγματική μεταβλητή στη μνήμη, απλώς δεν μπορείς να αλλάξεις την τιμή της.

📘 Παράδειγμα με const

#include <stdio.h> int main() { const double PI = 3.14159; // σταθερή μεταβλητή double r = 5.0; double area = PI * r * r; printf("Εμβαδόν κύκλου: %.2f\n", area); // PI = 3.14; ❌ ΑΠΑΓΟΡΕΥΕΤΑΙ - θα βγάλει σφάλμα return 0; }

👉 Εδώ η PI ζει στη μνήμη, αλλά είναι μόνιμη — δεν αλλάζει.

🔍 Η βασική διαφορά με απλά λόγια:

#define const
Είναι εντολή του μεταγλωττιστή (αντικατάσταση κειμένου) κανονική μεταβλητή με σταθερή τιμή
Υπάρχει στη μνήμη; ❌ Όχι ✅ Ναι
Έχει τύπο (int, float...); ❌ Όχι ✅ Ναι
Ελέγχεται από τον compiler; ❌ Όχι ✅ Ναι
Μπορεί να αλλάξει τιμή; ❌ Όχι (αλλά είναι απλό κείμενο) ❌ Όχι (ο compiler το απαγορεύει)
Παράδειγμα #define TAX 0.24 const float TAX = 0.24;

🎯 Παράδειγμα για να δεις τη διαφορά καθαρά:

#include <stdio.h> #define TAX1 0.24 // #define = απλή αντικατάσταση const float TAX2 = 0.24; // const = πραγματική σταθερά int main() { float price = 100; printf("Τιμή με ΦΠΑ (#define): %.2f\n", price + price * TAX1); printf("Τιμή με ΦΠΑ (const): %.2f\n", price + price * TAX2); // TAX1 = 0.13; ❌ Λάθος σύνταξης (δεν είναι μεταβλητή!) // TAX2 = 0.13; ❌ Δεν επιτρέπεται αλλαγή (είναι const) return 0; }

👉 Και οι δύο τυπώνουν το ίδιο αποτέλεσμα:

Τιμή με ΦΠΑ (#define): 124.00 Τιμή με ΦΠΑ (const): 124.00

Αλλά "εσωτερικά" διαφέρουν:

💡 Πότε χρησιμοποιώ ποιο;

Θες να... Χρησιμοποίησε
Ορίσεις κάτι γενικό, σταθερό για όλο το πρόγραμμα (π.χ. μέγιστη τιμή, σταθερό μαθηματικό) #define
Έχεις σταθερά που σχετίζεται με τύπους δεδομένων (π.χ. float, int) ή χρειάζεται έλεγχο τύπου const

3.10 Καλές Πρακτικές

✨ Συμβουλές για Καλό Κώδικα

  1. Χρησιμοποιήστε περιγραφικά ονόματα: studentAge αντί για a
  2. Αρχικοποιήστε πάντα τις μεταβλητές: Αποφύγετε garbage values
  3. Χρησιμοποιήστε const για σταθερές: Καθιστά τον κώδικα πιο ασφαλή
  4. Επιλέξτε τον κατάλληλο τύπο: Μην χρησιμοποιείτε double αν φτάνει float
  5. Περιορίστε το scope: Δηλώστε μεταβλητές όσο πιο κοντά στη χρήση τους

Παράδειγμα Καλής Πρακτικής

#include <stdio.h> const float TAX_RATE = 0.15f; // Σταθερά με περιγραφικό όνομα int main() { // Αρχικοποίηση κατά τη δήλωση float grossSalary = 50000.0f; float taxAmount = grossSalary * TAX_RATE; float netSalary = grossSalary - taxAmount; // Περιγραφική έξοδος printf("Μικτός μισθός: %.2f€\n", grossSalary); printf("Φόρος (%.0f%%): %.2f€\n", TAX_RATE * 100, taxAmount); printf("Καθαρός μισθός: %.2f€\n", netSalary); return 0; }

📋 Σύνοψη Κεφαλαίου

Σε αυτό το κεφάλαιο μάθαμε τα θεμέλια των μεταβλητών και των τύπων δεδομένων στη C:

🎯 Κλειδί-Σημεία:

  • Μεταβλητές είναι δεσμευμένοι χώροι μνήμης για αποθήκευση δεδομένων
  • Βασικοί τύποι: int, float, double, char, bool
  • Πάντα αρχικοποιείτε τις μεταβλητές σας
  • Κανόνες ονομασίας καθορίζουν έγκυρα ονόματα μεταβλητών
  • Type casting επιτρέπει μετατροπές μεταξύ τύπων
  • Scope και lifetime καθορίζουν που και πότε υπάρχουν οι μεταβλητές

Στο επόμενο κεφάλαιο θα μάθουμε για τελεστές και εκφράσεις!

🔥 Ασκήσεις για Εξάσκηση

  1. Δηλώστε μεταβλητές για την αποθήκευση ονόματος, ηλικίας και βαθμού φοιτητή
  2. Γράψτε πρόγραμμα που υπολογίζει την περίμετρο ενός κύκλου
  3. Δημιουργήστε πρόγραμμα που μετατρέπει Celsius σε Fahrenheit
  4. Πειραματιστείτε με sizeof για διαφορετικούς τύπους δεδομένων
  5. Δοκιμάστε type casting μεταξύ int, float και char
  6. Δημιουργήστε παραδείγματα με global και local variables