Ερωτήσεις και απαντήσεις στα θέματα του κανονισμού κατάρτισης

Σχετικά έγγραφα
Ερωτήσεις και απαντήσεις στα θέματα του κανονισμού κατάρτισης

Ινστιτούτο Επαγγελµατική Κατάρτιση Κορυδαλλού "ΤΕΧΝΙΚΟΣ ΣΥΣΤΗΜΑΤΩΝ ΥΠΟΛΟΓΙΣΤΩΝ" (Ερωτήσεις Πιστοποίησης στην γλώσσα προγραµµατισµού C)

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

2ο σετ σημειώσεων. 1 Εντολές εκτέλεσης υπό συνθήκη. 19 Μαρτίου 2012

Εντολές ελέγχου ροής if, for, while, do-while

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

Προγραμματισμός II (Γλώσσα C)

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

Συμβολοσειρές. 1 Συμβολοσειρές. 6 Απριλίου 2014

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

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

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

Μεταβλητές τύπου χαρακτήρα

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

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

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

Εκτέλεση της εντολής1 και στη συνέχεια εκτέλεση της ΕΝΟΤΗΤΑΣ και της εντολής2 όσο η ΣΥΝΘΗΚΗ είναι αληθής.

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

5ο σετ σημειώσεων - Δείκτες

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

Διάλεξη 5η: Εντολές Επανάληψης

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

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

4. ΒΡΟΧΟΙ ΕΠΑΝΑΛΗΨΗΣ (Α' μέρος: for)

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

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

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

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

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

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

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

Ασκηή σεις 12ο Μαά θημα - Λυύ σεις

ΓΛΩΣΣΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ Η/Υ 8/9/2008

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

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

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

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

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

3. ΕΝΤΟΛΕΣ ΕΛΕΓΧΟΥ (Β' μέρος: switch και :? )

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

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

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

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

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

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

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

Αʹ. Πίνακες. Άσκηση 1. Λύση. Άσκηση 2. Λύση. Ασκήσεις Εργαστηρίου Προγραμματισμού

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

4. Επιλογή και Επανάληψη

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

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

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

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

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ I ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C ΠΡΟΓΡΑΜΜΑΤΑ ΕΡΓΑΣΤΗΡΙΟΥ

Γ7.1 Επανάληψη ύλης Β Λυκείου. Γ Λυκείου Κατεύθυνσης

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

Ορισμός μεταβλητών δεικτών και αρχικοποίηση

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

ΔΙΑΔΙΚΑΣΤΙΚΟΣ ΠΡΟΓΡΑ Ρ Μ Α ΜΑΤΙ Τ ΣΜΟΣ

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

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

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

Χαράλαµπος Σκόκος ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ I ΓΛΩΣΣΑ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ C ΕΞΕΤΑΣΕΙΣ ΧΕΙΜΕΡΙΝΟΥ ΕΞΑΜΗΝΟΥ Ερωτήσεις

EΒ ΟΜΑ Α 3 Η. Άλλοι τελεστές καταχώρησης: += -= *= /= %= x += 5; σηµαίνει x = x + 5; k *= 7; σηµαίνει k = k * 7; sum %= 15; σηµαίνει sum = sum % 15;

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

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

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

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Ασκήσεις Επανάληψης

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

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

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

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

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

Οι εντολές ελέγχου της ροής ενός προγράμματος.

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

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

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

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

Παραδείγματα. Γράψτε ένα πρόγραμμα που να τυπώνει τη μέση τιμή ενός συνόλου μη αρνητικών αριθμών

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

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

Στη C++ υπάρχουν τρεις τύποι βρόχων: (a) while, (b) do while, και (c) for. Ακολουθεί η σύνταξη για κάθε μια:

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

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

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

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

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

Η Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 6 Εντολές Επανάληψης Ασκήσεις. Γιώργος Λαμπρινίδης

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

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

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

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

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

Transcript:

Ερωτήσεις και απαντήσεις στα θέματα του κανονισμού κατάρτισης 11 Ιουνίου 01 1 Ομάδα Α - Ερωτήσεις Γενικών Γνώσεων 1. (ΕΓΓ.103) Να γραφεί πρόγραμμα σε C που να υπολογίζει τη μέση τιμή ακέραιων αριθμών, όταν εισάγονται από το πληκτρολόγιο. Η εισαγωγή τερματίζεται όταν δοθεί σαν τιμή ακέραιου το 0. 5 int a, sum = 0, count = 0; 6 7 do { 8 scanf("%d", &a); 9 sum += a; 10 if (a) 11 ++count; 1 } while (a); 13 14 printf("h mesn timn eivai %f\n", sum / ( float) count); 15 16 return 0; 17 }. (ΕΓΓ.104) Να αναφέρετε τους βασικούς τύπους δεδομένων της C. Να γραφεί πρόγραμμα όπου θα εκτυπώνονται οι τιμές των μεταβλητών που όρισε ο χρήστης. Οι βασικοί τύποι της C είναι οι int, float, double κια char¹. ¹Μπορείτε να αναφέρετε και τους specifiers που έχετε στις σημειώσεις σας (short, long, signed και unsigned αν και δεν μου φαίνεται απαραίτητο 1

# include <limits.h> 3 # include <float.h> 4 5 int main() 6 { 7 int i; 8 float f; 9 double d; 10 char c; 11 1 printf("dwse evav int: "); scanf("%d", &i); 13 printf("dwse evav float: "); scanf("%f", &f); 14 printf("dwse evav double: "); scanf("%f", &d); 15 getchar(); 16 printf("dwse evav char: "); scanf("%c", &c); 17 18 printf("int: %d\n", i); 19 printf("float: %f\n", f); 0 printf(" double: %f\n", d); 1 printf("char: %c\n", c); } 3. (ΕΓΓ.105) Να γραφεί πρόγραμμα σε C που θα τυπώνει μήνυμα και θα ζητάει να πληκτρολογηθούν τριες ακέραιοι. Θα διαβάζει τους αριθμούς αυτούς από το πληκτρολόγιο και θα τους αποθηκεύει σε τρεις μεταβλητές. Θα εναλλάσσει τις τιμές των μεταβλητών με ολίσθηση προς τα δεξιά (δηλαδή η δεύτερη μεταβλητή θα παίρνει την τιμή της πρώτης, η τρίτη της δεύτερης και η πρώτη της τρίτης, οπότε αν αρχικά οι μεταβλητές είχαν τιμές 10, 0 και 30, μετά το βήμα αυτό θα έχουν 30, 10 και 0 αντίστοιχα). Τέλος θα τυπώνει τις νέες τιμές των μεταβλητών στην οθόνη. 5 int v1, v, v3, t; 6 7 printf(" Dwse tnv prwtn metablntn: "); 8 scanf("%d", &v1); 9 printf(" Dwse tnv deutern metablntn: "); 10 scanf("%d", &v); 11 printf(" Dwse tnv tritn metablntn: "); 1 scanf("%d", &v3); 13 14 t = v3; 15 v3 = v;

16 v = v1; 17 v1 = t; 18 19 printf("h vea prwtn metablntn: %d\n", v1); 0 printf("h vea deutern metablntn: %d\n", v); 1 printf("h vea tritn metablntn: %d\n", v3); 3 return 0; 4 } 4. (ΕΓΓ.106) Να γραφεί πρόγραμμα σε C που θα υπολογίζει την δύναμη, υποθέτοντας ότι ο χρήστης εισάγει την βάση και τον εκθέτη. Να καλυφθούν όλες οι πιθανές περίπτώσεις τιμών του εκθέτη. 5 int vasi, ekthetis; 6 double result; 7 int i; 8 9 printf("dwse tnv basn: "); 10 scanf("%d", &vasi); 11 1 printf(" Dwse tov ek8etn: "); 13 scanf("%d", &ekthetis); 14 15 result = 1; 16 for (i = 0; i < abs( ekthetis); ++i) 17 result *= vasi; 18 19 if ( ekthetis < 0) 0 result = 1 / result; 1 printf(" To apotelesma eivai: % lf \n", result); 3 4 return 0; 5 } 5. (ΕΓΓ.107) Με χρήση κατάλληλου προγράμματος να επεξηγήσετε τη διαφορά μεταξύ των εντολών break και continue. Η εντολή break σταματάει εντελώς την εκτέλεση ενός βρόχου, δηλαδή η τρέχουσα επανάληψη διακόπτεται στο σημείο που βρίσκεται η break και αφενός δεν εκτελούνται οι υπόλοιπες εντολές της τρέχουσας επανάληψης αφετέρου δεν πραγματοποιείται καμία επανάληψη περαιτέρω. Η 3

