Εργαστήριο 2 ο Τύποι Δεδομένων Είσοδος/Έξοδος Εισαγωγή Σκοπός του εργαστηρίου αυτού είναι η εισαγωγή μας στους τύπους δεδομένων της C και η εξοικείωση μας με συναρτήσεις του ρεπερτορίου της ANSI C σχετικές με είσοδο και έξοδο δεδομένων σε ένα πρόγραμμα. Συγκεκριμένα οι συναρτήσεις που θα μας απασχολήσουν είναι η printf() και η scanf(). Τύποι δεδομένων Η C έχει πέντε βασικούς τύπους δεδομένων: char (character), int (integer), float (floating point), double (double floating point), void (no value). Όλοι οι άλλοι τύποι της C βασίζονται σ' αυτούς. Όλοι οι βασικοί τύποι εκτός από τον τύπο void μπορεί ν' αλλάξουν γράφοντας πριν από τον τύπο τον κατάλληλο μετασχηματισμό. Οι μετασχηματισμοί αυτοί είναι οι: signed, unsigned, long, και short. Το μέγεθος και τα διαστήματα τιμών των τύπων της C εξαρτάται από τον επεξεργαστή. Στον πίνακα δίνουμε τους τύπους δεδομένων όπως ορίζονται από το πρότυπο ANSI. Tύπος µέγεθος σε bits διάστηµα τιµών Char Unsigned char Signed char Int Unsigned int Signed int Short int Unsigned short int Signed short int Long int Signed long int Unsigned long int Float Double Long double 64 12-12..127 0..255-127..127 0..65535 0..65535-214743647..214743647 0..4294967295
Δηλώσεις μεταβλητών Τα αναγνωριστικά στη C μπορούν να έχουν όσους χαρακτήρες θέλουμε. Αν το αναγνωριστικό είναι εξωτερικό όνομα (όνομα συνάρτησης η καθολική μεταβλητή) τότε μόνο οι έξι πρώτοι χαρακτήρες είναι σημαντικοί διαφορετικά για εσωτερικά ονόματα οι πρώτοι 31 χαρακτήρες είναι σημαντικοί. Τα κεφαλαία γράμματα στην C είναι διαφορετικά από τα μικρά. Η δήλωση μιας μεταβλητής έχει την γενική μορφή: <τύπος> <λίστα µεταβλητών> Παραδείγματα int i=0,j; char q='?'; short int si; float f,g; Η συνάρτηση printf() Η printf(), χρησιμοποιείται για την εκτύπωση δεδομένων στην έξοδο του προγράμματος. Συγκεκριμένα, δέχεται ως όρισμα ένα αλφαριθμητικό π.χ. Hello, world\n. Η γενική μορφή της printf() είναι printf( αλφαριθμητικό ελέγχου, λίστα ορισμάτων) Στη συνάρτηση printf(), το αλφαριθμητικό ελέγχου περιέχει ή χαρακτήρες που θα εμφανιστούν στην οθόνη, ή διαταγές φόρμας που λένε στην printf() πως να εμφανίσει τα ορίσματα, ή και τα δύο. Οι κωδικοί φόρμας φαίνονται στο 1ο παράδειγμα. Παραδείγµατα 1. printf( %s %d, Να ένα αλφαριθµητικό, 100); 2. printf( Να ένα αλφαριθµητικό %d, 100) 3. printf( ο αριθµός %d είναι int και ο %f είναι float, 10, 110.79) Η συνάρτηση scanf() Η scanf(), χρησιμοποιείται για την εισαγωγή δεδομένων από το πληκτρολόγιο σε μεταβλητές του προγράμματος.. Η γενική μορφή της scanf() είναι scanf( αλφαριθμητικό ελέγχου, λίστα ορισμάτων) Η λίστα ορισμάτων πρέπει να περιέχει τόσα ακριβώς ορίσματα όσοι και οι κωδικοί φόρμας που περιέχονται στο αλφαριθμητικό ελέγχου. Στη λίστα ορισμάτων πρέπει να υπάρχει ένα & πριν από τις μεταβλητές που θα δεχτούν τις τιμές που διαβάζονται από πληκτρολόγιο. Παραδείγµατα 1. scanf( %d, &number); 2. scanf( %f, &number);
Παραδείγματα Στα παρακάτω παραδείγματα βλέπουμε την λειτουργία των συναρτήσεων printf() και scanf() καθώς επίσης και τους διακόπτες που έχουμε στην διάθεση μας για να χειριστούμε τα διάφορα είδη μεταβλητών. /******************* printf() ***********************************/ //Header file: //Ορισµός: int printf(const char *format,...); //Επιστρέφει: τον αριθµό των χαρακτήρων που τυπώνονται στην οθόνη. Αρνητική τιµή σηµαίνει σφάλµα. // Τα ορίσµατα της printf() //Φορµά ανάλογα µε την προς εκτύπωση µεταβλητή //%c: Χαρακτήρας. //%d: Προσηµασµένοι ακέραιοι. //%i: Προσηµασµένοι ακέραιοι. //%e: Επιστηµονική γραφή αριθµών (µικρό e). //%E: Επιστηµονική γραφή αριθµών (κεφαλαίο Ε). //%f: Δεκαδικός αριθµός µε υποδιαστολή. //%o: Οκταδικός χωρίς πρόσηµο. //%s: Συµβολοσειρά. //%u: Μη προσηµασµένοι ακέραιοι. //%x: Μη προσηµασµένοι δεκαεξαδικοί (µικρά γράµµατα). //%X: Μη προσηµασµένοι δεκαεξαδικοί (Κεφαλαία γράµµατα). //%p: Εµφάνιση δείκτη. //%%: Εκτύπωση του συµβόλου επί τοις 100 (%). int main(void) printf("hi %c %d %s", 'c', 10, "there!"); /* Hi c 10 there!*/ /******************* scanf() ***********************************/ //Header file: //Declaration: int scanf(const char *format,...); // Τα ορίσµατα της scanf() //Φορµά ανάλογα µε την προς ανάγνωση µεταβλητή
//%c: Ανάγνωση ενός χαρακτήρα //%d: Ανάγνωση ενός δεκαδικού ακέραιου //%i: Ανάγνωση ενός ακέραιου σε δεκαδική ή οκταδική ή δεκαεξαδική µορφή //%e: Ανάγνωση ενός αριθµού κινητής υποδιαστολής //%E: Το ίδιο µε το %e //%f: Ανάγνωση ενός αριθµού κινητής υποδιαστολής //%g: Ανάγνωση ενός αριθµού κινητής υποδιαστολής //%G: Το ίδιο µε %g //%o: Ανάγνωση ενός οκταδικού αριθµού //%s: Ανάγνωση µιας συµβολοσειράς //%x: Ανάγνωση ενός δεκαεξαδικού αριθµού //%X: Το ίδιο µε %x //%p: Ανάγνωση ενός δείκτη //%n: Αποδοχή µιας ακέραιας τιµής ίσης µε το πλήθος τον χαρακτήρων που έχουν αναγνωστεί µέχρι στιγµής //%u: Ανάγνωση ενός µη προσηµασµένου δεκαδικού ακέραιου //%[ ]: Αναγνώριση συνόλου χαρακτήρων //%%: Ανάγνωση του συµβόλου επί τοις εκατό (%) int main(void) char str[0], str2[0]; int i; scanf("%79s", str); //scanf µέχρι 79 χαρακτήρες µέσα στην µεταβλητή str return 0; Στο παρακάτω πρόγραμμα βλέπουμε πως μπορούμε να τυπώσουμε στην οθόνη του ΗΥ το περιεχόμενο μιας μεταβλητής τύπου ακεραίου (int). main() int number=42; printf("the answer is %i\n", number); Το ίδιο πρόγραµµα µε το παραπάνω µε την διαφορά ότι πλέον κάνοντας χρήση της scanf() µπορούµε στην ακέραια µεταβλητή να αποθηκεύσουµε οποιαδήποτε τιµή κατά την εκτέλεση του προγράµµατος (και όχι πριν την µεταγλώττιση όπως γίνεται παραπάνω).
main() int number; scanf( %d, &number); printf("the answer is %i\n", number); Φτιάξτε ένα πρόγραµµα το οποίο να µετατρέπει µια δοθείσα θερµοκρασία σε κλίµακα Κελσίου σε Φαρενάιτ. void main () int celcius; double farenheit; printf("give the temperature (C): "); scanf("%d", &celcius); farenheit = 9.0 * celcius / 5.0 +.0; printf("%d degrees Celcius "is %lf degrees Farenheit", celcius, farenheit); Aυτό το πρόγραµµα διαβάζει όνοµα, ηλικία και µισθό main() int age; long misthos; char onoma[30]; clrscr(); printf("\nποιο είναι το όνοµά σου ; "); scanf("%s", onoma); /* τα ονόµατα τα διαβάζουµε χωρίς το & */ printf("\nποιος είναι ο µισθός σου ; "); scanf("%ld", &misthos); printf("\nποια είναι η ηλικία σου ; "); scanf("%d", &age); printf("\n"); printf("\n %s,είσαι %d µε µισθό %ld\ ", onoma, age, misthos); scanf("%d", &age); /* end of main */ Ασκήσεις 1. Να δίνονται από το πληκτρολόγιο το ΑΜ του σπουδαστή, η ηλικία του και το εξάμηνο του. Να τυπώνονται με κατάλληλα μηνύματα.
2. Δημιουργήστε πρόγραμμα στο οποίο να υπολογίζετε ο μέσος όρος τριών πραγματικών αριθμών (οι αριθμοί αυτοί μπορούν να εισάγονται από το πληκτρολόγιο. 3. Να εμφανίζεται η προπαίδεια πχ. εισάγουμε το 6 και να εμφανίζεται το εξής: 1x6=6 2x6=12 3x6=1