Στοιχεία της γλώσσας προγραμματισμού C
Διομήδης Σπινέλλης
Τμήμα Διοικητικής Επιστήμης και Τεχνολογίας
Οικονομικό Πανεπιστήμιο Αθηνών
dds@aueb.gr
Δομή
Η C είναι μια γλώσσα προγραμματισμού γενικού σκοπού που προσφέρει
οικονομία στην έκφραση,
μοντέρνο έλεγχο της ροής του προγράμματος,
πλήρεις δομές δεδομένων καθώς
και ένα πλούσιο σύνολο τελεστών.
Η απουσία περιορισμών και η γενικότητά
της την κάνουν ιδιαίτερα εύχρηστη και αποτελεσματική για την υλοποίηση
μεγάλου εύρους εφαρμογών.
Τα προγράμματα της C αποτελούνται από ένα σύνολο ορισμών συναρτήσεων
και μεταβλητών.
Η εκτέλεση του προγράμματος αρχίζει πάντα από τη συνάρτηση main
η οποία πρέπει να έχει οποσδήποτε οριστεί.
Το παρακάτω είναι ένα απλό πρόγραμμα σε C:
/* Τύπωσε hello, world */
#include <stdio.h>
int
main()
{
printf("hello, world\n");
return (0);
}
Οι συναρτήσεις ορίζονται με βάση το όνομά τους, τον τύπο του αποτελέσματος
που επιστρέφουν και τα ονόματα και τους τύπους των ορισμάτων τους.
Η τιμή που θα επιστρέψει η συνάρτηση δίδεται ως παράμετρος στην εντολή
return.
Η παρακάτω συνάρτηση επιστρέφει το τετράγωνο ενός ακεραίου:
int
sqr(int n)
{
return (n * n);
}
Ο προεπεξεργαστής
Το πρόγραμμα της C πριν το μεταγλωτιστή περνά από τον προεπεξεργαστή
ο οποίο και εκτελεί ορισμένες απλές λεκτικές αλλαγές.
Συγκεκριμένα επιτρέπει:
- Την παρεμβολή ενός αρχείου του συστήματος με την εντολή #include <file.h>
- Την παρεμβολή ενός αρχείου του χρήστη με την εντολή #include "file.h"
- Τον καθορισμό μιας σταθερής τιμής με την εντολή #define name value
- Την μεταγλώττιση υπό αίρεση με τις εντολές #if #else #elif #endif
- Τον προσδιορισμό του αρχείου, της γραμμής του, της ημερομηνίας και της
ώρας με τις μεταβλητές __FILE__, __LINE__, __DATE__, __TIME__
Βασικοί τύποι
Οι βασικοί τύποι της C είναι:
- int
- Ακέραιοι
- char
- Χαρακτήρες
- double
- Αριθμοί κινητής υποδιαστολής
Οι λογικές τιμές αληθές και ψευδές παριστάνονται με ακέραιους διάφορους
του 0 και το 0 αντίστοιχα.
Τελεστές
- Στην C κάθε εντολή είναι μια έκφραση ή μια δομή ελέγχου.
- Εκφράσεις συνδυάζονται με τους παρακάτω τελεστές:
- !
- Λογική άρνηση
- ~
- Δυαδική άρνηση
- ++
- Αύξηση της μεταβλητής κατά ένα
- --
- Μείωση της μεταβλητής κατά ένα
- *
- Πολλαπλασιασμός
- /
- Διαίρεση
- %
- Υπόλοιπο ακέραιας διαίρεσης
- +
- Πρόσθεση
- -
- Αφαίρεση
- <<
- Μετάθεση των bit προς τα αριστερά
- >>
- Μετάθεση των bit προς τα δεξιά
- ==
- Έλεγχος ισότητας
- !=
- Έλεγχος μη ισότητας
- >
- Έλεγχος για μεγαλύτερο
- <
- Έλεγχος για μικρότερο
- >=
- Έλεγχος για μεγαλύτερο ή ίσο
- <=
- Έλεγχος για μικρότερο ή ίσο
- &
- Δυαδική σύζευξη
- ^
- Δυαδική αποκλειστική διάζευξη
- |
- Δυαδική διάζευξη
- &&
- Λογική σύζευξη
- ||
- Λογική διάζευξη
- e1 ? e2 : e3
- e2 ή e3 ανάλογα με τον αν η e1 είναι αληθής ή ψευδής
- =
- Ανάθεση σε μεταβλητή
- +=
- Πρόσθεση σε μεταβλητή
- -=
- Αφαίρεση από μεταβλητή
- *=
- Πολλαπλασιασμός μεταβλητής
- /=
- Διαίρεση μεταβλητής
- %=
- Η μεταβλητή αποκτά την τιμή του υπολοίπου της διαίρεσης
- >>
- Μετάθεση των bit της μεταβλητής προς τα αριστερά
- >>
- Μετάθεση των bit της μεταβλητής προς τα δεξιά
- ,
- Παράθεση εκφράσεων
- Κάθε εντολή τερματίζεται με ";".
Δομές ελέγχου
Η C υποστηρίζει τις παρακάτω δομές ελέγχου:
- if (έκφραση) εντολή1 else εντολή2
- Εκτέλεση της εντολής1
αν η έκφραση είναι αληθής (όχι 0).
Το τμήμα else μπορεί να παραληφθεί.
- while (έκφραση) εντολή
- Εκτέλεση της εντολής όσο η έκφραση
είναι αληθής.
- do εντολή while (έκφραση)
- Εκτέλεση της εντολής μέχρι η έκφραση
να μην είναι αληθής (έλεγχος στο τέλος του βρόχου).
- for (εντολή1; έκφραση; εντολή2) εντολή3
- Εκτέλεση της εντολής1 και
στη συνέχεια εκτέλεση της εντολής3 και της εντολής2 όσο η έκφραση είναι
αληθής. Για παράδειγμα το
FOR I :=0 TO 9
WRITELN(i)
της Pascal γράφεται σε C ως
for (i = 0; i < 10; i++)
printf("%d\n", i);
-
switch (έκφραση) {
case σταθερά1:
εντολή1;
break;
case σταθερά2:
εντολή2;
break;
default:
εντολήΝ;
break;
}
- Εκτέλεση της εντολής της οποίας η σταθερά ταιριάζει με την τιμή
της έκφρασης. Αν η τιμή δεν ταιριάζει με καμία σταθερά τότε εκτελείται
η εντολή της default.
- break;
- Τερματισμός της εκτέλεσης του εσώτερου while, do, ή for.
- continue;
- Επανεκτέλεση του εσώτερου while, do, ή for από την αρχή
του βρόχου.
Σε όλες τις περιπτώσεις μια εντολή μπορεί να αντικατασταθεί από περισσότερες
με την χρήση των { }.
Άσκηση
- Γράψτε ένα πρόγραμμα σε C που να τυπώνει τις τιμές του παραγοντικού
των αριθμών από το 1 μέχρι το 10.
Το παραγοντικό να οριστεί ως ξεχωριστή συνάρτηση.
Βιβλιογραφία
- Samuel P. Harbison
and Guy L. Steele Jr.
C: A Reference Manual.
Prentice-Hall, third edition, 1991.
- Brian W. Kernighan and
Dennis M. Ritchie.
The C Programming Language.
Prentice-Hall, second edition, 1988.
- Andrew Koenig.
C Traps and Pitfalls.
Addison-Wesley, 1988.
- Don Libes.
Obfuscated C and Other Mysteries.
John Wiley and Sons, 1993.
- William H. Press, Brian P.
Flannery, Saul A. Teukolsky, and William T. Vetterling.
Numerical Recipes in C.
Cambridge University Press, 1988.
- Robert Sedgewick.
Algorithms in C.
Addison-Wesley, 1990.
- The Accredited
Standard Committee X3, Information Processing Systems, Technical Committee
for Programming Language C (X3J11).
Rationale for the ANSI C Programming Language.
Silicon Press, 25 Beverly Road, Summit, NJ 07901, USA, 1990.