1 / 30

Tύποι Δεδομένων

Tύποι Δεδομένων. signed/unsigned, long/short μετατροπη τυπων (αυτοματα και casting) char enum typedef strings struct. Βασικοί Tύποι Δεδομένων C. Tυπος Μεγεθος Πεδιο Τιμων Μοναδικες char, 1byte ‘ a’..‘z’ ‘A’..‘Z’‘0’..‘9’ 2 8 ή 256 int, 4 bytes -2 31 ..2 31 -1 2 32

Download Presentation

Tύποι Δεδομένων

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Tύποι Δεδομένων • signed/unsigned, long/short • μετατροπη τυπων (αυτοματα και casting) • char • enum • typedef • strings • struct

  2. Βασικοί Tύποι Δεδομένων C Tυπος Μεγεθος Πεδιο Τιμων Μοναδικες char, 1byte ‘a’..‘z’ ‘A’..‘Z’‘0’..‘9’28 ή 256 int, 4 bytes -231..231-1 232 float, 4 bytes 10-37..1038 232 double 8 bytes 10-307..10308 264 *δεικτης 4 bytes διευθυνσεις 232 (0..232 -1)

  3. Άλλοι Βασικοί Tύποι Δεδομένων • int Πεδιο Μεγεθος Τυπος -215..215-1 2 bytes short (με προσημο) 0..216-1 2 bytes unsigned short -231 .. 231 4 bytes int (με προσημο) 0 .. 232-1 4 bytes unsigned -263..263-1 8 bytes long (με προσημο) 0..264-1 8 bytes unsigned long\ signed/unsigned: ιδιο μεγεθος διαφορετικη σημασια! σχεση signed με unsigned

  4. Άλλοι Βασικοί Tύποι Δεδομένων • char Πεδιο Μεγεθος Τυπος -27..27 1 byte char (με προσημο) 0..28-1 1 byte unsigned char • float, double Πεδιο Μεγεθος Τυπος 10-37 .. 1038 4 bytes float 10-307 .. 10308 8 bytes double 10-4931..104932 16 bytes long double

  5. Περιορισμενο Πεδιο Τιμων • Λαθοι • Aναπαρασταση (round-off error) • πχ 0.1000001 αντι 0.1 ή • επαναλαμβανομενο round-off error μεγενθυνει λαθος • ισοτητα/ανισοτητα x==0.1, 0.999999866, 0.1000001 • Υπερχειλιση (overflow) char y = (char) 255; ++y; • Yπορροη (underflow) • 0.0 αντι 0.000000000000000000000000..001 (45 0s)

  6. Περιορισμενο Πεδιο Τιμων Τι θα συμβει; unsigned w = 0, x = 0xffffffff; --w; ++x; Τι ειναι η δεκαδικη τιμη του y και z: int y = 0xffffffff; unsigned z = 0xffffffff; Προσοχη με σχεσιακους τελεστες

  7. Mετατροπη Τυπων • Σε αριθμητικες εκφρασεις (αυτοματα) ενα τελεσταιος μετατρεπετε σε αλλο τυπο εαν υπαρχει αλλος τελεσταιος που ειναι πιο δεξια στην ακολουθη διαταξη: char int float double int x=2;float y=3.0; y/x => 3.0/2.0

  8. Mετατροπη Τυπων • Σε αναθεση (αυτοματα) η τιμη στα δεξια του = μετατρεπετε στον τυπο της μεταβλητης στα αριστερα του = int x = 3.14; /* 3 */ float x = (2/3); /* 0.0 */ • Casting (ρητη μετατροπη) float x=(float) 2/3; /*2.0/3, 2.0/3.0, 0.66666*/ float x = (float) (2/3); /* 0 */

  9. char • καθε χαρακτηρας αντιστοιχει σε ενα μοναδικο κωδικο • C βασιζεται στο ASCII code • αλφαβητικοι, ψηφιακοι, ειδικοι (‘\n’,‘\t’...) • ‘0’ 48, ‘1’ 49,.., ‘9’ 57 • ‘A’ 65, …, ‘Z’ 90 • ‘a’ 97, …, ‘z’ 122

  10. char • τμημα προγραμματος που τυπωνει τους ψηφιακους χαρακτηρες και τις αντιστοιχες ακεραιες τιμες τους int j; for(j=‘0’;j<=‘9’;++j) printf(“%c %d\n”, (char) j, j);

  11. Απαριθμητοί Τύποι(Enumerated Types) enum boolean_e {FALSE, TRUE}; enum boolean_e x; /* τυπου enum boolean_e*/ if (x== FALSE){ …}

  12. Απαριθμητοί Τύποι(Enumerated Types) • Συνταξη:enum onoma {name0, name1, …, name n}; • Σημασια: • ενα συνολο ακεραιων σταθερων • πρωτη σταθερά απαρίθμησης αναπαριστάται ως 0, η δευτερη ως 1 κτλ • Ορισμος απαριθμητης μεταβλητης • enum enum_onoma onoma; • πχ enum boolean_e y;

  13. Απαριθμητοί Τύποι(Enumerated Types) • Σταθερες απαριθμησης μπορουν να χρησιμοποιηθουν με αλλους τυπους - μεταχειριζονται σαν ακεραιες σταθερες • Μεταβλητες τυπου απαριθμησης μεταχειριζοντε σαν ακεραιες μεταβλητες • Δεν γινεται ελεγχος για τις τιμες αναθεσης • Oυσιαστικα ειναι σταθερες • Οριζονται συνηθως μετα τις σταθερες (global scope)

  14. Απαριθμητοι Τυποι • Συνταξη: • enum onoma{name0=constant, name1,..}; • enum month_e{JAN=1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC}; • JAN 1, FEB 2 κτλ • for(i=JAN;i<=DEC;++i){printf(“%d\n”,i;} • πχ enum incase_e {NONE=0, IN1=1, IN2=2, IN12=3, OUT=4, EMPTY=0};

  15. Απαριθμητοί Τύποι(Enumerated Types) • Επιτρεπετε χρηση ενος ονοματος μονο σε ενα enum (οχι σε αλλο enum ουτε και #define) • Δεν επιτρεπεται: enum day_e{Mon, Tue, Wed, Thu, Fri, Sat, Sun}; enum weekday_e{Mon, Tue, Wed, Thu, Fri};

  16. typedef typedef unsigned int nsint; nsint x; • Συνταξη: typedef type new_type; • Σημασια: new_type ειναι νεο ονομα για τον τυπο με ονομα type. • Xρησιμο για αποφυγη μεγαλων ονοματων τυπων (πιο ακριβη περιγραφη) • Ενας τυπος μπορει να εχει πολλα ονοματα

  17. typedef typedef enum boolean_e boolean_t; boolean_t x; typedef unsigned int nsint; typedef nsint ID_TYPE; nsint foo(nsint x, unsigned int y, ID_TYPE z){...}

  18. strings • string ειναι ενας πινακας με χαρακτηρες που τελειωνει με τον χαρακτηρα NULL ‘\0’ • char tname[]=“yia sou”; • char tname[]={‘y’, ‘i’, ‘a’, ‘ ’, ‘s’, ‘o’, ‘u’, ‘\0’}; • “yia sou” αποτελειται απο 8 χαρακτηρες • printf(“%s”,tname); • scanf(“%s”,tname);/*προσοχη ‘\0’ προστεθει στο τελος*/ • string pointer: σχεδον παντα επεξεργασια strings γινεται με string pointer: char *

  19. int strlen(char *p){ int length; for(length=0;*p!=NULL;++p,++length);/*den metra NULL*/ return length; } char tname[]=“yia sou”; char *pname = tname; char *ps = “epl 131”; printf(“String %s has length %d characters\n”, tname,strlen(tname));

  20. int strlen(char *p){ int length=0; while(*p!=NULL){ ++length; ++p; } return length; } int strlen(char *p){ int length=0; while(*p++!=NULL){ ++length; } return length; }

  21. int strlen(char *p){ char *t = p; while(*p++); return (int) (p-t)/sizeof(char); }

  22. πως διαβαζουμε μια γραμμη σε string • Γραψετε την συναρτηση int getline(char s[], int lim) που διαβαζει μια γραμμη απο την εισοδο. Η γραμμη αποθηκευεται στον πινακα χαρακτηρων s που ειναι παραμετρος της συναρτησης. To μεγιστο μεγεθος γραμμης οριζεται με το lim. Η συναρτηση επιστρεφει το μηκος της γραμμης.

  23. int getline(char s[], int limit) { int c, k; for(k=0;k<limit-1 && (c=getchar())!=‘\n’ && c!=EOF) s[k]=c; if (c==‘\n’){ s[k]=c; ++k; } s[k]=‘\0’; return k; }

  24. strings • Πολυ χρησιμη βιβλιοθηκη <string.h>

  25. ονομα struct structure members μελη δομης Δομες/struct(ures):ορισμος τυπου • struct επιτρεπει τον ορισμο συνθετων τυπων δεδομενων struct student_s{ char name[80]; int id; int etos; float vathmos; };

  26. struct: oρισμος μεταβλητης struct student_s{ char name[80]; int id; float vathmos; }; struct student_s student; typedef struct student_s student_t; student_t student_table[STUDENT_NUM];

  27. struct: αναφορα σε μελη student.id = 123456; if (student_table[i].vathmos >8.0) ++very_good_grade; for(i=0;i<STUDENT_NUM;++i) printf(“%s %6d %5.2f”,student_table[i].name, student_table[i].id, student_table[i].vathmos);

  28. struct: αναθεση • Επιτρεπεται αναθεση μεταξυ μεταβλητων τυπου structs • student_table[i]=student_table[j]; • αντιγραφει καθε τιμη του j στο i • αργη, ιδιαιτερα για παραμετρους. προτιμοτερο παιρνατε/επιστρεφεται δεικτη • void display_student(student_t *s) αντι void display_student(student_t s)

  29. struct: pointers void display_student(student_t s){ printf(“%s %6d %5.2f”,s.name, s.id, s.vathmos); } αναφορα σε μελη struct με δεικτη: δεικτης->μελος void display_student(student_t *s){ printf(“%s %6d %5.2f”,s->name, s->id, s->vathmos); }

  30. struct:αναφορα σε μελη με δεικτη for(i=0;i<STUDENT_NUM;++i) display_student(&student_table[i]); student_t *s,*p; ……... if (s->id != p->id){...}

More Related