Εισαγωγήστηνγλώσσα προγραμματισμού...

Preview:

Citation preview

Εισαγωγή στην γλώσσαπρογραμματισμού 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;

• Μορφοποιημένη έξοδος με την printfprintf(“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.232.44e6 4.23e-12-4.01e8

• Αλφαριθμητικά“abcd” “Hello, world.\n”

Μεταβλητές• Μια μεταβλητή έχει τρεις σημαντικές ιδιότητες

– όνομα– τιμή– τύπο

• Έγκυρα ονόματα μεταβλητώνvalue _avalue name123an_integer AnOtherName

• Μη έγκυρα ονόματα μεταβλητώνa*value intwhile one@variable1var 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 = 01 % 3 = 1 4 % 3 = 12 % 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 του βιβλίου

Recommended