continue διακόπτει την τρέχουσα επανάληψη του βρόχου αλλά συνεχίζει στην επόμενη επανάληψη. Δηλαδή παρακάμπτονται οι εντολές του σώματος του βρόχου για την τρέχουσα επανάληψη και μόνο. Στο παρακάτω πρόγραμμα για παράδειγμα, ο βρόχος που ξεκινάει στη γραμμή 7 θα έπρεπε αν δεν υπήρχε η break να εκτελέσει 10 επαναλήψεις. Σε κάθε μία από αυτές θα τύπωνε την τιμή του i δηλαδή τον αριθμό της τρέχουσας επανάληψης και μετά μία τελεία. Αυτό θα συμβεί στις 5 πρώτες επαναλήψεις στις οποίες το i είναι μικρότερο ή ίσο από το 5. Στην 6η όμως επανάληψη αφού εκτελεστεί η printf της γραμμής 8, θα ισχύει η συνθήκη της if και θα εκτελεστεί η break οπότε θα τερματιστεί εντελώς η εκτέλεση του βρόχου και τελικά θα τυπωθεί 1..3.4.5.6 αφού δεν θα εκτελεστεί ούτε η γραμμή 11 της 6ης επανάληψης ούτε θα εκτελεστούν οι επόμενες επαναλήψεις. Ο δεύτερος βρόχος των γραμμών 16-1, θα λειτουργήσει με τον ίδιο τρόπο στις πρώτες 5 επαναλήψεις θα τυπωθεί δηλαδή σε αυτές το 1..3.4.5.. Στην 6η επανάληψη θα εκτελεστεί η γραμμή 17 τυπώνοντας το 6 αλλά καθώς η συνθήκη της if θα ισχύει, θα εκτελεστεί η continue η οποία θα προχωρήσει στην επόμενη επανάληψη του βρόχου, παρακάμπτοντας τη γραμμή 0. Το ίδιο θα συμβεί και στις επόμενες επαναλήψεις οπότε τελικά από την 6η επανάληψη μέχρι το τέλος του βρόχου θα τυπωθεί το 678910. 5 int i; 6 7 for (i = 1; i <= 10; ++i) { 8 printf("%d", i); 9 if (i > 5) 10 break; 11 printf("."); 1 } 13 14 printf("\n"); 15 16 for (i = 1; i <= 10; ++i) { 17 printf("%d", i); 18 if (i > 5) 19 continue; 0 printf("."); 1 } 3 return 0; 4 } 6. (ΕΓΓ.108) Να γραφεί πρόγραμμα σε C που θα διαβάζει δυο ακεραίους αριθμούς από το πληκτρολόγιο και θα εκτυπώνει το άθροισμά τους στην οθόνη. Το αποτέλεσμα να φαίνεται επίσης σε οκταδική και δεκαεξαδική μορφή. 4

