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

Σχετικά έγγραφα
Προγραμματισμός Ι (ΗΥ120)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Η γλώσσα C. Προγραµµατισµός Ι 1

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7) Είσοδος/ Έξοδος

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7)

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

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

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

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

Περιεχόμενα. Πρόλογος... 21

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

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

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

Προγραμματισμό για ΗΜΥ

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

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

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

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

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

Απλά Προγράμματα. Βήματα: 1. Καθορισμός παράστασης δεδομένων στη μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων

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

Διαδικασία Ανάπτυξης Λογισμικού

int a[5]; a[0] a[1] a[2] a[3] a[4] 15/10/2009

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

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

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

Διάλεξη 18η: Διαχείρηση Αρχείων

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

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

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

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

Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου

CE 120. Φροντιστήριο 14/10/2011

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

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

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

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

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

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

Βιβλιοθήκες Αφηρημένοι τύποι δεδομένων. Προγραμματισμός II 1

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

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

Επεξεργασία Αρχείων Κειµένου

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

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

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

Προγραμματισμό για ΗΜΥ

Ενδεικτική περιγραφή μαθήματος

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

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

ιαφάνειες παρουσίασης #6 (β)

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

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

7. Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου

Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: ΕΠΛ 131 Αρχές Προγραµµατισµού I 4-2

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Εξοικείωση με το πρόγραμμα DEV C++ Επικοινωνία Χρήστη - Υπολογιστή

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

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

Βασικές Αρχές Προγραμματισμού

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

ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

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

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

Εξοικ Εξ ε οικ ίωση ε με το το πρόγ ραμμα πρόγ DEV C++ Επικοι Επικ νωνία οι Χρήσ Χρήστη τη Υπολ Υπο ογισ λ τή

Βήματα: μνήμη 2. Αλγόριθμος βήματα που περιγράφουν την επεξεργασία των δεδομένων. Δομές Δεδομένων + Αλγόριθμοι = Προγράμματα

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

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

Δομές Δεδομένων (Εργ.) Ακ. Έτος Διδάσκων: Ευάγγελος Σπύρου. Εργαστήριο 3 Επανάληψη Γ μέρος

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

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

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

Transcript:

Προγραμματισμός Ι (HY120) #2 δομή προγράμματος C τύποι δεδομένων λειτουργίες εισόδου / εξόδου 1 Σπύρος Λάλης

Η γλώσσα προγραμματισμού C Από τις παλιές γλώσσες προγραμματισμού Γλώσσα «προστακτικού» (imperative) προγραμματισμού με σχετικά λίγες εντολές Ιδιαίτερα διαδεδομένη, σε επίπεδο υλοποίησης λειτουργικών συστημάτων αλλά και εφαρμογών Υπάρχει συντακτικός έλεγχος αλλά και ευελιξία Η ελάχιστη μονάδα υποπρογράμματος (δόμησης κώδικα) είναι η συνάρτηση (function) Ένα πρόγραμμα C μεταφράζεται και μετά εκτελείται Υποστηρίζεται ξεχωριστή μετάφραση διαφορετικών υποπρογραμμάτων με στατική ή δυναμική σύνδεση Οι γλώσσες C++ και Java είναι «απόγονοι» της C 2 Σπύρος Λάλης

Μορφοποίηση Σχεδόν κάθε εντολή τερματίζεται με ';' Μπορούμε να γράφουμε πολλές διαδοχικές εντολές στην ίδια γραμμή του κειμένου «σώμα» ή «μπλοκ»: μια ή περισσότερες εντολές ανάμεσα σε '{' '}' και συμπεριφέρονται ως «ομάδα» Σχόλια (κείμενο που δεν λαμβάνει υπ όψη του ο μεταφραστής) δίνονται ανάμεσα σε ' /*' και ' */' Κενοί χαρακτήρες / γραμμές ανάμεσα σε εντολές δεν λαμβάνονται υπ όψη από τον μεταφραστή όμως χρησιμεύουν, όπως και τα σχόλια, για την αναγνωσιμότητα του κώδικα 3 Σπύρος Λάλης

