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

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

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

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

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

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

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

Υπολογισμός - Συλλογή Δεδομένων - Πίνακες

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

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

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

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

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

6. ΠΙΝΑΚΕΣ & ΑΛΦΑΡΙΘΜΗΤΙΚΑ

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

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

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

Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες

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

Τεχνολογία και Προγραμματισμός Υπολογιστών. Η γλώσσα προγραμματισμού C

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

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

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

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

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

ΑΣΚΗΣΗ 7: ΑΛΦΑΡΙΘΜΗΤΙΚΑ

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

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

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

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

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

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Master Mind εφαρμογή στη γλώσσα προγραμματισμού C

Κεφάλαιο 8.7. Πολυδιάστατοι Πίνακες (Διάλεξη 19)

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

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

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

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

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

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

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

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

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

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

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

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

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

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

Κεφάλαιο ΙV: Δείκτες και πίνακες. 4.1 Δείκτες.

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

Διάλεξη 2: Επανάληψη Προγραμματισμού Συμβολοσειρές (strings) Διδάσκων: Παναγιώτης Ανδρέου

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

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

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

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

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

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

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

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

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

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

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

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

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

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

Η γλώσσα προγραμματισμού C Δυναμική διαχείριση μνήμης

Ενότητα 4: «Εισαγωγή στον Προγραμματισμό. Τα πρώτα προγράμματα σε γλώσσα C»

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

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

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

Διάλεξη 8η: Αλφαριθμητικά (strings)

ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ. Παράδειγμα 1 Δήλωση και αρχικοποίηση μονοδιάστατου πίνακα [5] με χρήση δομής επανάληψης με συνθήκη στην είσοδο και μετρητή.

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

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

Προγραμματισμός Η/Υ. Ενότητα 6: Πίνακες και Δείκτες

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

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

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

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

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

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

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

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

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

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

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

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

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

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

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

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

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

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

ΠΡΟΓΡΜΜΑΤΑ ΣΕ C. Γράψτε σε γλώσσα προγραμματισμού C τη συνάρτηση:

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

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

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

Transcript:

Η γλώσσα προγραμματισμού C Οι πίνακες στη C (μονοδιάστατοι -συμβολοσειρές)

Γενικά για τους πίνακες Ο πίνακας είναι μια αρκετά διαδεδομένη δομή που προσφέρεται από σχεδόν κάθε γλώσσα προγραμματισμού. Πρόκειται για μια διατεταγμένη ακολουθία δεδομένων ίδιου τύπου στα οποία αναφερόμαστε με ένα όνομα (δηλαδή με μια μεταβλητή, μπορούμε να δηλώσουμε πολλές μεταβλητές). Η ιδέα αυτού της μαζικής αναφοράς στοιχείων, προέρχεται από τα μαθηματικά (διανύσματα, πίνακες). Υλοποιούνται με τη διαδοχική δέσμευση κελιών της κύριας μνήμης κατά τη διάρκεια της εκτέλεσης του προγράμματος. Μας δίνουν την δυνατότητα αποτελεσματικής οργάνωσης πολλών ομοίου τύπου δεδομένων. Η επεξεργασία τους γίνεται μαζικά με χρήση των εντολών επανάληψης. 2

Χαρακτηριστικά στοιχεία πινάκων Βασικά χαρακτηριστικά πινάκων: Ονομασία Διάσταση (1, 2, πολλών διαστάσεων) Τύπος δεδομένων που φιλοξενούνται (int, float, char, ) Αριθμός των στοιχείων σε κάθε διάσταση του. Ένα στοιχείο του πίνακα διακρίνεται από τα υπόλοιπα με τις συντεταγμένες του. Η διάσταση προσδιορίζει και τον αριθμό των ακεραίων δεικτών που χρειάζονται για γίνει διακριτό κάποιο στοιχείο του πίνακα (δηλαδή, οι συντεταγμένες του στοιχείου): για πίνακες 1 διάστασης απαιτείται 1 δείκτης: A i για πίνακες 2 διαστάσεων απαιτούνται 2 δείκτες: A i,j κ.ο.κ 3

Μονοδιάστατοι πίνακες Ένας πίνακας μιας διάστασης είναι ουσιαστικά ένα διάνυσμα. Ένας πίνακας μιας διάστασης με όνομα Α που φιλοξενεί 10 πραγματικούς αριθμούς (βαθμούς φοιτητών) έχει τη δομή: Α = 5.4 3.2 4.5 6.7 6.5 8.2 9.3 4.3 7.3 5.6 Βαθμός 1 ου φοιτητή Βαθμός 2 ου φοιτητή Βαθμός 10 ου φοιτητή Αναφορά σε κάποιο στοιχείο του πίνακα (διάκριση) γίνεται με τη βοήθεια ενός δείκτη (δείχνει τη θέση του στοιχείου): Α 1 : 1 ο στοιχείο (5.4), Α 5 : 5 ο στοιχείο (6.5). Μαζική αναφορά: Α j : j o στοιχείο, όπου j=1,..,10 (με εντολές επανάληψης) 4