5 int a, b, sum; 6 7 printf(" Dwse tov prwto ari8mo: "); 8 scanf("%d", &a); 9 10 printf(" Dwse tov deutero ari8mo: "); 11 scanf("%d", &b); 1 13 sum = a + b; 14 15 printf(" To a8roisma eivai ( dekadiko): %d\n", sum); 16 printf(" To a8roisma eivai ( oktadiko): %o\n", sum); 17 printf(" To a8roisma eivai ( dekae3adiko): %x\n", sum); 18 19 return 0; 0 } 7. (ΕΓΓ.109) Να γραφεί πρόγραμμα σε C που θα υπολογίζει το μέσο όρο πραγματικών αριθμών. Ο υπολογισμός της μέσης τιμής να γίνει με τη δημιουργία ξεχωριστής συνάρτησης. 3 float mo( float a, float b) 5 return (a+b) / ; 6 } 7 8 int main() 9 { 10 float a, b; 11 1 printf(" Dwse ton eva ari8mo: "); 13 scanf("%f", &a); 14 printf(" Dwse ton allo ari8mo: "); 15 scanf("%f", &b); 16 17 printf("o mesos oros eivai %f\n", mo(a, b)); 18 19 return 0; 5

0 } 8. (ΕΓΓ.110) Να γραφεί πρόγραμμα σε C που θα διαβάζει το όνομα του χρήστη και θα εκτυπώνει φιλικό χαιρετισμό. 5 char p[100]; 6 7 printf("pws se leve? "); 8 gets(p); 9 printf("geia sou, %s!\n", p); 10 11 return 0; 1 } 9. (ΕΓΓ.111) Να γραφεί πρόγραμμα σε C που θα μετατρέπει μονάδες μήκους από εκατοστά σε ίντσες. Να εκτυπωθεί το ύψος σας ανά 0 εκατοστά σε ίντσες (1 ίντσα =,5 εκ.). 10. (ΕΓΓ.11) Να γραφεί πρόγραμμα σε C που θα εκτυπώνει πίνακα αντιστοίχισης μονάδων θερμοκρασίας από Φαρενάιτ σε Κελσίου ανά 0 βαθμούς (ο τύπος μετατροπής είναι C = 5(F 3)/9. 5 int i; 6 printf(" C F\n"); 7 printf("----+--------\n"); 8 for (i = 0; i < 300; i += 0) { 9 printf("%3d %7.f\n", i, (5. * (i-3)) / 9.); 10 } 11 1 return 0; 13 } 11. (ΕΓΓ.113) Να γραφεί πρόγραμμα σε C που θα εκτυπώνει το όνομα και τον τελικό βαθμό του μαθητή με βάση το βαθμό του γραπτού και το βαθμό των ασκήσεων. (Με δεδομένο ότι ότι ο βαθμός του γραπτού είναι >= 4, τότε ο τελικός βαθμός σχηματίζεται από το 30% του βαθμού άσκησης και 70% από το βαθμό γραπτού, διαφορετικά δεν λαμβάνεται 6

υπόψη η άσκηση. Εάν από το συνυπολογισμό του βαθμού της άσκησης ο τελικός βαθμός είναι μικρότερος από το βαθμό του γραπτού, ο βαθμός της άσκησης δεν υπολογίζεται. Αν είναι μεγαλύτερος από το βαθμό του γραπτού, τότε ο μαθητής πριμοδοτείται με μισή μονάδα. 5 int grapto; 6 int askisi; 7 float telikos; 8 9 printf(" Dose ba8mo graptou: "); 10 scanf("%d", &grapto); 11 printf(" Dose ba8mo asknsns: "); 1 scanf("%d", &askisi); 13 14 if ( grapto < 4) 15 printf(" Kobetai\n"); 16 else { 17 telikos =.3 * askisi +.7 * grapto; 18 if ( telikos < grapto) 19 telikos = grapto; 0 else 1 telikos += 0.5; } 3 printf(" Telikos ba8mos: %.f\n", telikos); 4 5 return 0; 6 } 1. (ΕΓΓ.114) Να γράψετε ένα πρόγραμμα σε γλώσσα C, το οποίο να διαβάζει από το πληκτρολόγιο μία σειρά χαρακτήρων και να μετρά το πλήθος των αριθμητικών χαρακτήρων, των κενών και των αλφαβητικών χαρακτήρων και να εμφανίζει στην οθόνη τα αποτελέσματα. Σημείωση: Στο παρακάτω γράφονται αναλυτικά οι συνθήκες ελέγχου του κάθε χαρακτήρα. Στο πακέτο με τις λύσεις των θεμάτων πιστοποίησης μπορείτε να δείτε κάποιες συναρτήσεις που παρέχονται από τη βιβλιοθήκη της C για αυτό το σκοπό, συγκεκριμένα τις isblank, isalpha και isdigit που επιστρέφουν true αν ο χαρακτήρας που τους δίνεται είναι κενό, αλφαβητικός ή αριθμητικός αντίστοιχα. 7

5 char s[100]; 6 int numbers = 0; 7 int alphas = 0; 8 int blanks = 0; 9 int i; 10 11 printf(" Dose symboloseira: "); 1 gets(s); 13 14 for (i = 0; i < strlen(s); ++i) { 15 if (s[i] == ' ') 16 blanks ++; 17 else if (s[i] >= '0' && s[i] <= '9') 18 numbers ++; 19 else if (( s[i] >= 'a' && s[i] <= 'z') (s[i] >= 'A' && s[i] <= 'Z')) 0 alphas ++; 1 } 3 printf(" Alfabntikoi: %d\n", alphas); 4 printf(" Ari8mntikoi: %d\n", numbers); 5 printf(" Keva: %d\n", blanks); 6 7 return 0; 8 } 13. (ΕΓΓ.115) Να γράψετε πρόγραμμα που να εμφανίζει μια οθόνη επιλογής με τις τέσσερις πράξεις: 1. Πρόσθεση,. Αφαίρεση, 3. Πολλαπλασιασμός και 4. Διαίρεση. Ο χρήστης θα επιλέγει την πράξη και θα δίδει τους αριθμούς. Ο υπολογιστής θα εκτελεί την αντίστοιχη πράξη και θα εμφανίζει το αποτέλεσμα. (Υπόδειξη: Το πρόγραμμα να γίνει με χρήστη της εντολής case. Επίσης να γίνεται έλεγχος ώστε να μη γίνεται διαίρεση με μηδέν και σε τέτοια περίπτωση να εμφανίζεται κατάλληλο μήνυμα.) 5 float a, b; 6 int choice; 7 8 printf("dwse tov prwto telesteo: "); scanf("%f", &a); 9 printf("dwse tov deutero telesteo: "); scanf("%f", &b); 10 11 printf(" 1. Prosthesi\n"); 1 printf(". Afairesh\n"); 8

13 printf(" 3. Pollaplasiasmos\n"); 14 printf(" 4. Diairesn\n"); 15 printf("diale3e pra3n: "); scanf("%d", &choice); 16 17 switch ( choice) { 18 case 1: 19 printf("%f + %f = %f\n", a, b, a + b); 0 break; 1 case : printf("%f - %f = %f\n", a, b, a - b); 3 break; 4 case 3: 5 printf("%f * %f = %f\n", a, b, a * b); 6 break; 7 case 4: 8 if (b == 0) 9 printf(" Den epitrepetai n diairesn me to mndev\n"); 30 else 31 printf("%f / %f = %f\n", a, b, a / b); 3 break; 33 default: 34 printf(" Eprepe va diale3eis 1,, 3 n 4\ n"); 35 } 36 37 return 0; 38 } 14. (ΕΓΓ.116) Να γραφεί συνάρτησης της C με όνομα power που θα δέχεται δύο ακέραιες παραμέτρους base και n και θα επιστρέφει τον ακέραιο base υψωμένο στη n-οστή δύναμη. Να γραφεί πρόγραμμα C που θα καλεί τη συνάρτηση power. Ο χρήστης του προγράμματος αυτού θα μπορεί να καθορίζει παραμετρικά την τιμή των base Και n. 3 int power(int base, int n) 5 int result = 1; 6 int i; 7 8 for (i = 0; i < n; ++i) 9 result *= base; 10 11 return result; 1 } 13 9