Πως να ΜΗΝ γράφετε κώδικα /*,*/ #include <time.h> #include/* _,o*/ <stdlib.h> #define c(c)/* -. */return ( C); /* 2004*/ #include <stdio.h>/*. Moekan "' `\b-' */ typedef/* */char p;p* u,w [9 ][128],*v;typedef int _;_ R,i,N,I,A,m,o,e [9], a[256],k [9], n[ 256];FILE*f ;_ x (_ K,_ r,_ q){; for(; r< q ; K =(( 0xffffff) &(K>>8))^ n[255 & ( K ^u[0 + r ++ ] )]);c (K )} _ E (p*r, p*q ){ c( f = fopen (r,q))}_ B(_ q){c( fseek (f, 0,q))}_ D(){c( fclose(f ))}_ C( p *q){c( 0- puts(q ) )}_/* / */main(_ t,p**z){if(t<4)c( C("<in" "file>" "\40<l" "a" "yout> " /*b9213272*/"<outfile>" ) )u=0;i=i=(e(z[1],"rb"))?b(2)?0 : (((o =ftell (f))>=8)?(u =(p*)malloc(o))?b(0)?0:!fread(u,o,1,f):0:0)?0: D():0 ;if(!u)c(c(" bad\40input "));if(e(z[2],"rb" )){for(n=-1;256> i;n[i++] =-1 )a[ i]=0; for(i=i=0; i<o&&(r =fgetc( f))>-1;i++)++a[r]?(r==n)?( ++I>7)?(n[ N]+1 )?0:(n [N ]=i-7):0: (N=R) (I=1):0;A =-1;N=o+1;for(i=33;i<127;i++ )( n[i ]+ 1&&N>a[i])? N= a [A=i] :0;B(i=I=0);if(A+1)for(N=n[A]; I< 8&& (R =fgetc(f ))> -1&& i <o ;i++)(i<n i>n+7)?(r==a)?((*w[i ] =u [i])?1:(*w[i]= 46))?(a [I++]=i):0:0:0;D();}if(I<1)c(C( " bad\40la" "yout "))for(i =0;256>(R= i);n[i++]=r)for(a=8; A >0;A --) R = ( (R&1)==0)?(unsigned int)r>>(01):((unsigned /*kero Q',KSS */)R>> 1)^ 0xedb88320;m=a[I-1];a[I ]=(m <N)?(m= N+8): ++ m;for(i=00;i<i;e[i++]=0){ v=w [i]+1;for(r =33;127 >R;R++)if(R-47&&R-92 && R-(_)* w[i])*( v++)= (p)r;*v=0;}for(sprintf /*'_ G*/ (*w+1, "%0" "8x",x(R=time(i=0),m,o)^~ 0) ;i< 8;++ i)u [N+ i]=*(*w+i+1);for(*k=x(~ 0,i=0,*a);i>- 1; ){for (A=i;A<I;A++){u[+a [ A] ]=w[a ][e[a]] ; k [A+1]=x (k[a],a[a],a[a+1] );}if (R==k[I]) c( (E(z[3 ],"wb+"))?fwrite( /* */ u,o,1,f)?d () C(" \n OK."):0 :C( " \n WriteError" )) for (i =+I- 1 ;i >-1?!w[i][++ e[+ i]]:0; ) for( A=+i--; A<I;e[A++] =0); (i <I-4 )?putchar ((_ ) 46) fflush /*',*/ ( stdout ): 0& 0;}c(C (" \n fail") ) /* dp' / dp pd ' ' zc */ } Από το Obfuscated C Contest http://www.ioccc.org/ 4 Σπύρος Λάλης