Δήλωση μονοδιάστατων πινάκων στη C Η δήλωση γίνεται ως εξής: Τύπος_δεδομένων Όνομα_πίνακα [Πλήθος_στοιχείων] Παραδείγματα: float vathmoi[10]; //περιέχει 10 πραγματικούς int foitites[20]; // περιέχει 20 ακεραίους Συχνά για το πλήθος των στοιχείων του πίνακα χρησιμοποιείται η οδηγία #define: #define N 10 float vathmoi [N]; Το μέγιστο πλήθος στοιχείων εξαρτάται από τον compiler. Βρίσκουμε το μέγεθος του πίνακα με τον τελεστή sizeof(): sizeof(vathmoi)/sizeof(float) // πλήθος στοιχείων Ν 5

Αναφορά σε στοιχεία ενός μονοδιάστατου πίνακα Με το όνομα του πίνακα και τον δείκτη θέσης του στοιχείου μέσα σε αγκύλες [ ]: vathmoi [j] Το πρώτο στοιχείο: vathmoi [0] Το δεύτερο στοιχείο: vathmoi [1] Το τελευταίο στοιχείο: vathmoi [9] Ο δείκτης εκτός από ακέραιος μπορεί να είναι μία μεταβλητή ή μία έκφραση: j=2; i=4; float vathmoi[10]; vathmoi[0] 5.4 vathmoi[1] 3.2 vathmoi[2] 4.5 vathmoi[3] 6.7 vathmoi[4] 6.5 vathmoi[5] 8.2 vathmoi[6] 9.3 vathmoi[7] 4.3 vathmoi[8] 7.3 vathmoi[9] 5.6 vathmoi [2+4] // το 7 ο στοιχείο Το όνομα του πίνακα χωρίς τις αγκύλες δείχνει στο 1 ο στοιχείο του πίνακα (δείκτης). 6

