Στοιχεία της γλώσσας προγραμματισμού 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.