Προγραμματισμός II (Γλώσσα C) Λύσεις 12 ης Ομάδας Ασκήσεων (Δομές) 1. Να γραφεί πρόγραμμα σε C το οποίο θα δημιουργεί μία δομή με το όνομα person. Η δομή αυτή θα αποτελείται από ένα όνομα (συμβολοσειρά μήκους 50) και ένα έτος γέννησης (ακέραιος). Κατά την έναρξή του, το πρόγραμμα θα ζητάει από τον χρήστη να εισάγει το όνομά του, το έτος γέννησής του και το τρέχον έτος. Κατόπιν, θα αποθηκεύει τα στοιχεία του χρήστη στην παραπάνω δομή και θα εκτυπώνει στην οθόνη το όνομα και την ηλικία του. struct person char name[50]; int year; struct person p1; int thisyear; printf("dose onoma: "); scanf("%s", &p1.name); printf("dose etos gennisis: "); scanf("%d", &p1.year); printf("dose trexon etos: "); scanf("%d", &thisyear); printf("geia sou %s. Eisai %d eton.", p1.name, thisyearp1.year); 2. Να γράψετε πρόγραμμα σε C που να διαβάζει το επώνυμο και το βαθμό 10 μαθητών και να τα αποθηκεύει σε ένα πίνακα του οποίου κάθε στοιχείο θα είναι μια κατάλληλη δομή (structure). Στη συνέχεια για κάθε μαθητή θα τυπώνει στην οθόνη το επώνυμό του, το βαθμό του, καθώς και το χαρακτηρισμό επίδοσης ανάλογα με το βαθμό του. Ο χαρακτηρισμός επίδοσης είναι: 0< βαθμός <= 9 αποτυχών
9< βαθμός <=12 μέτρια 12< βαθμός <=15 καλά 15< βαθμός <=18 πολύ καλά 18< βαθμός <=20 άριστα Στο τέλος να τυπωθεί το πλήθος των μαθητών κάθε κατηγορίας επίδοσης, δηλαδή άριστα 7 μαθητές,..., κτλ. #define N 10 struct mathitis char onoma[50]; float bathmos; struct mathitis m[n]; int i, apotyxontes=0, metrioi=0, kaloi=0, polykaloi=0, aristoi=0 ; for(i=0; i<n; i++) printf("dose onoma mathiti %d: ", i+1); scanf("%s", &m[i].onoma); printf("dose bathmo mathiti %d: ", i+1); scanf("%f", &m[i].bathmos); if(m[i].bathmos<=9) apotyxontes++; if(m[i].bathmos>9 && m[i].bathmos<=12) metrioi++; if(m[i].bathmos>12 && m[i].bathmos<=15) kaloi++; if(m[i].bathmos>15 && m[i].bathmos<=18) polykaloi++; if(m[i].bathmos>18 && m[i].bathmos<=20) aristoi++; for(i=0; i<n; i++) printf("\n%s = %4.2f", m[i].onoma, m[i].bathmos ); printf("\n"); printf("\naristoi : %d", aristoi); printf("\npoly kaloi : %d", polykaloi); printf("\nkaloi : %d", kaloi); printf("\nmetrioi : %d", metrioi); printf("\napotyxontes: %d", apotyxontes);
3. Έστω το τμήμα ενός σχολείου με μέγιστη δυναμικότητα τους 25 μαθητές. Σας ζητείτε να γράψετε ένα πρόγραμμα σε C το οποίο θα διαβάζει τα ονόματα των μαθητών του τμήματος μαζί με τους βαθμούς τους για ένα μάθημα στα προφορικά και τα γραπτά αντίστοιχα. Τα στοιχεία που θα διαβάζονται (όνομα, βαθμός προφορικών, βαθμός γραπτών) θα πρέπει να αποθηκεύονται σε κατάλληλη δομή (structure). Επειδή οι μαθητές ενδέχεται να είναι λιγότεροι από 25, η εισαγωγή θα πρέπει να σταματάει αν δοθεί ως όνομα μαθητή το 0 ενώ θα πρέπει να γίνεται και έλεγχος εγκυρότητας για το αν ο κάθε βαθμός που εισάγεται είναι στο διάστημα από 0 έως 20. Μετά την εισαγωγή των στοιχείων, το πρόγραμμα θα τυπώνει στην οθόνη τα ονόματα όλων των μαθητών μαζί με την τελική τους βαθμολογία η οποία θα προκύπτει από το 40% του προφορικού βαθμού και το 60% του γραπτού βαθμού, καθώς και ο μέσος όρος της τελικής βαθμολογίας όλου του τμήματος. #include <string.h> #define N 25 struct mathitis char onoma[50]; float proforika, grapta; struct mathitis m[n]; int i=0, plithos=0; float mo, sum; i+1); printf("dose onoma mathiti %d: ", i+1); scanf("%s", &m[i].onoma[i]); if(strcmp(m[i].onoma,"0")!=0) printf("dose proforiko bathmo mathiti %d (0-20): ", scanf("%f", &m[i].proforika); if(m[i].proforika<0 m[i].proforika>20) printf("lathos! Dose ksana proforiko bathmo mathiti %d: ", i+1); while(m[i].proforika<0 m[i].proforika>20); printf("dose grapto bathmo mathiti %d (0-20): ", i+1); scanf("%f", &m[i].grapta); if(m[i].grapta<0 m[i].grapta>20) printf("lathos! Dose ksana grapto bathmo mathiti %d: ", i+1); while(m[i].grapta<0 m[i].grapta>20);
i++; else printf("\ntelos kataxorisis\n!"); while(strcmp(m[i].onoma,"0")!=0 && i<n); plithos=i; for(i=0; i<plithos; i++) printf("\nmathitis: %s - Telikos bathmos: %4.2f\n", m[i].onoma, 0.4*m[i].proforika+0.6*m[i].grapta); sum=0; for(i=0; i<plithos; i++) sum=sum+(0.4*m[i].proforika+0.6*m[i].grapta); printf("\nmesos Oros tmimatos: %4.2f\n", (float)sum/(float)n); 4. Να δημιουργηθεί σε C δομή (structure) με το όνομα Book η οποία θα έχει τα εξής χαρακτηριστικά: isbn -> ακέραιος αριθμός title -> συμβολοσειρά μήκους 50 author -> συμβολοσειρά μήκους 50 subject -> συμβολοσειρά μήκους 100 Κατά την εκκίνηση του προγράμματος, ο χρήστης θα εισάγει τον μοναδικό αριθμό, τον τίτλο, τον συγγραφέα, το θέμα και τα στοιχεία θα καταχωρούνται στην παραπάνω δομή. Μετά την καταχώρηση, η δομή θα αποστέλλεται ως παράμετρος σε μία συνάρτηση με όνομα printbook και η οποία θα εκτυπώνει τα στοιχεία του βιβλίου στην οθόνη. #include <string.h> struct Book int isbn; char title[50]; char author[50]; char subject[100]; ; printbook(struct Book b) printf("\n"); printf( "Book id : %d\n", b.isbn);
printf( "Book title : %s\n", b.title); printf( "Book author : %s\n", b.author); printf( "Book subject : %s\n", b.subject); int main( ) struct Book book1; printf("dose ISBN: "); scanf("%d", &book1.isbn); printf("dose titlo: "); scanf("%s", &book1.title); printf("dose syggrafea: "); scanf("%s", &book1.author); printf("dose thema: "); scanf("%s", &book1.subject); printbook(book1);