Η συνάρτηση main Η εκτέλεση του προγράμματος αρχίζει με την κλήση της κυρίως συνάρτησης, της συνάρτησης main η κλήση πραγματοποιείται από το περιβάλλον εκτέλεσης (λειτουργικό), χωρίς να υπάρχει εντολή μέσα στο πρόγραμμα Η εκτέλεση ακολουθεί την «συνηθισμένη» ροή εκτελούνται οι εντολές της συνάρτησης main Η main μπορεί να καλέσει άλλες συναρτήσεις αρχικά (για απλότητα) θα εστιάσουμε σε προγράμματα που αποτελούνται μόνο από την συνάρτηση main Η εκτέλεση του προγράμματος ολοκληρώνεται (το πρόγραμμα τερματίζει) όταν επιστρέψει η main Η main επιστρέφει μια ακέραια τιμή αν όλα πάνε καλά, κατά σύμβαση επιστρέφεται 0 5 Σπύρος Λάλης

Ένα απλό παράδειγμα σχόλια /* Αρχείο hello.c: εμφανίζει στην οθόνη το μήνυμα hello world */ #include <stdio.h> int main(int argc, char* argv[]) { printf("hello world\n"); συμπερίληψη δηλώσεων εξωτερικών συναρτήσεων παράμετροι συνάρτησης (ορίσματα προγράμματος) επικεφαλίδα συνάρτησης σώμα (εντολές) } return(0); 6 Σπύρος Λάλης

Μεταγλώττιση & εκτέλεση (στο Linux) το όνομα του προγράμματος μεταγλώτισης (compiler) δείξε και τις προειδοποιήσεις (όχι μόνο τα σφάλματα) πρόσθεσε πληροφορίες για τον αποσφαλματωτή το όνομα του αρχείου με τον κώδικα C >gcc Wall g hello.c o myprog <enter> > >./myprog<enter> hello world > το όνομα του αρχείου όπου θα αποθηκευτεί το εκτελέσιμο πρόγραμμα (κώδικας μηχανής) ακολουθεί το όνομα του αρχείου όπου θα αποθηκευτεί το αποτέλεσμα (κώδικας μηχανής), μόνο αν η μετάφραση είναι επιτυχής έξοδος προγράμματος εντολή εκτέλεσης του εκτελέσιμου προγράμματος 7 Σπύρος Λάλης

Στοιχεία ενός προγράμματος Literal / κυριολεκτικό μια συγκεκριμένη τιμή που εμφανίζεται σε ένα πρόγραμμα π.χ. 3, Hello, 5.19 Variable / μεταβλητή μια ονομασμένη θέση μνήμης όπου αποθηκεύεται μια τιμή η τιμή που αποθηκεύεται σε μια μεταβλητή μπορεί να διαβαστεί/αλλαχθεί κατά την εκτέλεση του προγράμματος Constant / σταθερά μια ονομασμένη θέση μνήμης όπου αποθηκεύεται μια τιμή η τιμή που αποθηκεύεται σε μια σταθερά δεν μπορεί να αλλαχθεί κατά την εκτέλεση του προγράμματος 8 Σπύρος Λάλης

Στοιχεία ενός προγράμματος Expression / έκφραση οτιδήποτε μπορεί να αποτιμηθεί συνήθως αποτελείται από ένα συνδυασμό μεταβλητών, κυριολεκτικών και τελεστών αργότερα θα δούμε κι άλλα είδη εκφράσεων... Statement / εντολή μια οδηγία, στο πρόγραμμα, η οποία μπορεί να εκτελεστεί Κάθε έκφραση γίνεται εντολή αν βάλουμε στο τέλος της το ερωτηματικό ';' 9 Σπύρος Λάλης

Στοιχεία ενός προγράμματος Function / συνάρτηση ένα ονομασμένο γκρουπ (block) εντολών, που κάνουν μια καλά ορισμένη λειτουργία π.χ. εκτύπωση μηνύματος στην οθόνη μια συνάρτηση μπορεί να δέχεται κάποια δεδομένα ως παραμέτρους και να επιστρέφει κάποια τιμή Library / βιβλιοθήκη μια συλλογή συναρτήσεων που υλοποιούν παρεμφερείς λειτουργίες, που μπορεί να έχουν χρησιμότητα σε πολλά εντελώς διαφορετικά προγράμματα π.χ., η stdio είναι μια συλλογή συναρτήσεων για ανάγνωση δεδομένων από την είσοδο του προγράμματος (π.χ. από πληκτρολόγιο) και την εκτύπωση δεδομένων στην έξοδο του προγράμματος (π.χ. στην οθόνη) 10 Σπύρος Λάλης

