7-1 ΜΑΘΗΜΑ 7 ο Περισσότερα για Κυκλικές και Διπλά Διασυνδεόμενες Λίστες, Συναρτήσεις Βιβλιοθήκης, Διαχείριση Αρχείων.

Slides:



Advertisements
Παρόμοιες παρουσιάσεις
Δομές στην C (επανάληψη)
Advertisements

Το αλφαριθμητικό (string)
POINTERS, AGGREGATION, COMPOSITION. POINTERS TO OBJECTS.
Ανασκόπηση σε Δείκτες, Ουρές, Στοίβες, Συνδεδεμένες Λίστες
ΜΑΘΗΜΑ 7ο Κυκλικές και Διπλά Συνδεδεμένες Λίστες,
ΕΠΛ 231 – Δομές Δεδομένων και Αλγόριθμοι
Γλώσσα C & Unix Τμήμα Πληροφορικής, ΑΠΘ B’ εξάμηνο
Lab 3: Sorted List ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι18/10/2010.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
Αναδρομη και static Γραψετε την συναρτηση sequence_size που διαβαζει μια απροσδιοριστου μεγεθους σειρας και υπολογιζει και τυπωνει το μεγεθος της. int.
ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΙΑΔΙΚΑΣΤΙΚΟ ΠΡΟΓΡΑΜMΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ – ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ.
Τύποι πραγματικών αριθμών
Συναρτήσεις Κληση/Επιστροφη Παραμετροι
Φροντηστήριο Διαχείριση Περιεχομένου Παγκόσμιου Ιστού και Γλωσσικά Eργαλεία.
Εργασία Η υλοποίηση του αλγορίθμου συγχώνευσης θα πρέπει να χρησιμοποιεί την ιδέα των ροών (streams). Θα πρέπει να υπάρχουν δύο διαφορετικά είδη.
ΜΕΤΑΒΛΗΤΕΣ - ΤΥΠΟΙ ΜΑΘΗΜΑ 3.
ΕΠΑΝΑΛΗΨΗΕΠΑΝΑΛΗΨΗ ΠΡΟΓΡΑΜΜΑΤΑ. ΠΡΟΓΡΑΜΜΑ 1 ΕΞΗΓΗΣΤΕ ΤΙ ΕΞΟΔΟ ΠΑΡΑΓΕΙ ΤΟ ΠΑΡΑΚΑΤΩ ΠΡΟΓΡΑΜΜΑ #include int main() { char ch; int i; float fl; printf("dose.
Ολυμπιάδα Πληροφορικής
Ολυμπιάδα Πληροφορικής
Ολυμπιάδα Πληροφορικής
Διδάσκων: Παύλος Παυλικκάς1 Ολυμπιάδα Πληροφορικής Stacks - Στοίβες.
1 Ολυμπιάδα Πληροφορικής Μάθημα 5. 2 Στόχοι μαθήματος Πίνακες 2 διαστάσεων.
ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΙΑΔΙΚΑΣΤΙΚΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ – ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ.
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ
Δυναμικη Δεσμευση Μνημης Συνδεδεμενες Λιστες (dynamic memory allocation, linked lists) Πως υλοποιουμαι προγραμματα που δεν γνωριζουμε πριν την εκτελεση.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αρχεία.
6-1 ΜΑΘΗΜΑ 6 ο Ανασκόπηση σε Δείκτες, Συνδεδεμένες Λίστες, Ουρές, Στοίβες.
ΗΜΜΥ 111 ΔΟΜΗΜΕΝΟΣΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΚΩΣΤΑΣ ΚΟΝΤΟΓΙΑΝΝΗΣ Αναπληρωτής Καθηγητής Τμήμα ΗΜΜΥ Πολυτεχνείο Κρήτης.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
Στοιχειώδεις Δομές Δεδομένων TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA A A A Τύποι δεδομένων στη C Ακέραιοι.
ΗΥ150 – Προγραμματισμός Ξ. Ζαμπούλης ΗΥ-150 Προγραμματισμός Δομές Δεδομένων.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
Lab 3: Sorted List ΕΠΛ231-Δομές Δεδομένων και Αλγόριθμοι115/4/2015.
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 1 Δείκτες σε συναρτήσεις Δείκτης σε συνάρτηση – Περιέχει τη διεύθυνση του κώδικα της συνάρτησης – Ό π ως ένας.
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
9-1 ΜΑΘΗΜΑ 9 ο Δυαδικά Δένδρα, Διάσχιση Δυαδικών Δένδρων Υλικό από τις σημειώσεις Ν. Παπασπύρου, 2006.
Streams Streams: κανάλια ροής δεδομένων Κανάλια εισόδου: ανάγνωση δεδομένων Κανάλια εξόδου: αποστολή δεδομένων Συνήθεις πηγές και προορισμοί δεδομένων:
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
2/28/00epl-1311 Παραδειγματα Aλγοριθμων Αριθμος λεξεων που διαβαστηκαν απο εισοδο Εκτυπωση περιφερειας τετραγωνων με * Υπολογισμος exp(x,n) = 1 + x/1!
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης ΗΥ -150 Προγραμματισμός Αρχεία.
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΗΥ150 – ΠρογραμματισμόςΞ. Ζαμπούλης ΗΥ-150 Προγραμματισμός Αρχεία.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Αλφαριθμητικά (Strings)
ΗΥ150 – Προγραμματισμός Ξενοφών Ζαμπούλης 1 getchar() /* char_count.c A program to count characters of input. */ main() { int c ; int count = 0; while.
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Επιπλέον στοιχεία της C.
ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Διδάσκοντες:Γιάννης Μαΐστρος Στάθης Ζάχος Νίκος Παπασπύρου
ΛΟΓ102: Τεχνολογία Λογισμικού Ι Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ102:
ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΗΛΕΚΤΡΟΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ Διδάσκοντες:Στάθης Ζάχος Νίκος Παπασπύρου
ΗΥ150 – ΠρογραμματισμόςΚώστας Παναγιωτάκης ΗΥ-150 Προγραμματισμός Τύποι Μεταβλητών Τελεστές Βασική Είσοδος/Έξοδος.
TEXNΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ – ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ.
ΜΑΘ106/3122 – Γλώσσα Προγραμματισμού Ξ. Ζαμπούλης ΜΑΘ106/3122 Γλώσσα Προγραμματισμού Δομές Δεδομένων.
Τεχνολογικό Εκπαιδευτικό Ίδρυμα Θεσσαλίας Προγραμματισμός ΗΥ Ενότητα 2: Συναρτήσεις Εισόδου ⁄ Εξόδου. Διδάσκων: Ηλίας Κ Σάββας, Αναπληρωτής Καθηγητής.
Τεχνολογία και Προγραμματισμός Υπολογιστών Ενότητα 9: Αρχεία - Λίστες Επίκουρος Καθηγητής Χρήστος Μακρής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο.
1 ο Εργαστήριο: Κατασκευή Εφαρμογών Client-Server echoserver και echoclient – Κώδικας εφαρμογών σε C Μπαλόμπας Παναγιώτης 8ο ΕΠΑΛ Θεσσαλονίκης 1 /* Αρχείο.
ΔΟΜΗ ΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ ΣΕ C 1.Σχόλια 2.Οδηγίες προεπεξεργαστή 3.Ορισμοί τύπων 4.Δηλώσεις συναρτήσεων (πρωτότυπα) 5.Ορισμός της main 6.Ορισμοί συναρτήσεων.
ΜΕΤΑΒΛΗΤΕΣ-ΣΤΑΘΕΡΕΣ -ΕΚΦΡΑΣΕΙΣ
Επανάληψη.
Χαρακτήρες και συμβολοσειρές
Αναγνωριστικά Αναγνωριστικά (identifiers) – Ονοματοδοσία
Δείκτες Προγραμματισμός Ι
Τύποι Μεταβλητών.
Τεχνολογία και Προγραμματισμός Υπολογιστών
ΣΥΝΑΡΤΗΣΕΙΣ (Functions)
Τύποι Μεταβλητών Τελεστές Βασική Είσοδος/Έξοδος
EPL231 – Data Structures and Algorithms
Προγραμματισμός ΗΥ Ενότητα 12: Αρχεία Δομών. Διδάσκων: Ηλίας Κ Σάββας,
ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΓΛΩΣΣΑ C
Μεταγράφημα παρουσίασης:

7-1 ΜΑΘΗΜΑ 7 ο Περισσότερα για Κυκλικές και Διπλά Διασυνδεόμενες Λίστες, Συναρτήσεις Βιβλιοθήκης, Διαχείριση Αρχείων

7-2 Διπλά συνδεδεμένες λίστες(i) firstlast Επίσης γραμμικές διατάξεις Δυο σύνδεσμοι σε κάθε κόμβο, προς τον επόμενο και προς τον προηγούμενο Γενική μορφή, π.χ. για υλοποίηση ουράς:

7-3 Διπλά συνδεδεμένες λίστες(ii) Τύπος κόμβου DListNode typedef struct DListNode_tag { int data; struct DListNode_tag * next; struct DListNode_tag * prev; } DListNode; Τύπος dlist typedef struct { DListNode * first; DListNode * last; } dlist; Άδεια λίστα const dlist dlistEmpty = { NULL, NULL };

7-4 Διπλά συνδεδεμένες λίστες(iii) Τύπος κόμβου DListNode typedef struct DListNode_tag { int data; struct DListNode_tag * next; struct DListNode_tag * prev; } DListNode; Τύπος dlist typedef struct { DListNode * first; DListNode * last; } dlist; firstlast

7-5 Διπλά συνδεδεμένες λίστες(iv) Εισαγωγή στοιχείου στην αρχή firstlast

7-6 Διπλά συνδεδεμένες λίστες(v) Εισαγωγή στοιχείου στην αρχή void dlistInsert (dlist * lp, int t) { DListNode * n = (DListNode *) malloc(sizeof(DListNode)); if (n == NULL) { fprintf(stderr, "Out of memory\n"); exit(1); } n->data = t;

7-7 Διπλά συνδεδεμένες λίστες(vi) Εισαγωγή στοιχείου στην αρχή (συνέχεια) if (lp->first == NULL) { n->prev = n->next = NULL; lp->first = lp->last = n; } else { n->prev = NULL; n->next = lp->first; lp->first->prev = n; lp->first = n; }

7-8 Διπλά συνδεδεμένες λίστες(vii) if (lp->first == NULL) { n->prev = n->next = NULL; lp->first = lp->last = n; } else { n->prev = NULL; n->next = lp->first; lp->first->prev = n; lp->first = n; } firstlast n

7-9 Κυκλικές λίστες(i) Τύπος clist typedef struct { ListNode * first; ListNode * last; } clist; Άδεια λίστα const clist clistEmpty = { NULL, NULL }; firstlast

7-10 Κυκλικές λίστες(ii) Εισαγωγή στοιχείου void clistInsert (clist * lp, int t) { ListNode * n = (ListNode *) malloc(sizeof(ListNode)); if (n == NULL) { fprintf(stderr, "Out of memory\n"); exit(1); } n->data = t;

7-11 Κυκλικές λίστες(iii) Εισαγωγή στοιχείου (συνέχεια) if (lp->first == NULL) { lp->first = lp->last = n; n->next = n; } else { n->next = lp->first; lp->last->next = n; lp->last = n; }

7-12 Κυκλικές λίστες(iv) if (lp->first == NULL) { lp->first = lp->last = n; n->next = n; } else { n->next = lp->first; lp->last->next = n; lp->last = n; } firstlast n

7-13 Κυκλικές λίστες(v) Αφαίρεση στοιχείου int clistRemove (clist * lp) { int result; if (lp->first == NULL) { fprintf(stderr, "Nothing to remove" " from empty list\n"); exit(1); } result = lp->first->data;

7-14 Κυκλικές λίστες(vi) Αφαίρεση στοιχείου (συνέχεια) if (lp->first == lp->last) { free(lp->first); lp->first = lp->last = NULL; } else { lp->first = lp->first->next; free(lp->last->next); lp->last->next = lp->first; } return result; }

7-15 Κυκλικές λίστες(vii) if (lp->first == lp->last) { free(lp->first); lp->first = lp->last = NULL; } else { lp->first = lp->first->next; free(lp->last->next); lp->last->next = lp->first; } return result; } firstlast

7-16 Κυκλικές λίστες(viii) Εκτύπωση στοιχείων (λάθος!) void clistPrint (clist l) { ListNode * n; for (n = l.first; n != NULL; n = n->next) { printf("%d\n", n->data); }

7-17 Κυκλικές λίστες(ix) Εκτύπωση στοιχείων (σωστό!) void clistPrint (clist l) { ListNode * n; for (n = l.first; n != NULL; n = n->next) { printf("%d\n", n->data); if (n->next == l.first) break; }

7-18 Ταξινομημένες λίστες(i) Τύπος ListNode typedef struct ListNode_tag { int data; struct ListNode_tag * next; } ListNode; Άδεια λίστα ListNode *aList = NULL; Εισαγωγή στοιχείου void slistInsert (ListNode *lp, int t) { ListNode * prev, *curr; curr = lp; ListNode * n = (ListNode *) malloc(sizeof(ListNode)); if (n == NULL) { printf("Out of memory\n"); exit(1); }

7-19 Ταξινομημένες λίστες(ii) Εισαγωγή στοιχείου (συνέχεια) n->data = t; while (curr != NULL && curr->data < t){ prev = curr; curr = curr->next; } n->next = curr; prev->next = n; } n 20 curr prev

7-20 Ταξινομημένες λίστες (iii) Αφαίρεση στοιχείου void slistRemove (ListNode * lp, int t) { ListNode *prev; ListNode *curr; curr = lp; while (curr != NULL && curr->data < t) { prev = curr; curr = curr->next; } if (curr == NULL) { printf(”%d was not found\n”, t); exit(1); } prev->next = curr->next; free(curr); }

7-21 Ταξινομημένες λίστες (iv) void slistRemove (slist * lp, int t) { ListNode * n; while (lp != NULL && lp->data < t) lp = lp->next); if (lp == NULL) { printf(”%d was not found\n”, t); exit(1); } n = lp; lp = lp->next; free(n); } t=24

7-22 Παράμετροι του προγράμματος(i) Επικεφαλίδα του προγράμματος int main (int argc, char * argv[]); Παράμετροι –argc ο αριθμός των παραμέτρων –argv[i] η i-οστή παράμετρος –argv[0] το όνομα του προγράμματος Αποτέλεσμα –ακέραιος αριθμός που επιστρέφεται στο λειτουργικό σύστημα –συνήθως 0 για επιτυχή τερματισμό

7-23 Παράμετροι του προγράμματος(ii) Παράδειγμα int main (int argc, char * argv[]) { int i; printf("Program %s called with " "%d parameters:\n", argv[0], argc-1); for (i = 1; i < argc; i++) printf(" %s", argv[i]); printf("\nand will return 0\n"); return 0; }

7-24 Συναρτήσεις εισόδου-εξόδου(i) Βασικές συναρτήσεις εισόδου-εξόδου int printf (const char * format,...); int scanf (const char * format,...); Ειδικοί χαρακτήρες στο format –Ακέραιοι αριθμοί %d στο δεκαδικό σύστημα %u χωρίς πρόσημο στο δεκαδικό σύστημα %o χωρίς πρόσημο στο οκταδικό σύστημα %x χωρίς πρόσημο στο δεκαεξαδικό σύστημα

7-25 Συναρτήσεις εισόδου-εξόδου(ii) Ειδικοί χαρακτήρες στο format –Αριθμοί κινητής υποδιαστολής %f σε μορφή: [-]ddd.dddddd %e σε μορφή: [-]ddd.dddddd e [+/-]ddd %g σε μορφή %f ή %e –Άλλοι τύποι %c χαρακτήρες %s συμβολοσειρές %p δείκτες

7-26 Συναρτήσεις εισόδου-εξόδου(iii) Παραλλαγές στο format –Μέγεθος αριθμών %h αριθμοί short π.χ. %hd, %hx %l αριθμοί long ή double π.χ. %ld, %lf %L αριθμοί long double π.χ. %Lf –Μήκος αποτελέσματος %8d αριθμός σε μήκος 8 χαρακτήρων %20s συμβολοσειρά σε μήκος 20 χαρακτήρων %+8d αριθμός σε μήκος 8 χαρακτήρων με + %08d αριθμός σε μήκος 8 χαρακτήρων, τα πρώτα 0 %-8d όπως το %8d με στοίχιση αριστερά

7-27 Συναρτήσεις εισόδου-εξόδου(iv) Είσοδος-έξοδος χαρακτήρων int putchar (int c); int getchar (); Είσοδος-έξοδος συμβολοσειρών int puts (const char * s); char * gets (char * s); Έλεγχος τέλους δεδομένων int eof (); –Η σταθερά EOF παριστάνει το τέλος των δεδομένων και έχει τύπο int.

7-28 Παράδειγμα Αντιγραφή δεδομένων –οι χαρακτήρες που διαβάζονται εκτυπώνονται, μέχρι να παρουσιαστεί τέλος δεδομένων void main () { int c; while ((c = getchar()) != EOF) putchar(c); }

7-29 Συναρτήσεις διαχείρισης αρχείων(i) Τύπος αρχείου FILE * fp; Άνοιγμα αρχείων FILE * fopen (const char * filename, const char * mode); –Παράμετρος mode r ανάγνωση (read) w εγγραφή (write) a προσθήκη (append) t κείμενο (text) b δυαδικά δεδομένα (binary)

7-30 Συναρτήσεις διαχείρισης αρχείων(ii) Κλείσιμο αρχείων int fclose (FILE * fp); Είσοδος-έξοδος χαρακτήρων int fputc (int c, FILE * fp); int fgetc (FILE * fp); Είσοδος-έξοδος συμβολοσειρών int fputs (const char * s, FILE * fp); char * fgets (char * s, int n, FILE * fp);

7-31 Συναρτήσεις διαχείρισης αρχείων(iii) Βασικές συναρτήσεις εισόδου-εξόδου int fprintf (FILE * fp, const char * format,...); int fscanf (FILE * fp, const char * format,...); Έλεγχος τέλους αρχείου int feof (FILE * fp);

7-32 Συναρτήσεις διαχείρισης αρχείων(iv) Είσοδος-έξοδος πολλών δεδομένων size_t fwrite (const void * p, size_t size, size_t num, FILE * fp); size_t fread (void * p, size_t size, size_t num, FILE * fp); –Ο ακέραιος τύπος size_t χρησιμοποιείται για τη μέτρηση χώρου μνήμης σε bytes.

7-33 Παράδειγμα(i) Αντιγραφή δυαδικών αρχείων int main (int argc, char * argv[]) { FILE * fin, * fout; unsigned char buffer[1000]; size_t count; fin = fopen(argv[1], "rb"); if (fin == NULL) return 1; fout = fopen(argv[2], "wb"); if (fout == NULL) return 2;

7-34 Παράδειγμα(ii) (συνεχίζεται) while (!feof(fin)) { count = fread(buffer, 1, 1000, fin); fwrite(buffer, 1, count, fout); } fclose(fin); fclose(fout); return 0; }

7-35 Συναρτήσεις βιβλιοθήκης(i) Είσοδος και έξοδος –Περιέχει όλες τις συναρτήσεις εισόδου-εξόδου –Προκαθορισμένα αρχεία FILE * stdin; τυπική είσοδος FILE * stdout; τυπική έξοδος FILE * stderr; τυπική έξοδος σφαλμάτων –Ισοδυναμίες printf(...)  fprintf(stdout,...) scanf(...)  fscanf(stdin,...) κ.λπ. –Συναρτήσεις διαχείρισης αρχείων με τυχαία πρόσβαση (random access)

7-36 Συναρτήσεις βιβλιοθήκης(ii) Διαχείριση συμβολοσειρών –size_t strlen (const char * s); Μέτρηση αριθμού χαρακτήρων της συμβολοσειράς s. –char * strcpy (char * s1, const char * s2); Αντιγραφή της συμβολοσειράς s2 στην s1. –char * strcat (char * s1, const char * s2); Προσθήκη της συμβολοσειράς s2 στο τέλος της s1. –int strcmp (const char * s1, const char * s2); Σύγκριση των συμβολοσειρών s1 και s2.

7-37 Συναρτήσεις βιβλιοθήκης(iii) Μετατροπή συμβολοσειρών –int atoi (const char * s); Μετατροπή της συμβολοσειράς s σε int. –long int atol (const char * s); Μετατροπή της συμβολοσειράς s σε long int. –double atof (const char * s); Μετατροπή της συμβολοσειράς s σε double.

7-38 Παράδειγμα Μια δυνατή υλοποίηση της strcmp int strcmp (const char * s1, const char * s2) { while (*s1 == *s2 && *s1 != '\0') { s1++; s2++; } return (*s1)-(*s2); } –Υπόθεση: οι τιμές του τύπου char είναι στο διάστημα (όχι αρνητικές)

7-39 Προεπεξεργαστής (preprocessor)(i) Εντολή #include #include #include "myheader.h" Εντολή #define #define MAX_CHARS 1000 char s[MAX_CHARS]; #define INC(x) ((x)++) INC(a); INC(*p);

7-40 Προεπεξεργαστής (preprocessor)(ii) Εντολές #ifdef, #ifndef, #else και #endif #define DEBUG #ifdef DEBUG printf("debugging is on\n"); #else printf("debugging is off\n") #endif #ifndef DEBUG printf("optimizations allowed\n"); #endif