Βασικές Αρχές Προγραμματισμού Κεφάλαιο 2 ΗγλώσσαC
Ιστορική Αναδρομή ΗανάπτυξητηςC ξεκίνησε το 1972 στα εργαστήρια Bell από τον Dennis Ritchie με σκοπό την ανάπτυξη ενός λειτουργικού συστήματος για τον υπολογιστή PDP-11 Βασίστηκε στις προγενέστερες BCPL (Martin Richards 1967) και B (Ken Thompson 1972) ΗπρώτηπεριγραφήτηςC δημοσιεύτηκε το 1978 από τους Kernigham και Ritchie. Η περιγραφή αυτή θεωρείται το Ευαγγέλιο της γλώσσας. Το 1988 οριστικοποιήθηκε η γλώσσα και δημιουργήθηκε το πρότυπο της (ANSI C) από το Εθνικό Ίδρυμα Προτύπων της Αμερικής Η C είναι άμεσα συνδεδεμένη με το λειτουργικό σύστημα UNIX, καθώς δημιουργήθηκε για την ανάπτυξη του και τα περισσότερα τμήματα του λειτουργικού γράφηκαν σε C 2/19
Βασικά Χαρακτηριστικά της C Είναι γλώσσα υψηλού επιπέδου με στοιχεία όμως που συναντώνται μόνο σε γλώσσες χαμηλού επιπέδου και στη γλώσσα μηχανής Η C επιβάλλει λίγους περιορισμούς και παρέχει μεγάλη ευελιξία (π.χ. Προσπέλαση 10 ου στοιχείου ενός πίνακα 5 θέσεων) Η C είναι μια ιδιαίτερα λιτή γλώσσα Οι δεσμευμένες λέξεις της δεν ξεπερνούν τις 30 Δεν υπάρχουν ενσωματωμένες εντολές εισόδου και εξόδου Η C είναι δομημένη γλώσσα Δυνατότητα τμηματικού χειρισμού του προγράμματος (modularity) Ενθαρρύνει τη χρήση ξεχωριστών υποπρογραμμάτων (συναρτήσεων) με τοπικές μεταβλητές που υλοποιούν ανεξάρτητες λειτουργίες Η C είναι μια μεταγλωττιζόμενη γλώσσα Οι γλώσσες προγραμματισμού είναι είτε μεταγλωττιζόμενες (compiled) ή διερμηνευόμενες (interpreted) 3/19
Η δομή ενός προγράμματος σε C Κάθε πρόγραμμα σε C έχει μία και μόνο μία συνάρτηση main main () δηλώσεις μεταβλητών; εκτελέσιμες προτάσεις; Δηλώσεις Μεταβλητών Όλες οι μεταβλητές που χρησιμοποιούνται σε ένα πρόγραμμα πρέπει νωρίτερα να έχουν δηλωθεί Η δήλωση μιας μεταβλητής περιλαμβάνει: τον τύπο δεδομένων, το όνομα και τον χαρακτήρα ; Π.χ. int a; Οι εκτελέσιμες προτάσεις είναι οι εντολές του προγράμματος Κάθε εκτελέσιμη πρόταση, όπως και κάθε δήλωση μεταβλητών τερματίζει με τον χαρακτήρα ; 4/19
Η δομή ενός σύνθετου προγράμματος function1 () δηλώσεις μεταβλητών; εκτελέσιμες προτάσεις; function2 () δηλώσεις μεταβλητών; εκτελέσιμες προτάσεις; main () δηλώσεις μεταβλητών; εκτελέσιμες προτάσεις; Ένα σύνθετο πρόγραμμα μπορεί να περιλαμβάνει και άλλες συναρτήσεις πέρα από τη main Κάθε συνάρτηση έχει τις δικές της δηλώσεις μεταβλητών Οι μεταβλητές αυτές ονομάζονται τοπικές (local) και μπορούν να χρησιμοποιηθούν μόνο μέσα στις συναρτήσεις που ορίζονται 5/19
Σχόλια Προγράμματος Κάθε πρόγραμμα θα πρέπει να είναι επαρκώς σχολιασμένο, ώστε να είναι περισσότερο ευανάγνωστο και κατανοητό Σχόλιο θεωρείται οτιδήποτε περιλαμβάνεται ανάμεσα στα ζεύγη χαρακτήρων /* και */ Επίσης υπάρχουν και τα σχόλια γραμμής τα οποία οριοθετούνται από το ζεύγος χαρακτήρων // και το τέλος της γραμμής /* Το πρώτο μου πρόγραμμα στη C Θεσσαλονίκη 25/9/1990 */ main () // Η συνάρτηση main // Η χρήση της συνάρτησης printf printf( Hello world\n"); // θα εμφανίσει το κείμενο 6/19
Δηλώσεις Μεταβλητών Η σύνταξη της δήλωσης μιας μεταβλητής είναι η type όνομα; Όπου type είναι ο τύπος δεδομένων και όνομα το όνομα της μεταβλητής Π.χ. int a; // Η μεταβλητή με όνομα a είναι ακέραιου τύπου char ch; // Η μεταβλητή με όνομα ch είναι τύπου χαρακτήρα float k; // Η μεταβλητή με όνομα k είναι πραγματικού τύπου double f; // Η μεταβλητή με όνομα f είναι πραγματικού τύπου 2πλης ακρίβειας Η C επιτρέπει την δήλωση πολλαπλών μεταβλητών με τον ίδιο τύπο δεδομένων στην ίδια εντολή χρησιμοποιώντας τον χαρακτήρα, Π.χ. int s,n; // Οι μεταβλητές με ονόματα s και n είναι ακέραιου τύπου Στη δήλωση μιας μεταβλητής είναι δυνατό να αποδώσουμε και αρχική τιμή: int my_number=5, my_second_number=10, my_third_number; char chr= Z ; float pi = 3.14; 7/19
Ονοματολογία Το όνομα μιας μεταβλητής μπορεί να περιλαμβάνει χαρακτήρες, αριθμούς και το σύμβολο υπογράμμισης "_" Κάθε όνομα μεταβλητής πρέπει να ξεκινά με χαρακτήρα Απαγορεύεται η χρήση ελληνικών χαρακτήρων Αποδεκτά ονόματα: my_var, my_1st_var,number12 Μη αποδεκτά ονόματα: άθροισμα, _sum, 12a Τα πεζά γράμματα θεωρούνται διαφορετικά από τα κεφαλαία Έτσι τα ονόματα variable, VARIABLE, Variable, variable θεωρούνται από τη C ως διαφορετικά Όλες οι εντολές και οι συναρτήσεις βιβλιοθήκης της γλώσσας συντάσσονται με πεζούς χαρακτήρες 8/19
Μεταβλητές μόνο για ανάγνωση Στη C μπορούμε να δηλώσουμε μεταβλητές μόνο για ανάγνωση Αυτές παίρνουν αρχική τιμή Μπορούν να χρησιμοποιηθούν σε υπολογισμούς ή άλλες εντολές Δεν μπορούν να αλλάξουν τιμή Η δήλωση τους γίνεται ακολουθώντας το συντακτικό των κανονικών μεταβλητών, τοποθετώντας μπροστά τη λέξη cost const int a = 8; const float c = 4.8 Όταν δηλώνουμε μεταβλητές μόνο για ανάγνωση θα πρέπει οπωσδήποτε να τους δίνουμε αρχική τιμή. 9/19
Προτάσεις Στη C μπορούμε να έχουμε 2 ειδών προτάσεις δηλωτικές εκτελέσιμες Οι δηλωτικές προτάσεις χρησιμοποιούνται για τη δήλωση μεταβλητών καθώς και άλλων στοιχείων (π.χ. συναρτήσεων) Οι εκτελέσιμες προτάσεις εκτελούν κάποια συγκεκριμένη λειτουργία main () // Η συνάρτηση main int x,y; // Δηλωτική πρόταση x=5; // Εκτελέσιμη πρόταση y=x+4*20; // Εκτελέσιμη πρόταση 10/19
Παραστάσεις Μία παράσταση αποτελείται από σταθερές, μεταβλητές και συναρτήσεις σε συνδυασμό με τελεστές Οι τελεστές μπορούν να είναι Αριθμητικοί (+,-,*,/ κ.τ.λ.) Ανάθεσης τιμής (=). Ο τελεστής = καταχωρεί το αποτέλεσμα της παράστασης που βρίσκεται δεξιά του στη μεταβλητή που βρίσκεται αριστερά του Λογικοί (<,>,<= κ.τ.λ.) Παραδείγματα Παραστάσεων 7 // Η τιμή της παράστασης είναι 7 7.0+3+k+square(9) // Η τιμή της παράστασης είναι 13.0 + την τιμή του k b = 7.5 * 2 /3 /* Η εντολή καταχωρεί το αποτέλεσμα 5 στην μεταβλητή b. Η τιμή της παράστασης ισούται με τη παράσταση δεξιά του =, δηλαδή 5 11/19
Παραστάσεις με μέλη διαφορετικού τύπου Αν ιεραρχήσουμε τους τύπους δεδομένων της C από το χαμηλότερο προς το ψηλότερο έχουμε: char, int, float και double Το αποτέλεσμα μιας παράστασης στην οποία μετέχουν μέλη διαφορετικών τύπων δεδομένων είναι ίδιου τύπου δεδομένων με τον υψηλότερο ιεραρχικά τύπο της παράστασης Π.χ. int a,b; float c,d; a=10; b=5; c=(a+b)/2; d=(a+b)/2.0; Η μεταβλητή c παίρνει τιμή 7 επειδή στην παράσταση (a+b)/2 όλα τα μέλη είναι τύπου int Η μεταβλητή d παίρνει τιμή 7.5 επειδή στην παράσταση (a+b)/2.0 ο υψηλότερος τύπος είναι float (λόγω του 2.0) 12/19
Λογικές Παραστάσεις Οι λογικές παραστάσεις δημιουργούνται από σταθερές, μεταβλητές και συναρτήσεις σε συνδυασμό με λογικούς τελεστές Το αποτέλεσμα μιας λογικής παράστασης είναι είτε αληθές (true) ή ψευδές (false) Οι λογικοί τελεστές είναι οι ακόλουθοι == Ίσο!= Διάφορο > Μεγαλύτερο < Μικρότερο >= Μεγαλύτερο ή ίσο <= Μικρότεροήίσο && Λογικό ΚΑΙ Λογικό Ή! Λογικό ΌΧΙ 13/19
Παραδείγματα Λογικών Παραστάσεων 6>3 // Η τιμή της παράστασης είναι true 4<=3 // Η τιμή της παράστασης είναι false a>=0 /* Η τιμή της παράστασης είναι true αν το a είναι θετικό, αλλιώς είναι false*/ 5+3 == 7+1 // Η τιμή της παράστασης είναι true 1+4!= 4+1 // Η τιμή της παράστασης είναι false!(5>0) // Η τιμή είναι false καθώς το! αντιστρέφει το αποτέλεσμα Οι λογικοί τελεστές && και συνδέουν δύο λογικές παραστάσεις δημιουργώντας μία σύνθετη η τιμή της οποίας φαίνεται στον πίνακα Π1 Π2 Π1 && Π2 Π1 Π2 true true true true true false false true false true false true false false false false 14/19
Λογικές Παραστάσεις στη C Η C δεν υποστηρίζει άμεσα τύπο δεδομένων για λογικές τιμές Έμμεσα η τιμή 1 συμβολίζει την τιμή true και η τιμή 0 συμβολίζει την τιμή 0 Για παράδειγμα η εντολή a = 5>3; Έχει ως αποτέλεσμα το a να πάρει την τιμή 1 καθώς το αποτέλεσμα της παράστασης 5>3 είναι αληθές 15/19
Ένα παράδειγμα προγράμματος #include <stdio.h> #include <stdlib.h> main () int a,b; float c; a=rand(); /*Στη μεταβλητή a καταχωρείται το αποτέλεσμα της συνάρτησης rand()*/ b = 18; // Στη μεταβλητή b καταχωρείται to 18 c = (a+b)/2.0; /* Στη μεταβλητή c καταχωρείται o μέσος όρος των a και b */ printf( Το αποτέλεσμα είναι %f\n,c); /*Το περιεχόμενο της c τυπώνεται στην οθόνη */ 16/19
Οι αγκύλες της C Μέχρι τώρα χρησιμοποιήσαμε τις αγκύλες για να υποδηλώσουμε την αρχή και το τέλος του συνόλου των εντολών μιας συνάρτησης main ()... Οι αγκύλες μπορούν να χρησιμοποιηθούν και για να δηλώσουν μια σύνθετη εντολή. Στο παράδειγμα που ακολουθεί η main αποτελείται από 2 εντολές: μία απλή και μία σύνθετη (που με τη σειρά της αποτελείται από 2 απλές και 1 σύνθετη) main () int a; int b; printf( Αυτή είναι μια σύνθετη εντολή"); printf( Αυτή είναι ακόμη μια σύνθετη εντολή"); 17/19
Οπρο-μεταγλωττιστής της C Μέσα σε ένα πρόγραμμα μπορούμε να βάλουμε οδηγίες προς τον μεταγλωττιστή της C. Τέτοιες οδηγίες είναι οι: #include <αρχείο> Η οδηγία αυτή ζητά από τον μεταγλωττιστεί να συμπεριλάβει το αρχείο στη μεταγλώττιση στο οποίο συνήθως δηλώνονται συναρτήσεις βιβλιοθήκης. #define id text Η οδηγία αυτή ζητά από το μεταγλωττιστή να αντικαταστήσει μέσα στον κώδικα το αναγνωριστικό id με την συμβολοσειρά text. Χρησιμοποιείται συνήθως για τον ορισμό σταθερών. #include <stdio.h> // Ενσωματώνω τη βιβλιοθήκη stdio.h #define PI 3.14159 // Ορίζω τη σταθερά PI main() Στις οδηγίες προς τον προμεταγλωττιστή δεν βάζω ; int moires = 30; float aktinia; aktinia = moires*2*pi/360; printf ( Η γωνία σε ακτίνια είναι %f\n,aktinia); 18/19
Ασκήσεις Τι θα περιέχουν τα a,b και c μετά το τέλος των προγραμμάτων 2.1 main () int a,b,c=3; a=b=2; a=c+b; 2.2 #define MM 23 main () const int c=3; int a,b; a=4+(b=2); b=c+b+mm; 2.4 main () int a,b,c=3; a=b=2; b=b==1; c=printf("τέλος"); 19/19