Απόδοση τιμών (μονοδιάστατοι πίνακες) Κατά την διάρκεια της εκτέλεσης του προγράμματος: pinakas [j] =8; Με την δήλωση του πίνακα (απόδοση αρχικών τιμών): int A[5] = {5,8,2,6,3; (A[0]=5; A[1]=8; A[2]=2; A[3]=6; A[4]=3;) Αν δεν υπάρχουν όλες οι τιμές: int A[5] = {5,8,2; (A[0]=5; A[1]=8; A[2]=2; A[3]=0; A[4]=0;) Αποδοση αρχικών μηδενικών τιμών: int A[5] = {0; Είναι δυνατόν να μη δηλωθεί το πλήθος των στοιχείων όταν αποδίδονται αρχικές τιμές: int A[] = {5,8,2,6,3; 7

Διάβασμα ενός μονοδιάστατου πίνακα (πληκτρολόγιο) #include <stdio.h> #define N 5 main() { int i, pin[n]; for (i=0;i<n; i++) //ανάγνωση πίνακα { printf("give me the no. %d element:",i+1); scanf("%d",&pin[i]); printf("\nyou have just read:\n"); for (i=0;i<n; i++) // εμφάνιση στη οθόνη printf("%d\n", pin[i]); 8

Εύρεση μέσου όρου στοιχείων μονοδιαστατου πίνακα int i, pin[n], sum; float MO; for (i=0;i<n; i++) { //ανάγνωση πίνακα printf("give me the no. %d element:",i+1); scanf("%d",&pin[i]); sum=0; //υπολογισμός αθροίσματος for (i=0;i<n; i++) sum=sum+pin[i]; MO=(float) sum /N; // υπολογισμός Μέσου Όρου printf("sum=%d\n", sum); printf("mo=%f\n", MO); 9

Πόσα στοιχεία του πίνακα είναι μικρότερα του 100 int i, pin[n], M; for (i=0;i<n; i++) //ανάγνωση πίνακα { printf("give me the no. %d element:",i+1); scanf("%d", &pin[i]); M=0; //αρχική τιμή στο μετρητή Μ for (i=0;i<n; i++) if (pin[i] < 100) M++; printf("βρήκα %d στοιχεία μικρότερα του 100\n", M ); 10

Πόσα στοιχεία του πίνακα είναι μεγαλύτερα του ΜΟ int i, pin[n], sum, M=0; float MO; for (i=0;i<n; i++) { //ανάγνωση πίνακα printf("give me the no. %d element:", i+1); scanf("%d",&pin[i]); sum=0; //υπολογισμός αθροίσματος for (i=0;i<n; i++) sum=sum+pin[i]; MO=(float) sum /N; // υπολογισμός Μέσου Όρου for (i=0;i<n; i++) if (pin[i] > MO) M++; printf("βρήκα %d στοιχεία μεγαλύτερα του MO=%f\n", M, MO ); 11

Ποια είναι η θέση του μικρότερου στοιχείου int i, pin[n],min, imin; for (i=0;i<n; i++) { printf("give me the no. %d element:", i+1); scanf("%d",&pin[i]); MIN=pin[0]; imin=0; for (i=1;i<n; i++) Εναλλακτικά: if (MIN>pin[i]) { if (pin[imin]>pin[i] imin=i; MIN=pin[i]; imin=i; printf ("MIN=%d at position %d\n", MIN, imin+1); printf ( MIN=%d at position %d, pin[imin], imin); 12

Αντιγράφωντας πίνακες int i, pina[n], pinb[n] ; for (i=0;i<n; i++) //ανάγνωση πίνακα { printf("give me the no. %d element:",i+1); scanf("%d", &pina[i]); for (i=0;i<n; i++) // αντιγράφω τα στοιχεία του pinα στον pinb pinb[i] = pina[i]; printf("\n Printing the new:\n"); for (i=0;i<n; i++) // εμφάνιση στη οθόνη του pinb printf("%d\n", pinb[i]); 13

Αντιστρέφοντας ένα μονοδιάστατο πίνακα int i, j, A[N], ; for (i=0;i<n; i++) { //ανάγνωση πίνακα printf("give me the no. %d element:",i+1); scanf("%d", &A[i]); j = N-1; // j δείχνει στο τελευταίο στοιχείο i = 0; // i δείχνει στο 1 ο στοιχείο while(i < j) { temp = A[i]; //κρατώ το A[i] A[i] = A[j]; // αλλάζω τη τιμή A[j] = temp; // δίνω τη τιμή που έχω κρατήσει στο A[j] i++; // αυξάνω το i j--; // μειώνω το j printf("\n Printing the new:\n"); for (i=0;i<n; i++) // εμφάνιση στη οθόνη printf("%d\n", A[i]); 14

Παρεμβάλλοντας ένα νέο στοιχείο σε πίνακα int i, A[N], n, L, new; // Ν: το μέγεθος του πίνακα μεγάλος αριθμός printf("enter no of elements :"); scanf("%d",&n); //n: πόσα στοιχεία θέλουμε να έχει αρχικά ο πίνακας n<n for (i=0;i<n; i++) { //ανάγνωση των n στοιχείων του πίνακα printf("give me the no. %d element:", i+1); scanf("%d", &A[i]); // διαβάζει το νέο στοιχείο (new) και τη θέση (L) που θέλουμε να μπει στο πίνακα printf("\nenter the new element to be inserted :"); scanf("%d",&new); printf("\nenter the location:"); scanf("%d",&l); for(i = n ;i >= L ; i- -) // δημιουργώ χώρο για το νέο στοιχείο Α[i] = Α[i-1]; n++; // αυξάνω το n A[L-1] = new; //παρεμβάλω το στοιχείο printf("\n Printing the new:\n"); for (i=0;i<n; i++) // εμφάνιση στη οθόνη του νέου πίνακα printf("%d\n", A[i]); 15

Διαγράφοντας ένα στοιχείο του πίνακα int i, A[N], n, L; // Ν: το μέγεθος του πίνακα μεγάλος αριθμός printf("enter no of elements :"); scanf("%d",&n); //n: πόσα στοιχεία θέλουμε να έχει αρχικά ο πίνακας n<n for (i=0;i<n; i++) { //ανάγνωση των n στοιχείων του πίνακα printf("give me the no. %d element:",i+1); scanf("%d", &A[i]); // διαβάζει τη θέση του στοιχείου που θέλουμε να διαγράψουμε printf("\nenter the location of the element to be deleted:"); scanf("%d",&l); while(l < n) { // διαγράφω το στοιχείο A[L-1]=A[L]; L++; n--; printf("\n Printing the new:\n"); for (i=0;i<n; i++) // εμφάνιση στη οθόνη του νέου πίνακα printf("%d\n", A[i]); 16

Συμβολοσειρές Συμβολοσειρά ονομάζουμε μια οποιαδήποτε ακολουθία αλφαριθμητικών χαρακτήρων: «Κώστας», «Κώστας Βασιλάκης», «Δαιδάλου 23» Στην C δεν υπάρχει ιδιαίτερος τύπος για τον χειρισμό των συμβολοσειρών. Για την αποθήκευση τους χρησιμοποιούμε την δομή του πίνακα τύπου char και φυσικά τις διαχειριζόμαστε όπως ένα πίνακα: char line[80]; // δήλωση συμβολοσειράς με 80 χαρακτήρες line[i] = getchar(); //απόδοση τιμής σε στοιχείο της σειράς Αν πρέπει λοιπόν να διαχειριστούμε Ν χαρακτήρες ο πίνακας της συμβολοσειράς θα πρέπει να δηλωθεί με Ν+1 χαρακτήρες. Υπάρχουν ειδικές συναρτήσεις για τη διαχείριση των συμβολοσειρών (#include <string.h>) 17

Παρατηρήσεις για την αποθήκευση συμβολοσειρών O τελευταίος χαρακτήρας μιας συμβολοσειράς είναι ο «\0» (μηδενικός χαρακτήρας null character). Ο μηδενικός χαρακτήρας «\0» είναι διαφορετικός από τον χαρακτήρα 0 (μηδέν). O μηδενικός χαρακτήρας έχει την τιμή 0 (εσωτερική αναπαράσταση:00000000), ενώ ο χαρακτήρας «0» έχει την τιμή 48 (00110000). Δηλαδή η εντολή: printf(" %d, %d", '\0','0'); // θα δώσει σαν αποτέλεσμα: 0, 48 Οι τιμές που δίνουμε στις μεταβλητές που έχουν δηλωθεί σαν συμβολοσειρές, οριοθετούνται με λατινικά εισαγωγικά διπλά ( " ) ή απλά ( ' ). Προσοχή το 'A' δεν είναι ίσο με το "A" : Το 'A' χρειάζεται 1 byte μνήμης (01000001) Το "A" χρειάζεται 2 bytes ( A, \0 ==> 0100000100000000) Το "A" είναι μία συμβολοσειρά που περιέχει το γράμμα 'A' και στο τέλος τον χαρακτήρα /0'. 18

Αρχικές τιμές (με τη δήλωση) Όπως στους μονοδιάστατους πίνακες: char str1[6 ] = {'h', 'e','l','l','o','\0'; (Το str1[0] είναι h, tο str1[1] είναι e και το str1[5] είναι \0 ) Εναλλακτικά: char str2[8] = "hello"; //μπαίνει αυτόματα το \0 στο τέλος) Επίσης: char str2[] = "hello"; //το πλήθος υπολογίζεται αυτόματα Αν δώσουμε: char str[20] = "hello"; δεσμεύουμε 20 θέσεις μνήμης ενώ χρειαζόμαστε μόνο 6. Οι θέσεις που περισσεύουν παίρνουν τη τιμή \0. Η εντολή char str[20 ] = {'\0'; δίνει την τιμή \0 σε όλα τα στοιχεία της συμβολοσειράς str. H sizeof(str) επιστρέφει τον αριθμό χαρακτήρων της σειράς. 19

Διάβασμα από το πληκτρολόγιο scanf(), gets() Με την γνωστή scanf() με χρήση του προσδιοριστή %s: printf (What's your name : ); scanf( %s, str); Προσοχή: δεν βάζουμε τον χαρακτήρα & μπροστά από το str διότι το str είναι η διεύθυνση του 1 ου στοιχείου. Επίσης προσοχή: Η scanf() σταματά τη ανάγνωση μόλις συναντήσει τον κενό χαρακτήρα (space) ή το χαρακτήρα ελέγχου για τη αλλαγή γραμμής ('\n'). Εναλλακτικά, για το διάβασμα μιας συμβολοσειράς από το πληκτρολόγιο μπορούμε να χρησιμοποιήσουμε τη συνάρτηση gets(): printf("what's your name:"); gets(name); H gets() διαβάζει από το πληκτρολόγιο μέχρι να συναντήσει τον χαρακτήρα '\n' (ακόμα και τους κενούς χαρακτήρες). Αντικαθιστά δε τον '\n' με τον '\0'. 20

Διάβασμα από το πληκτρολόγιο getchar() int i; char line[80]; i = 0; //διαβάζει χαρακτήρες μέχρι να διαβαστεί ο '\n' while( (line[i]=getchar( ))!= '\n' ) i++; //δεν πρέπει να ξεχνάμε το '\0' στο τέλος line[i]='\0'; printf("diavasa %d xaraktires\n", i); while( (line[i++]=getchar( ))!= '\n' ); line[i] = '\0'; Αν οι χαρακτηρες είναι περισσότεροι από 80; 21

Εμφάνιση συμβολοσειρών στη οθόνη Με την συνάρτηση printf() και τον προσδιοριστή %s: printf( To onoma sou einai: %s\n", onoma); Η printf() εμφανίζει όλους τους χαρακτήρες μέχρι να συναντήσει το μηδενικό χαρακτήρα '\n'. Με την printf() μπορούμε να εμφανισουμε μέρος της συμβολοσειράς: printf( To onoma sou einai: %s\n", onoma+2); (εμφανίζει την συμβολοσειρά από τιν 3 ο χαρακτήρα και μετά) Με τη συνάρτηση puts(): printf("what's your name:"); gets(name); printf("hello "); puts(name); Η puts() μετά την εμφάνιση της συμβολοσειράς, τυπώνει τον χαρακτήρα '\n'. 22

Συναρτήσεις του <string.h> Στη C υπάρχουν μια σειρά από συναρτήσεις για το χειρισμό των συμβολοσειρών (υπάρχουν στo <string.h>. Η ύπαρξη του μηδενικού χαρακτήρα είναι απαραίτητη για εκτελούνται σωστά αυτές οι ειδικές συναρτήσεις. Κάποιες από αυτές είναι: strcpy(s1, s2); Αντιγράφει το s2 στο s1. strcat(s1, s2); Συνενώνει τη s2 στο τελος της s1. strlen(s1); Επιστρέφει το μήκος (σε χαρακτήρες) του s1. strcmp(s1, s2); Επιστρέφει 0 αν τα s1 και s2 είναι ίδια. Μικρότερο του 0 αν s1<s2. Μεγαλύτερο του 0 αν s1>s2. strchr(s1, ch); Επιστρέφει τον δείκτη της πρώτης εμφανισης του χαρακτήρα ch στη συμβολοσειρα s1. strstr(s1, s2); Επιστρέφει τον δείκτη της πρώτης εμφανισης της συμβολοσειράς s2 στη συμβολοσειρα s1. 23

Παράδειγματα με τις συναρτήσεις των συμβολοσειρών #include <stdio.h> #include <string.h> main () { char str1[12] = "Hello"; char str2[12] = "World"; char str3[12]; int len ; strcpy(str3, str1); /* αντιγράφει str1 στο str3 */ printf("strcpy( str3, str1) : %s\n", str3 ); strcat( str1, str2); /* ενώνει str1 και str2 */ printf("strcat( str1, str2): %s\n", str1 ); len = strlen(str1); /* το μήκος του str1 μετά τη συνενωση */ printf("strlen(str1) : %d\n", len ); 24

Στο εργαστήριο Μεταγλωττίστε τα προγράμματα που υπάρχουν στο περιεχόμενο της θεωρίας του μαθήματος. Γράψτε ένα πρόγραμμα το οποίο θα διαβάζει Ν στοιχεία και στη συνέχεια θα βρίσκει πόσες φορές επαναλαμβάνεται το 3 ο στοιχείο του. Γράψτε ένα πρόγραμμα το οποίο θα διαβάζει Ν μετρήσεις, θα τις αποθηκεύει σε πίνακα, θα βρίσκει τον Μέσο Όρο αυτών και θα εξετάζει αν ο Μέσος Όρος είναι μεγαλύτερος από το 1ο στοιχείο του πίνακα. Δημιουργείστε ένα πρόγραμμα το οποίο να διαβάζει Ν αριθμούς και να τους βάζει κάποιο πίνακα. Στην συνέχεια το πρόγραμμα να βρίσκει τον μικρότερο και τον μεγαλύτερο από αυτούς και να τοποθετεί τον μικρότερο στην πρώτη θέση του πίνακα και τον μεγαλύτερο στην τελευταία θέση του πίνακα. Οι αριθμοί που βρισκόταν στην πρώτη θέση και στην τελευταία θέση του πίνακα να καταλαμβάνουν τις θέσεις που βρισκόταν ο μικρότερος και ο μεγαλύτερος αριθμός αντίστοιχα. Γράψτε ένα πρόγραμμα το οποίο θα διαβάζει το όνομα και το επώνυμο σας με 2 διαφορετικές συμβολοσειρές και τις ενώνει σε μια άλλη συμβολοσειρά την οποία και θα εμφανίζει στη οθόνη. 25