Σάββατο 4 Ιουνίου 2011

Η Γλώσσα C

Η C είναι μια διαδικαστική γλώσσα προγραμματισμού γενικής χρήσης η οποία αναπτύχθηκε στις αρχές της δεκαετίας 1970-1980 από τον Ντένις Ρίτσι στα εργαστήρια Bell Labs για να χρησιμοποιηθεί για την ανάπτυξη του λειτουργικού συστήματος UNIX. Από τότε χρησιμοποιείται ευρύτατα, και ιδιαίτερα για ανάπτυξη προγραμμάτων συστήματος (system software) αλλά και για απλές εφαρμογές.
Οι λόγοι της ραγδαίας ανάπτυξης της συγκεκριμένης γλώσσας προγραμματισμού είναι η ταχύτητά της, καθώς και το γεγονός ότι είναι διαθέσιμη στα περισσότερα σημερινά λειτουργικά συστήματα.

Φιλοσοφία

Η C είναι μια σχετικά μινιμαλιστική γλώσσα προγραμματισμού. Ανάμεσα στους σχεδιαστικούς στόχους που έπρεπε να καλύψει η γλώσσα περιλαμβανόταν το ότι θα μπορούσε να μεταγλωττιστεί (να γίνεται compile) άμεσα με τη χρήση single-pass compiler — με άλλα λόγια, ότι θα απαιτούνταν μόνο ένας μικρός αριθμός από εντολές (instructions) σε γλώσσα μηχανής (machine language) για κάθε βασικό στοιχείο της, χωρίς εκτεταμένη run-time υποστήριξη. Ως αποτέλεσμα, είναι δυνατό να γραφτεί κώδικας σε C σε low level επίπεδο προγραμματισμού με ακρίβεια ανάλογη της συμβολικής γλώσσας, στην πραγματικότητα η C ορισμένες φορές αποκαλείται (και χωρίς να υπάρχει πάντα αντιπαράθεση) "high-level assembly" ή "portable assembly." Επίσης, γίνονται αναφορές στη C ως mid-level γλώσσα προγραμματισμού.

Η Γλώσσα προγραμματισμού C:
  • Μεταβλητές,σταθερές,τύποι και δηλώσεις
  • Εντολές αντικατάστασης,τελεστές και παραστάσεις
  • Η ροή του ελέγχου
  • Δομή προγράμματος,συναρτήσεις και εξωτερικές μεταβλητές
  • Εμβέλεια και χρόνος ζωής μεταβλητών
  • Αναδρομή
  • Διευθύνσεις θέσεων μνήμης,δείκτες και πίνακες
  • Δυναμική δέσμευση μνήμης
  • Συμβολοσειρές
  • Πίνακες δεικτών,δείκτες σε δείκτες και πολυδιάστατοι πίνακες
  • Δείκτες σε συναρτήσεις
  • Ορίσματα γραμμής εντολών
  • Απαριθμήσεις,δομές,αυτο-αναφορικές δομές(λίστες,δυαδικά δέντρα),ενώσεις,πεδία bit και δημιουργία νέων ονομάτων τύπων
  • Είσοδος και Έξοδος
  • Χειρισμός αρχείων
  • Προεπεξεργαστής της C και μακροεντολές

Τύποι μεταβλητών

Οι βασικοί (και όχι παραγόμενοι) τύποι μεταβλητών στη C είναι οι εξής
Όνομα τύπου Περιγραφή Μέγεθος σε bytes
char Χαρακτήρας 1
int Προσημασμένος Ακέραιος 4
float Αριθμός Κινητής Υποδιαστολής (πραγματικός αριθμός) 4
double Αριθμός Κινητής Υποδιαστολής (πραγματικός αριθμός) 8
void Κενός τύπος -


Χρήση της printf - το πρόγραμμα format.c

