include stdio h void wait Returnvoid char my

  • Slides: 57
Download presentation

Η διαδοχή εντολών κατά την κλήση #include <stdio. h> void wait. Return(void) { char

Η διαδοχή εντολών κατά την κλήση #include <stdio. h> void wait. Return(void) { char my. Str[128]; puts("Πατήστε ENTER"); gets(my. Str); return; } main: 1 wait. Return(); waitreturn: 1 puts("Πατήστε ENTER"); int main(void) { waitreturn: 2 gets(mystr); wait. Return(); waitreturn: 3 return; return 0; main: 2 return }

Παραδείγματα συναρτήσεων (3) #include <stdio. h> #include <stdlib. h> int read. Integer(void) { /*

Παραδείγματα συναρτήσεων (3) #include <stdio. h> #include <stdlib. h> int read. Integer(void) { /* Προτροπή του χρήστη για εισαγωγή ενός ακεραίου, ανάγνωση της εισόδου και επιστροφή της τιμής */ char tmp. Str[128]; int result; printf("Δώστε έναν ακέραιο: "); gets(tmp. Str); result = atoi(tmp. Str); return result; } int main(void) { int a, b; a = read. Integer(); b = read. Integer(); print. Sum(a, b); return 0; }

Επιστροφή τιμής από συναρτήσεις int read. Integer(void) {. . . result = atoi(tmp. Str)

Επιστροφή τιμής από συναρτήσεις int read. Integer(void) {. . . result = atoi(tmp. Str) return result; } a = read. Integer();

Παραδείγματα συναρτήσεων (4) #include <stdio. h> int sum(int a, int b) { /* Υπολογισμός

Παραδείγματα συναρτήσεων (4) #include <stdio. h> int sum(int a, int b) { /* Υπολογισμός και επιστροφή του αθροίσματος δύο ακεραίων */ int result; result = a + b; return result; } int main(void) { int x; x = sum(3, 12); printf("3 + 12 = %dn", x); printf("2000 + 11 = %dn", sum(2000, 11)); return 0; }

Κοινά σφάλματα σε συναρτήσεις (1) Λάθος πλήθος παραμέτρων σε συναρτήσεις #include <stdio. h> int

Κοινά σφάλματα σε συναρτήσεις (1) Λάθος πλήθος παραμέτρων σε συναρτήσεις #include <stdio. h> int sum(int a, int b) { int result; result = a + b; return result; } int main(void) { printf("2000 + 11 = %dn", sum(2000)); printf("2000 + 11 = %dn", sum(2000, 11, 30)); return 0; } gcc -o sum. c: In function 'main': sum. c: 10: too few arguments to function 'sum' sum. c: 11: too many arguments to function 'sum'

Κοινά σφάλματα σε συναρτήσεις (2) Λάθος τύπος παραμέτρων σε συναρτήσεις #include <stdio. h> int

Κοινά σφάλματα σε συναρτήσεις (2) Λάθος τύπος παραμέτρων σε συναρτήσεις #include <stdio. h> int sum(int a, int b) { int result; result = a + b; return result; } int main(void) { int a; a = sum(2, "300"); printf("Το άθροισμα είναι %dn", a); return 0; } gcc -o sum. c: 11: warning: passing arg 2 of 'sum' makes integer from pointer without a cast. /sum Το άθροισμα είναι 67578

Κοινά σφάλματα σε συναρτήσεις (5) Προσπαθούμε να χρησιμοποιήσουμε τιμή επιστροφής από συνάρτηση “void” #include

Κοινά σφάλματα σε συναρτήσεις (5) Προσπαθούμε να χρησιμοποιήσουμε τιμή επιστροφής από συνάρτηση “void” #include <stdio. h> void wait. Return(void) { char my. Str[128]; puts("Πατήστε ENTER για συνέχεια"); gets(my. Str); return; } int main(void) { int a; a = wait. Return(); return 0; } gcc -o sum. c: In function 'main': sum. c: 14: void value not ignored as it ought to be

Κοινά σφάλματα σε συναρτήσεις (7) Δήλωση με τον «παλιό» τρόπο (K&R C) int sum(a,

Κοινά σφάλματα σε συναρτήσεις (7) Δήλωση με τον «παλιό» τρόπο (K&R C) int sum(a, b) int a, b; { int result; result = a + b; return result; } int main(void) { printf("3 + 7 = %dn", sum(3)); printf("199 + 500 = %dn", sum(199, 500, 801)); printf("199 + 500 = %dn", sum("199", "500")); return 0; } gcc -o sum. c. /sum 3 + 7 = -13369245 199 + 500 = 699 199 + 500 = 135368

Πρότυπα συναρτήσεων (1) #include <stdio. h> int main(void) { double x; x = sum(3.

Πρότυπα συναρτήσεων (1) #include <stdio. h> int main(void) { double x; x = sum(3. 2, 12. 15); printf("3. 2 + 12. 15 = %fn", x); printf("2000. 43 + 11. 6 = %fn", sum(2000. 43, 11. 6)); return 0; } double sum(double a, double b) { /* Υπολογισμός του αθροίσματος δύο πραγματικών */ double result; result = a + b; return result; }

Πρότυπα συναρτήσεων (2) gcc -o sum. c: 14: warning: type mismatch with previous implicit

Πρότυπα συναρτήσεων (2) gcc -o sum. c: 14: warning: type mismatch with previous implicit declaration sum. c: 8: warning: previous implicit declaration of 'sum' sum. c: 14: warning: 'sum' was previously implicitly declared to return 'int'. /sum 3. 2 + 12. 15 = 1074370969. 000000 2000. 43 + 11. 6 = 2000. 429932

Πρότυπα συναρτήσεων (3) #include <stdio. h> int main(void) { double x; x = sum(3.

Πρότυπα συναρτήσεων (3) #include <stdio. h> int main(void) { double x; x = sum(3. 2, 7); printf("3. 2 + 7 = %fn", x); printf("199 + 500 = %fn", sum("199", "500")); return 0; } double sum(double a, double b) { double result; result = a + b; return result; }

Πρότυπα συναρτήσεων (4) gcc -o sum. c: 12: warning: type mismatch with previous implicit

Πρότυπα συναρτήσεων (4) gcc -o sum. c: 12: warning: type mismatch with previous implicit declaration sum. c: 6: warning: previous implicit declaration of 'sum' sum. c: 12: warning: 'sum' was previously implicitly declared to return 'int'. /sum 3. 2 + 7 = 1074370969. 000000 199 + 500 = 0. 000000

Πρότυπα συναρτήσεων (3) #include <stdio. h> double sum(double, double); int main(void) { double x;

Πρότυπα συναρτήσεων (3) #include <stdio. h> double sum(double, double); int main(void) { double x; Πρότυπο συνάρτησης x = sum(3. 2, 12. 15); printf("3. 2 + 12. 15 = %fn", x); printf("2000. 43 + 11. 6 = %fn", sum(2000. 43, 11. 6)); return 0; } double sum(double a, double b) { /* Υπολογισμός του αθροίσματος δύο πραγματικών */ double result; } result = a + b; return result;

Πρότυπα συναρτήσεων (5) Πρότυπο Συνάρτησης int sum(int, int); int sum(int a, int b); int

Πρότυπα συναρτήσεων (5) Πρότυπο Συνάρτησης int sum(int, int); int sum(int a, int b); int sum(a, b); wait. Return(); void wait. Return(void) Σωστό/ Λάθος

Η εκτέλεση των κλήσεων y = sum(sum(7, 3), 2), sum(9, 4)); sum(9, 4) 13

Η εκτέλεση των κλήσεων y = sum(sum(7, 3), 2), sum(9, 4)); sum(9, 4) 13 sum(7, 3) 10 sum(10, 2) 12 sum(12, 13) 25

