Εισαγωγή στην γλώσσα προγραμματισμού C
Χαρακτηριστικά της C Ιδιαίτερα δημοφιλής Έχει χρησιμοποιηθεί για τον προγραμματισμό ευρέος φάσματος συστημάτων και εφαρμογών Γλώσσα μετρίου επιπέδου Φιλοσοφία: Ο προγραμματιστής έχει τον πλήρη έλεγχο και ευθύνεται για τα σφάλματά του
Μεταγλώττιση και εκτέλεση προγραμμάτων
Hello, world! /* Αρχείο hello.c συνέχεια */ #include <stdio.h> #include genlib.h main() { printf( Hello, world.\n ); }
Σχόλια Κείμενο που περικλείεται από τους σημειωτές /* και */. Είναι δυνατόν να εκτείνονται σε πολλές γραμμές Παρέχουν εξηγήσεις για κάποιο τμήμα προγράμματος
Συμπεριλήψεις βιβλιοθηκών Οι γραμμές #include <stdio.h> #include genlib.h Δηλώνουν ότι το πρόγραμμα χρησιμοποιεί δύο βιβλιοθήκες: την πρότυπη βιβλιοθήκη εισόδου/εξόδου (standard input/output) μια γενική βιβλιοθήκη (general library) σχεδιασμένη ειδικά για τα προγράμματα του βιβλίου «Η Τέχνη και η Επιστήμη της C» του Eric Roberts το οποίο θα χρησιμοποιηθεί στο μάθημα. Οι πρότυπες βιβλιοθήκες (ANSI C) περικλείονται με < > ενώ οι επεκτάσεις με τα σύμβολα Τα αρχεία stdio.h και genlib.h ονομάζονται αρχεία επικεφαλίδας (header files).
Το κυρίως πρόγραμμα Το κυρίως πρόγραμμα αποτελείται από τις γραμμές: main() { printf( Hello, world.\n ); } Αυτές οι γραμμές ορίζουν μια συνάρτηση της C. Μια συνάρτηση είναι μια ακολουθία μεμονωμένων βημάτων του προγράμματος που έχουν ομαδοποιηθεί και στην οποία έχει δοθεί ένα όνομα. Τα βήματα που ακολουθεί η συνάρτηση παρατίθενται μέσα σε άγκιστρα {} και ονομάζονται εντολές. Ησυνάρτησηmain είναι μια ειδική συνάρτηση στη γλώσσα C. Κάθε φορά που εκτελείται ένα πρόγραμμα εκτελούνται οι εντολές που περικλείονται μέσα στη συνάρτηση main του προγράμματος. Στο τέλος κάθε εντολής βάζουμε ελληνικό ερωτηματικό (;)
Κλήση συνάρτησης Το κυρίως πρόγραμμα έχει μόνο μια εντολή printf( Hello, world.\n ); Η printf είναι μια συνάρτηση της C. Η επίκληση μιας συνάρτησης με χρήση του ονόματός της ονομάζεται κλήση της συνάρτησης. Με την κλήση μιας συνάρτησης εκτελούνται οι εντολές που έχουν οριστεί μέσα στο σώμα της συνάρτησης αυτής.
Ησυνάρτησηprintf H printf χρησιμοποιείται για την εκτύπωση δεδομένων στην έξοδο του προγράμματος. Δέχεται ως όρισμα ένα αλφαριθμητικό ( Hello, world\n ). Όρισμα είναι πληροφορία που θέτει στη διάθεση μιας συνάρτησης αυτός που την καλεί. Ένα αλφαριθμητικό (string) είναι μια ακολουθία χαρακτήρων (συμβολοσειρά). Ο ειδικός χαρακτήρας \n ονομάζεται αλλαγή γραμμής.
Ένα δεύτερο πρόγραμμα #include <stdio.h> #include genlib.h #include simpio.h main() { int n1, n2, total; printf( This program adds two numbers\n ); printf( 1st number? ); n1 = GetInteger(); printf( 2nd number? ); n2 = GetInteger(); total = n1 + n2; printf( The total is %d\n, total); }
συμπερίληψη νέας βιβλιοθήκης #include simpio.h simplified input/output (απλοποιημένη είσοδος/έξοδος), περιέχει τη δήλωση της συνάρτησης GetInteger.
Δήλωση μεταβλητών Η γραμμή int n1, n2, total; περιέχει τη δήλωση των μεταβλητών n1, n2, total. Μια μεταβλητή αποτελεί ένα όνομα και ένα δεσμευτικό θέσης για κάποια δεδομένα των οποίων η τιμή είναι άγνωστη όταν γράφεται το πρόγραμμα. Μια δήλωση πληροφορεί τον μεταγλωττιστή της C για το όνομα και τον τύπο μιας νέας μεταβλητής. Η χρήση μιας μεταβλητής που δεν έχει δηλωθεί μέσα σε ένα πρόγραμμα αποτελεί συντακτικό λάθος και επισημαίνεται από τον μεταγλωττιστή. Οι μεταβλητές που δηλώνονται σε αυτό το πρόγραμμα έχουν τύπο int (ακέραιος, integer).
Εντολή ανάθεσης n1 = GetInteger(); Παράσταση total = n1 + n2; Μορφοποιημένη έξοδος με την printf printf( The total is %d\n, total);
Τύποι δεδομένων Ακέραιοι αριθμοί int Αριθμοί κινητής υποδιαστολής double Αλφαριθμητικά string Οτύποςstring δεν είναι βασικός τύπος της C. Έχει οριστεί για τις ανάγκες του βιβλίου. Η C χρησιμοποιεί στην πραγματικότητα έναν σύνθετο τύπο για τις συμβολοσειρές.
Ανάγνωση και εκτύπωση των παραπάνω τύπων δεδομένων int n; n = GetInteger(); printf( %d\n, n); double f; f = GetReal(); printf( %g\n, f); string name; name = GetLine(); printf( %s\n, name);
Παραστάσεις Οι υπολογισμοί σε ένα πρόγραμμα πραγματοποιούνται ορίζοντας παραστάσεις. Μια παράσταση αποτελείται από όρους και τελεστές. Κατά την εκτέλεση ενός προγράμματος, η εκτέλεση κάθε πράξης που καθορίζονται σε μια παράσταση ονομάζεται αποτίμηση της παράστασης. Παραδείγματα παραστάσεων: 1 + 2 (n + 2) * (m - 1.5) Mercury
Όροι παραστάσεων Κάθε όρος μπορεί να είναι: Μια σταθερή Μια μεταβλητή Μια κλήση συνάρτησης Μια παράσταση με παρενθέσεις
Σταθερές Ακέραιες 125-1 0 33934 Κινητής υποδιαστολής 32.432 0.23 2.44e6 4.23e-12-4.01e8 Αλφαριθμητικά abcd Hello, world.\n
Μεταβλητές Μια μεταβλητή έχει τρεις σημαντικές ιδιότητες όνομα τιμή τύπο Έγκυρα ονόματα μεταβλητών value _avalue name123 an_integer AnOtherName Μη έγκυρα ονόματα μεταβλητών a*value int while one@variable 1var 32.number
Εντολές ανάθεσης μεταβλητή = παράσταση; Όπου μεταβλητή είναι η μεταβλητή στην οποία θέλουμε να αποδώσουμε τιμή παράσταση είναι η καθοριζόμενη τιμή (αφού αποτιμηθεί η παράσταση Παραδείγματα string msg; msg = Leave your things at the entrance ; n=21;
Τελεστές και τελεστέοι Αριθμητικοί τελεστές + πρόσθεση - αφαίρεση * πολλαπλασιασμός / διαίρεση Παραδείγματα παραστάσεων (2 * x) + (3 * y) Διμελείς (binary) τελεστές Μονομελής (unary) τελεστής - -y -(12.4 / 3.5)
Συνδυασμός ακεραίων και αριθμών κινητής υποδιαστολής Οι παραστάσεις επιτρέπεται να περιέχουν τιμές τύπου int και double ταυτόχρονα. 12 + 3.5 n + 1.1 (το n είναι τύπου int) Κανόνας: Αν ένας τουλάχιστον από τους τελεστέους είναι τύπου double τότε το αποτέλεσμα είναι πάντα τύπου double.
Διαίρεση ακεραίων Όταν σε μια πράξη που ορίζεται από έναν διμελή τελεστή (+, -, *, /) καιοιδύοτελεστέοι είναι ακέραιοι, το αποτέλεσμα είναι ακέραιο. Ο παραπάνω κανόνας έχει ως συνέπεια το αποτέλεσμα της διαίρεσης δυο ακεραίων να είναι ακέραιος (το υπόλοιπο της διαίρεσης αγνοείται). Παράδειγμα: Το αποτέλεσμα της διαίρεσης 3 / 2 είναι 1 και όχι 1.5! Για τον σωστό υπολογισμό γράφουμε 3.0 / 2.0 ή 3.0 / 2 ή 3 / 2.0
Ο τελεστής υπολοίπου Ο τελεστής% επιστρέφει το ακέραιο υπόλοιπο της διαίρεσης του πρώτου τελεστέου με τον δεύτερο. 0 % 3 = 0 3 % 3 = 0 1 % 3 = 1 4 % 3 = 1 2 % 3 = 2 5 % 3 = 2 Και οι δύο τελεστέοι πρέπει να είναι τύπου int. Αποφεύγετε να χρησιμοποιείτε τον τελεστή % με αρνητικούς τελεστέους, καθώς σε αυτή την περίπτωση η συμπεριφορά του προγράμματος ποικίλει από υπολογιστή σε υπολογιστή.
Προτεραιότητα τελεστών Για την αποφυγή της χρήσης παρενθέσεων σε κάθε περίπτωση, ορίζονται κανόνες προτεραιότητας των αριθμητικών παραστάσεων 1. Πρώτα αποτιμώνται οι μονομελείς τελεστές άρνησης 2. Στη συνέχεια αποτιμώνται οι πολλαπλασιαστικοί τελεστές (*,/,%) από αριστερά προς τα δεξιά 3. Στη συνέχεια αποτιμώνται οι προσθετικοί τελεστές επίσης από τα αριστερά προς τα δεξιά.
Προτεραιότητα τελεστών - Παραδείγματα Η παράσταση x * 2 - y / 3 είναι ισοδύναμη με την (x * 2) - (y / 3) Η παράσταση x * 2 % y / 3 είναι ισοδύναμη με την ((x * 2) % y) / 3) Η παράσταση -x * 2 / 5 - y / 3 * 2 είναι ισοδύναμη με την (((-x) * 2) / 5) ((y / 3) * 2)
Μετατροπή τύπων και αποκοπή Στο παρακάτω τμήμα κώδικα int n; n = 2.342 μετά την ανάθεση n = 2.342, το n έχει την τιμή 2. Το κλασματικό μέρος (0.342) αποκόπτεται.
Ρητή μετατροπή τύπων (type cast) Πολλές φορές απαιτούμε την ρητή μετατροπή ενός τύπου σε έναν άλλον, όπως στο παράδειγμα double quot; int num, den; quot = num / (double) den; Σε αυτή την περίπτωση η διαίρεση θα πραγματοποιηθεί με χρήση αριθμών κινητής υποδιαστολής και το υπόλοιπο διατηρείται. Χωρίς τη χρήση του τελεστή ρητής μετατροπής (double) η διαίρεση πραγματοποιείται με χρήση ακεραίων και το υπόλοιπο χάνεται.
Δείτε Το κεφάλαιο 2 του βιβλίου