14 int main() 15 { 16 int base, n; 17 18 printf("dose tn basn: "); 19 scanf("%d", &base); 0 printf(" Dose tov ek8etn: "); 1 scanf("%d", &n); 3 printf(" To %d eis tnv %d eivai %d\n", base, n, power( base, n)); 4 5 return 0; 6 } 15. (ΕΓΓ.117) Να γραφτεί συνάρτηση της C με όνομα min(n, m) που να επιστρέφει τον μικρότερο από τους ακέραιους n και m. Να χρησιμοποιηθεί ο τελεστής?: για τον υπολογισμό του μικρότερου. 3 int min(int n, int m) 5 return (n < m)? n : m; // Oi parev8eseis dev eivai aparaitntes 6 } 7 8 int main() 9 { 10 int a, b; 11 1 printf("dose ton prwto: "); scanf("%d", &a); 13 printf("dose ton deutero: "); scanf("%d", &b); 14 15 printf("o mikroteros eivai o %d\n", min(a, b)); 16 17 return 0; 18 } 16. (ΕΓΓ.118) Έστω ότι οι παρακάτω εντολές αποτελούν μέρος ενός προγράμματος της C. a = 4;, b = 8;, c = a;, d = ++a;, e = --b;, f = a++;, c++; Να αναφέρετε τις τελικές τιμές των μεταβλητών του προγράμματος. a:6, b:7, c:5, d:5, e:7, f:5 17. (ΕΓΓ.119) Να γραφεί πρόγραμμα σε C που θα εκτυπώνει στην οθόνη τον ASCII χαρακτήρα των αγγλικών κεφαλαίων γραμμάτων (π.χ. letter A -> Ascii code 65)² ² Προφανώς το θέμα εννοεί τον χαρακτήρα και τον ASCII κωδικό. 10

5 char c; 6 7 for (c = 'A'; c <= 'Z'; ++c) 8 printf(" Letter %c -> Ascii code %d\n", c, c); 9 10 return 0; 11 } 18. (ΕΓΓ.10) Να γραφεί πρόγραμμα C που θα δέχεται ως παραμέτρους (command line arguments) το ποσό του κεφαλαίου και το ετήσιο επιτόκιο. Θα υπολογίζει τον ετήσιο τόκο και θα τα τυπώνει στην έξοδο, όπως στο εξής παράδειγμα: Κεφάλαιο:1000 Επιτόκιο: 4% Τόκος:40 3 int main(int argc, char* argv[]) 5 printf(" Kefalaio: %d\n", atoi( argv[1])); 6 printf("epitokio: %d\%\n", atoi(argv[])); 7 printf("tokos: %.f\n", (atoi(argv[1]) / 100.) * atoi(argv[])); 8 9 return 0; 10 } 19. (ΕΓΓ.11) Να γραφεί συνάρτηση της C που θα αντιμεταθέτει τις τιμές των δύο ακεραίων παραμέτρων της κάνοντας χρήση αναφοράς. 3 void swap(int* a, int* b) 5 int c; 6 c = *a; 7 *a = *b; 8 *b = c; 9 } 10 11

11 int main() 1 { 13 int a =, b = 4; 14 swap(&a, &b); 15 printf("a: %d, b: %d\n", a, b); 16 17 return 0; 18 } 0. (ΕΓΓ.1) Να γραφεί πρόγραμμα C που θα προσθέτει τους άρτιους αριθμούς από το 11 μέχρι το 131 και θα εμφανίζει στην οθόνη το αποτέλεσμα. Επίσης να εμφανίζει σε πεντάδες τους αριθμούς που προστέθηκαν. (Σ=1+14+...+130) 3 4 int main() 5 { 6 int i; 7 int sum = 0; 8 int count = 0; 9 10 for (i = 1; i <= 130; i += ) { 11 sum += i; 1 printf("%d ", i); 13 if (++ count % 5 == 0) 14 printf("\n"); 15 } 16 17 printf(" To a8roisma eivai %d\n", sum); 18 return 0; 19 } 1. (ΕΓΓ.13) Να γραφεί συνάρτηση της C που με τη χρήση της αναδρομής υπολογίζει το μέγιστο κοινό διαιρέτη δύο ακεραίων. 3 // Ypo8etei oti a > b 4 int mkd(int a, int b) 5 { 6 if (a % b == 0) 7 return b; 8 else 1

9 return mkd(b, a % b); 10 } 11 1 int main() 13 { 14 int a, b; 15 16 printf("dose ton a: "); 17 scanf("%d", &a); 18 printf("dose ton b: "); 19 scanf("%d", &b); 0 1 printf("o MKD einai %d\n", a < b? mkd(b,a) : mkd(a,b)); 3 return 0; 4 }. (ΕΓΓ.14) Να γραφεί συνάρτηση της C που με τη χρήση της αναδρομής υπολογίζει το παραγοντικό των 10 πρώτων ακεραίων αριθμών. (Υπόδειξη: Το παραγοντικό ενός αριθμού είναι το γινόμενο του αριθμού επί όλων των αριθμών μέχρι τον αριθμό αυτό, όπου k! = k (k 1)! και 0! = 1). 3 int factorials(int n) 5 int result; 6 7 if (n == 0) 8 result = 1; 9 else 10 result = n * factorials(n-1); 11 1 printf("%d! = %d\n", n, result); 13 return result; 14 } 15 16 int main() 17 { 18 factorials (10); 19 0 return 0; 1 } 3. (ΕΓΓ.15) Υποθέτοντας ότι μια πόλη έχει πληθυσμό 550.000 κάτοικους με ετήσιο ρυθμό 13

αύξησης 3,3%, να γραφεί πρόγραμμα C που θα υπολογίζει τον πληθυσμό για τα επόμενα πέντε έτη. 5 float plith = 550000; 6 int i; 7 8 for (i = 0; i < 5; ++i) { 9 plith += plith * 3.3 / 100; 10 printf(" Etos %d, pln8ysmos: %.0f\n", i+1, plith); 11 } 1 13 return 0; 14 } 4. (ΕΓΓ.16) Να γραφεί πρόγραμμα C που θα δέχεται στην είσοδο θετικό ακέραιο αριθμό και θα εμφανίζει στην έξοδο τον αριθμό αυτό αντεστραμμένο (π.χ. αν δοθεί ο αριθμός 134, θα εμφανιστεί το 431). 5 int a; 6 7 printf(" Dose tov ari8mo: "); 8 scanf("%d", &a); 9 10 do { 11 printf("%d", a % 10); 1 a = a / 10; 13 } while (a); 14 15 return 0; 16 } 5. (ΕΓΓ.17) Να γραφεί πρόγραμμα C που θα εμφανίζει στην οθόνη τον πίνακα της προπαίδειας των αριθμών από το 1 μέχρι το 10. 14

5 int i, j; 6 7 printf(" "); 8 for (j = 1; j <= 10; ++j) 9 printf("%4d", j); 10 printf("\n"); 11 for (j = 1; j <= 43; ++j) 1 printf("-"); 13 printf("\n"); 14 15 for (i = 1; i <= 10; ++i) { 16 printf("%d ", i); 17 for (j = 1; j <= 10; ++j) 18 printf("%4d", i * j); 19 printf("\n"); 0 } 1 return 0; 3 } 6. (ΕΓΓ.18) Να γραφεί πρόγραμμα στη C το οποίο θα μετρά και θα εμφανίζει πόσες φορές πληκτρολογήσατε έναν αριθμητικό χαρακτήρα. το πρόγραμμα σταματά όταν πληκτρολογηθεί το πλήκτρο Q. 5 int count = 0; 6 int c; 7 8 while ((c = fgetc(stdin))!= 'Q') { 9 if (isdigit(c)) 10 ++count; 11 } 1 printf(" Ari8moi: %d\n", count); 13 14 return 0; 15 } 7. (ΕΓΓ.19) Να γραφεί πρόγραμμα στη C που με κατάλληλη χρήση των δομών επανάληψης θα εμφανίζει στην οθόνη το παρακάτω: 15