Η printf παίρνει, όπως και η scanf, ένα πρώτο όρισμα που είναι το format string και το οποίο προσδιορίζει πώς θα τυπωθούν με τη σειρά τα υπόλοιπα ορίσματα της printf.
Μέσα στο format string γράφουμε σε ελεύθερη μορφή το κείμενο που θέλουμε να τυπωθεί (π.χ. το ``a='' είναι τέτοιο κείμενο, όπως και το ``, b='' μετά το πρώτο %d).
Στις θέσεις που θέλουμε να τυπωθεί μια έκφραση ή μια μεταβλητή τοποθετούμε το χαρακτήρα % ακολουθούμενο από κάποιους κωδικούς χαρακτήρες ή και αριθμούς (κάντε man 3 printf), οι οποίοι δηλώνουν τον τύπο της προς τύπωση έκφρασης και διάφορες άλλες παραμέτρους. Μπορεί κανείς π.χ. να προσδιορίσει πόσα δεκαδικά ψηφία θα χρησιμοποιηθούν όταν τυπώνεται ένας double.
Μερικές από τις δυνατές επιλογές για το κείμενο που ακολουθεί το σύμβολο % είναι οι ακόλουθες:
Κείμενο στο format string Τι τυπώνεται
%d int, δεκαδική αναπαράσταση
%u unsigned int, δεκαδική αναπράσταση
%x unsigned int, δεκαεξαδική αναπαράσταση
%o unsigned int, οκταδική αναπαράσταση
%f float/double, συνήθης αναπαράσταση με υποδιαστολή
%e float/double, εκθετική μορφή
%g float/double, επιλέγεται αυτόματα %f ή %e ανάλογα με τον αριθμό
%c int ή char, τυπώνεται το ASCII σύμβολο που αντιστοιχεί στον αριθμό, π.χ. αν η έκφραση είναι ίση με 65 θα τυπωθεί το A κεφαλαίο λατινικό
%s διεύθυνση χαρακτήρα (char *), τυπώνεται η λέξη που έχει αποθηκευτεί να ξεκινά από εκείνη τη διεύθυνση χαρακτήρα
%p διεύθυνση μνήμης

Ποιοι τελεστές υπάρχουν;

Προσεταιριστικότητα Τελεστής Επεξήγηση
ΑπΔ () [], ->, . Παρενθέσεις, πίνακες, πεδίο αντικειμένου μέσω διεύθυνσης, πεδίο αντικειμένου
ΔπΑ !, ~, ++, --, -, *, &, sizeof Λογικό όχι, bitwise άρνηση, αύξηση κατά 1, μείωση κατά 1, μονικό πλην, pointer dereferencing (αντικείμενο του οποίου έχουμε τη διεύθυνση), διεύθυνση αντικειμένου, μέγεθος κάποιου τύπου σε bytes
ΔπΑ (type) casting (μετατροπή σε άλλο τύπο)
ΑπΔ *, /, % επί, διά, υπόλοιπο διαίρεσης (mod)
ΑπΔ -, + πλην, συν
ΑπΔ <<, >> bitwise shift αριστερά κατά 1 και δεξιά κατά ένα
ΑπΔ <, <=, >, >= μικρότερο, μικρότερο ή ίσο, μεγαλύτερο, μεγαλύτερο ή ίσο
ΑπΔ ==, != έλεγχος ισότητας, έλεγχος ανισότητας
ΑπΔ &, | bitwise και, bitwise ή
ΑπΔ ^ bitwise xor (αποκλειστικό ή)
ΑπΔ && Λογικό και
ΑπΔ || Λογικό ή
ΔπΑ ?: επιλογή τιμής χρησιμοποιώντας μια συνθήκη
ΔπΑ =, +=, -=, /=, %=, >>=, &= εκχώρηση τιμής, πρόσθεση δεξιού μέλους στο αριστερό, αφαίρεση δεξιού μέλους από αριστερό, διαίρεση αριστερού μέλους με δεξιό, υπόλοιπου αριστερού μέλους με δεξιό ανατίθεται στο αριστερό, αριστερό μέλος γίνεται bitwise shifted δεξιά τόσες θέσεις όσες λέει το αριστερό μέλος, αριστερό μέλος γίνεται bitwise and με το δεξιό μέλος
ΑπΔ , επιστρέφεται το δεξιό μέλος

Παράδειγμα προγράμματος:

#include <stdio.h>

int a;
double mean;

main() {
 int b;
 double useless_variable_1;

 printf("Give the integer a: ");
 scanf("%d", &a);
 printf("Give the integer b: ");
 scanf("%d", &b);
 mean = 0.5*(a+b);
 printf("The mean of %d and %d is %g\n", a, b, mean);
}





Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου