ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα: Εισαγωγή στη C θεωρία Δ. Ε. Μετάφας Τμ. Ηλεκτρονικών Μηχ. Τ.Ε.
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3
C, assembly, machine code Code in C void swap(int a,int b) { tmp = a; a = b; b = tmp; } /* end swap() */ Assembly language program MOV MOV MOV MOV r2,r0 r0,r1 r1,r2 pc,r14 Machine language code 0xe1a02000 0xe1a00001 0xe1a01002 0xe1a0f00e
Compiler, Linker, Loader C program Compiler Assembly Assembly Assembler Obj Library Object Linker Executable Loader Memory
Επεξεργαστής και μνήμη CPU PC Register File instruction instruction instruction instruction instruction instruction instruction ALU data data data data data data Memory
Επεξεργαστής και μνήμη (2)
Σε τι μεταφράζονται οι εντολές της C Η εντολή a = a + b; μεταφράζεται στον επεξεργαστή ARM σε ldr r0, mem0 ldr r1, mem1 add r0, r0, r1 str mem0, r0
Πως εκτελούνται οι εντολές της γλώσσας μηχανής start Fetch Next Instruction Decode Instruction Execute Instruction end FETCH DECODE EXECUTE
Πρόγραμμα «Hello world!» #include <stdio.h> int main (void) { printf( Hello world!\n ); } return 0;
#include <stdio.h> Με την οδηγία #include <όνομα_αρχείου> ο compiler ενσωματώνει τα περιεχόμενα του αρχείου στον κώδικα του προγράμματος
Σχόλια Δύο τρόποι: /*.. γραμμές.. */ και // σχόλιο μιάς γραμμής
Μνήμη και μεταβλητές Η μνήμη RAM ενός υπολογιστή αποτελείται από εκατομμύρια θέσεις αποθήκευσης δεδομένων που έχουν διαδοχική διεύθυνση Π.χ. 32 GB μνήμη -> 32*10^9 bytes μνήμη Κάθε μεταβλητή χαρακτηρίζεται από τη διεύθυνση μνήμης που αποθηκεύεται και (λόγω του τύπου της) ένα αριθμό από συνεχόμενα bytes που δεσμεύονται για αυτήν Η τιμή μιας μεταβλητής είναι το περιεχόμενο αυτών των bytes ερμηνευόμενα σύμφωνα με το «συμβόλαιο» του τύπου της
Τύποι Μεταβλητών στη C
Ονόματα μεταβλητών Τα ονόματα των μεταβλητών στη C μπορούν να περιέχουν γράμματα, αριθμούς και επιτρέπεται επίσης ο ειδικός χαρακτήρας «_». Ο πρώτος χαρακτήρας δεν επιτρέπεται να είναι αριθμός. Γίνεται διάκριση μεταξύ κεφαλαίων και πεζών γραμμάτων.
Δήλωση μεταβλητών Η δήλωση των μεταβλήτών γίνεται ως: <τύπος μεταβλητής> όνομα ; Π.χ. int a; float a, b, c; unsigned char a;
Εκχώρηση τιμής Η εκχώρηση γίνεται με το «=». Π.χ. int a; a=5; Η αρχική τιμή μπορεί να γίνει ταυτόχρονα με τη δήλωση. Π.χ. int a=5; Ειδικά θέματα: int a=0100; // ekxwrhsh binary int a=0x10; // ekxwrhsh hex int a=5, b=10; // ekxwrhsh pollwn int a=10.9; // a=10 a=5e-3; // a=5*10^-3
Σταθερές Σταθερές. Π.χ. const int a = 10; #define N 100
Type cast Το type cast μετατρέπει προσωρινά τον τύπο μιας μεταβλητής. Π.χ. float a; a=(float)1/2; float a; a=(float)i/j;
printf Η συνάρτηση printf() χρησιμοποιείται για την εμφάνιση δεδομένων στο αρχείο εξόδου stdout (standard output stream), το οποίο εξ ορισμού συνδέεται με την οθόνη Η συνάρτηση printf() δέχεται λίστα παραμέτρων. Η πρώτη και μόνη υποχρεωτική παράμετρος είναι το αλφαριθμητικό μορφοποίησης. Π.χ. printf( hello world\n ); printf( h taxythta einai u=%6.2lf kai h thesh einai s=%6.2lf, a, x);
printf () και χαρακτήρες μετατροπής Το προσδιοριστικό μετατροπής αρχίζει με % και ακολουθείται με χαρακτήρα Το lf (long float) χρησιμοποιείται για τον τύπο double
scanf Η συνάρτηση scanf() χρησιμοποιείται για την είσοδο δεδομένων από το αρχείο εισόδου stdin (standard input stream) το οποίο εξ ορισμού συνδέεται με το πληκτρολόγιο. Η συνάρτηση scanf() δέχεται λίστα παραμέτρων. Η πρώτη είναι το αλφαριθμητικό μορφοποίησης και ακολουθούν οι διευθύνσεις μνήμης των μεταβλητών στις οποίες θα καταχωρηθούν τα δεδομένα που θα πληκτρολογήσει ο χρήστης. Π.χ. float a; scanf( %f, &a); char a[100]; scanf( %s, a); int a; float b; scanf( %d%f, &a, &b);
Τελεστές (1) Τελεστής εκχώρησης. Π.χ. a=5; a=b=5; Αριθμητικοί τελεστές. Π.χ. a=a+2; a=b/4; a=b%2; b=a++; b=++a; b=--a;
Τελεστές (2) Τελεστές σύγκρισης. Π.χ. a==5; a>5; a>=5; a!=5; Προσοχή: Μία έκφραση χαρακτηρίζεται ψευδής (false) όταν η τιμή της είναι μηδέν (0) και αληθής (true) όταν η τιμή της είναι διαφορετική από το μηδέν. Π.χ. if (5) { } if (a=0) { } a=(b>5) + (c!=6); if (a) { // είναι ισοδύναμο με το if (a!=0) }
Τελεστές (3) Συνδιαστικοί τελεστές. Π.χ. a*=b; // a=a*b Λογικοί τελεστές. Π.χ. (a==0) && (b==0) (a==0) (b==0) Υπάρχουν επίσης bit τελεστές (&,, ^,~,>>,<<)
Τελεστές (4)
Τέλος Ενότητας