ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης ΗΥ -150 Προγραμματισμός Τύ π οι Μεταβλητών Τελεστές Βασική Είσοδος / Έξοδος
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 2 Μεταβλητές « Ε π ώνυμες » θέσεις μνήμης Στη C όλες οι μεταβλητές π ρέ π ει να δηλώνονται Δηλώσεις : – τύ π ος όνομα ; – int myfirstvariable; Ονόματα ( καλύτερα μεγάλα α π ό μικρά : μέχρι 31 χαρακτήρες ) – να έχουν νόημα ( λ. χ. sum για άθροισμα ) – case sensitive ( λ. χ. var1, Var1) – Ξεκινούν α π ό γράμμα ή _ και μ π ορούν στη συνέχεια να π εριέχουν και αριθμούς ( λ. χ. myVar_1_int) – Προσοχή στις δεσμευμένες λέξεις της C (if, else, while, for, break, continue, int, float, double, char, …) και στα ονόματα συναρτήσεων Initialization: int myfirstvariable = 6; Δηλώσεις π ολλών μεταβλητών με κόμμα – int x,y = 0,z = -1;
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 3 Μεταβλητές Οι μεταβλητές μ π ορεί να είναι : – Το π ικές : έχει π ρόσβαση σε αυτές μόνο η συνάρτηση στην ο π οία έχουν δηλωθεί. Μόλις ολοκληρωθεί η εκτέλεση της συνάρτησης η μεταβλητή « χάνεται » – Καθολικές : έχουν π ρόσβαση σε αυτές όλες οι συναρτήσεις π ου βρίσκονται στο ίδιο αρχείο Διατηρούνται κατά την εκτέλεση του π ρογράμματος Προσοχή στη χρήση τους.
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 4 Μεταβλητές Καθολικές (global) έναντι το π ικών μεταβλητών (local) double sum;// καθολικές int nextOfX(int x) { x = x + 1; sum = sum+1; return x; } main() { int x = 0; // το π ική sum = 0; x = nextOfX(0); x = nextOfX(x); }
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 5 Στατικές Μεταβλητές Οι μεταβλητές μ π ορεί να είναι : – Το π ικές : μια μόνο συνάρτηση χρησιμο π οιεί την μεταβλητή π ου π ρέ π ει να την θυμάται μεταξύ διαφορετικών κλήσεων. Μοιάζουν με τις καθολικές μεταβλητές αλλά με τη διαφορά π ως δε « χάνονται » μετά το τέλος της συνάρτησης. – Καθολικές : ένα μικρό σύνολο α π ό συναρτήσεις χρησιμο π οιεί την μεταβλητή, ο π ότε η μεταβλητή δηλώνεται σαν στατική και όλες αυτές οι συναρτήσεις μ π αίνουν στο ίδιο αρχείο Αρχικο π οίηση στην αρχή της εκτέλεσης του π ρογράμματος – static int x=8;
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 6 Static variables void a() { static int staticVariable = 500; /* mono thn prwth fora*/ staticVariable++; printf( “%d\n”, staticVariable); } Output ….
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 7 Τύ π οι Μεταβλητών και Εκφράσεων Και οι μεταβλητές αλλά και οι εκφράσεις έχουν ένα τύ π ο δεδομένων Τύ π ος μεταβλητών σε τρία μέρη : – Μέρος π ρώτο : signed, unsigned, τί π οτα – Μέρος δεύτερο : long ή short ή τί π οτα – Μέρος τρίτο : char, int, float, double Το τελευταίο είναι το μόνο α π αραίτητο για να δηλώσει τύ π ο Δεν δίνουν όλοι οι συνδυασμοί συντακτικά σωστές δηλώσεις – int x; – long int x; – long float x; – unsigned char x;
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 8 Ανα π αράσταση και Εύρος Τιμών Χαρακτήρες char, 1 byte, 8 bits, ανα π αριστούν 2 8 = 256 τιμές Ακέραιοι int{-2 #bits-1, -2 #bits-1 + 1, …, 2 #bits-1 - 1} Πραγματικοί float ή double Οι double έχουν μεγαλύτερο εύρος τιμών και μεγαλύτερη ακρίβεια ανα π αράστασης α π ό τους float
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 9 Τύ π ος Μεταβλητών και Σταθερών Ο τύ π ος μιας μεταβλητής σε μια έκφραση είναι ο τύ π ος με την ο π οία την δηλώνουμε Ο τύ π ος μιας σταθεράς είναι – Σταθερά χαρακτήρα ’x’ -> μετατρο π ή στον αντίστοιχο ακέραιο ASCII – Ακέραια (π. χ., 1234) int, long int, unsigned long int, ό π οια τον χωράει 1234U -> unsigned int ή unsigned long int 1234L -> long int ή unsigned long int – Σταθερά κινητής υ π οδιαστολής > double f -> float
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 10 Τελεστές – Προτεραιότητα Πράξεων == ( ισότητα ), != ( ανισότητα ),, = ! ( όχι ), && για λογικό ΚΑΙ (AND), || για λογικό Η (OR) Πρόσθεση – Αφαίρεση : + - Πολλ / σμος – Διαίρεση :* / – double x = 5/2; //x = 2.0 – double y = 5.0/2; //x = 2.5 Υ π όλοι π ο διαίρεσης : % – int x = 5 % 2; //x = 1 Σειρά των π ράξεων : 1. ( ) 2. ! 3. * / %( α π ό αριστερά π ρος τα δεξιά ) ( α π ό αριστερά π ρος τα δεξιά ) 5. = > 6. == != Ε π ιστρέφουν 1 ( ΑΛΗΘΕΣ ) ή 0 ( ΨΕΥΔΕΣ ) int s = (x == 1) || (x == 2); 0 || Χ -> Χ int s = ! (x == 1) && (x == 2); !0 || Χ -> 1 int s = 1+((x == 1) || (x != 2))*2; 0 && Χ -> 0 !0 && Χ -> Χ
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 11 Μετατρο π ές Τύ π ων – Αριθμητικοί Τελεστές Οι εκφράσεις λοι π όν έχουν : μια τιμή και ένα τύ π ο Τι γίνεται αν στην εφαρμογή του κανόνα – έκφραση 1 έκφραση 2 τελεστής έκφραση 3 οι τύ π οι της έκφραση 2 και έκφρασης 3 είναι διαφορετικοί ; Π. χ,. x = y + z, ό π ου το y είναι int και το z είναι float Η « μικρότερη » έκφραση μετατρέ π εται στην « μεγαλύτερη » Η τελική εκφραση 1 έχει τον τύ π ο της « μεγαλύτερης » έκφρασης
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 12 Εκχωρήσεις τιμής σε μεταβλητή διαφορετικού τύ π ου – Το δεξί μέρος μετατρέ π εται στον τύ π ο του αριστερού μέρους ΠΡΟΒΛΗΜΑ : η μετατρο π ή μ π ορεί να χάνει δεδομένα / ακρίβεια – int x = 15.0/2.0; – char = unsigned char ή signed char, εξαρτάται α π ό τον μεταφραστή Μετατρο π ές Τύ π ων
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 13 Ρητή Μετατρο π ή Τύ π ων Type casting Ρητή μετατρο π ή α π ό ένα τύ π ο μεταβλητής σε κά π οιον άλλο. x = (int) y; γενική μορφή : – έκφραση 1 <- ( τύ π ος ) έκφραση 2 – η έκφραση 1 π αίρνει την τιμή της μετατρε π όμενης τιμής της έκφρασης 2
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 14 Τελεστές μοναδιαίας αύξησης / μείωσης i++; (i--;): μεταθεματικοί (postfix) ++i; (--i;): π ροθεματικοί (prefix) Η αύξηση / μείωση συμβαίνει π ριν ( για π ροθεματικούς )/ μετά ( για μεταθεματικούς ) την χρησιμο π οίηση της τιμής Αν μια έκφραση έχει π ολλα π λά ++ εξαρτάται α π ό τον μεταγλωττιστή x = i++; x = ++i; i = 1; x = 1; i = 2;
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 15 Τελεστές αντικατάστασης έκφραση 1 τελεστής = έκφραση 2 i += 2;: i = i + 2; x *= y + 2; x = x * (y + 2); δεξιά προς αριστερά!!
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 16 printf / scanf Εισαγωγή Μορφή εισόδου / εξόδου Εκτυ π ώσεις με διαφορετική μορφο π οίηση Παράμετροι – %c -- character – %d -- integer – %f -- float – %lf -- double Παράδειγμα int x; char c; scanf(“%d”,&x); c = ‘a’; printf(“x = %d c(char) = %c c(int) = %d\n”,x,c,c);
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 17 printf / scanf Μορφή εισόδου / εξόδου Παράμετροι – %c -- character – %d -- integer – %f -- float – %lf -- double Παράδειγμα float f; scanf(“%f”,&f); printf(“f = %f\nf ~= %.2f \n”,f,f);
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 18 Παράδειγμα #include int main() { int a = 1, b = 1, x = 0, y = 0; double w; x = 1 + a++; printf( "x = %d\n", x); printf( "a = %d\n", a); y = ++b; printf( "y = %d\n", y); printf( "b = %d\n", b); } /* results 2 */
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 19 Format identifiers %d %iDecimal signed integer. %oOctal integer. %x %XHex integer. %uUnsigned integer. %cCharacter. %sString.See below. %fdouble %e %Edouble. %g %Gdouble. %ppointer. %nNumber of characters written by this printf. No argument expected. %%. No argument expected.
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 20 Example I #include int main () { /* We will use a floating-point and an integer variable. */ double x; int n; /* Read in an integer. */ printf("Please enter an integer: "); scanf("%d", &n); printf("The integer was %d\n\n", n);
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 21 Example I cont /* Read in a double. */ printf("Please enter a double: "); scanf("%lf", &x); printf("The double was %g\n\n", x); /* Read in an integer and a double. */ printf("Please enter an integer and a floating-point number: "); scanf("%d%lf", &n, &x); printf("The numbers were %d %g\n", n, x); }
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 22 int day, year; scanf("%d %d", &day, &year); (1) char c, s[10]; int i; float f; (2) scanf("%c", &c); // reads next character and puts its value in c (3) scanf("%s", s); // reads next word and converts it to a string (4) scanf("%i", &i); // reads next word and converts it to an integer (5) scanf("%f", &f); // reads next word and converts it to a float (6) scanf("%c %s %i %f", &c, s, &i, &f); // multiple reads (7) printf("c=%c s=%s i=%i r=%3.1f¥n", c, s, i, f);
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 23 Παράδειγμα #include int a; void f(int a) { int b=0; static int c=0; b++; c++; printf("%d %d %d\n",a,b,c); } void g(int b) { b = a+b++; a = (b*b)/3; if (a > b) f(a); else f(b); } int main() { for(a=1; a<=20; a++) { g(a); } /* results*/
ΗΥ 150 – Προγραμματισμός Ξενοφών Ζαμπούλης 24 Τυ π ικά Λάθη printf – λιγότερα ορίσματα α π ό όσα π εριμένει – διαφορετικά ορίσματα α π ό αυτά π ου π εριμένει scanf – τα π ροηγούμενα – Ξεχάσατε το & Αθελημένες μετατρο π ές τύ π ων if(x=5) αντί για if(x==5) Ξεχάσατε το ; ή το αντίστροφο