1 333 4444 55555 5 int i, j; 6 7 for (i = 1; i <=5; ++i) { 8 for (j = 0; j < i; ++j) 9 printf("%d",i); 10 printf("\n"); 11 } 1 13 return 0; 14 } 8. (ΕΓΓ.130) Να γραφεί πρόγραμμα στη C το οποίο θα βρίσκει τον μικρότερο αριθμό από ένα μονοδιάστατο πίνακα 10 ακεραίων αριθμών. 5 int p[10]; 6 int i; 7 int m; 8 9 for (i = 0; i < 10; ++i) { 10 printf(" Dose ton ari8mo %d: ", i+1); 11 scanf("%d", &p[i]); 1 } 13 14 m = p[0]; 15 for (i = 1; i < 10; ++i) 16 if (p[i] < m) 17 m = p[i]; 18 19 printf("o mikroteros eivai o %d\n", m); 0 1 return 0; 16

} 9. (ΕΓΓ.131) Να γραφεί πρόγραμμα σε C που θα γεμίζει ένα δισδιάστατο πίνακα ακεραίων 10Χ10 με όνομα pinax ως εξής: Αν i+j είναι άρτιος τότε το pinax[i,j]=1. Αν i+j είναι περιττός τότε το pinax[1,j]=-1. Αν i=j τότε pinax[i,j] = 0. 5 int pinax [10][10]; 6 int i, j; 7 8 for (i = 0; i < 10; ++i) 9 for (j = 0; j < 10; ++j) 10 if ( i == j) 11 pinax[i][ j] = 0; 1 else if ( (i+j) % == 0 ) 13 pinax[i][ j] = 1; 14 else 15 pinax[i][ j] = -1; 16 17 return 0; 18 } 30. (ΕΓΓ.13) Να γραφεί πρόγραμμα σε C που θα υπολογίζει το άθροισμα των περιττών μόνο ακεραίων αριθμών μονοδιάστατου πίνακα 10 θέσεων που έχει πάρει τα στοιχεία του από εισαγωγή του χρηστη. 5 int p[10]; 6 int i; 7 int sum =0; 8 9 for (i = 0; i < 10; ++i) { 10 printf(" Dose ton ari8mo %d: ", i+1); 11 scanf("%d", &p[i]); 1 } 13 14 for (i = 0; i < 10; ++i) 15 if (p[i] % ) 17

16 sum += p[i]; 17 18 printf(" To a8roisma twv perittwv eivai %d\n", sum); 19 0 return 0; 1 } 31. (ΕΓΓ.133) Να γράψετε πρόγραμμα που να διαβάζει το επώνυμο και το βαθμό 10 μαθητών και να τα αποθηκεύει σε ένα πίνακα του οποίου κάθε στοιχείο θα είναι μια κατάλληλη δομή. Στη συνέχεια για κάθε μαθητή θα τυπώνει στην οθόνη το επώνυμό του, το βαθμό του, καθώς και το χαρακτηρισμό επίδοσης ανάλογα με το βαθμό του. Ο χαρακτηρισμός επίδοσης είναι: 0-9 αποτυχών, 10-1 μέτρια, 13-15 καλά, 16-18 πολύ καλά, 19-0 άριστα. Στο τέλος να τυπωθεί το πλήθος των μαθητών κάθε κατηγορίας επίδοσης, δηλαδή άριστα 7 μαθητές κτλ. 3 typedef struct { 4 char onoma [100]; 5 int bathmos; 6 } mathitis_t; 7 10 8 int oria[5] = { 9, 1, 15, 18, 0 }; 9 char* chep[5] = { "apotyxia", "metria", "kala", "poly kala", "arista" }; 11 // pairvei parametro eva ba8mo kai epistrefei 1 // to xaraktnrismo (0: apotyxia, 1: metria, : kala, ktl 13 int getchep(int grade) 1 15 int i; 16 for (i = 0; i < 5; ++i) 17 if (grade <= oria[i]) 18 return i; 19 } 0 1 int main() { 3 int counts[5] = { 0, 0, 0, 0, 0 }; 4 mathitis_t mathites [10]; 5 int i; 6 7 for (i = 0; i < 10; ++i) { 8 printf(" Mathitis %d\n", i+1); 9 printf(" Dose to onoma: "); gets( mathites[i]. onoma); 30 printf("dose to bathmo: "); scanf("%d", &mathites[i].bathmos); getchar(); 18

31 counts[ getchep( mathites[i]. bathmos )]++; 3 } 33 34 for (i = 0; i < 10; ++i) { 35 printf(" Mathitis %d\n", i+1); 36 printf(" Onoma: %s\n", mathites[i]. onoma); 37 printf(" Bathmos: %d\n", mathites[i]. bathmos); 38 printf(" Xaraktnrismos epidosns: %s\n", chep[ getchep( mathites[i]. bathmos )]); 39 printf("\n"); 40 } 41 4 for (i = 0; i < 5; ++i) { 43 printf("%d mathites pnrav %s\n", counts[i], chep[i]); 44 } 45 46 return 0; 47 } 3. (ΕΓΓ.134) Να γραφεί συνάρτηση της C με όνομα reverse(str) που να αναστρέφει τη σειρά των χαρακτήρων του string str. 3 void reverse(char str[]) 5 int i, j; char c; 6 i = 0; j = strlen(str) - 1; 7 8 while (i < j) { 9 c = str[i]; str[i] = str[j]; str[j] = c; 10 ++i; --j; 11 } 1 } 13 14 int main() 15 { 16 char str[100]; 17 printf(" Dose tn symvoloseira: "); 18 gets(str); 19 reverse(str); 0 printf("h avestramevn str eivai: %s\n", str); 1 return 0; 3 } 19

33. (ΕΓΓ.135) Να γραφεί συνάρτηση της C με όνομα strlen(s) που να επιστρέφει το μήκος του string s. 3 int strlen(char s[]) 5 int i = 0; 6 7 while (s[i]) 8 ++i; 9 return i; 10 } 11 1 int main() 13 { 14 char s[100]; 15 printf(" Dose tn symvoloseira: "); 16 gets(s); 17 printf(" To mnkos tns eivai %d\n", strlen(s)); 18 19 return 0; 0 } 34. (ΕΓΓ.136) Να γραφεί πρόγραμμα C όπου θα επεξηγείται η έννοια του δείκτη (pointer) καθώς και η έννοια του τελεστή & 5 int a = ; 6 int b = 4; 7 int *p; 8 9 printf("a: %d, b:%d\n", a, b); 10 p = &a; 11 *p = 5; 1 p = &b; 13 *p = 10; 14 printf("a: %d, b:%d\n", a, b); 15 16 return 0; 17 } 0

