Η γλώσσα προγραμματισμού C

Σχετικά έγγραφα
Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C

Μεταφερσιμότητα Τα προγράμματα μεταφέρονται εύκολα σε διαφορετικά λειτουργικά συστήματα

Λογικό "και" (AND) μας επιστρέφει 1 αν και οι δύο operands είναι όχι μηδέν, διαφορετικά 0)

Εισαγωγή στον Υπολογισμό - Τελεστές & Είσοδος/Έξοδος

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Ανάπτυξη και Σχεδίαση Λογισμικού

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

Δομημένος Προγραμματισμός (ΤΛ1006)

Η γλώσσα προγραμματισμού C

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Η γλώσσα προγραμματισμού C

Προγραμματισμός Ι (ΗΥ120)

ΦΥΛΛΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ 1

Εισαγωγή στον Προγραμματισμό

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Η γλώσσα προγραμματισμού C

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

Ανάπτυξη και Σχεδίαση Λογισμικού

a = 10; a = k; int a,b,c; a = b = c = 10;

Δομημένος Προγραμματισμός (ΤΛ1006)

Διαδικασιακός Προγραμματισμός

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

Η γλώσσα προγραμματισμού C

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Δομημένος Προγραμματισμός (ΤΛ1006)

Εισαγωγή στον Προγραμματισμό

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Εισαγωγή στον προγραμματισμό. Τμήμα Πληροφορικής & Επικοινωνιών ΤΕΙ Σερρών Εργαστήριο 2

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Προγραμματισμός Ι (ΗΥ120)

Τύποι Δεδομένων Είσοδος/Έξοδος

8. Συνθήκες ελέγχου, λογικοί τελεστές

Προγραμματισμός Η/Υ (ΤΛ2007 )

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Προγραμματισμός Ι (ΗΥ120)

Δομημένος Προγραμματισμός (ΤΛ1006)

Προγραμματισμός I (Θ)

Η γλώσσα προγραμματισμού C

scanf() scanf() stdin scanf() printf() int float double %lf float

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

Η γλώσσα προγραμματισμού C

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Προγραμματισμός Ι (ΗΥ120)

Υπολογισμός - Εντολές Ελέγχου

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

5. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Β' μέρος: while - do..while)

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο)

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

Η γλώσσα προγραμματισμού C

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 2 Εντολές Εισόδου/Εξόδου Τελεστές. Δρ. Γιώργος Λαμπρινίδης 23/10/2015 Η - Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 1

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Προγραμματισμός Η/Υ (ΤΛ2007 )

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Προγραμματισμός Η/Υ (ΤΛ2007 )

3 η Διάλεξη C++ - Βασικοί τύποι δεδομένων. Δρ. Χρήστος Δρόσος ΑΕΙ ΠΕΙΡΑΙΑ ΤΤ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ

ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Δομημένος Προγραμματισμός (ΤΛ1006)

Προσέξτε πως η παράσταση μπορεί να περιλαμβάνει όχι μόνο μία τιμή ή μια άλλη μεταβλητή αλλά μια ολόκληρη μαθηματική παράσταση, όπως η εξής:

Δομημένος Προγραμματισμός (ΤΛ1006)

Εντολές εισόδου - εξόδου. Εισαγωγή στη C++

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 2 Ο. Εισαγωγή στην C Εντολές εξόδου Εντολές εισόδου Μορφοποιητές ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Οικονόμου Βαγγέλησ Διάλεξη Νο 2. Δομημένοσ Προγραμματιςμόσ - Διάλεξη 2

Προγραμματισμός Η/Υ (ΤΛ2007 )

Η γλώσσα προγραμματισμού C

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Γλώσσα Προγραμματισμού C

Εισαγωγή στους Αλγόριθμους και τον Προγραμματισμό. 3η Διάλεξη Είσοδος Δεδομένων Συνθήκες Βρόχοι Παραδείγματα

printf Οι κωδικοί (format codes) του printf για διάφορους τύπους δεδοµένων είναι:

Προγραµµατισµός Ι (ΗΥ120)

7. ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΣΥΝΑΡΤΗΣΕΙΣ

Προγραμματισμός Ι (ΗΥ120)

