Programmieren in C Einfache ?· Prof. Dr. Nikolaus Wulff Programmieren in C 3 Felder • Felder (engl.…

  • Published on
    18-Sep-2018

  • View
    212

  • Download
    0

Embed Size (px)

Transcript

<ul><li><p>Prof. Dr. Nikolaus Wulff</p><p>Programmieren in CProgrammieren in C</p><p>Felder, Schleifen und Fliekommaarithmetik</p></li><li><p>Prof. Dr. Nikolaus Wulff Programmieren in C 2</p><p>Addition von Zahlen</p><p> #include int main() { int x,y,z,sum; x = 1; y = 2; z = 4; sum = x + y + z; /* Summe ausgeben */ printf("summe = %d \n", sum); return 0; }</p><p>5</p><p>4</p><p>3</p><p>2</p><p>1</p></li><li><p>Prof. Dr. Nikolaus Wulff Programmieren in C 3</p><p>Felder</p><p> Felder (engl. Arrays) werden durch eckige Klammern hinter dem Variablennamen deklariert.</p><p> Auf die einzelnen Elemente des Feldes wird dann mit einem Index zugegriffen.</p><p> Beim Feld mit N Elementen erfolgt die Zhlung nach C Konvention von 0 bis N-1.int feld[3];feld[0] = 1;feld[1] = 2;feld[2] = 3; /* OK max. Index==2 */feld[3] = 4; /* Illegal! */</p><p>1</p><p>432</p></li><li><p>Prof. Dr. Nikolaus Wulff Programmieren in C 4</p><p>Addition der Feldelemente #include int main() { int sum, feld[3]; feld[0] = 1; feld[1] = 2; feld[2] = 4; sum = feld[0] + feld[1] + feld[2]; /* Summe ausgeben */ printf("summe = %d \n", sum); return 0; }</p><p>5</p><p>4</p><p>3</p><p>2</p><p>1</p></li><li><p>Prof. Dr. Nikolaus Wulff Programmieren in C 5</p><p>Auswertung der Kommandozeile</p><p> Vom Betriebssystem werden an die main-Methode die Argumente bergeben, mit der das Programm gestartet wurde.</p><p> Hierzu wird ein int als Anzahl fr die Argumente und ein Zeichenketten Feld/Array mit den einzelnen Argumenten an die main-Methode bergeben. #include int main(int argc, char* argv[]) { printf("# Argumente = %d \n", argc); return 0; }</p></li><li><p>Prof. Dr. Nikolaus Wulff Programmieren in C 6</p><p>Ausgabe der Argumente</p><p> Die Argumente der Kommandozeilen sollen mit der der printf-Methode ausgegeben werden:</p><p> Was passiert bei weniger als 3 Argumenten?</p><p> #include int main(int argc, char* argv[]) { printf("# Argumente = %d \n", argc); printf("0. Arg = %s \n", argv[0]); printf("1. Arg = %s \n", argv[1]); printf("2. Arg = %s \n", argv[2]); return 0; }</p></li><li><p>Prof. Dr. Nikolaus Wulff Programmieren in C 7</p><p>NullPointer</p><p> argv[0] ist der Programm Name. argv[1], ... , argv[argc-1] sind die Argumente. Wird versucht mehr als die argc-1 Argumente </p><p>auszugeben, so ist dies ein Fehler und fhrt zu einem NullPointer:</p></li><li><p>Prof. Dr. Nikolaus Wulff Programmieren in C 8</p><p>Syntax der while-Schleife</p><p> Die while-Schleife hat eine sehr einfache Syntax:</p><p> Die auf die while-Bedingung folgende Anweisung sollte aus Grnden der Les- und Warbarkeit immer in geschweifte Klammern, als Block, geschrieben werden.</p><p> C kennt keine boolschen Ausdrcke wie false und true. 0 entspricht in C dem logischen Wert false. </p><p> Die Anweisung {statement;} wird so lange ausgefhrt, bis einen Wert gleich 0 liefert. </p><p>while( ) statement;</p></li><li><p>Prof. Dr. Nikolaus Wulff Programmieren in C 9</p><p>Die while-Schleifeint main(int argc, char *argv[]) { int index; index = 0; printf("# Args %d \n",argc); while(index &lt; argc) { printf("%d. Arg %s\n",index,argv[index]); index = index + 1; } return 0; }</p><p> Die while Schleife 3 2 wird so lange ausgefhrt, bis die Bedingung index &lt; argc verletzt ist.</p><p> So wird ein unzulssiger Index vermieden.</p><p>12</p><p>3</p></li><li><p>Prof. Dr. Nikolaus Wulff Programmieren in C 10</p><p> #include int main() { int i, sum, feld[] = {0,1,2}; i = sum = 0; while(i &lt; 3) { sum = sum + feld[i]; i = i + 1; } /* Schleifen Ende */ /* Summe ausgeben */ printf("summe = %d \n", sum); return 0; }</p><p>Addition per While-Schleife </p></li><li><p>Prof. Dr. Nikolaus Wulff Programmieren in C 11</p><p>Themperaturumrechnung Es soll ein Programm zum Umrechnen von Celsius </p><p>in Fahrenheit Grade entwickelt werden.</p><p> Das Programm soll beginnend bei einem Mini-mumwert alle Fahrenheitumrechnungen ausgeben bis ein maximaler Celsius Wert erreicht ist. </p><p> Die Schrittweite wird entsprechend vorgegeben.</p><p> F = C * 9/5 + 32 </p></li><li><p>Prof. Dr. Nikolaus Wulff Programmieren in C 12</p><p>Fahrenheit nach Celsius#include int main() { int fahr, celsius; int min, max, step; min = -40; step = 10; max = 110; celsius = min; while(celsius &lt; max) { fahr = 9*celsius/5 + 32; printf("%3d C sind %3d F\n", celsius,fahr); celsius = celsius + step; } return 0;}</p><p>12</p><p>3</p><p>45</p><p>6</p></li><li><p>Prof. Dr. Nikolaus Wulff Programmieren in C 13</p><p>Ganz- und Gleitzahlen</p><p> Ganz- und Gleitzahlen werden unterschiedlich behandelt: Bei Ganzzahlenarithmetik werden Nachkommastellen </p><p>abgeschnitten. D. h. 9/5=1.8 wird zu 1 und 5/9=0.555555 zu 0 verkrzt, </p><p>wenn eine int Variable verwendet wird! Die beiden auf dem ersten Blick identischen </p><p>Anweisungen liefern vollkommen unterschiedliche Ergebnisse.fahrenheit = 9/5*celsius + 32;</p><p>fahrenheit = 9*celsius/5 + 32;</p></li><li><p>Prof. Dr. Nikolaus Wulff Programmieren in C 14</p><p>Rundungsfehler bei int </p><p>fahrenheit = 9/5*celsius + 32;</p><p>fahrenheit = 9*celsius/5 + 32;</p><p> Fr arithmetische Berechnungen sind Gleitkommazahlen erforderlich.</p><p> Groe Fehler ergeben sich bei Divisionen mit Ganzzahlen (int/long).</p></li><li><p>Prof. Dr. Nikolaus Wulff Programmieren in C 15</p><p>Gleitkommaarithmetik</p><p>#include int main() { float fahr, celsius; float min, max, step; min = -40; step = 10; max = 110; celsius = min; while(celsius &lt; max) { fahr = 9.0/5.0*celsius + 32.0; printf("%5.1f C sind %5.1f F\n",celsius,fahr); celsius = celsius + step; } return 1;}</p><p>12</p><p>34</p></li><li><p>Prof. Dr. Nikolaus Wulff Programmieren in C 16</p><p>Die for-Schleife</p><p> Das Hochzhlen einer Variable bis zu einem bestimmten Wert kommt in der Datenverarbeitung so hufig vor, das C hierfr noch eine andere Schleifenvariante definiert, die for-Schleife:#include int main() { float f, c; for(c=0; c &lt; 100; c = c + 10) { f = 9.0/5.0*c + 32.0; printf("%5.1f C sind %5.1f F\n", c, f); } return 1;}</p></li><li><p>Prof. Dr. Nikolaus Wulff Programmieren in C 17</p><p>Syntax der for-Schleife Die for-Schleife besteht aus drei Teilen:</p><p> der Initialisierung, z.B. i=0</p><p> der Abbruchbedingung, z.B. i &lt; 10</p><p> der Inkre- oder Dekrementierung, z.B. i = i+1</p><p> Die Teile werden unterschiedlich hufig ausgewertet: wird einmal am Schleifenanfang bewertet</p><p> wird vor jeder Wiederholung bewertet</p><p> wird nach jeder Wiederholung bewertet</p><p>for( ; ; ) statement;</p></li><li><p>Prof. Dr. Nikolaus Wulff Programmieren in C 18</p><p>Fallstricke bei Schleifen</p><p> Wird die Kombination aus Schleifenbewertung und -inkrementierung falsch programmiert, kann es zu schweren Fehlverhalten kommen.</p><p> Dies passiert hufig dann wenn die Abbruchbe-dingung nicht erreicht wird:</p><p> Dieses Programm luft in einer Endlosschleife...</p><p> for(c = 0; c &lt; 100; c = c - 10) { /* loop for ever */ f = 9.0/5.0*c + 32.0; printf("%5.1f = %5.1f F\n", c, f); }</p></li><li><p>Prof. Dr. Nikolaus Wulff Programmieren in C 19</p><p>Rckwrts Zhlen</p><p> Um rckwrts zu Zhlen mssen die Start- und die Abbruchbedingung der Schleife entsprechend angepasst werden.</p><p> Z.B. Start=100 C, Ende =0 C und dann in Schritten von 10C rckwrts:</p><p> Nun terminiert das Programm wie gewnscht.</p><p> for(c = 100; c &gt;= 0; c = c - 10) { /* decrement by 10 */ f = 9.0/5.0*c + 32.0; printf("%5.1f = %5.1f F\n", c, f); }</p></li></ul>

Recommended

View more >