35. (ΕΓΓ.137) Να γραφεί πρόγραμμα C όπου ο χρήστης θα γεμίζει από το πληκτρολόγιο δισδιάστατο πίνακα ακεραίων 3Χ3 και θα εμφανίζει στην οθόνη τα στοιχεία και το άθροισμα της διαγωνίου. 5 int p[3][3]; 6 int sum = 0; 7 int i, j; 8 9 for (i = 0; i < 3; ++i) { 10 for (j = 0; j < 3; ++j) { 11 printf(" Dose to stoixeio %d,% d:", i+1, j+1); 1 scanf("%d", &p[i][j]); 13 } 14 } 15 16 for (i = 0; i < 3; ++i) { 17 printf("p[%d,%d]: %d\n", i+1, i+1, p[i][i]); 18 sum += p[i][i]; 19 } 0 printf(" To a8roisma tns diagwviou eivai %d\n", sum); 1 return 0; } 36. (ΕΓΓ.138) Έστω οι παρακάτω δηλώσεις αποτελούν μέρος ενός προγράμματος της C: 1 int p[10]; int *pp; 3 int m, n; 4 for (i = 0; i <= 10; ++i) 5 p[i] = i+1; 6 pp = &p[0]; 7 m = *(pp+3); 8 n = *(pp+5); m: 4, n: 6. 37. (ΕΓΓ.139) Να γραφεί συνάρτηση της C που θα μετατρέπει ένα string αριθμών στο αριθμητικό του ισοδύναμο (δηλαδή το string 134 να μετατραπεί στον αριθμό 134). 1

3 int convertstr(char s[]) 5 int multiplier = 1; /* H trexousa dyvamn toy 10 */ 6 int number = 0; /* O telikos arithmos */ 7 int i; 8 9 i = strlen(s) - 1; 10 while (i >= 0) { 11 number += multiplier * (s[i] - '0'); 1 multiplier *= 10; 13 --i; 14 } 15 16 return number; 17 } 18 19 int main() 0 { 1 char s[100]; printf(" Dose tn symvoloseira: "); 3 gets(s); 4 printf(" To arithmitiko tis isodynamo eivai %d\n", convertstr(s)); 5 6 return 0; 7 } 38. (ΕΓΓ.140) Να γραφεί συνάρτηση της C που θα ελέγχει αν δύο συμβολοσειρές είναι ίσες. Δύο εκδοχές της συνάρτησης. Η πρώτη είναι πιο "επαγγελματική", η δεύτερη πιο κατανοητή. 3 int strcmp1( char* s1, char * s) 5 while (*s1 && *s && *s1++ == *s++) ; 6 return * s1 == * s; 7 } 8 9 int strcmp(char* s1, char* s) 10 { 11 int i, len; 1 if (strlen(s1)!= strlen(s)) 13 return 0; 14 else { 15 while (*s1) { 16 if (*s1!= *s)

17 return 0; 18 ++ s1; 19 ++ s; 0 } 1 return 1; } 3 } 4 5 int main() 6 { 7 char s1[100]; 8 char s[100]; 9 30 printf(" Dwse tnv prwtn symboloseira: "); gets( s1); 31 printf(" Dwse tnv deutern symboloseira: "); gets( s); 3 33 if (strcmp(s1, s)) 34 printf(" Eivai idies\n"); 35 else 36 printf(" Dev eivai idies\n"); 37 38 return 0; 39 } 39. (ΕΓΓ.141) Να γραφεί συνάρτηση της C που θα μετρά το πλήθος των αριθμών σε μια συμβολοσειρά (δηλαδή να βρει ότι στη συμβολοσειρά ff45ggt6 υπάρχουν τρεις αριθμοί. 3 int countnum(char* s) 5 int count = 0; 6 7 while (*s) { 8 if (isdigit(*s)) 9 ++count; 10 ++s; 11 } 1 return count; 13 } 14 15 int main() 16 { 17 char s[100]; 18 3

19 gets(s); 0 printf(" Yparxouv %d ari8moi\n", countnum(s)); 1 return 0; 3 } 40. (ΕΓΓ.14) Να περιγράψετε τι κάνει το παρακάτω τμήμα κώδικα: 1 void mystery1( char *s1, const char * s) { 3 while (*s1!= '\0') 4 ++ s1; 5 for ( ; *s1 = *s; s1++, s++) ; 6 } Η παραπάνω συνάρτηση αντιγράφει τη συμβολοσειρά s στο τέλος της s1. Οι γραμμές 3 και 4 προχωρούν το δείκτη s1 μέχρι να φτάσει στο χαρακτήρα τερματισμού της πρώτης συμβολοσειράς. Το for της γραμμής 5: Δεν έχει αρχική εντολή. Σε κάθε επανάληψη ελέγχεται η συνθήκη *s1 = *s η οποία είναι αληθής όσο το *s είναι αληθές όσο δηλαδή ο s δεν δείχνει το τέλος της δεύτερης συμβολοσειράς. Επίσης, ο χαρακτήρας στον οποίο δείχνει ο s αντιγράφεται στη θέση που δείχνει ο s1. Στην πρώτη επανάληψη δηλαδή, ο πρώτος χαρακτήρας της δεύτερης συμβολοσοειράς αντιγράφεται στη θέση που βρισκόταν ο χαρακτήρας τερματισμού της πρώτης, δηλαδή στο τέλος της. Το σώμα του βρόχου είναι κενό, οπότε η επανάληψη τελειώνει με το βήμα το οποίο προχωράει τους δύο δείκτες κατά μία θέση. Οι επαναλήψεις συνεχίζονται, δηλαδή αντιγράφεται ο δεύτερος χαρακτήρας της δεύτερης συμβολοσειράς μία θέση μετά το τέλος της πρώτης, ο τρίτος δύο θέσεις μετά το τέλος της πρώτης κοκ. Κάποια στιγμή, όταν ο δείκτης s δείξει στο χαρακτήρα τερματισμού της δεύτερης συμβολοσειράς αυτός θα αντιγραφεί στη θέση στην οποία δείχνει ο δείκτης s1 θέτοντας το νέο τέλος της πρώτης γραμματοσειράς. Επίσης η τιμή της συνθήκης θα είναι η τιμή του *s, δηλαδή '\0', δηλαδή ψευδής οπότε ο βρόχος και η συνάρτηση θα τερματιστούν. 41. (ΕΓΓ.143) Να περιγράψετε τι κάνει το παρακάτω τμήμα κώδικα: 1 void mystery( const char* s1, const char* s) { 3 for ( ; *s1!= '\0' && *s!= '\0'; s1++, s++) ; 4 if (*s1!= *s) 5 return 0; 6 return 1; 7 } Η συνάρτηση δέχεται δύο παραμέτρους, τους δείκτες σε δύο συμβολοσειρές. Το for με κενή αρχική εντολή, εκτιμά πριν από κάθε επανάληψη τη συνθήκη η οποία είναι αληθής όταν ο s1 δεν δείχνει το τέλος της πρώτης συμβολοσειράς και ο s δεν δείχνει το τέλος της δεύτερης. 4

