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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

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

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

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

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

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

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

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

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

3 ο Εργαστήριο Μεταβλητές, Τελεστές

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

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

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

ΗΥ-150. Προγραμματισμός

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

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

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

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

Δομημένος Προγραμματισμός

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

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

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

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

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

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Υπολογισμός - Εντολές Επανάληψης

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

ΑΣΚΗΣΗ 3: ΠΡΟΤΑΣΕΙΣ, ΕΚΦΡΑΣΕΙΣ ΚΑΙ ΤΕΛΕΣΤΕΣ

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

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

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

Transcript:

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

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

Λίγα για τους δείκτες Δήλωση στη 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() χρησιμοποιεί δείκτες μεταβλητών. 3

Παραδείγματα εντολών με τη 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). 4

Τι επιστρέφει η 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. 5

Παραδείγματα προγραμμάτων με την 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(); } 6

7

Οι συνάρτησεις 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>. 8

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

Συμβολοσειρές 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); 10

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

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

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

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

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

Παραδείγματα με τους τελεστές ολίσθησης /* Ολίσθηση αριστερά 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. 16

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

Έλεγχος αν ένας αριθμός είναι άρτιος ή περιττός Έστω 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) & 00000001 (1) 00000001 (K) 00101010 (L = 42) & 00000001 (1) 00000000 (K) Βασικά ελέγχουμε το LSB 18

Κάνοντας 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) 19

Οι τελεστές αυξησης/μείωσης Τελεστής Περιγραφή ++ κάνει αύξηση μιας μεταβλητής κατά 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 20

Οι συνδιαστικοί τελεστές εκχώρησης += Πρόσθεση σε μεταβλητή. Παράδειγμα: 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 21

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

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

Στο εργαστήριο Μεταγλωττίστε τα προγράμματα που υπάρχουν στο περιεχόμενο της θεωρίας του 3 ου μαθήματος. Μεταγλωττίστε ξανά τα προγράμματα εργαστηρίου του 2 ου μαθήματος με τη διαφορά αντί να δίνετε τιμές με τον τελεστή =, να τις διαβάζετε από το πληκτρολόγιο. Να γραφτεί ένα πρόγραμμα στο οποίο θα δίνουμε από το πληκτρολόγιο έναν αριθμό δευτερολέπτων και αυτό θα υπολογίζει πόσα λεπτά αντιστοιχούν σε αυτό τον αριθμό δευτερολέπτων και πόσα δευτερόλεπτα απομένουν. Να γραφτεί ένα πρόγραμμα στο οποίο θα δίνουμε από το πληκτρολόγιο μια χρονολογία και αυτό θα εμφανίζει την οθόνη αν το έτος είναι δίσεκτο ή όχι (κάντε χρήση τη λογικής πρότασης που εξετάσαμε στη θεωρία για το δίσεκτο έτος και τον τελεστή?) Γράψτε ένα πρόγραμμα το οποίο να υπολογίζει την απόσταση που διανύει το σώμα που αφήνεται να πέσει ελεύθερα από ηρεμία και την ταχύτητα του μετά από t sec. Ο αριθμός των δευτερολέπτων θα δίνεται από το πληκτρολόγιο (δείτε την άσκηση του 2 ου μαθήματος). 24