Grundlagen der Programmierung 11.Vorlesung 21.12.2016 Mittwoch, 21. Dezember 16 1 Noch mehr Operatoren... • Präinkrement: ++Variable Prädekrement: --Variable • Postinkrement: Variable++ Postdekrement: Variable-- • Präinkrement erhöht den Wert der Variablen um 1, liefert den neuen Wert der Variablen zurück • Postinkrement erhöht den Wert der Variablen um 1, liefert den alten Wert der Variablen zurück Grundlagen der Programmierung Mittwoch, 21. Dezember 16 Merke: Prä...: erst erhöhen, dann liefern Post: erst liefern, dann erhöhen 2 Bedingungsoperator • Allgemein: Bedingung ? Ausdruck1 : Ausdruck2 ; • Wenn Bedingung wahr ist, ist das Ergebnis der Wert von Ausdruck1, sonst der Wert von Ausdruck2 • Es wird entweder Ausdruck1 oder Ausdruck2 ausgewertet • Damit: Fallunterscheidungen innerhalb von Ausdrücken möglich Grundlagen der Programmierung Mittwoch, 21. Dezember 16 3 Schleifen Mittwoch, 21. Dezember 16 4 do...while do block while ( bedingung ); block: eine Anweisung oder Anweisungen in { } block bed JA NEIN Grundlagen der Programmierung Mittwoch, 21. Dezember 16 5 while while ( bedingung ) block Hier kein ; bed NEIN JA block Grundlagen der Programmierung Mittwoch, 21. Dezember 16 6 for Hier kein ; for(Initialisierung; Bedingung; Anweisung) Block Hier ; Hier ; block: eine Anweisung oder Anweisungen in { } Init. Bed. NEIN JA Block Anw. Mittwoch, 21. Dezember 16 7 Typische Anwendung Zählvariable Anfangswert Endwert int i; for(i=0; i < 10; i++){ printf("%d", i); } Dieser Block wird 10 mal ausgeführt... i nimmt dabei die Werte 0, 1, 2, ... 9 an Grundlagen der Programmierung Mittwoch, 21. Dezember 16 8 Andere Zählweisen int i; for(i=10; i >= 0; i--){ printf("%d", i); } i nimmt die Werte 10, 9, 8, ... , 0 an int i; for(i=0; i < 21; i+=2){ printf("%d", i); } i nimmt die Werte 0, 2, 4, ... , 20 an Grundlagen der Programmierung Mittwoch, 21. Dezember 16 9 Geschachtelt Dieser Block wird N mal ausgeführt... int i,j; for(i=0; i < N; i++){ for (j=0; j < M; j++){ printf("(%d,%d)", i, j); } } Dieser Block wird N*M mal ausgeführt i und j nehmen alle Wertepaare (i, j) mit i ∈{0, 1, ... , N-1} und j ∈{0, 1, ... , M-1} an Grundlagen der Programmierung Mittwoch, 21. Dezember 16 10 Sprünge in Schleifen • continue • Überspringt den Rest des Schleifenblocks, beginnt neuen Durchlauf der Schleife • break • Bricht Schleife ab Grundlagen der Programmierung Mittwoch, 21. Dezember 16 11 Beispiel: Fakultät berechnen n! = 1 · 2 · 3 · . . . · n #include <stdio.h> int main() { int n, i, fak = 1; printf("n: "); scanf("%d", &n); for( i = 1; i <= n; i++ ){ fak *= i; } printf("%d! = %d\n", n, fak); return 0; } Grundlagen der Programmierung Mittwoch, 21. Dezember 16 12 Aufgabe: “Tannenbaum” #include <stdio.h> int main() { int h,i,j; printf("Wie hoch? "); scanf("%d", &h); for ( i = 0; i < h; i++) { for ( j = 0; j <= i; j++) { printf("*"); } printf("\n"); } } Grundlagen der Programmierung Mittwoch, 21. Dezember 16 13 Aufgabe: Zahlenrätsel Grundlagen der Programmierung Mittwoch, 21. Dezember 16 14 Aufgabe: Zahlenrätsel Gesucht sind sechs natürliche Zahlen a,b,c,d,e,f. Für diese Zahlen gelten folgende Bedingungen: 1.) 0 < a < b < c < d < e < f < 50 2.) a + b + c + d + e + f = 161 3.) a * b * c * d * e * f = 138607200 Grundlagen der Programmierung Mittwoch, 21. Dezember 16 15 Aufgabe: Zahlenrätsel #include<stdio.h> int main() { int a,b,c,d,e,f; for( a = 1; a < 50; a++) for( b = a+1; b < 50; b++) for( c = b+1; c < 50; c++) for( d = c+1; d < 50; d++) for( e = d+1; e < 50; e++) for( f = e+1; f < 50; f++) if (( a+b+c+d+e+f == 161 ) && ( a*b*c*d*e*f == 138607200 )) { printf("a=%d,b=%d,c=%d,d=%d,e=%d,f=%d\n", a, b, c, d, e, f); printf("N 52° 28.%d\n", (b-a)*b+d-c ); printf("E 013° 32.%d\n", a*(f-e)*(d-c)); return 0; } } Grundlagen der Programmierung Mittwoch, 21. Dezember 16 16 Funktionen Mittwoch, 21. Dezember 16 17 Funktionen • "neue Befehle" definieren • Ziel: Programmtext gliedern / strukturieren • Teilprobleme lösen • Wiederverwertbaren Code schreiben Grundlagen der Programmierung Mittwoch, 21. Dezember 16 18 Funktionen als Unterprogramme #include <stdio.h> Funktionsdeklaration void hilfe_ausgeben() { printf("Tolles Programm (c) ..."); printf("Blablablabla"); // usw. } int main() { hilfe_ausgeben(); // ... return 0; Programm strukturieren } Grundlagen der Programmierung Mittwoch, 21. Dezember 16 19 Funktionen als Unterprogramme • Allgemeine Form (vereinfacht): void name () { Funktionsrumpf } Befehle, wie bei main Grundlagen der Programmierung Mittwoch, 21. Dezember 16 20 Funktionen mit Parametern • Funktion, die nicht ohne weitere Angaben arbeiten kann • Beispiel: wie lang soll das Quadrat werden? • seitenlaenge als Parameter Grundlagen der Programmierung Mittwoch, 21. Dezember 16 21 Funktion mit Parameter: Deklaration formaler Parameter void print_n_stars( int n ) { int i; for ( i = 0; i < n; i++) { printf("*"); } } Formale Parameter: Angaben, die die Funktion "braucht", um Arbeiten zu können Grundlagen der Programmierung Mittwoch, 21. Dezember 16 22 Funktionen mit Parameter: Aufruf formaler Parameter #include<stdio.h> void print_n_stars( int n ) { ... } aktueller Parameter int main() { print_n_stars( 5 ); } Funktion print_n_stars wird mit n=5 ausgeführt Grundlagen der Programmierung Mittwoch, 21. Dezember 16 23 Funktionen mit Parametern Die Auswirkung des Aufrufs print_n_stars(5) kann man sich wie folgt vorstellen: void print_n_stars() { int n = 5; int i; for ( i = 0; i < n; i++) { printf("*"); } } Grundlagen der Programmierung Mittwoch, 21. Dezember 16 24 Funktionen mit Parametern #include<stdio.h> void print_n_stars( int n ) { ... } int main() { int i; for (i = 1; i < 5; i++) { print_n_stars( i ); printf("\n"); } } Grundlagen der Programmierung Mittwoch, 21. Dezember 16 25 Funktionen mit Rückgabe • Funktion in der Mathematik: f : IN ! IN • • Eingabe: x • Ausgabe: x y = f(x) = x2 x 7 ! x2 2 • int square ( int x ) { ... Grundlagen der Programmierung Mittwoch, 21. Dezember 16 26 Funktionen Ergebnistyp (oder void) Funktionsname Parameter int square( int n ) { return n * n; } Rumpf Ergebnis liefern Grundlagen der Programmierung Mittwoch, 21. Dezember 16 27 Funktionen: Aufruf in Ausdruck int main() { int n; printf( "Bitte Zahl eingeben: "); scanf( "%d", &n ); printf( "%d hoch 2 ist %d", n, square( n ) ); return 0; } Funktionsaufruf Grundlagen der Programmierung Mittwoch, 21. Dezember 16 28 Funktionsdeklaration • Allgemeine Form: • ergebnistyp name ( formale Parameter ) { Funktionsrumpf } Ergebnistyp: void, wenn die Fkt. kein Ergebnis liefert • Formale Parameter: Liste von Variablendeklarationen (durch , getrennt) • Funktionsrumpf: Liste von Befehlen • return ausdruck; liefert Ergebnis und bricht die Funktion ab Grundlagen der Programmierung Mittwoch, 21. Dezember 16 29
© Copyright 2024 ExpyDoc