Με άλλα λόγια η συνθήκη παύει να ισχύει όταν κάποιος από τους δύο δείκτες δείξει το τέλος της αντίστοιχης συμβολοσειράς. Όσο η συνθήκη ισχύει εκτελείται το σώμα που είναι κενό και μετά το βήμα s1++, s++ δηλαδή οι δύο δείκτες προχωρούν κατά μία θέση. Η διαδικασία επαναλαμβάνεται μέχρι κάποιος από τους δύο δείκτες να δείξει το τέλος της αντίστοιχης συμβολοσειράς. Τότε ελέγχεται το if το οποίο ελέγχει αν τα *s1 και *s είναι ίσα. Εφόσον όμως ο βρόχος for σταμάτησε επειδή κάποιος από τους δύο δείκτες έδειχνε στο τέλος της συμβολοσειράς του, η συνθήκη της if θα ισχύει αν και ο άλλος δείκτης δείχνει το τέλος της αντίστοιχης συμβολοσειράς, δηλαδή αν οι δύο συμβολοσειρές έχουν το ίδιο μήκος. Σε αυτήν την περίπτωση επιστρέφεται η τιμή 0. Αλλιώς επιστρέφεται η τιμή 1. Τελικά η συνάρτηση επιστρέφει 0 αν οι δύο συμβολοσειρές έχουν το ίδιο μήκος ή 1 στην αντίθετη περίπτωση. 4. (ΕΓΓ.144) Να γραφεί πρόγραμμα C που θα ζητά από το χρήστη 3 ακεραίους ώστε να αρχικοποιήσει τις ακέραιες μεταβλητές της ημέρας, του μήνα και του έτους σε μια δομή ημερομηνίας (struct date). Στη συνέχεια ζητείται να απεικονισθεί η ημερομηνία στην οθόνη με τη μορφή ΗΗ/ΜΜ/ΕΕΕΕ π.χ. 7/10/1971. 3 4 int main() 5 { 6 struct date { 7 int imera; 8 int minas; 9 int etos; 10 } d; 11 1 printf("dose imera: "); scanf("%d", &d.imera); 13 printf("dose mina: "); scanf("%d", &d.minas); 14 printf("dose etos: "); scanf("%d", &d.etos); 15 16 printf("%d/% d/% d\n", d. imera, d. minas, d. etos); 17 18 return 0; 19 } 43. (ΕΓΓ.145) Να γραφεί πρόγραμμα C το οποίο υπολογίζει την ηλικία ενός ατόμου σε έτη, αν δοθούν από το χρήστη η ημερομηνία γέννησης και η σημερινή ημερομηνία. (Υπόδειξη: Να χρησιμοποιηθεί δομή για την αποθήκευση της ημερομηνίας). Η λογική είναι ότι η ηλικία ενός ατόμου σε έτη είναι το τρέχον έτος μείον το έτος γέννησης. Αν όμως η τρέχουσα ημερομηνία είναι μικρότερη από την ημερομηνία γέννησης, πρέπει να αφαιρεθεί ένα έτος. 5

3 struct date { 4 int year; 5 int month; 6 int day; 7 }; 8 9 int main() 10 { 11 struct date birthday; 1 struct date today; 13 int age; 14 15 printf(" Dwse nmeromnvia gevvnsns:\ n"); 16 printf("dwse etos: "); scanf("%d", &birthday.year); 17 printf("dwse mnva: "); scanf("%d", &birthday.month); 18 printf("dwse mera: "); scanf("%d", &birthday.day); 19 0 printf(" Dwse snmerivn nmeromnvia:\ n"); 1 printf("dwse etos: "); scanf("%d", &today.year); printf("dwse mnva: "); scanf("%d", &today.month); 3 printf("dwse mera: "); scanf("%d", &today.day); 4 5 age = today.year - birthday.year; 6 if ( ( today. month < birthday. month) 7 (today. month == birthday. month && today.day < birthday.day) ) 8 --age; 9 30 printf(" Hlikia: %d\n", age); 31 3 return 0; 33 } 44. (ΕΓΓ.146) Να γραφεί πρόγραμμα C που θα διαβάζει από την είσοδο μια ημερομηνία με την μορφή 1 Jan 004 και θα την απεικονίζει στην έξοδο με τη μορφή 1-1-004. # include <string.h> 3 4 int main() 5 { 6 int day; 7 char month[4]; 8 int year; 9 char* months[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", 10 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; 6

11 int i; 1 13 printf(" Dwse nmeromnvia se morfn dd mon yyyy: "); 14 scanf("%d %s %d", &day, month, &year); 15 16 for (i = 0; i < 1; ++i) 17 if (! strcmp( months[i], month)) 18 break; 19 0 printf("%d-%d-% d\n", day, i+1, year); 1 return 0; 3 } 45. (ΕΓΓ.147) Να γραφεί πρόγραμμα C που θα διαβάζει από την είσοδο μια ημερομηνία με την μορφή 10-1-1985 και θα παράγει στην έξοδο το αποτελεσμα Τρίτη 10 Δεκεμβρίου 1985. # include <string.h> 3 # include <time.h> 4 5 int main() 6 { 7 time_t rawtime; 8 struct tm * ltime; 9 char s[100]; 10 int month; 11 int day; 1 int year; 13 char* wdays[] = { "Kyriakn", "Deutera", "Tritn", "Tetartn", "Pemptn", "Parask 14 char* months[] = { "Iavouariou", "Febrouariou", "Martiou", "Apriliou", "Maiou 15 "Iouliou", "Augoustou", "Septembriou", "Oktwbriou", "Noemb 16 17 printf(" Dwse nm/ via se morfn dd-mm- yyyy: "); 18 scanf("%d-%d-%d", &day, &month, &year); 19 0 time(& rawtime); 1 ltime = localtime(& rawtime); ltime -> tm_mon = month - 1; 3 ltime -> tm_mday = day; 4 ltime -> tm_year = year - 1900; 5 mktime( ltime); 6 7 printf("%s ", wdays[ ltime -> tm_wday]); 8 printf("%d ", day); 7