Κυριολεκτικά Μεταβλητές Τελεστές Εκφράσεις Εντολές Συναρτήσεις Βιβλιοθήκες Πρόγραμμα 11 Σπύρος Λάλης

Τύποι δεδομένων 18 Σπύρος Λάλης

Βασικοί τύποι: ακέραιοι Όνομα Τύπος / Κωδικοποίηση Μέγεθος (bytes) char χαρακτήρας 1 int ακέραιος 2 ή 4 (*) float πραγματικός απλής ακρίβειας 4 double πραγματικός διπλής ακρίβειας 8 void τίποτα (*) εξαρτάται από την αρχιτεκτονική του επεξεργαστή 19 Σπύρος Λάλης

Προσδιοριστές μεγέθους / πεδίου τιμών Όνομα Τύποι / Ερμηνεία Μέγεθος (bytes) short «μικρός» int 1, 2 ή 4 (*) long «μεγάλος» int 2, 4 ή 8 (*) >= int long «μεγάλος» double 12 ή 16 (*) (*) εξαρτάται από την αρχιτεκτονική του επεξεργαστή / πλατφόρμα short / long χωρίς τύπο: υπονοείται int Όνομα Τύποι Πεδίο Τιμών signed int / char με πρόσημο [-2 Ν-1...2 Ν-1-1] unsigned int / char χωρίς πρόσημο [0...2 Ν -1] Ν: αριθμός bits τύπος χωρίς signed / unsigned: υπονοείται signed 20 Σπύρος Λάλης

Τύποι / μεγέθη / πεδία τιμών (μηχανήματα x86 64-bit του εργαστηρίου) Τύπος bytes Πεδίο Τιμών unsigned char 1 0... 255 char 1-128... 127 unsigned int 4 0... 4,294,967,295 short int 2-32,768... 32,767 int 4-2,147,483,648... 2,147,483,647 unsigned long 8 0 18,446,744,073,709,551,615 long 8-9,223,372,036,854,775,808... 9,223,372,036,854,775,807 float 4 1.17549435 * (10^-38)... 3.40282347 * (10^+38) double 8 2.2250738585072014 * (10^-308)... 1.7976931348623157 * (10^+308) long double 16 3.4 * (10^-4932)... 1.1 * (10^4932) 22 Σπύρος Λάλης

Πως τα βρίσκω; /* εκτύπωση μεγέθους βασικών τύπων */ #include <stdio.h> int main(int argc, char *argv[]) { printf("sizeof(char) = %ld\n",sizeof(char)); printf("sizeof(short) = %ld\n",sizeof(short)); printf("sizeof(int) = %ld\n",sizeof(int)); printf("sizeof(long) = %ld\n", sizeof(long)); printf("sizeof(float) = %ld\n",sizeof(float)); printf("sizeof(double) = %ld\n",sizeof(double)); printf("sizeof(long double) = %ld\n",sizeof (long double)); } return(0); sizeof() επιστρέφει τον αριθμό των bytes ενός ή ενός αντικειμένου δεδομένων / μεταβλητής 23 Σπύρος Λάλης

Ερμηνεία δεδομένων Το υλικό του Η/Υ δεν γνωρίζει την σημασία των δεδομένων που αποθηκεύονται στην μνήμη Τα bytes ερμηνεύονται σε επίπεδο λογισμικού με βάση την κωδικοποίηση του αντίστοιχου τύπου 0x61: 'a' (char) ή 97 (short) 0xFFFFFFFF: -1 (int) ή 4294967295 (unsigned int) Η ερμηνεία των περιεχομένων της μνήμης πρέπει να γίνεται με πλήρη επίγνωση και ιδιαίτερη προσοχή διαφορετικά: σημασιολογικά λάθη! 24 Σπύρος Λάλης

Δηλώσεις μεταβλητών Οι δηλώσεις μεταβλητών δίνονται πριν από (σχεδόν) όλες τις υπόλοιπες εντολές ενός προγράμματος Mορφή των εκφράσεων δήλωσης είναι <τύπος> <όνομα> ; <τύπος> <όνομα>,..., <όνομα> ; <τύπος> <όνομα> = <τιμή> ; Κάθε μεταβλητή (και συνάρτηση) πρέπει να έχει διαφορετικό όνομα (για να μην υπάρχει αμφισημία) Κατά την δήλωση της, μια μεταβλητή μπορεί (προαιρετικά) να λάβει και μια αρχική τιμή το πρόθεμα const σε συνδυασμό με την ανάθεση αρχικής τιμής υποδηλώνει ότι η τιμή της μεταβλητής δε μπορεί να αλλάξει κατά την διάρκεια της εκτέλεσης 25 Σπύρος Λάλης

Υπολογισμός 1+2+3+4+5 με αποθήκευση σε μεταβλητή /* άθροισμα 1 έως 5 */ #include <stdio.h> int main(int argc, char *argv[]) { int sum=0; sum = sum + 1; sum = sum + 2; sum = sum + 3; sum = sum + 4; sum = sum + 5; printf("%d\n", sum); έκφραση εντολή } return(0); 26 Σπύρος Λάλης

Υπολογισμός 1+2+3+4+5 με αποθήκευση σε μεταβλητή /* άθροισμα 1 έως 5 */ #include <stdio.h> int main(int argc, char *argv[]) { int sum; sum = 1 + 2 + 3 + 4 + 5; εντολή } printf("%d\n", sum); return(0); σταθερή έκφραση που μπορεί να αποτιμηθεί κατά την μετάφραση 27 Σπύρος Λάλης

Υπολογισμός 1+2+3+4+5 χωρίς αποθήκευση σε μεταβλητή /* άθροισμα 1 έως 5 */ #include <stdio.h> int main(int argc, char *argv[]) { printf("%d\n", 1 + 2 + 3 + 4 + 5); } return(0); σταθερή έκφραση που μπορεί να αποτιμηθεί κατά την μετάφραση 28 Σπύρος Λάλης

Είσοδος / Έξοδος προγράμματος 29 Σπύρος Λάλης

Είσοδος και έξοδος έξοδος είσοδος πρόγραμμα To πρόγραμμα πρέπει να μπορεί να εισάγει/εξάγει δεδομένα από/προς το «περιβάλλον» του συνήθως από το πληκτρολόγιο και προς την οθόνη ή από και προς το δίκτυο, το δίσκο κλπ. Αυτό γίνεται με ειδικές εντολές εισόδου/εξόδου (input/output commands) 30 Σπύρος Λάλης

Η βιβλιοθήκη stdio Οι συναρτήσεις εισόδου/εξόδου υλοποιούνται στην βιβλιοθήκη stdio Τα «πρωτότυπα» των συναρτήσεων της stdio υπάρχουν στο αρχείο κεφαλίδων stdio.h Το αρχείο κεφαλίδων πρέπει να «εισαχθεί» στο πρόγραμμα με ρητό τρόπο Μέσω της εντολής #include <stdio.h> στην αρχή του προγράμματος Περισσότερα για το τι είναι και πώς φτιάχνεται μια βιβλιοθήκη και τον ρόλο των αρχείων κεφαλίδων, πολύ πολύ αργότερα... 31 Σπύρος Λάλης

