ΑΠΑΝΤΉΣΕΙΣ ΣΤΟ ΠΡΩΤΟ ΣΥΝΟΛΟ ΑΣΚΗΣΕΩΝ ΕΠΙΣΗΜΑΝΣΗ: Οι απαντήσεις παρουσιάζουν (ενδεχομένως σε μερικά σημεία διορθωμένες) τις καλύτερες απαντήσεις φοιτητών. Για το συγκεκριμένο σύνολο επιλέχτηκαν οι απαντήσεις του κ. Μανωλίδη Δημητρίου (κυρίως) και μερικές του κ. Τσαπαρλή Πέτρου ΑΣΚΗΣΗ 1η: i) Πρώτα θα πραγματοποιηθεί διαίρεση του z με το x και μετα θα αφαιρεθεί το αποτέλεσμα από τον y. ii) Οι πράξεις εδώ έχουν την ίδια προτεραιότητα μεταξύ τους οπότε θα ξεκινήσουν από αριστερά και θα συνεχιστούν προς τα δεξιά πρώτα εκτελώντας τη διαίρεση w με το x μετά πολλαπλασιάζοντας με το y και μετά διαιρώντας με το z. iii) Πρώτα θα γίνουν οι πράξεις w/x, ++y, w/x*++y και z/y και μετά θα προσθεθούν τα αποτελέσματα των πράξεων iv) Το a μειώνεται κατά 1 και ανατίθεται στο res, μετά το b αυξάνεται κατά ένα. v) Εδώ το a μειώνεται κατά 1 και μετά το b αυξάνεται κατά 1 και το αποτέλεσμα ανατίθεται στο res. vi) Ελέγχει αν ισχύει η συνθήκη και εκχωρεί στη μεταβλητή το 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); 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η: float temp_1,temp_2,temp_3; printf("δώσε μήκος:"); scanf("%f", &temp_1);
printf("δώσε πλάτος:"); scanf("%f", &temp_2); printf("δώσε ύψος:"); scanf("%f", &temp_3); printf("%.2f", temp_1*temp_2*temp_3); ΑΣΚΗΣΗ 5η: int i, S, x; float MO; S=0; for(i=0; i<10; i++) /* Το x δηλώνει τον βαθμό του μαθήματος που διαβάζεται και το S δηλώνει το άθροισμα των μαθημάτων. Ο βρόχος do χρησιμοποιείται για έλεγχο της τιμής του βαθμού. */ printf("δώστε βαθμό: "); do scanf("%d", &x); διαδικασία: "); if ((x>10) (x<0)) printf("άκυρη είσοδος, επαναλάβετε τη while ((x>10) (x<0)); S+=x; MO=x/10;
if (MO < 5) printf("αποτυχία"); else printf("επιτυχία"); ΑΣΚΗΣΗ 6η: int x, y; printf("δώστε 2 ακεραίους: "); scanf("%d %d", &x, &y); if((x*y>0) && (x*y<10)) printf("%d", x+y); else if((x*y>100) && (x*y<1000)) printf("%d", x-y); else printf("οι αριθμοί δεν πληρούν τις προϋποθέσεις");
ΑΣΚΗΣΗ 7η: main () int prt,deut,trit,tetr,d; //ο d είναι ο ακέραιος do printf("δώσε θετικό τετραψήφιο αριθμό:"); scanf("%d",&d); while (d<1000 d>9999); /*έλεγχος για το αν είναι ακέραιος και τετραψήφιος */ prt=d%10; // βρίσκει το τέταρτο ψηφίο deut=(d%100-d%10)/10; // βρίσκει το 3o ψηφίο trit=(d%1000-d%100)/100; // βρίσκει το 2o ψηφίο tetr=d/1000; // βρίσκει το 1o ψηφίο d=prt*1000+deut*100+trit*10+tetr; // υπολογίζει το ανεστραμμένο printf("%d\n",d); // εκτυπώνει το αποτέλεσμα ΑΣΚΗΣΗ 8η: Σωστές είναι οι εντολές (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 ΑΣΚΗΣΗ 9η: int i; printf("n\t10*n\t100*n\t1000*n\n"); for(i=1;i<=10;i++) printf("%d\t%d\t%d\t%d\n", i,i*10,i*100,i*1000);
ΑΣΚΗΣΗ 10η: float a, b, x; printf("δώστε τις τιμές a και b: "); scanf("%f %f", &a, &b); if(a==0 && b==0) printf("αόριστη λύση\n"); else if(a==0) printf("αδύνατη\n"); else printf("x=%f\n", -b/a); ΑΣΚΗΣΗ 11η: #include <math.h> float a, b, c, D, x1, x2, x, z1, z2; 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); ΑΣΚΗΣΗ 12η: 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) MKD=y; a=x%y; x=y; y=a; printf("ο μέγιστος κοινός διαιρέτης των 2 αριθμών ειναι ο %d\n", MKD);
ΑΣΚΗΣΗ 13η: int n, i; unsigned long s, sum; 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) else sum=sum+s; printf("%lu\t", sum); s=s+sum;
if(i%10==0) printf("%lu\n", s); else printf("%lu\t", s); if(i==50) break; printf("\n"); Οι αριθμοί αποθηκεύονται εναλάξ στις 2 μεταβλητές που υπάρχουν μέσα στο βρόχο for ώστε να υπάρχει πρόσβαση στους αριθμούς που πρέπει να προσθεθούν για να υλοποιηθεί η ακολουθία Fibonacci Μια εναλλακτική λύση είναι η ακόλουθη: int main(void) int old_number; /* previous Fibonacci number */ int current_number; /* current Fibonacci number */ int next_number; /* next number in the series */ old_number = 1; current_number = 1; printf("1\n"); /* Print first number */
while (current_number < 100) printf("%d\n", current_number); next_number = current_number + old_number; old_number = current_number; current_number = next_number; return (0); ΑΣΚΗΣΗ 14η: int main(void) unsigned long amount = 1000, deposit, withdraw; int choice, pin, k; 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 - 500)) 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"); break; default: printf("\n Invalid choice"); k=1; while(!k); printf("\n\n Thank you! Please take your card.\n"); //end main ΑΣΚΗΣΗ 15η: int code, sec, sms, pagio; float sum, fpa; 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"); ΑΣΚΗΣΗ 16η: #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) Sf3 = Sf3 + pow(i,3); Sfi = Sfi + pow(i,i);
i=1; while(i<=n) i=1; do Sw3 = Sw3 + pow(i,3); Swi = Swi + pow(i,i); ++i; Sd3 = Sd3 + pow(i,3); 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); ΑΣΚΗΣΗ 17η: int n, i, f, maxf; /*Το f δηλωνει ποσες φορες θα δοθει συνεχομενα η ιδια τιμη της ακολουθιας*/ float a1, an, max, x;
printf("δώστε το πλήθος των όρων της ακολουθίας: "); scanf("%d", &n); printf("δώστε τους όρους της ακολουθίας: "); scanf("%f", &a1); max=a1; x=a1; /*Το x υπαρχει μονο και μονο για να αποτρεπει την εμφανιση του ιδιου αριθμου 2 φορες στο τελος του προγραμματος στην περιπτωση που ο αριθμός που εμφανίστηκε περισσότερες συνεχόμενες φορές στην ακολουθια ειναι ο ιδιος*/ f=1; maxf=1; for(i=2; i<=n; ++i) scanf("%f", &an); if(a1==an) ++f; else a1=an; f=1; if(f>maxf) maxf=f; max=an; if(f==maxf && an!=x) printf("οι αριθμοί που εμφανίστηκαν στην ακολουθία περισσότερες συνεχόμενες φορές είναι οι: %f και %f", max, an);
else printf("ο αριθμός που εμφανίστηκε στην ακολουθία περισσότερες συνεχόμενες φορές είναι ο: %f", max); ΑΣΚΗΣΗ 18η: #include <math.h>// για χρήση της pow int main () //ξεκινάμε της main unsigned long long int n,i,a0,an,an1;/*δηλώνουμε τις μεταβλητές*/ printf("dwse ton a0"); scanf("%ull",&a0); //διαβάζουμε την a0 printf("dwse n"); scanf("%ull",&n); //διαβάζουμε την n an1=a0; for(i=1;i<=n;i++) an=pow(an1,5)-an1;// κατασκευάζουμε την αναδρομική σχέση an1=an; printf("o %ull oros ths anadromikhs sxeshs einai %ull\n",n,an);
ΑΣΚΗΣΗ 19η: Mία λύση που δουλεύει με την αναπαράσταση των αριθμών σε συμπλήρωμα ως προς 2 είναι η: #define LEN 32 int i, number, count; printf("δώσε αριθμό: "); scanf("%d", &number); count = 0; for(i = 0; i < LEN; i++) if((number & 1) == 1) count++; number >>= 1; printf("%d Το πλήθος των bits με τιμή 1 είναι:", count); Mια πιο απλή λύση που δουλεύει υποθέτοντας αναπαράσταση προσημασμένου μέτρου είναι η: #include<stdio.h> int main (void) int num, count; i=0;
printf("dwse arithmo: \n"); scanf("%d",&num); if (num <0) num=-num; //εύρεση απόλυτης τιμής while (num>0) if(num%2==1) count=count+1; num=num/2; printf("%d", count);/* εμφανίζει πόσες μονάδες έχει ο δεκαδικός αριθμός στο δυαδικό σύστημα */