Χρησιμοποιείται για να αποφασίσει το πρόγραμμα αν θα κάνει κάτι σε ένα σημείο της εκτέλεσής του, εξετάζοντας αν ισχύει ή όχι μια συνθήκη.

Στοιχειώδης προγραμματισμός σε C++

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

Εισαγωγή στον Προγραμματισμό

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Προγραμματισμός Ι (HY120)

Γλώσσα Προγραμματισμού C. Προγραμματισμός HY: Γλώσσα Προγραμματισμού C. Γρήγορος Πίνακας Αναφοράς Σύνταξης. Εισήγηση #4. Επαναληπτικές δομές:

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

Εισαγωγή στον Προγραμματισμό

ΣΥΝΟΠΤΙΚΟΣ ΟΔΗΓΟΣ ΓΛΩΣΣΑΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Transcript:

Η γλώσσα προγραμματισμού C Συναρτήσεις εισόδου/εξόδου, τελεστές

Η συνάρτηση printf() Η γενική μορφή της συνάρτησης είναι: printf (ΣΕΙΡΑ_ΕΛΕΓΧΟΥ, στοιχείο-1, στοιχείο-2,..., στοιχείο-ν) Τα «στοιχείο-i» (i=1,2,..v) είναι ονόματα μεταβλητών, σταθερές, τιμές, ή εκφράσεις. Η ΣΕΙΡΑ_ΕΛΕΓΧΟΥ περικλείεται μέσα σε λατινικά διπλά εισαγωγικά (") και καθορίζει τον τρόπο εμφάνισης των δεδομένων. Η ΣΕΙΡΑ_ΕΛΕΓΧΟΥ μπορεί να περιλαμβάνει: επεξηγηματικό κείμενο, οτιδήποτε κείμενο θέλουμε που περιγράφει το αποτέλεσμα προσδιοριστές, που μπαίνουν απαραίτητα μέσα στην ΣΕΙΡΑ_ΕΛΕΓΧΟΥ, μόνο όταν θέλουμε να εμφανίσουμε καποιο στοιχείο (μεταβλητές, σταθερές, τιμές ή εκφράσεις) και χαρακτήρες ελέγχου, που τους χρησιμοποιούμε για την διαμόρφωση της εμφάνισης. Η printf() σαν συναρτηση, επιστρέφει το αριθμό των χαρακτήρων που τυπώνονται. 2

Η ΣΕΙΡΑ ΕΛΕΓΧΟΥ της printf() Το τι περιλαμβάνει η ΣΕΙΡΑ_ΕΛΕΓΧΟΥ εξαρτάται από το τι θέλουμε να κάνουμε με την printf(). Αν θέλουμε απλά να εμφανίσουμε ένα μήνυμα, η ΣΕΙΡΑ_ΕΛΕΓΧΟΥ θα περιλαμβάνει μόνο επεξηγηματικό κείμενο: printf ( Hello World ); Αν θέλουμε να παρουσιάσουμε το περιεχόμενο κάποιων μεταβλητών μόνο, τότε η ΣΕΙΡΑ_ΕΛΕΓΧΟΥ θα πρέπει περιλαμβάνει ένα προσδιοριστή για κάθε μεταβλητή που πρόκειται να παρουσιάσουμε: printf("%d, %d ", x, y); // δυο μεταβλητές δυο προσδιοριστές Αν θέλουμε να συνοδέψουμε την εμφάνιση των μεταβλητών με κάποιο κείμενο, τότε η ΣΕΙΡΑ_ΕΛΕΓΧΟΥ θα πρέπει να περιλαμβάνει και τους προσδιοριστές και το κείμενο: printf("the value of alpha is: %f", alpha); Αν επιπλέον επιθυμούμε την διαμόρφωση της εμφάνισης αυτών που πρόκειται να παρουσιάσουμε, τότε η ΣΕΙΡΑ_ΕΛΕΓΧΟΥ, θα πρέπει να περιλαμβάνει και κάποιους χαρακτήρες ελέγχου: printf("x=%d \n y=%f \n ", x, y); // το \n είναι χαρακτήρας ελέγχου 3

Οι προσδιοριστές στη ΣΕΙΡΑ ΕΛΕΓΧΟΥ Οι προσδιοριστές των στοιχείων έχουν σχέση με τον τύπο των δεδομένων που εμφανίζονται στην printf() και αρχίζουν με τον χαρακτήρα %. %d ή %i Ακέραιος /int %c Χαρακτήρας/char (1 μόνο) %s Σειρά χαρακτήρων (συμβολοσειρά) %f Κινητής υποδιαστολής, δηλαδή float ή double %e ή E Κινητής υποδιαστολής, δηλαδή float ή double σε εκθετική μορφή %g ή G Κινητής υποδιαστολής όπως το %e ή %f (όποιο είναι μικρότερο) %u Ακέραιος χωρίς πρόσημο (unsigned int) %p Χρησιμοποιείται για την εμφάνιση διέθυνσης μνήμης %o Ακέραιος σε οκταδικό σύστημα (χωρίς πρόσημο) %x ή %Χ Ακέραιος σε δεκαεξαδικό σύστημα (χωρίς πρόσημο) Ο μεταγλωττιστής αντιστοιχίζει ένα-προς-ένα, από αριστερά προς τα δεξιά, τα ονόματα των μεταβλητών (ή σταθερών, τιμών, εκφράσεων) με τους προσδιοριστές. Αν οι προσδιοριστές είναι περισσότεροι από τις μεταβλητές, τότε για τα πρόσθετα προσδιοριστικά εμφανίζονται τυχαίες τιμές. Αν οι προσδιοριστές λιγότεροι από τις μεταβλητές, τότε δεν εμφανίζονται οι τιμές των πρόσθετων μεταβλητών. 4

Δυνατότητες εμφάνισης στους προσδιοριστές Στην εμφάνιση μιας μεταβλητής μπορούμε να καθορίσουμε το συνολικό πλήθος των χαρακτήρων μαζί με τα ψηφία ακρίβειας και την υποδιαστολή. Για παράδειγμα το %6d, σημαίνει ότι το δεδομένο είναι ακέραιος και ότι το εύρος του είναι 6 ψηφία (χαρακτήρες). Εξ ορισμού (by default) εμφανίζονται 6 δεκαδικά ψηφία μετά την υποδιαστολή. Μπορούμε όμως να προσδιορίσουμε πόσα θέλουμε. Το %7.2f, σημαίνει ότι το δεδομένο είναι κινητής υποδιαστολής και έχει εύρος 7 χαρακτήρες με 2 ψηφία μετά την υποδιαστολή (4 χαρακτήρες για το ακέραιο μέρος, 1 χαρακτήρας για την υποδιαστολή και 2 χαρακτήρες για την ακρίβεια). Η τιμή μιας πραγματικής μεταβλητής στρογγυλοποιείται προς τα πάνω ή προς τα κάτω. Ο χαρακτήρας "+" μπροστά από τον προσδιοριστή (για παράδειγμα %+d) εμφανίζει το πρόσημο. ο χαρακτήρας "-" (πχ %-d) στοιχίζει αριστερά το αποτέλεσμα, ενώ το μηδέν (πχ %08d) γεμίζει με μηδέν τα κενά που είναι άδεια μπροστά από το αποτέλεσμα. Λόγω της ειδικής σημασίας του χαρακτήρα %, για την εμφάνιση του πρέπει να γραφούν δύο χαρακτήρες % (%%). 5

Οι χαρακτήρες ελέγχου char Περιγραφή \a Hχητικό σήμα (<BELL>) \b Ο χαρακτήρας <BACKSPACE> (διάστημα πίσω) \f Ο χαρακτήρας νέας σελίδας (<FORM FEED>) \n Νέας γραμμής (<LINE FEED>) \r Επιστροφής (<CR>) \t Oριζοντίου προκαθορισμένου διαστήματος (<ΤΑΒ>) \v Κατακορύφου διαστήματος( <VTAB>) \' Εμφάνιση του απλού εισαγωγικού \" Εμφάνιση του διπλόυ εισαγωγικού \\ Εμφάνιση της ανάποδης πλαγίας καθέτου \? Εμφάνιση του λατινικού ερωτηματικού \xhhh Εμφάνιση του χαρακτήρα hhh σε δεκαεξαδικό αριθμό \ooo Εμφάνιση του χαρακτήρα οοο σε δεκαεξαδικό αριθμό Όποιος χαρακτήρας ακολουθεί τον χαρακτήρα "\", τότε επισημαίνεται στο compiler ότι αυτός ο δευτερος χαρακτήρας έχει ειδική σημασία. Οι συνδυασμοί αυτών των δύο χαρακτήρων λαμβάνονται υπόψη σαν ένας χαρακτήρας και χρησιμοποιούνται για τον συμβολισμό των ειδικών χαρακτήρων. 6

Η συνάρτηση scanf() είσοδος δεδομένων Διαβάζει από το πληκτρολόγιο (stdin) μορφοποιημένες τιμές μεταβλητών. scanf (ΣΕΙΡΑ_ΕΛΕΓΧΟΥ, δείκτης_μεταβλητής-1, δείκτης_μεταβλητής-2,..., δείκτης_μεταβλητής-ν) Στη πιο γνωστή της μορφή χρησιμοποιείται για να καταχωρίσουμε δεδομένα σε μεταβλητές από το πληκτρολόγιο. Οι προσδιοριστές στη ΣΕΙΡΑ_ΕΛΕΓΧΟΥ αντιστοιχούν σε διευθύνσεις μεταβλητών (δείκτες). Η συνάρτηση scanf() μοιάζει πολύ με την printf() με μια μεγάλη διαφορά: δεν αναφέρεται σε ονομασίες μεταβλητών, αλλά σε δείκτες μεταβλητών. Άλλη διαφορά: η ΣΕΙΡΑ_ΕΛΕΓΧΟΥ στη scanf() περιέχει κυρίως προσδιοριστές και όχι επεξηγηματικό κείμενο. Χαρακτήρες ελέγχου μπορείτε να βάλετε. Για μεταβλητές τύπου double, ο προσδιοριστής είναι: %lf 7

Λίγα για τους δείκτες Δήλωση στη C int NUM = 5 ; Η διεύθυνση του NUM (&NUM) Δήλωση στη C char LET = A ; Δείκτης της NUM Η διεύθυνση του LET (&LET) Δείκτης της LET Διευθύνσεις μνήμης 01010001 01010010 01010011 01010100 01010101 01010110 01010111 01011001 01011010 01011011 Μνήμη 10001010 10001010 00000000 00000101 01000100 01001010 01001010 01000001 10001010 10001010 Η έκφραση &NUM εννοεί την διεύθυνση της μεταβλητής NUM (=01010011 2 =83 10 ). Η scanf() λοιπόν αντίθετα με την printf() χρησιμοποιεί δείκτες μεταβλητών. 8

Παραδείγματα εντολών με τη scanf() /* Διαβάζει από το πληκτρολόγιο την ακέραια μεταβλητή x */ printf("enter first number: "); scanf("%d", &x); /* Διαβάζει από το πληκτρολόγιο μια μεταβλητή κινητής υποδιαστολής (fnum) και μια ακέραια μεταβλητή (inum) */ printf ("Give me 1 float and 1 integer number:"); scanf("%f %d", &fnum, &inum); Μετά την είσοδο δεδομένων, πατάμε <ENTER> 1 κενό μεταξύ των τιμών που δίνουμε Καλό είναι κάθε κλήση της scanf() να συνοδεύεται από μια κλήση της printf(), (η printf να μπαίνει πριν την scanf), ώστε ο χρήστης γνωρίζει τι δεδομένο πρέπει να πληκτρολογήσει. Όταν εισάγονται με μια κλήση της scanf() πάνω από 2 δεδομένα αυτά θα πρέπει να έχουν μεταξύ τους τουλάχιστον 1 κενό. Δίνουμε <ENTER> μετά την πληκτρολόγηση των δεδομένων. Σύνηθες λάθος: scanf("%d",x) αντί για scanf("%d", &x). 9

Τι επιστρέφει η scanf() η scanf() έχει κάποια τιμή επιστροφής που ανάλογα είναι: ο αριθμός των όρων που διάβασε με επιτυχία, μηδέν (0) αν δεν μπορέσει να διαβάσει με επιτυχία ή η τιμή του EOF (End Of File ) όταν φτάσει απροσδόκητα στο τέλος αρχείου. Η κλήση: n = scanf("%d%f", &i, &x); όταν η γραμμή εισαγωγής (πληκτρολόγιο) είναι 25 54.32 και οι δηλώσεις των μεταβλητών είναι: int i, n; float x; θα έχει σαν αποτέλεσμα: η μεταβλητή n να πάρει την τιμή 2 η μεταβλητή i να πάρει την τιμή 25 και η μεταβλητή x να πάρει την τιμή 54.32. 10

Παραδείγματα προγραμμάτων με την scanf() #include <stdio.h> #include <stdlib.h> main() { int index; float num; printf (" Give me the integer index: "); scanf("%d", &index); printf (" Give me the float num: "); scanf("%f", &num); printf("the value of index is %d\n",index); printf("the value of num is %f\n",num); num = 27.567; printf("the new value of num is %f\n",num); system( PAUSE ); } #include <stdio.h> #define FPA 0.23 main() { float timi_dvd, poso; int posotita; printf ("\ntimi DVD:"); scanf ("%f", &timi_dvd); printf ("Dwste posotita:\n"); scanf ("%d", &posotita); poso=timi_dvd*posotita; printf ("\n\n"); printf("poso plirwmis: %5.2f\n", poso); poso = poso + FPA * poso; printf ("\n\n"); printf("poso plirwmis: %6.3f\n", poso); getchar(); getchar(); } 11

Άλλες εντολές εισόδου/εξόδου 12

Οι συνάρτησεις getchar(), putchar() Η getchar() διαβάζει έναν χαρακτήρα από το πληκτρολόγιο με το πλήκτρο <enter> (περιμένει τη πληκτρολόγηση του <enter> ). H συνάρτηση getchar() δε δέχεται παραμέτρους. Υπάρχει στη βιβλιοθήκη <stdio.h>. Όταν εκτελείται, επιστρέφει τον χαρακτήρα που διάβασε: char alpha; scanf( %c, &alpha); alpha = getchar(); H getchar() είναι μια παραλλαγή της συνάρτησης getche() η οποία διαβάζει από το πληκτρολόγιο έναν χαρακτήρα και τον εμφανίζει στη οθόνη. Η getche() υπάρχει στην βιβλιοθήκη <conio.h> και δεν δέχεται παραμέτρους. H putchar() εμφανίζει στην οθόνη ένα μόνο χαρακτήρα: putchar(ch); putchar(getchar()); //εμφανίζει στην οθόνη τον χαρακτήρα που πληκτρολογήθηκε Η putchar() υπάρχει στην βιβλιοθήκη <stdio.h>. 13

Συμβολοσειρές printf("what's your name:"); gets(name); printf("hello "); puts(name); #include <stdio.h> main() { char aaa[20]; char bbb[10] = "Ritsa"; printf("hello my name is "); puts(bbb); printf("what's your name:"); gets(aaa); printf("\n"); printf("%s you 're welcome",aaa); } Στη C για την αποθήκευση και χειρισμό των συμβολοσειρών χρησιμοποιείται η δομή του πίνακα τύπου char. O τελευταίος χαρακτήρας του πίνακα είναι ο \0 (μηδενικός χαρακτήρας). char minima1[20] = "hello"; char minima2[ ] = {'h', 'e','l','l','o','\0'};. gets (minima1); Χωρίς & scanf("%s",minima2); puts(minima1); printf("τo minina einai:%s\n", minima); 14

Οι συνάρτησεις puts() & gets() Η puts() εμφανίζει στην οθόνη μια σειρά χαρακτήρων (συμβολοσειρά): gets(<μεταβλητή_συμβολοσειράς>); Η puts() μετά την εμφάνιση της συμβολοσειράς, τυπώνει τον χαρακτήρα \n, δηλαδή επιστρέφει στην επόμενη σειρά. Ο χαρακτήρας \0 που υποδεικνύει το τέλος της συμβολοσειράς (μηδενικός χαρακτήρας) χρησιμοποιείται από την puts() και καλό θα είναι να προσέχετε, ώστε η συμβολοσειρά που έχετε δώσει για εκτύπωση να περιέχει στο τέλος τον χαρακτήρα \0. Η gets() διαβάζει από το πληκτρολόγιο (είσοδος -stdin) μια σειρά χαρακτήρων (συμβολοσειρά) και την αναθέτει σε μια μεταβλητή συμβολοσειράς: gets(<μεταβλητή_συμβολοσειράς>); H gets() διαβάζει από το πληκτρολόγιο μέχρι να συναντήσει τον χαρακτήρα \n (πράγμα που συμβαίνει όταν πατήσουμε το <ENTER>). O χαρακτήρας \0 μπαίνει αυτόματα στο τέλος της συμβολοσειράς που πληκτρολογείτε. 15

Οι τελεστές συσχετισμού Πρόκειται για τελεστές που τους χρησιμοποιούμε για την δημιουργία απλών λογικών εκφράσεων συσχετισμού (σύγκρισης). < Μικρότερο από > Μεγαλύτερο από <= Μικρότερο από ή ίσο >= Μεγαλύτερο από ή ίσο == Λογικό ίσον!= Διάφορο (όχι ίσο) Το αποτέλεσμα μιας λογικής έκφρασης είναι είτε 1 (αληθές) είτε 0 (ψευδές). Οι τελεστές σύγκρισης χρησιμοποιούνται σαν συνθήκες κυρίως στις εντολές ελέγχου και επανάληψης. 16

Παρατηρήσεις στους τελεστές συσχετισμού Αν έχω x=2; και y=3; τότε η λογική έκφραση (x > y) επιστρέφει 0 (ψευδής έκφραση). Προσέξτε τον τελεστή για το λογικό ίσον που είναι ένα διπλό ίσον (= =). Στην C η προτεραιότητα των τελεστών συσχετισμού είναι μικρότερη από αυτή των αριθμητικών τελεστών, ενώ είναι μεγαλύτερη από αυτή του τελεστή καταχώρησης. Άρα η μεταβλητή i στη εκτέλεση του κώδικα που ακολουθεί, j = k =13; i = j == k; θα πάρει την τιμή 1, διότι ο τελεστής της ισότητας (==) έχει μεγαλύτερη προτεραιότητα από τον τελεστή καταχώρησης (ένα απλό ίσον =). Καθώς λοιπόν οι μεταβλητές j και k είναι ίσες το αποτέλεσμα της σύγκρισης αυτών (j == k) θα είναι αληθές, δηλαδή 1. 17

Λογικοί τελεστές Πρόκειται για τελεστές που μας επιτρέπουν να συνδυάσουμε απλές εκφράσεις συσχετισμού και να δημιουργήσουμε πιο πολύπλοκες λογικές προτάσεις. && Λογικό "και" (AND) Λογικό διαζευκτικό "ή" (είτε - OR)! Λογική άρνηση (ΝΟΤ) Το αποτέλεσμα μιας πρότασης με λογικούς τελεστές είναι είτε μηδέν (0 - ψευδές), είτε όχι μηδέν (αληθές). Με τους τελεστές && και, απαιτείται η χρήση 2 όρων, ενώ με τον τελεστή! ενός (μοναδιαίος). x > 10 && x < 20 (x > 10 && x < 20) x > 50 18

Παράδειγμα με λογικούς τελεστές Η προτεραιότητα των τελεστών συσχετισμού είναι μεγαλύτερη από αυτή των λογικών τελεστών ενώ η προτεραιότητα και των δύο (συσχετισμού και λογικών) είναι μικρότερη από αυτή των αριθμητικών τελεστών! H λογική έκφραση που ακολουθεί μας βρίσκει αν ένα έτος είναι δίσεκτο ή όχι: (etos % 4 = = 0 && etos % 100!= 0 etos % 400 = = 0) Δίσεκτα έτη θεωρούνται όσα διαιρούνται ακριβώς με το 4 αλλά όχι με το 100. Εξαίρεση αποτελούν τα έτη που διαιρούνται ακριβώς με το 400, που θεωρούνται επίσης δίσεκτα. Αν το έτος λοιπόν είναι δεν είναι δίσεκτο τότε η λογική έκφραση επιστρέφει την τιμή 0 (ψευδής). Άλλος τρόπος: (! (etos % 4) && (etos % 100)! (etos % 400) ) 19

Oι τελεστές ολίσθησης << και >> Πρόκειται για λογικούς τελεστές που χειρίζονται bits. Με τη εφαρμογή των τελεστών ολίσθησης τα bits της μεταβλητής μετατοπίζονται προς τα αριστερά ή δεξιά. << Ολίσθηση προς αριστερά >> Ολίσθηση προς δεξιά. Η έκφραση alpha << 2 μετατοπίζει τα bits της μεταβλητής alpha κατά 2 θέσεις αριστερά. Στα κενά που δημιουργούνται τοποθετούνται μηδενικά. Η έκφραση alpha >> 2 μετατοπίζει τα bits της μεταβλητής alpha κατά 2 θέσεις δεξιά. Αν η μεταβλητή δεν έχει πρόσημο στα κενά που δημιουργούνται τοποθετούνται μηδενικά. Αν η μεταβλητή έχει πρόσημο τότε τα bits που αδειάζουν, είτε παίρνουν το bit του πρόσημου, είτε "γεμίζουν" με 0. 20

Παραδείγματα με τους τελεστές ολίσθησης /* Ολίσθηση αριστερά unsigned short K, J; J=12; // J = 0000000000001100 2 K=J << 2; // K = 0000000000110000 2 (48 10 ) /* Ολίσθηση δεξιά unsigned short K, J; J=12; // J = 0000000000001100 2 K=J >> 2; // K = 0000000000000011 2 (3 10 ) Η ολίσθηση μιας μεταβλητής προς τα αριστερά κατά n θέσεις ισοδυναμεί με πολλαπλασιασμό της με 2 n ενώ προς τα δεξιά με διαίρεση της με 2 n. 21

Αλλοι τελεστές χειρισμού bits Τελεστής Περιγραφή ~ & ^ Δυαδική άρνηση (όπου 1 μπαίνει 0 και όπου 0 μπαίνει 1 - one's complement). Υπάρχει ένας μόνο όρος. Δυαδικό "και" σε επίπεδο bit (σύζευξη / AND). Ο τελεστής απαιτεί δύο όρους. Υπάρχει και ο τελεστής της διεύθυνσης (&) με τον ίδιο συμβολισμό που όταν μπαίνει μπροστά σε μία μεταβλητή αναφέρεται στην διεύθυνση της. Δυαδικό διαζευκτικό "ή" σε επίπεδο bit (διάζευξη / OR). Ο τελεστής απαιτεί δύο όρους. Αποκλειστική διάζευξη "ή" (exclusive OR) σε επίπεδο bit. Ο τελεστής απαιτεί δύο όρους. 22

Έλεγχος αν ένας αριθμός είναι άρτιος ή περιττός Έστω L ακέραια μεταβλητή χωρίς πρόσημο (unsigned int L;). Θέλουμε να διαπιστώσουμε αν η τιμή που έχει είναι άρτιος ή περιττός αριθμός. Αυτό γίνεται αν δούμε τη τιμή της μεταβλητής Κ (ίδιος τύπος με την L) όπου: Κ= L &1 Αν K είναι ίσος με 0 είναι τότε ο L είναι άρτιος Αν Κ είναι ίσος με 1 τότε o L είναι περιττός Γιατί? Όταν ένας ακέραιος εκφράζεται σε δυαδικό σύστημα τότε αν είναι άρτιος το τελευταίο bit δεξιά είναι 0. Αν είναι περιττός τότε είναι 1. Κάνοντας L&1 ουσιαστικά μηδενίζουμε όλα τα bits του L εκτός του τελευταίου δεξιά (Least Significant Bit - LSB) που παραμένει ως έχει. 00101011 (L = 43) 00101010 (L = 42) Βασικά & 00000001 (1) & 00000001 (1) ελέγχουμε το LSB 00000001 (K) 00000000 (K) 23

Κάνοντας 1 το i-οστό bit από δεξιά Πως μπορώ να κάνω το 1 το i-οστό bit (set on) μιας μεταβλητής L? Έστω ότι έχω μια μεταβλητή με περιεχόμενο 01111000 (πρόκειται για τον αριθμό 120). Το 3 ο bit είναι 0. Αν θέλω να κάνω 1 το 3 ο bit από δεξιά θα πρέπει να δώσω: L 4 Το 4 στο δυαδικό είναι 00000100 (το 3 ο bit είναι 1 και υπόλοιπα 0). Εκτελώντας L=L 4 η L παίρνει τη δυαδική τιμή 01111100 όπου το 3 ο bit είναι 1 (τα υπόλοιπα παραμένουν ως έχουν). 01111000 (120) 00000100 (4) 01111100 (124) 24

Οι τελεστές αυξησης/μείωσης Τελεστής Περιγραφή ++ κάνει αύξηση μιας μεταβλητής κατά 1 μονάδα π.χ. i++; - - κάνει μείωση μιας μεταβλητής κατά 1 π.χ. i-- ; Εχει σημασία αν οι τελεστές αύξησης/μείωσης τεθούν πριν (++i) ή μετά (i--) την μεταβλητή. int a=3, b=3; int syna, synb; syna=a++; synb=++b; printf ("a= %d, syna= %d, b= %d, synb=%d\n", a, syna, b, synb); Αποτέλεσμα: a=4, syna=3, b=4, synb=4 25

Οι συνδυαστικοί τελεστές εκχώρησης += Πρόσθεση σε μεταβλητή. Παράδειγμα: x+=1; είναι το ιδίο όπως x=x+1 -= Αφαίρεση από μεταβλητή. Παράδειγμα: x-=1; (όπως x=x-1) *= Πολλαπλασιασμός μεταβλητής. Παράδειγμα: x*=3; (όπως x=x*3) /= Διαίρεση μεταβλητής. Παράδειγμα: x/=2; (όπως x=x/2) %= Το υπόλοιπο. Παράδειγμα: alpha %=2 (οπως alpha=alpha %2) >>= <<= Ολίσθηση δεξιά. Παράδειγμα: beta >>= 3 (τα bits της beta ολίσθησαν δεξιά κατα 3 θέσεις) Ολίσθηση αριστερά. Παράδειγμα: beta <<= 3 (τα bits της beta ολίσθησαν αριστερά κατά 3 θέσεις) &= Σύζευξη (AND). Παράδειγμα: var &= 0177 (όπως var = var & 0177) = Διάζευξη (OR). Παράδειγμα: var = 0177 ^= Αποκλειστική διάζευξη (exclusive OR). Παράδειγμα: var ^ = 0177 26

Ο τελεστής συνθήκης? Η γενική μορφή χρήσης του τελεστή «?» είναι: Λογική έκφραση/πρόταση? εντολή-1 : εντολή-2 Αν η λογική έκφραση/πρόταση είναι αληθής τότε εκτελείται η εντολή-1, διαφορετικά εκτελείται η εντολή-2. (alpha > 0)? printf( θετικός ) : printf( αρνητικό ή μηδέν»); Ουσιαστικά πρόκειται για μια συμπαγής μορφή της εντολής if-else (που θα δούμε αργότερα) Η τιμή μιας έκφρασης με τον τελεστή?: είναι ίση με την τιμή της έκφρασης που εκτελείται τελευταία. num = (x<=5)? 1 : 0; ισοδύναμα if (x<=5) num=1; else num=0; 27

Προτεραιότητες μεταξύ των τελεστών της C Ιεραρχία Τελεστές Φορά 1 ( ) [ ]. -> Από αριστερά πρός δεξιά 2! ~ ++ -- &(διεύθυνση) *(indirection) (type) sizeof Από δεξιά πρός αριστερά 3 *(πολλαπλασιασμός) / % Από αριστερά πρός δεξιά 4 + - Από αριστερά πρός δεξιά 5 << >> Από αριστερά πρός δεξιά 6 < <= > >= Από αριστερά πρός δεξιά 7 = =!= Από αριστερά πρός δεξιά 8 & (AND) Από αριστερά πρός δεξιά 9 ^ Από αριστερά πρός δεξιά 10 Από αριστερά πρός δεξιά 11 && Από αριστερά πρός δεξιά 12 Από αριστερά πρός δεξιά 13? : Από δεξιά πρός αριστερά 14 = += -= *= /= %= &= ^= = <<= >>= Από δεξιά πρός αριστερά 15, Από αριστερά πρός δεξιά 28