Τοπικές μεταβλητές (3) int a; int f 1(int x) { a = x *

Τοπικές μεταβλητές (3) int a; int f 1(int x) { a = x * x + 2 * x + 1; return a; } void f 2(void) { for (a = 1; a < 100; a++) printf("f(%d) = %dn", a, f(a)); }

Τοπικές μεταβλητές (5) #include <stdio. h> void f 1(void) { int a; a =

Τοπικές μεταβλητές (5) #include <stdio. h> void f 1(void) { int a; a = 2; printf("f 1: a = %dn", a); return; } void f 2(void) { int a; printf("f 2: a = %dn", a); } int main(void) puts("Κλήση f 2(); puts("Κλήση f 1(); puts("Κλήση f 2(); return 0; } { της f 2"); της f 1"); της f 2"); gcc -o local. c. /local Κλήση της f 2: a = 0 Κλήση της f 1: a = 2 Κλήση της f 2: a = 4198629

Τοπικές μεταβλητές (6) #include <stdio. h> void f 1(void) { int a; a =

Τοπικές μεταβλητές (6) #include <stdio. h> void f 1(void) { int a; a = 2; printf("f 1: a = %dn", a); return; } void f 2(void) { printf("f 1: a = %dn", a); return; } int main(void) { f 1(); f 2(); return 0; } gcc -o local. c: In function 'f 2': local. c: 11: 'a' undeclared (first use in this function) local. c: 11: (Each undeclared identifier is reported only once local. c: 11: for each function it appears in. )

Αναδρομή – Παράδειγμα 1 double power(double x, unsigned int n) { double result; if

Αναδρομή – Παράδειγμα 1 double power(double x, unsigned int n) { double result; if (n == 0) result = 1; else result = x * power(x, n – 1); return result; } int main(void) { printf("2. 0 εις την ογδόη = %fn", power(2. 0, 8)); return 0; }

Αναδρομή – Παράδειγμα 2 int fib(unsigned int n) { int result; if (n ==

Αναδρομή – Παράδειγμα 2 int fib(unsigned int n) { int result; if (n == 0) result = 1; else if (n == 1) result = 2; else result = fib(n - 1) + fib(n - 2); return result; } int main(void) { printf("fib(3) = %dn", fib(3)); printf("fib(4) = %dn", fib(4)); printf("fib(5) = %dn", fib(5)); return 0; }

Αναδρομή – Παράδειγμα 3 Κεφάλαιο μετά από ν έτη με σταθερό επιτόκιο double capital(double

Αναδρομή – Παράδειγμα 3 Κεφάλαιο μετά από ν έτη με σταθερό επιτόκιο double capital(double money, double pct, unsigned int years); double interest(double money, double pct, unsigned int years); double capital(double money, double pct, unsigned int years) { double result; if (years == 0) result = money; else result = capital(money, pct, years - 1) + interest(money, pct, years); return result; } double interest(double money, double pct, unsigned int years) { double result; if (years == 0) result = 0; else result = capital(money, pct, years - 1) * pct / 100; return result; }