ΑΠΑΝΤΉΣΕΙΣ ΣΕ ΠΡΩΤΟ ΣΥΝΟΛΟ ΑΣΚΗΣΕΩΝ 1 ΑΣΚΗΣΗ 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 #define N 10 int i; float num, sum=0; for (i=0; i<n; i++) printf("give number: "); 1 ΕΠΙΣΗΜΑΝΣΗ: Οι απαντήσεις παρουσιάζουν (ενδεχομένως σε μερικά σημεία διορθωμένες) τις καλύτερες απαντήσεις φοιτητών σε θέματα αντίστοιχα παλαιοτέρων ετών ( κ. Μανωλίδη Δημητρίου (κυρίως) και μερικές του κ. Τσαπαρλή Πέτρου). H πρώτη άσκηση δεν απαντάται γιατί είναι απλή εκτέλεση έτοιμου κώδικα, και απάντηση με βάση ύλη μαθήματος.
scanf("%f", &num); sum=sum+num; sum=sum/n; if (sum>=5) printf("success"); else printf("failure"); ΑΣΚΗΣΗ 4 #define N 10 int x,y; int product; printf("give two integers: "); scanf("%d%d", &x, &y); product=x*y; if (product>0 && product<10) printf("the sum is %d\n", x+y); else if (product>100 && product <1000) printf("the subtraction is %d\n", x-y); else printf("wrong numbers"); ΑΣΚΗΣΗ 5 int x, y, xmax, countmax, count; countmax=0; count=1; printf("give value: "); scanf("%d", &x); while (x!=0) printf("give value:"); scanf("%d", &y);
if (y==0) if (count>countmax) xmax=x; countmax=count; break; else if (x==y) count++; else if (count>countmax) xmax=x; countmax=count; count=1; x=y; printf("the value %d appears %d times\n", xmax, countmax); ΑΣΚΗΣΗ 6 #include <math.h> double x; double fx; printf("δώσε x\n"); scanf("%lf", &x); fx=pow(x,5)-pow(x,3)+3*x; printf("η ζητούμενη συνάρτηση fx είναι η=%lf",fx); fx=exp(x)+4*log(x)-pow(x,2); printf("\nh ζητούμενη συνάρτηση fx είναι η=%lf",fx); ΑΣΚΗΣΗ 7 Το πρόγραμμα που εκτελεί τα ζητούμενα από την εκφώνηση βήματα είναι το ακόλουθο: double d; float f; printf("d= ");
scanf("%lf",&d); f = (float)d; printf("%.12lf %.12f\n",d,f); Αν εκτελέσουμε το παραπάνω πρόγραμμα βλέπουμε ότι κατά την μετατροπή από double σε float υπάρχει αναγκαστική απώλεια δεδομένων. Αυτό συμβαίνει οποτεδήποτε κάνουμε typecasting από έναν τύπο μεγάλης ακρίβειας σε έναν τύπο μικρότερης ακρίβειας. Αν όμως μας ενδιαφέρει ακρίβεια π.χ. τριών δεκαδικών ψηφίων τότε η απώλεια της παραπάνω πληροφορίας δεν μας προβληματίζει. Αν όμως μας ενδιαφέρει ακρίβεια π.χ. 10 δεκαδικών ψηφίων τότε η μετάβαση από double σε float δεν είναι σωστή κίνηση. ΑΣΚΗΣΗ 8 Ένα ενδεικτικό πρόγραμμα λύση στην άσκηση αυτή είναι το ακόλουθο: #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: ΑΣΚΗΣΗ 9 Ο κώδικας που μετατρέπει την θερμοκρασία είναι ο ακόλουθος: 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 είναι διαίρεση ακεραίων. ΑΣΚΗΣΗ 10 #include <math.h> int x,y; printf("give two numbers:"); scanf("%d%d", &x, &y); printf("the sum is %d\n", x+y); printf("the larger is %d. \n", (x>y)?x:y); printf("the logarithms are: %lf and %lf \n", log10(x), log10(y)); ΑΣΚΗΣΗ 11 #include <math.h> float a, b, c, D, x1, x2, x, z1, z2;
x2); printf("δώστε τους συντελεστές a, b και c: "); scanf("%f %f %f", &a, &b, &c); D=b*b-4*a*c; if(d>0) else if(d<0) x1=(-b+sqrt(d))/2*a; x2=(-b-sqrt(d))/2*a; printf("οι λύσεις της εξίσωσης είναι Χ1=%0.2f και X2=%0.2f\n", x1, 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 #define in 2.54 #define euro 340.75 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); ΑΣΚΗΣΗ 13 int i, count=0; for (i=48; i<=126; i++) printf("%c (%d) \t", i, i); count++; if ((count % 10) ==0) printf("\n"); ΑΣΚΗΣΗ 14 2 int i, sum, num, flag; flag = sum = 0; num = 1; for(i = 4; i <= 4*num; i+=4) if(flag == 0) 2 Λύση απο το βιβλίο Δρ. Γ. Τσελίκης και Δρ. Ν. Τσελίκας C από τη θεωρία στην εφαρμογή (άλυτες ακσήσεις και ενδεικτικές λύσεις)
printf("enter number: "); scanf("%d", &num); if(num <= 0 num >= 10) num = 1; i = 0; continue; flag = 1; sum += i*i; printf("sum: %d\n", sum); ΑΣΚΗΣΗ 15 main () int prt, number; //ο d είναι ο ακέραιος do printf("δώσε θετικό πενταψήφιο αριθμό:"); scanf("%d",&number); while (number<10000 number>99999); /*έλεγχος για το αν είναι θτεικός ακέραιος και πενταψήφιος */ while (number!=0) ptr=ptr+number%10; prt=ptr*10; number=number/10; printf("το αποτέλεσμα είναι %d\n",ptr); // εκτυπώνει το αποτέλεσμα
ΑΣΚΗΣΗ 16 Σωστές είναι οι εντολές (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 ΑΣΚΗΣΗ 17 int i,j; ΑΣΚΗΣΗ 18 for (i=1; i<=10; i++) int x, y, a, MKD; for (j=1; j<=10; j++) printf("%d\t", j*i); printf("\n"); printf("δώστε 2 θετικούς αριθμούς x και y: "); scanf("%d %d", &x, &y); while(x<0) printf("ο αριθμός x δεν πληρεί τις προϋποθέσεις, επαναλάβετε την διαδικασία για τον αριθμό x: "); while(y<0) scanf(" %d", &x); printf("ο αριθμός y δεν πληρεί τις προϋποθέσεις, επαναλάβετε την διαδικασία για τον αριθμό y : "); scanf(" %d", &y);
if(x<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); ΑΣΚΗΣΗ 19 int current, i, next; int N; current=0; next=1; printf("give number: "); scanf("%d",&n); printf("the Fibonacci sequence is:\n"); if (N==1) printf("%d \n", current); else printf("%d %d ", current, next); for (i=3; i<=n; i++) int temp=next; next=current+next;
printf("%d ", next); current=temp; if (i%5==0) printf("\n"); if (i==20) break; ΑΣΚΗΣΗ 20 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 ΑΣΚΗΣΗ 21 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"); ΑΣΚΗΣΗ 22 #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,3); Sfi = Sfi + pow(i,i); 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);
ΑΣΚΗΣΗ 23 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; 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); _
ΑΣΚΗΣΗ 24 3 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); 3 Λύση απο το βιβλίο Δρ. Γ. Τσελίκης και Δρ. Ν. Τσελίκας C από τη θεωρία στην εφαρμογή (άλυτες ακσήσεις και ενδεικτικές λύσεις)