ΔΟΜΗ ΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΟΣ ΣΕ C 1.Σχόλια 2.Οδηγίες προεπεξεργαστή 3.Ορισμοί τύπων 4.Δηλώσεις συναρτήσεων (πρωτότυπα) 5.Ορισμός της main 6.Ορισμοί συναρτήσεων Τμήμα Δηλώσεων
ΣΧΟΛΙΑ Παράδειγμα // Σχόλιο γραμμής /* Το παρόν πρόγραμμα υπολογίζει τη μέση τιμή τριών αριθμών */
ΟΔΗΓΙΕΣ ΠΡΟΕΠΕΞΕΡΓΑΣΤΗ Η οδηγία #include ενσωματώνει το περιεχόμενο του αρχείου stdio.h, το οποίο αποτελείται από δηλώσεις των βασικών συναρτήσεων εισόδου-εξόδου της C, στο αρχείο του πηγαίου κώδικα.
Η οδηγία #include “arxeio.h” προκαλεί την ενσωμάτωση του περιεχομένου του αρχείου arxeio.h, που δημιούργησε ο προγραμματιστής και είναι αποθηκευμένο στον τρέχοντα κατάλογο (directory), στο πρόγραμμά μας. ΟΔΗΓΙΕΣ ΠΡΟΕΠΕΞΕΡΓΑΣΤΗ
ΤΜΗΜΑ ΔΗΛΩΣΕΩΝ Το τμήμα δηλώσεων περιέχει όλες τις δηλώσεις και ορισμούς για συμβολικά ονόματα που χρησιμοποιούνται στο πρόγραμμα.
ΟΡΙΣΜΟΣ ΤΗΣ main int main ( void ) { Τμήμα Δηλώσεων εντολή_1 εντολή_2 εντολή_ν return 0; } τύπος
Η ΣΥΝΑΡΤΗΣΗ main Κάθε πρόγραμμα σε C πρέπει να έχει μια συνάρτηση main. Το πρόγραμμα αρχίζει να εκτελείται με την συνάντηση της πρώτης εντολής της main και τερματίζεται με την συνάντηση της τελευταίας εντολής : return 0; ΟΡΙΣΜΟΙ ΣΥΝΑΡΤΗΣΕΩΝ Στο τμήμα ορισμοί συναρτήσεων γράφονται όλες οι συναρτήσεις που χρησιμοποιούνται από την main.
ΠΑΡΑΔΕΙΓΜΑ ΕΝΟΣ ΑΠΛΟΥ ΠΡΟΓΡΑΜΜΑΤΟΣ ΣΕ C Πρόβλημα Γράψτε ένα πρόγραμμα σε C που να υπολογίζει και τυπώνει το άθροισμα και τη μέση τιμή τριών αριθμών.
Πρόγραμμα /* Υπολογίζει τη μέση τιμή τριών αριθμών*/ #include int main (void) { /* Τμήμα δηλώσεων*/ double x1, x2, x3, athroisma, mesi_timi; printf(“\nΔώστε τις τιμές των τριών αριθμών :”); scanf(“%lf %lf %lf ”, &x1, &x2, &x3); printf(“\nΟι αριθμοί που δώσατε είναι οι:”);
printf(“%5.3f %5.3f %5.3f ”, x1, x2, x3); /* Υπολογισμός του αθροίσματος*/ athroisma = x1 + x2 + x3; /*Υπολογισμός της μέσης τιμής*/ mesi_timi = athroisma / 3.0; /*Eκτύπωση της μέσης τιμής*/ printf(“\nΗ μέση τιμή είναι: %5.3f”, mesi_timi); return 0; }
ΤΟ ΑΛΦΑΒΗΤΟ ΤΗΣ C Πεζά : a b c d... z Κεφαλαία : A B C D... Z Ψηφία : Ειδικοί χαρακτήρες : =, ==, !=, &, &&, +, ++,/, -, -- *, +=, _=, *=, /=, %, ||, … Δεσμευμένες λέξεις: auto, break, case, char, default, do, double, else, enum, extern, float, int, if, for, while, return, short, sizeof, struct, switch, void, typedef, union, static
ΟΝΟΜΑΤΑ Ενα όνομα στην C αποτελείται από μια ακολουθία γραμμάτων, ψηφίων και του ειδικού χαρακτήρα _. Ο πρώτος χαρακτήρας πρέπει να είναι γράμμα ή _. Παράδειγμα athroisma_1 xaraktiras x1 y1 ΣΥΜΒΟΛΟΣΕΙΡΕΣ Παράδειγμα “ Δώστε τα δεδομένα” “x + y”
Ακέραιοι(integer) Μη έγκυροι ακέραιοι 1, [MININT, MAXINT] MININT = MAXINT= Πραγματικοί(floating point) (Ακέραιο τμήμα) (τελεία) (κλασματικό τμήμα) Επιστημονική μορφή x Ε2 ή 0.123e2
ΧΑΡΑΚΤΗΡΕΣ ASCII 128 χαρακτήρες EBCDIC 256 χαρακτήρες Κάθε χαρακτήρας αποθηκεύεται σε ένα byte και έχει σαν τιμή τον ακέραιο αριθμό που του αντιστοιχεί. ‘a’ 97 ‘A’ 65 ‘0’ 48 ‘b’ 98 ‘B’ 66 ‘1’ 49 ‘c’ 99 ‘C’ 67 ‘2’ 50
Χαρακτήρες διαφυγής (escape characters) ΟνομαCτιμή μηδενικός(NULL)‘\0’0 νέα γραμμή(new line)‘\n’10 επιστροφή (Carriage Return) ‘\r’13 διπλή απόστροφος‘\”’34 απλή απόστροφος‘\’’39 πλάγια γραμμή‘\\’92
ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΔΗΛΩΣΕΙΣ ΤΥΠΩΝ Μεταβλητή: συμβολική διεύθυνση τοποθεσίας μνήμης εντός της οποίας είναι καταχωρημένο το περιεχόμενό της. Το περιεχόμενο μιας μεταβλητής μεταβάλλεται κατά τη διάρκεια εκτέλεσης του προγράμματος, ενώ το περιεχόμενο μιας σταθεράς παραμένει αμετάβλητο. Μία δήλωση είναι ένα συντακτικό στοιχείο, το οποίο συσχετίζει ένα τύπο με μία οντότητα του προγράμματος όπως είναι η μεταβλητή.
Ενας τύπος δεδομένων είναι ένα σύνολο τιμών και ένα σύνολο πράξεων σε αυτές τις τιμές. Οι τύποι δεδομένων χωρίζονται σε δύο κατηγορίες: 1.Ενσωματωμένοι(built-in) τύποι δεδομένων 2.Τύποι δεδομένων που ορίζονται από τον προγραμματιστή (π.χ δομές, απαριθμητοί τύποι) Οι ενσωματωμένοι τύποι χωρίζονται σε : 1. Βασικούς(fundamental) τύπους δεδομένων 2. Παραγόμενους(derived) τύπους δεδομένων
ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΔΗΛΩΣΕΙΣ Integer Signed Short integer (short, short int, signed short, signed short int) 16 bits Integer (int, signed, signed int) λέξη μηχανής Long integer (long, long int, signed long, signed long int ) δύο λέξεις
Unsigned Short integer (unsigned short,unsigned short int) Integer (unsigned, unsigned int) Long integer (unsigned long, unsigned long int ) Floating point floating point (float) 32 double floating point (double) 64 long double floating point (long double)(96,128) Character(char) 8 bits
short int ή int [-2 15, ]=[-32768, 32767] int (32 bits ) [-2 31, ]=[ , … ] -L* * * * * ****-s 0 s**** * * * * * * * *L Οι ακέραιοι παριστάνονται ακριβώς στη μνήμη. Οι πραγματικοί προσεγγίζονται με τους αριθμούς μηχανής(στρογγύλευση)
ΔΗΛΩΣΗ ΣΤΑΘΕΡΩΝ 1) #define όνομα τιμή #define PI #define MHDEN 1e-20 #define N 200 2) const τύπος όνομα-σταθεράς = τιμή; const double PI = ; const float MHDEN = 1e-20; const int N=200;
ΔΗΛΩΣΕΙΣ ΜΕΤΑΒΛΗΤΩΝ τύπος δεδομένων λίστα μεταβλητών; τύπος δεδομένων : int, float, double, char λίστα μεταβλητών : ονόματα μεταβλητών χωρισμένα με κόμματα. Παράδειγμα inti, j; charxar_1, xar_2; floatmax, x, y;
Αριθμητικές Παραστάσεις με ακέραιους αριθμούς Τελεστές Προσεταιριστικότητα Ιεραρχία από δεξιά προς αριστερά 1 * / % από αριστερά προς δεξιά από αριστερά προς δεξιά 3 Πρώτα υπολογίζονται οι παραστάσεις εντός των παρενθέσεων Οι πράξεις εκτελούνται από τα αριστερά προς τα δεξιά
Παράδειγμα Η αριθμητική παράσταση y * y / 2 * z – 1 / x υπολογίζεται ως εξής (υπογραμμίζονται οι ήδη εκτελεσμένες πράξεις): a.y * y b.y * y / 2 c.y * y / 2 * z d.1 / x e.y * y / 2 * z – 1 / x
Αλγεβρική Παράσταση Παράσταση στην C k k/l l z + (x mod y) z + x % y a + b (a + b)/(c + d) c + d a 2 – 4bc a*a – 4 * b * c
Πράξη Τιμή 2 % / % / / % 9 3 n % 2 1, αν n περιττός 0, αν n άρτιος
Παράδειγμα Η αριθμητική παράσταση z – (a + b / 2) + w * y υπολογίζεται ως εξής: a.b / 2 b.a + b / 2 c.w * y d.z – (a + b / 2) e.z – (a + b / 2) + w * y
Η ΕΝΤΟΛΗ ΚΑΤΑΧΩΡΗΣΗΣ Εντολή καταχώρησης (απλή μορφή) μεταβλητή = παράσταση ; Παράδειγμα double x, y, mean, diff ; x = 1.0 ; y = 2.0 ; Για τους πραγματικούς ισχύουν τα ίδια όπως για τους ακέραιους αριθμούς εκτός από τον τελεστή /, ο οποίος επιστρέφει το πηλίκο της διαίρεσης.
mean = (x + y) / 2.0; diff = x – y ; Εντολή καταχώρησης (σύνθετη μορφή) H μεταβλητή τελεστής= παράσταση ; είναι ισοδύναμη με μεταβλητή = μεταβλητή τελεστής παράσταση ;
Αν int x =8, y=15; τότε εντολή ισοδύναμη εντολή τιμή y += x ; y = y + x; 23 y -= x ; y = y - x; 7 y /= x; y = y / x; 1 y %= x ; y = y % x; 7 Προσοχή ! H y *= x+5 ; ισοδύναμη με y = y * (x+5);
Οι τελεστές αύξησης και μείωσης Οι εντολές ++i; και i++ ; είναι ισοδύναμες με την i = i + 1; Αν η ++i χρησιμοποιηθεί εντός μιας παράστασης, η τιμή της ++i αυξάνεται πριν τον υπολογισμό της παράστασης. Ενώ η τιμή της i στην i++ αυξάνεται μετά τον υπολογισμό της παράστασης.
Παράδειγμα Αν protos =3; metritis = protos++; τότε η τιμή της metritis είναι 3 και της protos είναι 4. Αν protos = 3; metritis = ++protos; τότε η τιμή της metritis είναι 4 και της protos είναι 4.
Ο τύπος των αριθμητικών παραστάσεων Κάθε αριθμητική εντολή καταχώρησης έχει μία τιμή. Κανόνες 1. Αν ένας ή περισσότεροι όροι της παράστασης είναι double, τότε ο τύπος της τιμής της παράστασης είναι double. 2. Αν όλοι οι όροι είναι τύπου int, τότε ο τύπος της παράστασης είναι int. 3. Ο τύπος της τιμής της εντολής και ο τύπος της τιμής που αποθηκεύεται στη μεταβλητή είναι οι ίδιοι.
Παράδειγμα double x=3.2; int y = 5; Αν x = x + y ; τότε η τιμή της x είναι 8.2 (double) Αν y = x + y ; τότε η τιμή της y είναι 8 (int)
Κυρίαρχος(casting) τελεστής (τύπος) παράσταση Μετατρέπει τον τύπο της παράστασης στον τύπο που προσδιορίζει ο κυρίαρχος τελεστής. double protos = 3.8 ; int deyteros = 9 ; (int) (protos + deyteros); 12 protos=(int)protos + deyteros; 12.0 protos=(int)protos % deyteros; 3.0 protos=deyteros % (int)protos; 0.0
Αριθμητικές μετατροπές Αποφυγή της απώλειας δεδομένων. int, unsigned short, short<unsigned<long<unsigned long<float<double<long double double d; float f; int i; long double ld; short s; 5 * d - i double 5 * f - d double ld + d long double s + i int ή unsigned
Μετατροπές καταχώρησης Αν υπάρχει ασυμβατότητα τύπων, τότε γινεται αυτόματη μετατροπή της τιμής στον τύπο της μεταβλητής που τη δέχεται. Παράδειγμα double d; int i; floatf; d = f; (δεν υπάρχει πρόβλημα) f= d; (δεν υπάρχει πρόβλημα, εφόσον η d χωράει) i=d; (αυτόματη μετατροπή!, αποκόπτεται το δεκαδικό τμήμα της d).
Παράδειγμα Να γραφτούν οι εντολές για τον υπολογισμό των δύο πραγματικών ριζών της δευτεροβάθμιας εξίσωσης : ax 2 + bx + c = 0 diakrinousa = b * b – 4 * a * c; riza_1 = (-b + sqrt(diakrinousa)) / (2*a); riza_2 = (-b - sqrt(diakrinousa)) / (2*a); σειρά εκτέλεσης 2 3 1
ΛΟΓΙΚΕΣ ΠΑΡΑΣΤΑΣΕΙΣ Τελεστές συσχέτισης (relational operators) Αλγεβρικός τελεστής C Προσετ/τα Ιεραρχία < < αριστερή 1 <= αριστερή 1 > > αριστερή 1 >= αριστερή 1 = == αριστερή 2 != αριστερή 2
Η τιμή μιας λογικής παράστασης είναι : 1(αληθής) ή 0(ψευδής) Παράδειγμα a b a>b τιμή 2 1 αληθής ψευδης 0 Λογικοί τελεστές στην C && (and) || (or) ! (not) Παράσταση_1 Λογ. Τελεστής Παρασταση_2 !Παράσταση
O && επιστρέφει 1 αν και μόνον αν και οι δύο παραστάσεις έχουν μη μηδενική τιμή, διαφορετικά επιστρέφει 0(ψευδής) Ο || επιστρέφει 0 αν και μόνον αν και οι δύο παραστάσεις έχουν τιμή 0(ψευδής), διαφορετικά επιστρέφει 1(αληθής) Ο ! επιστρέφει 0(ψευδής) αν η παράσταση έχει μη μηδενική τιμή, διαφορετικά επιστρέφει 1(αληθής) Κανόνας Εκτελούνται πρώτα οι αριθμητικές πράξεις και μετά οι λογικές. Λογικοί τελεστές στην C
ΙΕΡΑΡΧΙΑ ΤΕΛΕΣΤΩΝ Τελεστές Σύμβολα Ιεραρχία ( ) 1 ! 2 * / % ==, !=,, >= 5 && 6 || 7
Παράδειγμα Οι παραστάσεις a) 0.0 <x < 3.5 b) x <= y <= z c) c < b < a σε C γράφονται a) 0.0 < x && x < 3.5 b) x <=y && y <= z c) c < b && b < a Αν logiki =1; τότε η τιμή της !logiki είναι 0
ΚατηγόρημαΑπλή μορφή !(a = = b) a != b !(a ! = b) a = = b !(a = b !(a b !(a > b) a <= b !(a >= b) a < b !(Λογ.παρ.1 && Λογ.παρ.2) (!Λογ.παρ.1) || (!Λογ.παρ.2) !(Λογ.παρ.1 || Λογ.παρ.2) (!Λογ.παρ.1) && (!Λογ.παρ.2)
ΜΕΤΑΒΛΗΤΕΣ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΧΑΡΑΚΤΗΡΩΝ char xar1, xar2; xar1 = ‘0’; xar2 = ‘6’; xar1 xar2 xar1 < xar2 ‘0’ ‘6’ 1 ‘0’ ‘b’ 1(ASCII) 0(EBCDIC) Η ‘4’ - ‘0’ ισούται με 4. Η ‘Α’ + pezo - ‘a’ επιστρέφει το αντίστοιχο κεφαλαίο γράμμα του pezo
ΒΑΣΙΚΕΣ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ - ΕΞΟΔΟΥ Η συνάρτηση εισόδου scanf scanf( συμβολοσειρά ελέγχου μορφής, λίστα εισόδου); Τύπος Προσ/στής μορφής short %hd int %d long %ld unsigned short %u unsigned %u unsigned long %lu
float %f %e double %lf %le long double %Lf %Le char %c Παράδειγμα int akeraios; scanf(“ %d”, &akeraios); Ρεύματα εισόδου: 20 _ _ _ _ _ 20 20_ _ _ _
double syndelestis; scanf( “ %3lf”, &syndelestis); Εισαγόμενη τιμή Καταχωρούμενη τιμή e e e e
1)Ανchar xaraktiras; τότε scanf(“%c”, &xaraktiras); 2)Αν int mikos; double platos; char xroma; και scanf(“%d%c%lf”, &mikos, &xroma, &platos); 2.1)Εισοδος από πληκ/γιο 50r1.3e3 τότε mikos=50, xroma=r, platos=1.3e3. 2.2) Εισοδος από πληκ/γιο 50 ⊔ ⊔ r ⊔ ⊔ 1.3e3 τότε mikos=50, xroma= ⊔, platos=
3) Αν scanf(“%d %c %lf”, &mikos, &xroma, &platos); Εισοδος από πληκ/γιο 50r1.3e3 τότε mikos=50, xroma=r, platos=1.3e3. Η συνάρτηση εξόδου printf printf( συμβολοσειρά ελέγχου μορφής, λίστα εξόδου);
ΕΝΤΟΛΕΣ ΕΞΟΔΟΥ Παράδειγμα int arithmos = 15; char apantisi = ‘n’; double riza = 4.32; ΕντολήΤυπώνει printf(“Δώστε τιμή για το x”);Δώστε τιμή για το x printf(“%d”, arithmos);15 printf(“%d”, 25);25 printf(“%d”, arithmos+10);25 printf(“%c”, ‘b’);b printf(“%c”, apantisi);n printf(“%f”, riza); printf(“%lf”, riza); printf(“%f”, 2.25); printf(“%e”, riza); e+00
Παράδειγμα Αν arithmos=15, τότε η printf(“%5d”, arithmos); Θα δημιουργήσει την εκτύπωση ⊔ ⊔ ⊔ 1 5 Η printf(“%–5d”, arithmos); θα έχει ως αποτέλεσμα ⊔ ⊔ ⊔ Ενώ η printf(“%+5d”, arithmos); ⊔ ⊔ + 1 5
Παράδειγμα double arithmos = ΕντολήΕκτύπωση printf(“%10.4f”, arithmos); ⊔ ⊔ ⊔ printf(“%10.3f”, arithmos); ⊔ ⊔ ⊔ ⊔ printf(“%10.3e”, arithmos); ⊔ e + 0 1
Παράδειγμα Αν platos = 10; dekadika = 4; τότε η printf(“%*d”, platos, arithmos); είναι ισοδύναμη με την printf(“%10d”, arithmos); και η printf(“%*.*f”, platos, dekadika, arithmos); είναι ισοδύναμη με την printf(“%10.4f”, arithmos);
ΑΠΛΑ ΠΡΟΓΡΑΜΜΑΤΑ ΣΕ C Πρόβλημα Γράψτε ένα πρόγραμμα σε C που να υπολογίζει και τυπώνει το άθροισμα και τη μέση τιμή τριών αριθμών.
ΑΛΓΟΡΙΘΜΟΣ 1. Διάβασε x1, x2, x3 και τύπωσε τις τιμές που διαβάστηκαν. 2. Υπολογισμός του athroisma =x1 + x2 + x3 3. Υπολογισμός της mesi_timi = athroisma / 3.0 ; 4. Εκτύπωση της mesi_timi
Πρόγραμμα /* Υπολογίζει τη μέση τιμή τριών αριθμών*/ #include int main (void) { /* Τμήμα δηλώσεων*/ double x1, x2, x3, athroisma, mesi_timi; printf(“\nΔώστε τις τιμές των τριών αριθμών :”); scanf(“%lf %lf %lf ”, &x1, &x2, &x3); printf(“\nΟι αριθμοί που δώσατε είναι οι:”);
printf(“%5.3f %5.3f %5.3f ”, x1, x2, x3); /* Υπολογισμός του αθροίσματος*/ athroisma = x1 + x2 + x3; /*Υπολογισμός της μέσης τιμής*/ mesi_timi = athroisma / 3.0; /*Eκτύπωση της μέσης τιμής*/ printf(“\nΗ μέση τιμή είναι: %5.3f”, mesi_timi); return 0; }
Πρόβλημα Γράψτε ένα πρόγραμμα σε C που να υπολογίζει και τυπώνει το εμβαδόν ενός ισόπλευρου τριγώνου όταν δίνεται η πλευρά του x.
ΑΛΓΟΡΙΘΜΟΣ Πρώτη μορφή 1. Διάβασε τη δεδομένη πλευρά x του τριγώνου 2. Υπολόγισε το ύψος h του τριγώνου 3. Υπολόγισε το εμβαδόν Ε του τριγώνου 4. Εκτύπωσε τις τιμές των x και E Δεύτερη μορφή 2. Υπολόγισε το ύψος από τον τύπο h=sqrt(3)/2*x 3. Υπολόγισε το εμβαδόν από τον τύπο e=0.5*x*h
Πρόγραμμα /* Υπολογίζει το εμβαδόν ενός ισόπλευρου τριγώνου, όταν δίνεται η πλευρά του*/ #include int main(void) { /*Τμήμα δηλώσεων*/ double x, h, e; printf(“\nΔώστε την πλευρά x του τριγώνου:”); scanf(“%lf”, &x);
/*Υπολογισμός του ύψους*/ h = sqrt(3)/2.0 * x; /*Υπολογισμός του εμβαδού*/ e = 0.5 * x * h; /*Εκτύπωση αποτελεσμάτων*/ printf(“\nTo ισόπλευρο τρίγωνο πλευράς %f έχει εμβαδόν %f”, x, e); return 0; }