Η Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Εργαστήριο 6 Εντολές Επανάληψης Ασκήσεις Γιώργος Λαμπρινίδης lamprinidis@pharm.uoa.gr
Ασκήσεις Εμπέδωσης στις εντολές επανάληψης Σε αυτό το εργαστήριο θα δούμε στην πράξη: Πόσο χρήσιμες είναι οι εντολές επανάληψης Πότε χρησιμοποιούμε while ή do-while και πότε for Πώς ισοδυναμεί η while ή do-while με τη for 2
Πρόβλημα 1 Σε προηγούμενο εργαστήριο είχαμε ασχοληθεί με το εξής πρόβλημα: Γράψτε ένα πρόγραµµα σε C που να διαβάζει από το πληκτρολόγιο έναν ακέραιο αριθμό με τιμές από το 1 έως το 7. Στη συνέχεια, χρησιμοποιώντας τη δομή switch-case να εκτυπώνει στην οθόνη την ημέρα που αντιστοιχεί στον αριθμό που δόθηκε. (π.χ. για είσοδο1 να εκτυπώνει Δευτέρα, για είσοδο 7 να εκτυπώνει Κυριακή). Σε περίπτωση που ο χρήστης εισήγαγε αριθμό που δεν ανήκει στο διάστημα 1 έως 7 να εκτυπώνει σχετικό μήνυμα λάθους. Λύστε το ίδιο πρόβλημα με την εξής προσθήκη: το πρόγραμμα να τρέχει μέχρι ο χρήστης να ζητήσει να τερματιστεί. Δηλαδή, μόλις ο χρήστης εισάγει τον αριθμό και του εμφανίζεται η ημέρα που αντιστοιχεί σε αυτό, το πρόγραμμα να περιμένει ο χρήστης να εισάγει και άλλο αριθμό, κ.ο.κ. Το πρόγραμμα να τερματίζει όταν ο χρήστης εισάγει τον αριθμό 0 (αυτό λέγεται και Συνθήκη Τερματισμού) 3
#include<stdio.h> main() int a; do prinp("dwse arithmo apo to 1-7. Gia na termatstei dwse 0\n"); scanf("%d",&a); if(a==0) break; switch(a) case 1: prinp("deutera\n");break; case 2: prinp("trit\n");break; case 3: prinp("tetart\n");break; case 4: prinp("pempt\n");break; case 5: prinp("paraskeui\n");break; case 6: prinp("sabbato\n");break; case 7: prinp("kyriaki\n");break; default: prinp("lathos arithmos (0-7) \n"); while(a!=0); prinp("telos\n"); 4
Πρόβλημα 2 Γράψτε πρόγραμμα σε C που να υπολογίζει το παραγοντικό ενός ακέραιου αριθμού που δίνεται από το πληκτρολόγιο. Θυμίζουμε το παραγοντικό: α! = 1*2*3*..*α π.χ. 3! = 1*2*3 = 6 10! = 1*2*3*4*5*6*7*8*9*10 = 3 628 800 Λύστε το ίδιο πρόβλημα με την εξής προσθήκη: Το πρόγραμμα να τρέχει για πάντα έως ότου ο χρήστης θέλει να το τερματίσει δίνοντας για συνθήκη τερματισμού κάποιον αρνητικό αριθμό. 5
#include <stdio.h> main() int f, i; int n; f = 1; do f=1; prinp("give the n:\n"); scanf("%d",&n); if (n>=0) for (i=1;i<=n;i++) f = f*i; prinp("factorial of %d is %d\n", n, f); else break; while(n>=0); prinp("telos"); 6
Πρόβλημα 3 Γράψτε πρόγραμμα σε C που να εκτυπώνει στην οθόνη σχήμα με την ακόλουθη μορφή: * ** *** **** ***** Σημείωση: Το πλήθος των γραμμών που θα εκτυπωθούν να το ορίσετε με #define. H εντολή define ορίζει μια σταθερά πριν την main() π.χ. #define PI 3.1415926 7
Λύση #include <stdio.h> #define LINES 10 main() int i,j; for (i=1;i<=lines;i++) for(j=1;j<=i;j++) putchar('*'); prinp("\n"); 8
Πρόβλημα 4 Γράψτε πρόγραμμα σε C που να εκτυπώνει στην οθόνη σχήμα με την ακόλουθη μορφή: * ** *** **** ***** Σημείωση: Το πλήθος των γραμμών που θα εκτυπωθούν να το ορίσετε με #define. 9
Λύση #include <stdio.h> #define LINES 10 main() int i,j; for (i=1;i<=lines;i++) for(j=lines-i;j>=0;j--) prinp(" "); for(j=1;j<=i;j++) putchar('*'); prinp("\n"); 10
Πρόβλημα 5 Γράψτε πρόγραμμα σε C που να υπολογίζει τη σειρά: Το αποτέλεσμα να εκτυπώνεται με ακρίβεια 10 δεκαδικών ψηφίων. 11
Λύση #include <stdio.h> main() int i=0; double sum=0.0, trexon_oros; for(i=1;i<=100;i++) trexon_oros = 1.0/(double)(i*i); sum = sum + trexon_oros; prinp("h tmi tou athroismatos einai: %.10lf", sum); 12
Παρατήρηση Στην εντολή: prin%( %.nlf, number); Το n αντιπροσωπεύει το πλήθος των ψηφίων που θα εκτυπωθούν μετά την υποδιαστολή. 13
Ασκήσεις 3.Να διαβαστούν 10 ακέραιοι αριθμοί διαφορετικοί από το μηδέν και να βρεθεί το άθροισμα όσων απ' αυτούς είναι ζυγοί και το γινόμενο όσων απ' αυτούς διαιρούνται με το 3. 4. Να βρεθεί το άθροισμα αριθμών που θα διαβάζονται από το πληκτρολόγιο. Η διαδικασία να σταματήσει όταν το άθροισμα ξεπεράσει το 1.000 και να εμφανισθεί το πλήθος των αριθμών που διαβάστηκαν και το άθροισμα πριν ξεπεραστεί το όριο 1000. 5. Να διαβαστεί ένας ακέραιος αριθμός και να βρεθεί αν είναι πρώτος ή όχι. 6. Να διαβαστεί ένας ακέραιος αριθμός και να βρεθούν οι διαιρέτες του. 14
Λύση Άσκησης 3 #include <stdio.h> main () int i,n,sumz=0,diairetes3=1; for (i=1;i<=10;i++) prinp( Dwse akeraio aritho\n ); scanf("%d",&n); if (n%2==0) sumz=sumz+n; if (n%3==0) diairetes3=diairetes3*n; prinp( To athroisma twn zygwn einai %d\n",sumz); prinp( To ginomeno twn diaretwn toy 3 einai: %d\n,diairetes3); 15
Λύση Άσκησης 4 #include <stdio.h> main () int a,b=0,sum=0,sumb=0; while (sum<=1000) prinp( Dwse akeraio arithmo\n ); scanf("%d",&a); sumb=sum; sum=sum+a; b=b+1; prinp("to plithos twn arithwn einai %d\n",b); prinp("prin to 1000 to athroisma itan %d\n",sumb); 16
Λύση Άσκησης 5 #include <stdio.h> main () int e,m,i,n,flag=0; /* e:ypoloipo diairesis, m:to anw orio twn diaretwn (n-1) */ /* n: arithmos poy eisagoyme, p: flag otan brethei diairets */ prinp( Dwse akeraio arithmo\n ); scanf("%d",&n); m=n-1; for (i=2; i<=m; i++) e=n%i; if (e==0) flag=1;break; if(flag==1) prinp("o arithmos %d einai prwtos\n",n); else prinp("o arithmos %d den einai prwtos\n",n); 17
Λύση Άσκησης 6 #include <stdio.h> main () int i,e,n,flag=0; prinp( Dwse akaireo arithmo\n ); scanf("%d",&n); for (i=1; i<=n; i++) e=n%i; if (e==0) flag=1; prinp("diairets tou %d einai o %d\n",n,i); 18