Βασικές εντολές εισόδου/εξόδου Οι εντολές εισόδου/εξόδου είναι ειδικές συναρτήσεις getchar(): διαβάζει ένα (τον επόμενο) χαρακτήρα από την είσοδο του προγράμματος (πληκτρολόγιο) putchar(): γράφει ένα χαρακτήρα στην έξοδο του προγράμματος (οθόνη) scanf(): διαβάζει από την είσοδο χαρακτήρες και αναθέτει τιμές σε συγκεκριμένες μεταβλητές διαβάζονται όσοι χαρακτήρες είναι απαραίτητοι για να ανατεθεί τιμή στις «συγκεκριμένες» μεταβλητές printf(): εκτυπώνει στην έξοδο κείμενο καθώς και τιμές από συγκεκριμένες μεταβλητές 32 Σπύρος Λάλης

#include <stdio.h> int main(int argc, char* argv[]) { putchar('h'); putchar('e'); putchar('l'); putchar('l'); putchar('o'); putchar(' '); putchar('w'); putchar('o'); putchar('r'); putchar('l'); putchar('d'); putchar('\n'); } return(0); 33 Σπύρος Λάλης

#include <stdio.h> int main(int argc, char* argv[]) { putchar('5'); putchar(' '); putchar('+'); putchar(' '); putchar('2'); putchar(' '); putchar('='); putchar('='); putchar(' '); putchar('7'); putchar('\n'); } return(0); 34 Σπύρος Λάλης

#include <stdio.h> int main(int argc, char* argv[]) { char c1, c2, c3; putchar('3'); putchar(' '); putchar('c'); putchar('h'); putchar('a'); putchar('r'); putchar('s'); putchar(':'); putchar('\n'); c1=getchar(); c2=getchar(); c3=getchar(); putchar(c1); putchar(c2); putchar(c3); putchar('\n'); >./myprog<enter> 3 chars: a2$<enter> a2$ > >./myprog<enter> 3 chars: a bcdefg<enter> a b > το πρόγραμμα δεν διαβάζει τα «επιπλέον» δεδομένα... απλά γιατί δεν υπάρχουν αντίστοιχες εντολές στον κώδικα του προγράμματος } return(0); 35 Σπύρος Λάλης

printf() Δέχεται ως πρώτη παράμετρο μια συμβολοσειρά από εκτυπώσιμους χαρακτήρες ASCII, και, προαιρετικά, έναν απεριόριστο αριθμό εκφράσεων αποτίμησης Η πρώτη παράμετρος περιέχει το κυριολεκτικό κείμενο προς εκτύπωση και τους προσδιορισμούς εκτύπωσης για τις τιμές κάθε μιας έκφρασης αποτίμησης Προσοχή: δείτε οπωσδήποτε το εγχειρίδιο της γλώσσας για τις συμβάσεις των προσδιορισμών εκτύπωσης ο μεταγλωττιστής δεν εμφανίζει λάθος αν οι εκφράσεις αποτίμησης είναι λιγότερες από τους προσδιορισμούς εκτύπωσης ο μεταγλωττιστής δίνει μόνο μια προειδοποίηση αν οι προσδιορισμοί εκτύπωσης δεν είναι συμβατοί με τους αντίστοιχους τύπους των εκφράσεων αποτίμησης 36 Σπύρος Λάλης

#include <stdio.h> int main(int argc, char* argv[]) { int a=1,b=2; printf("a is %d, b is %d and a+b is %d\n",a, b, a+b); } return(0); >./myprog<enter> a is 1, b is 2 and a+b is 3 > 37 Σπύρος Λάλης

Προσδιοριστές της printf() http://en.cppreference.com/w/cpp/io/c/printf %c : char %d : int %u : unsigned int %x : δεκαεξαδική αναπαράσταση %f : float %ld : long int %lu : long unsigned int %lf : double %s : string (βλέπε συνέχεια) %p : pointer (βλέπε συνέχεια) 38 Σπύρος Λάλης

