ΑΣΚΗΣΗ 1 ΑΠΑΝΤΉΣΕΙΣ ΣΤΟ ΠΡΩΤΟ ΣΥΝΟΛΟ ΑΣΚΗΣΕΩΝ 2015 1 i) Πρώτα θα πραγματοποιηθεί διαίρεση του z με το x και μετα θα αφαιρεθεί το αποτέλεσμα από τον y. ii) Οι πράξεις εδώ έχουν την ίδια προτεραιότητα μεταξύ τους οπότε θα ξεκινήσουν από αριστερά και θα συνεχιστούν προς τα δεξιά πρώτα εκτελώντας τη διαίρεση w με το x μετά πολλαπλασιάζοντας με το y και μετά διαιρώντας με το z. iii) Πρώτα θα γίνουν οι πράξεις w/x, ++z, w/x*++z και x/y και μετά θα προσθεθούν τα αποτελέσματα των πράξεων iv) Το b αυξάνεται κατά 1 και ανατίθεται στο res, και μετά το το a μειώνεται κατά ένα. v) Εδώ το b μειώνεται κατά 1 και μετά το a αυξάνεται κατά 1 και το αποτέλεσμα ανατίθεται στο res. vi) Ελέγχει αν ισχύει η συνθήκη και εκχωρεί στη μεταβλητή res την μικρότερη των δύο τιμών (α, b) ΑΣΚΗΣΗ 2 int x, y, z, w, c; x=1; y=2; z=3; w=4; c=5; while (c<=100) //στηλοθέτες printf("%d\t %d\t %d\t %d\t %d\t\n", x, y, z, w, c); 1 ΕΠΙΣΗΜΑΝΣΗ: Οι απαντήσεις παρουσιάζουν (ενδεχομένως σε μερικά σημεία διορθωμένες) τις καλύτερες απαντήσεις φοιτητών σε θέματα αντίστοιχα παλαιοτέρων ετών ( κ. Μανωλίδη Δημητρίου (κυρίως) και μερικές του κ. Τσαπαρλή Πέτρου)
x+=5; y+=5; z+=5; w+=5; c+=5; ΑΣΚΗΣΗ 3 #include <math.h> double x; double fx; printf("δώσε x\n"); scanf("%lf", &x); fx=pow(x,5)-2*pow(x,3)+3*x; printf("η ζητούμενη συνάρτηση fx είναι η=%lf",fx); fx=exp(x)+4*log(x)-pow(x,2); printf("\nh ζητούμενη συνάρτηση fx είναι η=%lf",fx); ΑΣΚΗΣΗ 4 Το πρόγραμμα που εκτελεί τα ζητούμενα από την εκφώνηση βήματα είναι το ακόλουθο: double d; float f;
printf("d= "); scanf("%lf",&d); f = (float)d; printf("%.12lf %.12f\n",d,f); Αν εκτελέσουμε το παραπάνω πρόγραμμα βλέπουμε ότι κατά την μετατροπή από double σε float υπάρχει αναγκαστική απώλεια δεδομένων. Αυτό συμβαίνει οποτεδήποτε κάνουμε typecasting από έναν τύπο μεγάλης ακρίβειας σε έναν τύπο μικρότερης ακρίβειας. Αν όμως μας ενδιαφέρει ακρίβεια π.χ. τριών δεκαδικών ψηφίων τότε η απώλεια της παραπάνω πληροφορίας δεν μας προβληματίζει. Αν όμως μας ενδιαφέρει ακρίβεια π.χ. 10 δεκαδικών ψηφίων τότε η μετάβαση από double σε float δεν είναι σωστή κίνηση. ΑΣΚΗΣΗ 5 Ένα ενδεικτικό πρόγραμμα λύση στην άσκηση αυτή είναι το ακόλουθο: #include <math.h> float x1,x2,y1,y2,apo; printf("x1: "); scanf("%f",&x1); printf("y1: "); scanf("%f",&y1); printf("x2: "); scanf("%f",&x2); printf("y2: "); scanf("%f",&y2); apo = sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); printf("%f\n",apo);
Αρχικά διαβάζονται οι συντεταγμένες των δύο σημείων και έπειτα υπολογίζεται και τυπώνεται η απόστασή τους με χρήση της sqrt της math.h. Για να γίνει compilation με τον gcc πρέπει να χρησιμοποιηθεί και η παράμετρος lm για να δηλωθεί η χρήση της math.h. Δηλαδή, αν το όνομα του αρχείου πηγαίου κώδικα είναι askisi5.c τότε πρέπει να γράψουμε στο Unix: ΑΣΚΗΣΗ 6 Ο κώδικας που μετατρέπει την θερμοκρασία είναι ο ακόλουθος: float f,c; printf("doste thermokrasia se far.: "); scanf("%f",&f); c = (5.0/9.0)*(f-32.0); printf("thermokrasia se celcius: %.4f\n",c); Αν αντί για (5.0/9.0) στην γραμμή 7 γράφαμε (5/9) το αποτέλεσμα θα ήταν πάντα μηδενικό γιατί το 5/9 είναι διαίρεση ακεραίων. ΑΣΚΗΣΗ 7 #include <math.h> int x,y; printf("δώσε δύο ακεραίους αριθμούς:"); scanf("%d%d", &x,&y); printf("το άθροισμα είναι %d \n", x+y);
printf("o μεγαλυτερος ειναι %d\n", (x>y)?x:y); printf("to αποτέλεσμα είναι %lf\n", pow((double)x, (double)y)); printf("οι λογάριθμοι είναι %lf και %lf", log10((double)x), log10((double)y)); ΑΣΚΗΣΗ 8 #include <math.h> float a, b, c, D, x1, x2, x, z1, z2; int main() printf("δώστε τους συντελεστές a, b και c: "); scanf("%f %f %f", &a, &b, &c); D=b*b-4*a*c; if(d>0) x1=(-b+sqrt(d))/2*a; x2=(-b-sqrt(d))/2*a; x2); printf("οι λύσεις της εξίσωσης είναι Χ1=%0.2f και X2=%0.2f\n", x1, else if(d<0) x=(-b)/2*a; /*Πραγματικό μέρος*/ z1=sqrt(-d)/2*a; /*Φανταστικό μέρος*/ z2=-sqrt(-d)/2*a;
printf("οι λύσεις της εξίσωσης είναι οι μιγαδικοί Z1=%0.2f+%0.2fi και Z2=%0.2f%0.2fi\n", x, z1, x, z2); else x=(-b)/2*a; printf("η εξίσωση έχει διπλή ρίζα τον αριθμό Χ=%0.2f\n", x); ΑΣΚΗΣΗ 9 #define in 2.54 #define euro 340.75 int main() int choice; float value; printf("σε τι θελετε να γίνει η μετατροπή; ίντσες (1) ή ευρώ (2)"); scanf("%d", &choice); printf("δώσε τιμή"); scanf("%f", &value); if (choice==1) printf("τα %f μέτρα είναι %f ιντσες", value, value*in); else printf("τα %f ευρω είναι %f δραχμές", value, value*euro); ΑΣΚΗΣΗ 10 int i, count=0; for (i=48; i<=126; i++) printf("%c (%d) \t", i, i);
count++; if ((count % 10) ==0) printf("\n"); ΑΣΚΗΣΗ 11 2 int main() int i, sum, num, flag; flag = sum = 0; num = 1; for(i = 3; i <= 3*num; i+=3) if(flag == 0) printf("enter number: "); scanf("%d", &num); if(num <= 0 num >= 20) num = 1; i = 0; continue; flag = 1; sum += i*i; printf("sum: %d\n", sum); ΑΣΚΗΣΗ 12 main () int prt, number; //ο d είναι ο ακέραιος do printf("δώσε θετικό τετραψήφιο αριθμό:"); scanf("%d",&number); 2 Λύση απο το βιβλίο Δρ. Γ. Τσελίκης και Δρ. Ν. Τσελίκας C από τη θεωρία στην εφαρμογή (άλυτες ακσήσεις και ενδεικτικές λύσεις)
while (number<10000 number>99999); /*έλεγχος για το αν είναι θτεικός ακέραιος και πενταψήφιος */ while (number!=0) ptr=ptr+number%10; prt=ptr*10; number=number/10; printf("το αποτέλεσμα είναι %d\n",ptr); // εκτυπώνει το αποτέλεσμα ΑΣΚΗΣΗ 13 Σωστές είναι οι εντολές (1), (4) και (5) διότι : (2) y=a*x*x*(x+10) = a*x 3 +a*x 2 *10, διάφορο από ax 3 +10 (3) y= (a * x) * x * (x + 10)= a*x 3 +a*x 2 *10 διάφορο από ax 2 +10 (6) y = a * x * (x * x + 10)=a*x 3 +a*x*10 διάφορο από ax 3 +10 ΑΣΚΗΣΗ 14 int main() int i,j; printf("n\t"); for (i=2; i<=10;i++) pritnf("%d*n\t", i); printf("\n"); for (j=1;j<=10;j++) for(i=1;i<=10;i++) printf("%d\t", j*i); printf("\n");
ΑΣΚΗΣΗ 15 int x, y, a, MKD; printf("δώστε 2 θετικούς αριθμούς x και y: "); scanf("%d %d", &x, &y); while(x<0) printf("ο αριθμός x δεν πληρεί τις προϋποθέσεις, επαναλάβετε την διαδικασία για τον αριθμό x: "); while(y<0) scanf(" %d", &x); printf("ο αριθμός y δεν πληρεί τις προϋποθέσεις, επαναλάβετε την διαδικασία για τον αριθμό y : "); if(x<y) scanf(" %d", &y); a=x; /*αντιμεταθεση τιμων*/ x=y; y=a; while(x%y!=0) a=x%y;
x=y; y=a; MKD=y; printf("ο μέγιστος κοινός διαιρέτης των 2 αριθμών ειναι ο %d\n", MKD); ΑΣΚΗΣΗ 16 int n, i; unsigned long s, sum; int main() printf("δώστε τον αριθμό N: "); scanf("%d", &n); while(n<0) printf("ο αριθμός που δώσατε δεν πληρεί τις προϋποθέσεις, επαναλάβετε τη διαδικασία: "); scanf("%d", &n); printf("%d\t", 0); s=1; for(i=2; i<=n; ++i) if(i%2!=0)
sum=sum+s; printf("%lu\t", sum); else s=s+sum; if(i%5==0) printf("%lu\n", s); else printf("%lu\t", s); if(i==20) break; printf("\n"); Οι αριθμοί αποθηκεύονται εναλάξ στις 2 μεταβλητές που υπάρχουν μέσα στο βρόχο for ώστε να υπάρχει πρόσβαση στους αριθμούς που πρέπει να προσθεθούν για να υλοποιηθεί η ακολουθία Fibonacci ΑΣΚΗΣΗ 17 unsigned long amount = 100, deposit, withdraw; int choice, pin, k=0; while (pin!= 2014) printf("enter your pin : "); scanf("%d", &pin);
if(pin!= 2014) printf("wrong! Please enter valid password\n"); //end while do printf("****welcome to ATM service****\n"); printf("1. Check Balance\n"); printf("2. Withdraw Cash\n"); printf("3. Deposit Cash\n"); printf("4. Quit\n\n"); printf("enter your choice : "); scanf("%d", &choice); switch (choice) case 1: printf("\n Your Balance is : %lu\n", amount); break; case 2: printf("\n Enter the amount to withdraw : "); scanf("%lu", &withdraw); if(withdraw % 20!= 0) printf("\n Please enter the amount in multiples of 20"); else if (withdraw >amount ) printf("\n Insufficient Balance"); else amount = amount - withdraw; printf("\n\n Please collect cash"); printf("\n Your current balance is%lu",amount); break; case 3: printf("\n Enter the amount to deposit"); scanf("%lu", &deposit); amount = amount + deposit; printf("your balance is %lu", amount); break; case 4: printf("\n Thank you for using ATM"); k=1; break; default: printf("\n Invalid choice");
while(!k); printf("\n\n Thank you! Please take your card.\n"); //end main ΑΣΚΗΣΗ 18 int code, sec, sms, pagio; float sum, fpa; int main() pagio = 12; printf("δώστε τον τετραψήφιο κωδικό του πελάτη: "); scanf("%d", &code); printf("δώστε το χρόνο ομιλίας του πελάτη σε δευτερόλεπτα: "); scanf("%d", &sec); printf("δώστε τα SMS του πελάτη: "); scanf("%d", &sms); sum = pagio + 0.02 * sec + 0.14 * sms; fpa = 23 * sum / 100; sum = sum + fpa; printf("tmob account\n \b--------------------------------------------------------------- ---------\n \bcustomer code\t time\t SMS\t FPA\t \ttotal\n"); printf("%d\t\t %d\t %d\t %.2f\t \t%.2f\n", code, sec, sms, fpa, sum); printf(" \n"); ΑΣΚΗΣΗ 19 #include <math.h> int n, i, Sf3, Sfi, Sw3, Swi, Sd3, Sdi ; /* Το S3 ειναι για το αθροισμα των κυβων των αριθμων και το Si για το αθροισμα των αριθμων που υψωνονται στον εαυτο τους ενώ το γράμμα στη μέση κάθε μεταβλητής δηλώνει τον βρόχο στον οποίο υπολογίστηκε*/ printf("δώστε τον αριθμό των N πρώτων όρων: ");
scanf("%d", &n); while(n<=0) printf("ο αριθμός Ν που δώσατε πρέπει να είναι θετικός, δώστε έναν νέο αριθμό: "); scanf("%d", &n); for(i=1; i<=n; ++i) i=1; while(i<=n) i=1; do Sf3 = Sf3 + pow(i,2); Sfi = Sfi + pow(i,i); Sw3 = Sw3 + pow(i,2); Swi = Swi + pow(i,i); ++i; Sd3 = Sd3 + pow(i,2); Sdi = Sdi + pow(i,i); ++i; while(i<=n); printf("το άθροισμα των κύβων είναι: for: %d, while: %d, do: %d\n", Sf3, Sw3, Sd3);
printf("το άθροισμα των αριθμών που υψώνονται στον εαυτό τους ειναι: for: %d, while: %d, do: %d\n", Sfi, Swi, Sdi); ΑΣΚΗΣΗ 20 3 int a, b, c, d, max, choice, temp; printf("enter numbers: "); scanf("%d%d%d%d", &a, &b, &c, &d); max = a+b; choice = 1; temp = a+c; if(temp > max) max = temp; choice = 2; temp = a+d; if(temp > max) max = temp; choice = 3; temp = b+c; if(temp > max) max = temp; choice = 4; temp = b+d; if(temp > max) max = temp; choice = 5; temp = c+d; if(temp > max) max = temp; choice = 6; 3 Λύση απο το βιβλίο Δρ. Γ. Τσελίκης και Δρ. Ν. Τσελίκας C από τη θεωρία στην εφαρμογή (άλυτες ακσήσεις και ενδεικτικές λύσεις)
if(choice == 1) printf("the biggest pair is %d+%d=%d\n", a, b, max); else if(choice == 2) printf("the biggest pair is %d+%d=%d\n", a, c, max); else if(choice == 3) printf("the biggest pair is %d+%d=%d\n", a, d, max); else if(choice == 4) printf("the biggest pair is %d+%d=%d\n", b, c, max); else if(choice == 5) printf("the biggest pair is %d+%d=%d\n", b, d, max); else printf("the biggest pair is %d+%d=%d\n", c, d, max); _
ΑΣΚΗΣΗ 21 4 int num, div, rem; printf("enter a number: "); scanf("%d", &num); div = num/10; rem = num%10; printf("%d\n", div*1000+div*100+rem*10+rem); 4 Λύση απο το βιβλίο Δρ. Γ. Τσελίκης και Δρ. Ν. Τσελίκας C από τη θεωρία στην εφαρμογή (άλυτες ακσήσεις και ενδεικτικές λύσεις)