9 printf("%s ", months[month -1]); 30 printf("%d", year); 31 3 return 0; 33 } 46. (ΕΓΓ.148) Να γραφεί πρόγραμμα C με το όνομα fcopy που θα αντιγράφει τα περιεχόμενα του αρχείου f1 στο αρχείο f. Η κλήση θα γίνεται από τη γραμμή εντολών (δηλ. fcopy f1 f). Σημείωση: Για λόγους απλότητας το παρακάτω πρόγραμμα δεν κάνει χειρισμό λαθών. Για όποιον ενδιαφέρεται για μια πληρέστερη εκδοχή υπάρχει το αρχείο pisto148_errors.c στο πακέτο με τις λύσεις των θεμάτων πιστοποίησης. # include <stdlib.h> 3 4 int main(int argc, char* argv[]) 5 { 6 FILE *f1, *f; 7 int c; 8 9 f1 = fopen(argv[1], "rb"); 10 f = fopen(argv[], "wb"); 11 1 while (( c = fgetc( f1))!= EOF) 13 fputc(c, f); 14 15 fclose(f1); 16 fclose(f); 17 18 return 0; 19 } 47. (ΕΓΓ.149) Να γραφεί πρόγραμμα C με το όνομα fcompare που θα συγκρίνει ανά γραμμή τα περιεχόμενα δύο αρχείων. Θα εκτυπώνεται η γραμμή που τα αρχεία διαφέρουν. Η κλήση θα γίνεται από τη γραμμή εντολών (δηλ. fcompare f1 f). Το πρόγραμμα τυπώνει τις γραμμές που διαφέρουν γράφοντας τον χαρακτήρα < πριν από τη γραμμή στο πρώτο αρχείο και το χαρακτήρα > πριν από την αντίστοιχη του δεύτερου³. # include <stdlib.h> 3 4 int main(int argc, char* argv[]) ³Το πρόγραμμα δεν κάνει χειρισμό λαθών και κάνει την υπόθεση ότι τα δύο αρχεία έχουν τον ίδιο αριθμό γραμμών. Μπορείτε να δείτε ένα πρόγραμμα με χειρισμό λαθών το οποίο επίσης χειρίζεται την περίπτωση τα δύο αρχεία να μην έχουν το ίδιο μήκος στο αρχείο pisto149_errors.c στο πακέτο με τις λύσεις των θεμάτων πιστοποίησης. 8

5 { 6 FILE *f1, *f; 7 char s1[1000]; 8 char s[1000]; 9 10 f1 = fopen(argv[1], "r"); 11 f = fopen(argv[], "r"); 1 13 while ( fgets(s1, 1000, f1) && fgets(s, 1000, f)) { 14 if (strcmp(s1, s)) 15 printf(" < %s> %s", s1, s); 16 } 17 18 fclose(f1); 19 fclose(f); 0 1 return 0; } 48. (ΕΓΓ.150) Να γραφεί πρόγραμμα C με το όνομα fcount που θα απαριθμεί τους πεζούς και κεφαλαίους χαρακτήρες ενός αρχείου και θα τυπώνει το αποτέλεσμα σε άλλο αρχείο. Η κλήση θα γίνεται από τη γραμμή εντολών (δηλ. fcount f1 f). Σημείωση: Όπως και στη σημείωση του θέματος 148, μπορεί κανείς να δει μία πληρέστερη εκδοχή στο αρχείο pisto150_errors.c. 3 int main(int argc, char* argv[]) 5 FILE *f1, *f; 6 int c; 7 int pezoi = 0, kefalaioi = 0; 8 9 f1 = fopen(argv[1], "r"); 10 while ((c = fgetc(f1))!= EOF) { 11 if ( islower(c)) 1 pezoi ++; 13 else if ( isupper(c)) 14 kefalaioi ++; 15 } 16 fclose(f1); 17 18 f = fopen(argv[], "w"); 19 fprintf(f, " Pezoi: %d\n", pezoi); 0 fprintf(f, " Kefalaioi: %d\n", kefalaioi); 1 fclose(f); 9

3 return 0; 4 } 49. (ΕΓΓ.151) Να γραφεί πρόγραμμα C όπου ο χρήστης θα γεμίζει από το πληκτρολόγιο μονοδιάστατο πίνακα ακεραίων 10 θέσεων και μετά θα εμφανίζει τα στοιχεία του με ανάστροφη φορά. 5 int p[10]; 6 int i; 7 int a; 8 9 for (i = 0; i < 10; ++i) { 10 printf(" Dwse tov ari8mo #% d: ", i); 11 scanf("%d",&p[i]); 1 } 13 14 for (i = 9; i >= 0; --i) 15 printf(" Stoixeio #% d: %d\n", i, p[i]); 16 17 return 0; 18 } 50. (ΕΓΓ.15) Να γραφεί πρόγραμμα C όπου ο χρήστης θα γεμίζει από το πληκτρολόγιο δισδιάστατο πίνακα ακεραίων 4Χ4 και θα βρίσκει το μέγιστο και το ελάχιστο στοιχείο του πίνακα. 5 int p[4][4]; 6 int i,j; 7 int meg, elax; 8 9 for (i = 0; i < 4; ++i) { 10 for (j = 0; j < 4; ++j) { 11 printf(" Dwse to stoixeio %d,% d: ", i, j); 1 scanf("%d", &p[i][j]); 13 } 30

14 } 15 16 meg = p[0][0]; 17 elax = p[0][0]; 18 19 for (i = 0; i < 4; ++i) { 0 for (j = 0; j < 4; ++j) { 1 if (p[i][ j] > meg) meg = p[i][j]; 3 if (p[i][ j] < elax) 4 elax = p[i][j]; 5 } 6 } 7 8 printf(" To megisto eivai: %d\n", meg); 9 printf(" To elaxisto eivai: %d\n", elax); 30 31 return 0; 3 } 51. (ΕΓΓ.153) Να γραφεί πρόγραμμα C με το όνομα fcapitalise που θα αλλάζει όλους τους πεζούς χαρακτήρες από ένα αρχείο κειμένου σε άλλο αρχείο με κεφαλαίους. Η κλήση του προγράμματος θα γίνεται από τη γραμμή εντολών. Σημείωση: Όπως και στη σημείωση του θέματος 148, μπορεί κανείς να δει μία πληρέστερη εκδοχή στο αρχείο pisto153_errors.c. 3 int main(int argc, char* argv[]) 5 FILE *f1, *f; 6 int c; 7 8 f1 = fopen(argv[1], "r"); 9 f = fopen(argv[], "w"); 10 11 while ((c = fgetc(f1))!= EOF) { 1 if ( islower(c)) 13 c = toupper(c); 14 fputc(c, f); 15 } 16 17 fclose(f1); 18 fclose(f); 19 0 31

1 return 0; } 3