Επιλέον προσδιορισμοί εκτύπωσης Εκτύπωση ακέραιου αριθμού με συνολικό πλάτος 4 θέσεις: int x = 12; printf("%4d", x); Εκτυπώνει: 12 2 κενά + 2 ακέραια ψηφία 4 θέσεις Εκτύπωση ακέραιου αριθμού με συνολικό πλάτος 4 θέσεις και "γέμισμα" με μηδενικά: int x = 12; printf("%04d", x); Εκτυπώνει: 0012 39 Σπύρος Λάλης

Επιλέον προσδιορισμοί εκτύπωσης Εκτύπωση αριθμού κινητής υποδιαστολής με 2 δεκαδικά ψηφία: double x = 1.2345; printf("%.2lf", x); Εκτυπώνει: 1.23 Εκτύπωση αριθμού κινητής υποδιαστολής με 2 δεκαδικά ψηφία και συνολικό πλάτος 6 θέσεις: double x = 12.345; printf("%6.2lf", x); Εκτυπώνει: 12.34 1 κενό + 2 ακέραια ψηφία + τελεία + 2 δεκαδικά 6 θέσεις 40 Σπύρος Λάλης

scanf() Δέχεται μια παράμετρο σε μορφή συμβολοσειράς από εκτυπώσιμους χαρακτήρες ASCII, και έναν απεριόριστο αριθμό διευθύνσεων μεταβλητών Η πρώτη παράμετρος περιέχει το επιθυμητό μοτίβο εισόδου με τους προσδιορισμούς ανάγνωσης για τις τιμές κάθε μιας μεταβλητής η διεύθυνση της οποίας δίνεται ως παράμετρος Προσοχή: δείτε οπωσδήποτε το εγχειρίδιο της γλώσσας για τις συμβάσεις του μοτίβου εισόδου / προσδιορισμών ανάγνωσης ο μεταγλωττιστής δίνει μόνο προειδοποίηση αν οι προσδιορισμοί ανάγνωσης δεν είναι συμβατοί με τους τύπους των μεταβλητών οι διευθύνσεις των οποίων δίνονται ως παράμετροι 41 Σπύρος Λάλης

#include <stdio.h> int main(int argc, char* argv[]) { int a,b; printf("enter 2 int values: "); προσοχή: πάντα να υπάρχει το & πριν το όνομα της μεταβλητής (επεξήγηση προσεχώς) scanf("%d %d",&a,&b); printf("a is %d and b is %d\n",a,b); } return(0); >./myprog<enter> enter 2 int values: 5 10 15<enter> a is 5 and b is 10 > το πρόγραμμα δεν διαβάζει τα «επιπλέον» δεδομένα αφού δεν υπάρχουν αντίστοιχες εντολές στον κώδικα 42 Σπύρος Λάλης

Προσδιοριστές της scanf() http://en.cppreference.com/w/cpp/io/c/scanf %c : char %d : int %u : unsigned int %x : δεκαεξαδική αναπαράσταση %f : float (χωρίς εκθέτη) %g : float (χωρίς ή με εκθέτη) %ld : long int %lu : long unsigned int %lf : double %s : string (βλέπε συνέχεια) %p : pointer (βλέπε συνέχεια) 43 Σπύρος Λάλης

Παραδείγματα Ανάγνωση χαρακτήρα: char letter; scanf(" %c", &letter); κενό ανάμεσα στο " και στο %c για να αγνοηθούν προηγούμενοι λευκοί χαρακτήρες Ανάγνωση τιμών με μορφή εισόδου 10/2011: int month, year; scanf("%d/%d", &month, &year); Ανάγνωση τιμών με μορφή εισόδου PRICE: 3.75 euro double price; scanf("price: %lf euro", &price); 44 Σπύρος Λάλης

