Εισαγωγή στον Προγραµµατισµό Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011
Hello World /* Αρχείο hello.c * Εµφανίζει στην οθόνη το * µήνυµα hello world */ #include <stdio.h> /* #include genlib.h */ Σχόλια κείµενο µεταξύ /* και */ Συµπεριλήψεις βιβλιοθηκών <...> πρότυπες βιβλιοθήκες προσωπικές βιβλιοθήκες main() { printf( Hello, world.\n ); } Κυρίως πρόγραµµα συνάρτηση (function) main αρχή και τέλος συνάρτησης {..} εντολές (statements)
printf Κλήση της συνάρτησης printf που συµπεριλαµβάνεται στη βιβλιοθήκη stdio.h H printf εµφανίζει δεδοµένα στην οθόνη το όρισµα (argument) της συνάρτησης printf καθορίζει τι ακριβώς θα εµφανίσει στην οθόνη Το Hello, world.\n είναι µια ακολουθία χαρακτήρων ή αλφαριθµητικό (string) To \n είναι ένας ειδικός χαρακτήρας που ονοµάζεται αλλαγή γραµµής (newline)
Πρόγραµµα άθροισης δύο αριθµών /* Αρχείο add2.c * Διαβάζει δύο αριθµούς, τους προσθέτει, και εµφανίζει το * άθροισµά τους. */ #include <stdio.h> main() { int n1, n2, total; Γραµµή δήλωσης (declaration) µεταβλητών (variables) int ακέραιος (integer)
Πρόγραµµα άθροισης δύο αριθµών /* Αρχείο add2.c * Διαβάζει δύο αριθµούς, τους προσθέτει, και εµφανίζει το * άθροισµά τους. */ #include <stdio.h> main() { int n1, n2, total; printf( Aυτό το πρόγραµµα προσθέτει δύο αριθµούς.\n ); printf( 1 ος αριθµός: ); scanf( %d, &n1); Φάση Εισόδου
scanf Κλήση της συνάρτησης scanf που συµπεριλαµβάνεται στη βιβλιοθήκη stdio.h Η scanf διαβάζει δεδοµένα από το πληκτρολόγιο scanf( %d, &n1); Η ακολουθία χαρακτήρων %d προσδιορίζει τι είδους δεδοµένα θα διαβαστούν. Το %d είναι χαρακτήρας µορφoποίησης και σηµαίνει ότι θα διαβαστεί ακέραιος. Το &n1 σηµαίνει ότι ο ακέραιος θα αποθηκευτεί στη µεταβλητή n1 Η σηµασία του & θα εξηγηθεί αργότερα
Πρόγραµµα άθροισης δύο αριθµών /* Αρχείο add2.c * Διαβάζει δύο αριθµούς, τους προσθέτει, και εµφανίζει το άθροισµά τους. */ #include <stdio.h> main() { int n1, n2, total; printf( Aυτό το πρόγραµµα προσθέτει δύο αριθµούς.\n ); printf( 1 ος αριθµός: ); scanf( %d, &n1); printf( 2 ος αριθµός: ); scanf( %d, &n2); total = n1 + n2; Φάση Υπολογισµού
Πρόγραµµα άθροισης δύο αριθµών /* Αρχείο add2.c * Διαβάζει δύο αριθµούς, τους προσθέτει, και εµφανίζει το άθροισµά τους. */ #include <stdio.h> main() { int n1, n2, total; } printf( Aυτό το πρόγραµµα προσθέτει δύο αριθµούς.\n ); printf( 1 ος αριθµός: ); scanf( %d, &n1); printf( 2 ος αριθµός: ); scanf( %d, &n2); total = n1 + n2; printf( Tο άθροισµα είναι %d.\n, total); Φάση Εξόδου %d κωδικός µορφοποίησης (format code) printf( %d + %d = %d, n1, n2, total);
Πρόγραµµα άθροισης 3 αριθµών /* Αρχείο add3.c * Διαβάζει τρεις αριθµούς, τους προσθέτει, και εµφανίζει το άθροισµά τους. */ #include <stdio.h> main() { int n1, n2, n3, total; } printf( Aυτό το πρόγραµµα προσθέτει τρεις αριθµούς.\n ); printf( 1 ος αριθµός: ); scanf( %d, &n1); printf( 2 ος αριθµός: ); scanf( %d, &n2); printf( 3 ος αριθµός: ); scanf( %d, &n3); total = n1 + n2 + n3; printf( Tο άθροισµα είναι %d.\n, total);
Τύποι Δεδοµένων (data type) int integer όλοι οι ακέραιοι (...,-2,-1,0,1,2,...) µέχρι τα όρια που καθορίζονται από το υλικό του υπολογιστή συνήθως -32768...+32767 (16 bit) Αριθµοί κινητής υποδιαστολής (floating-point numbers) float double double-precision floating point 10-38... 10 +38 (32 bit)
Άθροιση 2 δεκαδικών αριθµών /* Αρχείο add2.c * Διαβάζει δύο δεκαδικούς αριθµούς, τους προσθέτει, και εµφανίζει το * άθροισµά τους. */ #include <stdio.h> main() { float n1, n2, total; } printf( Aυτό το πρόγραµµα προσθέτει δύο δεκαδικούς αριθµούς.\n ); printf( 1 ος αριθµός: ); scanf( %f, &n1); printf( 2 ος αριθµός: ); scanf( %f, &n2); total = n1 + n2; printf( Tο άθροισµα είναι %f.\n, total);
Παραστάσεις (expressions) Αποτελείται από όρους (terms) και τελεστές (operators) total = n1 + n2; Κάθε όρος µπορεί να είναι: µια σταθερά µια µεταβλητή κλήση συνάρτησης παράσταση σε παρενθέσεις
Σταθερές (constants) Ακέραιες (π.χ. 1000000) Κινητής Υποδιαστολής (π.χ. 2.5 ή 2.9979Ε+8) Αλφαριθµητικές (π.χ. Hello )
Μεταβλητές (variables) Όνοµα αρχίζει µε γράµµα ή χαρακτήρα υπογράµµισης (_) case sensitive (π.χ. ABC δεν είναι ίδια µεταβλητή µε abc ή Αbc) Όλοι οι χαρακτήρες είναι γράµµατα, ψηφία ή χαρακτήρας υπογράµµισης Δεν µπορεί να είναι κάποια από τις λέξεις κλειδιά (keywords) της C (π.χ. double, int, break, κ.λ.π.) Οποιοδήποτε µήκος αλλά εκλαµβάνει µόνο τους 31 πρώτους χαρακτήρες Καλό είναι το όνοµα που θα δώσουµε να είναι σχετικό µε τη χρήση της µεταβλητής
Λέξεις-Κλειδιά της C auto, break, case, char, const, continue, default, do, double, else, enum, extern, float, for, goto, if, int, long, register, return, short, signed, sizeof, static, struct, switch, typedef, union, unsigned, void, volatile, while
Μεταβλητές (variables) Εντολές Ανάθεσης µεταβλητή = παράσταση; µεταβλητή είναι η µεταβλητή στην οποία θέλετε να αποδώσετε τιµή παράσταση είναι η καθοριζόµενη τιµή Παραδείγµατα n1 = 5; n1 = n2; n1 = 3 + n2;
Τελεστές και τελεστέοι Αριθµητικοί τελεστές (operators) + πρόσθεση - αφαίρεση * πολλαπλασιασµός / διαίρεση Τελεστέοι (operands) οι υπο-παραστάσεις στις οποίες εφαρµόζεται ο τελεστής Μονοµελής τελεστής (unary operator) εφαρµόζεται µόνο σε έναν τελεστέο (π.χ. n1) Διµελής τελεστής (binary operators) εφαρµόζεται σε ένα ζεύγος τελεστέων
Διαίρεση ακεραίων Η διαίρεση 9 / 4 δίνει αποτέλεσµα 2 διότι αγνοεί το υπόλοιπο η διαίρεση δύο ακεραίων είναι ένας ακέραιος Για τον υπολογισµό και του δεκαδικού µέρους 9.0 / 4 9 / 4.0 9.0 / 4.0 τουλάχιστον ένας από τους δύο τελεστέους πρέπει να είναι αριθµός κινητής υποδιαστολής.
Τελεστής Υπολοίπου Τελεστής Υπολοίπου % πρέπει και οι δύο τελεστέοι να είναι ακέραιοι επιστρέφει το υπόλοιπο της διαίρεσης δύο ακεραίων 9 % 4 = 1 0 % 4 = 0 19 % 4 = 3 20 % 4 = 0
Προτεραιότητα τελεστών Κανόνες προτεραιότητας (precedence rules) Μονοµελείς τελεστές Πολλαπλασιαστικοί τελεστές (*, /, %) αν στον ίδιο τελεστέο εφαρµόζονται δύο από αυτούς τους τελεστές, εκτελείται αυτός που βρίσκεται αριστερότερα. Προσθετικοί τελεστές (+, -) πάλι αν στον ίδιο τελεστέο εφαρµόζονται δύο από αυτούς τους τελεστές, εκτελείται αυτός που βρίσκεται αριστερότερα. 2 * x + 3 * y 2 * (x + 3) * y 10 5 2 10 (5 2) average = n1 + n2 / 2 average = (n1 + n2) / 2
Μετατροπή τύπων Από εκατοστά σε πόδια και ίντσες 1 ίντσα=2.54 εκατοστά 1 πόδι=12 ίντσες Κώστας Κουφός: Ύψος 213 εκατοστά 213/2.54=83.858 ίντσες 83.858/12=6.988 πόδια Άρα, 6 πόδια και? ίντσες; Απάντηση, 83.858-12*6=11.858 ίντσες
Μετατροπή τύπων Αρα, Κώστας Κουφός: Ύψος 6 πόδια, 11.858 ίντσες Αν στρογγυλοποιήσουµε: 7 πόδια, 0 ίντσες
Μετατροπή τύπων /* Αρχείο cmtofeet.c * Μετατροπή µήκος σε cm σε πόδια και ίντσες */ #include <stdio.h> main() { float totalinches, cm, inch; int feet; printf( Mετατροπή cm σε πόδια και ίντσες.\n ); printf( Μήκος σε cm: ); scanf( %f, &cm); totalinches = cm / 2.54; feet = totalinches / 12; inch = totalinches feet * 12; printf( %f cm = %d ft %f in\n, cm, feet, inch); }
Μετατροπή τύπων Το πρόγραµµα εκτυπώνει: 213.000000 cm = 6 ft 11.858269 in
Τελεστής ρητής µετατροπής (type cast) Αντί για: feet=totalinches/12; Μπορούσα να έβαζα feet= (int) (totalinches/12); To (int) λέγεται τελεστής ρητής µετατροπής. Εδώ όµως δεν χρειάζεται γιατί η µετατροπή γίνεται αυτοµάτως.
Τελεστής ρητής µετατροπής (type cast) int num, den; float quotient; Έστω num=15 και den=10 quotient = num /den; quotient = num / (float) den; quotient = (float) num / den; Ο τελεστής ρητής µετατροπής (float) έχει υψηλότερη προτεραιότητα από τον τελεστή της διαίρεσης quotient = (float) (num / den);