Ανακατεύθυνση εισόδου/εξόδου (ε/ε) Οι πράξεις εισόδου / εξόδου διαβάζουν / γράφουν από την είσοδο / έξοδο του προγράμματος συνήθως η είσοδος αντιστοιχεί στο πληκτρολόγιο (με αυτόματη εκτύπωση των χαρακτήρων που εισάγονται και στην οθόνη) και η έξοδος αντιστοιχεί στην οθόνη Τόσο η είσοδος όσο και η έξοδος ενός προγράμματος μπορούν να ανακατευθυνθούν Π.χ. σε αρχεία έτσι ώστε οι πράξεις εισόδου να διαβάζουν δεδομένα από ένα αρχείο ή/και οι πράξεις εξόδου να γράφουν δεδομένα σε ένα αρχείο τα αρχεία που δίνονται για είσοδο στο πρόγραμμα πρέπει να είναι αρχεία κειμένου (ASCII) τα αρχεία που δημιουργούνται για την αποθήκευση των δεδομένων έξοδου του προγράμματος είναι ASCII 45 Σπύρος Λάλης

έξοδος είσοδος πρόγραμμα πρόγραμμα αρχείο αρχείο πρόγραμμα αρχείο πρόγραμμα αρχείο 46 Σπύρος Λάλης

#include <stdio.h> διάβασμα abcd efgh αρχείο in.txt int main(int argc, char* argv[]) { char c1, c2, c3; c1=getchar(); c2=getchar(); c3=getchar(); putchar(c1); putchar(c2); putchar(c3); >./myprog < in.txt <enter> abc > ανακατεύθυνση εισόδου γράψιμο abc αρχείο out.txt } return(0); >./myprog > out.txt <enter> abcdefghij<enter> > ανακατεύθυνση εξόδου 47 Σπύρος Λάλης

Πως δουλεύει η ανακατεύθυνση εισόδου; Όταν το πρόγραμμα φτάσει σε μια εντολή εισόδου (π.χ. getchar() ή scanf()), η εκτέλεση σταματά μέχρι να υπάρξουν δεδομένα προς ανάγνωση Αν τα δεδομένα εισάγονται από το πληκτρολόγιο οι χαρακτήρες «στέλνονται» στο πρόγραμμα αφού πατηθεί το <enter> δημιουργείται αυτόματα και ο λευκός χαρακτήρας '\n' Αν τα δεδομένα εισόδου «έρχονται» από ένα αρχείο (με ανακατεύθυνση), και το πρόγραμμα επιχειρήσει να διαβάσει χωρίς να υπάρχουν άλλα δεδομένα τότε επιστρέφεται η τιμή (σταθερά) EOF (end of file) το πρόγραμμα πρέπει να κάνει κατάλληλο έλεγχο 48 Σπύρος Λάλης

Πως δουλεύει η ανακατεύθυνση εξόδου; Όταν το πρόγραμμα φτάσει σε μια εντολή εξόδου (π.χ. putchar() ή printf()), παράγονται δεδομένα Αν τα δεδομένα εξόδου «στέλνονται» σε ένα αρχείο (με ανακατεύθυνση), αυτά γράφονται στο αρχείο Αν το αρχείο δεν υπάρχει, δημιουργείται αυτόματα Αν το αρχείο υπάρχει και έχει ήδη κάποια δεδομένα, κόβεται στην αρχή του (τα δεδομένα χάνονται) Εναλλακτικά, το αρχείο μπορεί να επεκταθεί χρήση >> αντί για > κατά την ανακατεύθυνση Σε κάθε περίπτωση, το αρχείο μεγαλώνει αυτόματα, κάθε φορά που το πρόγραμμα γράφει στην έξοδο του 49 Σπύρος Λάλης

γράψιμο abc αρχείο out.txt #include <stdio.h> int main(int argc, char* argv[]) { char c1, c2, c3; c1=getchar(); c2=getchar(); c3=getchar(); putchar(c1); putchar(c2); putchar(c3); >./myprog > out.txt <enter> abcdefghij<enter> > ανακατεύθυνση εξόδου (χωρίς διατήρηση των περιεχομένων του αρχείου) γράψιμο abcabc αρχείο out.txt } return(0); >./myprog >> out.txt <enter> abcdefghij<enter> > ανακατεύθυνση εξόδου (με διατήρηση των περιεχομένων του αρχείου) 50 Σπύρος Λάλης