Programmiersprache C Teil 1



Ähnliche Dokumente
Die Programmiersprache C

FH München, FB 03 FA WS 06/07. Ingenieurinformatik. Name Vorname Matrikelnummer Sem.Gr.: Hörsaal Platz

Dr. Monika Meiler. Inhalt

Die Programmiersprache C

Klausur. 2. Aufgabe (3 Punkte) Ergänzen Sie die leeren Zellen derart, dass sich in einer Zeile die selben Zahlenwerte ergeben.

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Grundlagen der Programmierung

4. Einfache Programmstrukturen in C Einfache Programmstrukturen in C

Kapitel 2. Einfache Beispielprogramme

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

Peter Prinz. Das Übungsbuch. CTestfragen und Aufgaben mit Lösungen

Unterlagen. CPP-Uebungen-08/

GI Vektoren

4.2 Programmiersprache C

Java I Vorlesung Imperatives Programmieren

C- Kurs 03 Ausdrücke und Operatoren

4.2 Gleitkommazahlen. Der Speicherbedarf (in Bits) ist üblicherweise. In vielen Anwendungen benötigt man gebrochene Werte. Physikalische Größen

2. Programmierung in C

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 2

Einführung in die Programmierung mit VBA

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

PIC16 Programmierung in HITECH-C

Einführung in die Programmiersprache C

Hello World! Eine Einführung in das Programmieren Variablen

+ C - Formatierte Eingabe mit scanf()

Programmiersprachen Einführung in C

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Kapitel 5. Datentypen und Operatoren

Schleifenanweisungen

Propädeutikum. Dipl.-Inf. Frank Güttler M. Sc. Stephan Fischer

2 Programmieren in Java I noch ohne Nachbearbeitung

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

Grundlagen der Programmierung

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Grundlagen der Programmierung

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Variablen. CoMa-Übung VIII TU Berlin. CoMa-Übung VIII (TU Berlin) Variablen / 15

2. Aufgabe (3 Punkte) Ergänzen Sie die leeren Zellen derart, dass sich in einer Zeile die selben Zahlenwerte ergeben.

Die Programmiersprache C Eine Einführung

Grundlagen der Informatik 2. Typen

Übungen zur Vorlesung Wissenschaftliches Rechnen I

Modul Entscheidungsunterstützung in der Logistik. Einführung in die Programmierung mit C++ Übung 1

Grundlagen der Programmierung

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen

4 Formelsammlung C/C++

Pseudo-Programmiersprache

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15

Vorkurs Informatik WiSe 16/17

Projekt 3 Variablen und Operatoren

Physische Datenstrukturen

Sprachkonstrukte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Programmieren in C (Übungsblatt 1)

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

Operatoren und Ausdrücke

Informatik. Wiederholung Felder (Arrays), string. Vorlesung

Programmieren in C (Übungsblatt 1)

JAVA-Datentypen und deren Wertebereich

Herzlich willkommen!

Die Sprache C# Datentypen, Speicherverwaltung Grundelemente der Sprache. Dr. Beatrice Amrhein

Programmieren in C (Übungsblatt 1)

Objekte werden eindeutig beschrieben durch ihren Typ und einen beliebig wählbaren Bezeichner.

Einführung in die C-Programmierung

Kapitel 1. Grundlagen

Wiederholung, Abbruch von Schleifen, switch-anweisung Datentypen, char, formatierte Ausgabe

Operatoren (1) Operatoren (2)

Angewandte Mathematik und Programmierung

C-Programmierung: Ausdrücke und Operatoren#Division.2F

1.6 Programmstrukturen/Abweisende Schleife

Informatik Vorkurs - Vorlesung 2

Gedächtnis. Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet. Zugriff.

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Viel Erfolg bei der Bearbeitung der Aufgaben!

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Einführung in C. EDV1-04C-Einführung 1

Grundlagen der Informatik Ergänzungen WS 2007/2008 Prof. Dr. Rainer Lütticke

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

Wertebereich und Genauigkeit der Zahlendarstellung

2. Datentypen und Deklarationen

Probeklausur Name: (c)

Algorithmen zur Datenanalyse in C++

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Datentypen und Operatoren Ganzzahlige Numerische Datentypen Logischer Datentyp

Transkript:

Programmiersprache C Teil 1 Die Programmiersprache C wurde 1972 von Dennis M. Ritchie in den Bell Laboratories (USA) entwickelt. Als Vorgänger von C galt die System-Programmiersprache B oder BCPL (Basic Combined Programming Language). Daher der Name C. C++ ist die objektorientierte Erweiterung von C. Charakteristische Eigenschaften: maschinennah : C ist eine Hochsprache, in der Elemente höherer Programmiersprachen (wie Prozeduren, Blöcke, Schleifen und Datentypen etc. ) mit Assembler-ähnlichen Konstrukten(z. B. Inkrement- und Dekrement-Operatoren) vereinigt sind. portable: C zeichnet sich durch eine weitgehend maschinenunabhängige Programmierung aus. universell : In C werden Datenbankprogramme, Kalkulationsprogramme sowie Grafik-Applikationen geschrieben. C-Syntax: Grammatik der Programmiersprache C Der Programmtext wird nach genau festgelegten Regeln formuliert. Diese Regeln sind durch die Grammatik einer Programmiersprache festgelegt. C-Compiler: Softwareprogramm zur Übersetzung des in C geschriebenen Programmcodes in Maschinenbefehle, die der Prozessor des Rechners unmittelbar ausführen kann. Erstellen und Übersetzen von C-Programmen 1. Anhand eines Texteditors wird der Quellcode in einer Quelldatei mit der Endung.c abgelegt. 2. Die Quelldatei wird dem Compiler zur Übersetzung gegeben. Geht alles gut, so erhält man eine Objektdatei (gleicher Dateiname mit Endung.obj), die den Maschinencode enthält. 3. Schließlich bindet der Linker eine oder mehrere Objektdateien (mit Hilfe des Makefile) mit Funktionen der Standardbibliothek oder selbst erstellten schon früher übersetzten Programmteilen (aus dem Projekt) zu einer ausführbaren Datei mit der Endung.exe. IDE ( integrated development environment ): Moderne Compiler bieten eine integrierte Entwicklungsumgebung, welche die obigen drei Schritte zusammenfasst. Von einer gemeinsamen Benutzeroberfläche aus wird das Programm editiert, kompiliert, gelinkt und ausgeführt (www.lcc.com). Dr.-Ing. K. Jäger-Hezel, 10.11.2006 1

Editor Quelldatei c Compiler Header-Datei.h Objektdatei..obj Benutzer-Bibliotheken Linker Standardbibliotheken Ausführbare Datei exe Struktur von C-Programmen Beispiel: C-Programm Hello world #include <stdio.h> int main() Typ Funktionsname Beginn der Funktion printf( \nhello world!\n ); return 0; Rückgabe des integer Wertes 0 Ende der Funktion Ausgabe: Hello world! Dr.-Ing. K. Jäger-Hezel, 10.11.2006 2

Ein C-Programm besteht aus einzelnen Funktionen, die sich gegenseitig aufrufen. Die Funktion main() hat eine besondere Rolle. Sie bildet das Hauptprogramm und muss daher in jedem C-Programm vorhanden sein. Jede andere Funktion entspricht einem Unterprogramm. Die main()-funktion unterscheidet sich abgesehen vom feststehenden Namen - nicht von der Struktur anderer Funktionen. Die Programmausführung beginnt mit der ersten Anweisung in der Funktion main(). Die Anweisung #include ist für den Preprocessor bestimmt, der die sog. Header-Dateien (z. B. stdio.h) an diese Stelle in den Quellcode kopiert. Dadurch stehen dem Programm alle Definitionen von Funktionen zur Verfügung, die in den Header-Dateien enthalten sind. Der Funktionsblock im Programmbeispiel Hello world enthält zwei Anweisungen. Mit printf wird der Text auf dem Bildschirm ausgegeben. Das Steuerzeichen \n löst einen Zeilenvorschub aus. Die zweite Anweisung return 0; beendet die die Funktion main() und damit das Programm. Dabei wird der Wert 0 dem aufrufenden Programm als Exit-Code zurückgegeben. Jede Anweisung wird in C mit einem Semikolon beendet. Beispiel: C-Programm für Multiplikation zweier Ganzzahlen #include <stdio.h> /*Multiplication zweier Ganzzahlen*/ int main() int a; int b; int erg; a = 3; b = 4 ; erg = a*b; printf( \nergebnis: %d, erg); return 0; Jede Zeichenfolge, die das Zeichenpaar /*.. */ einschließt, ist Kommentar und wird vom Compiler ignoriert. Dr.-Ing. K. Jäger-Hezel, 10.11.2006 3

Definition von Variablen Variablennamen Variablen und Funktionen werden im Programm über Namen angesprochen. Für die Bildung von Namen gelten folgende Regeln: Folge von Buchstaben, Ziffern oder Unterstrichen (_). Deutsche Umlaute und der Buchstabe ß sind nicht zulässig. Groß- und Kleinbuchstaben werden unterschieden ( case sensitiv ). Das erste Zeichen muss ein Buchstabe oder ein Unterstrich sein. Ein Name kann beliebig lang sein. (Signifikant sind nach ANSI-Standard nur die ersten 31 Zeichen.) Schlüsselwörter (z.b. float, int, long etc.) dürfen nicht als Name benutzt werden. Datentypen In C gibt es zwei Gruppen von elementaren Datentypen: Ganzzahlen und Gleitpunktzahlen Ganzzahlen: Typ Speicherplatz Wertebereich (unsigned) char 1Byte 0 bis 255 signed char 1Byte -128 bis +127 (signed) short 2Byte -32768 bis 32767 unsigned short 2Byte 0 bis 65535 (signed) int 4Byte -2147483648 bis 2147483648 unsigned int 4Byte 0 bis 4294967295 (signed) long 4Byte unsigned long Ganzzahlige Datentypen haben die Schlüsselworte signed (mit Vorzeichen) und unsigned (ohne Vorzeichen). Die Größe des benötigten Speicherplatz bleibt dabei erhalten. Nur der Wertebereich ändert sich, da bei signed-werten das höchste Bit das Vorzeichen bestimmt. Die Datentypen short, int und long werden standardmäßig mit Vorzeichen interpretiert, der Typ char standardgemäß ohne Vorzeichen. C unterscheidet nicht zwischen Zeichen und Ganzzahl, da Zeichen intern als Ganzzahlen dargestellt werden, und zwar im Zeichencode der Maschine (ASCII-Code). Gleitpunktzahlen: Typ Speicherplatz Genauigkeit Wertebereich (dezimal) float 4Byte 9 Stellen 1.2E-38 bis 3.4E+38 double 8Byte 15 Stellen 2.3E-308 bis 1.7E+308 long double 10Byte 19 Stellen 3.4E-4932 bis 1.1E+4932 Dr.-Ing. K. Jäger-Hezel, 10.11.2006 4

Zur Darstellung der Gleitpunktzahlen wird üblicherweise das IEEE-Format verwendet: Beispiel: float mit 32 Bit Vorzeich. Exponent zur Basis 2 Mantisse 31 30.. 24 23 0 Die Mantisse hat einen Wert der größer oder gleich 1 und kleiner 2 ist. Der reservierte Speicherplatz für die Mantissse bestimmt die Genauigkeit, der für den Exponenten den Wertebereich. Beispiel: normalisierte Form -4.5 = -1 * 1.125 * 2 2 Die Genauigkeit gibt an, wie viel Dezimalstellen einer Zahl gespeichert werden können. Zum Beispiel bedeutet 9 Stellen genau, dass die 10. Dezimalstelle nicht mehr genau gespeichert werden kann. So sind die Zahlen 1234567.89 und 1234567.897 nicht unterscheidbar, ebenso nicht 0.000123456789 und 0.0001234567897. Beim lcc-compiler hat der Datentyp float eine 24 Bit lange Mantisse. (vgl. Header-Datei float.h). Wertzuweisung Die Zuweisung eines Wertes erfolgt immer von rechts nach links. Beispiel: a = 5; Funktion printf Die Funktion printf dient zur Ausgabe am Bildschirm. Die in der Klammer enthaltene Zeichenkette wird ausgegeben. Die darin enthaltenen Formatelemente (sog. Formatierer) werden durch die Werte der Argumente nach dem Komma ersetzt. Beispiel: printf( Hello world! ); Ausgabe: Hello world! Dr.-Ing. K. Jäger-Hezel, 10.11.2006 5

Bildschirmausgabe mit Anführungszeichen: printf( \ Text\ ); Ausgabe: Text Formatierer: %d Ausgabe als Dezimalzahl %f Ausgabe als Gleitkommazahl mit einfacher Genauigkeit float %lf Ausgabe als Gleitkomma mit doppelter Genauigkeit double %c Ausgabe als Zeichen %s Ausgabe einer Zeichenkette Beispiel: printf( %d %f, 333,1.234); Ausgabe: 333 1.234000 Feldbreite: bedeutet: minimale Ausgabelänge (bzw. Feldlänge), schneidet nicht ab. printf( %2d, 123); printf( %2d,1); printf( %f, 9.8765); printf( %4.2f, 9.8765); Ausgabe:123 Ausgabe:_1 Ausgabe:9.876500 Ausgabe: _9.88 Ausgabe linksbündig/rechtsbündig: printf( rechtsbündig:%5d linksbündig: %-5d, 123,123); Ausgabe: rechtsbündig: 123 linksbündig: 123 Funktion scanf Funktion zur Eingabe von Daten. Die Zeichen werden von der Standardeingabe (Tastaturpuffer) gelesen, gemäß Formatierer konvertiert und der konvertierte Wert wird in der Variablen gespeichert, die durch das Argument adressiert wird. Beispiel: int a; scanf( %d, &a); Dr.-Ing. K. Jäger-Hezel, 10.11.2006 6

& ist Adressoperator, d.h. &a liefert die Adresse der Variablen a (Zeiger (pointer) auf die Variable a). Für jedes Formatelement wird das nächste Eingabefeld eingelesen, konvertiert und in die entsprechende Variable abgelegt. Eingabefelder sind durch Zwischenraumzeichen (Leer, Tabulator- und Newline-Zeichen) voneinander getrennt. Beispiel: int a = 0; int b = 0; printf( Bitte zwei Integer-Zahlen eingeben! ); scanf( %d%d,&a,&b); fflush(stdin); Eingabe: 1 2 enter Inhalt: a=1 b=2 1 enter 2 enter a=1 b=2 12 enter a = 12 b=0 scanf wartet auf weitere Eingabe! Wichtiger Hinweis: Um Fehler beim Einlesen zu Vermeiden, empfiehlt es sich, nach der scanf-funktion die Anweisung fflush(stdin) durchzuführen. Dadurch wird der Tastaturpuffer gelöscht. Rückgabewert der scanf-funktion: Die scanf-funktion gibt einen Wert zurück, der die Anzahl der tatsächlich eingelesenen (und konvertierten) Werte (bzw. Eingabefelder) angibt. Daran kann erkannt werden, ob die Eingabe erfolgreich war. Beispiel: int a,b,ret; do printf( \nzwei Ganzzahlen eingeben! ) ; ret = scanf( %d%d, &a,&b); fflush(stdin); while(ret!= 2); Dr.-Ing. K. Jäger-Hezel, 10.11.2006 7

do while Schleife Struktogramm: Anweisung Solange (Ausdruck wahr ist) fußgesteuerte ( nicht abweisende ) Schleife C-Anweisung: do.... while( <Bedingung>); while Schleife Struktogramm: Solange (Ausdruck wahr ist) Anweisung kopfgesteuerte ( abweisende ) Schleife C-Anweisung: while ( <Bedingung>).... Dr.-Ing. K. Jäger-Hezel, 10.11.2006 8

Übung: Prüfung von Benutzereingaben Beispiel Copy-Shop: Die eingegebene Anzahl der Kopien soll geprüft werden. Def. und Initialisierung der Variablen zahl Auff. Anzahl Kopien eingeben Einlesen nach zahl Solange zahl <1 Ausgabe: Sie haben korrekt eingegeben. Ausgabe: Das Programm ist beendet /*Datum*/ /*Thema*/ /*Name*/ #include <stdio.h> int main() int zahl = 0; do printf( Bitte geben Sie die Anzahl der Kopien ein! ); scanf( %d,&zahl); fflush(stdin); /*Löschen des Eingabepuffers*/ while( zahl <1); printf( Sie haben korrekt eingegeben!\n ); printf( Das Programm ist beendet. ); return 0; Dr.-Ing. K. Jäger-Hezel, 10.11.2006 9

Verzweigung mit if.else Anweisung if(bedingung) Anw. 1;. else Anw. 2;. ja. Bed. nein Anw.1 Anw.2 Arithmetische Typenumwandlung In C ist es möglich, die arithmetischen Datentypen zu mischen. Das bedeutet, dass die Operanden einer arithmetischen Operation verschiedene Datentypen haben können. Der Compiler nimmt dann automatisch eine implizite Typanpassung vor. Dabei gilt generell, dass der Datentyp mit dem kleineren Wertebereich in den Datentyp mit dem größeren Wertebereich umgewandelt wird, damit der Wert erhalten bleibt. Mit dem Cast-Operator kann der Datentyp explizit geändert werden. Problem: Bei der Division zweier Ganzzahlen können Brüche entstehen. int a,b,c; a = 4; b = 3; c = a/b; /*Ergebnis: Inhalt von c ist 1, da der Rest verworfen wird. */ Dr.-Ing. K. Jäger-Hezel, 10.11.2006 10

Lösung: Das Ergebnis einer Gleitpunktzahl zuordnen. int a,b; a = 4; b = 3; float erg; erg = a/b; /*Ergebnis: Inhalt von erg ist 1.000000 */ 2 Lösungmöglichkeiten: implizite Typumwandlung: erg = 1.0 * a/b; /* Inhalt von erg ist 1.333333*/ oder: explizite Typumwandlung mit dem Cast-Operator: erg = (float) a/b; /* Inhalt von erg ist 1.333333*/ Cast-Operator Übung: Copy-Shop Anzahl der Kopien eingeben (Eingabe > 0) Abfangen fehlerhafter Benutzereingaben Meldung, wenn Falscheingabe Preis pro Kopie definieren (50 Cent pro Kopie) Gesamtpreis in Cent ausgeben Gesamtpreis in Euro ausgeben Dr.-Ing. K. Jäger-Hezel, 10.11.2006 11

Init. und Def. int zahl = 0 Init und Def. int preis = 50 Aufforderung Kopierzahl eingeben Einlesen in zahl zahl < 1 ja nein Sie haben falsch eingegeben! Kopierzahl wird übernommen! Solange (zahl <1) preis = preis * zahl Ausgabe von preis in Einheit Cent Ausgabe von preis/100 in Einheit Euro Ausgabe Programm ist beendet! Dr.-Ing. K. Jäger-Hezel, 10.11.2006 12

C-Code: /*Datum*/ /*Thema*/ /*Name*/ #include <stdio.h> int main() int zahl = 0; int preis = 50; /* Preis in Cent */ do printf( Bitte geben Sie die Anzahl der Kopien ein: ); scanf( %d,&zahl); fflush(stdin); /*Löschen des Eingabepuffers*/ if(zahl<1) printf( \nsie haben falsch eingegeben! ); else printf( \nkopierzahl %d wird übernommen!, zahl); while( zahl <1); preis = preis *zahl; printf( Gesamtpreis in Cent: %d\n, preis); printf( Gesamtpreis in Euro: %5.2f\n, (float)preis/100); printf( Das Programm ist beendet! ); return 0; Formatelement %5.2f bedeutet: 5 ist die minimale Feldbreite bzw. Ausgabelänge (ohne Dezimalpunkt) und 2 die Anzahl der Stellen hinter dem Dezimalpunkt. Beispiele: float y = 2.98765; printf( >%10f<\n,y); Ausgabe : > 2.987650< printf( >%-10f<\n,y); >2.987650 < linksbündig printf( >%10.2f<\n,y); > 2.99< Dr.-Ing. K. Jäger-Hezel, 10.11.2006 13

Funktion pow() power berechnet die Potenz x y. Ist als Funktion in der Header-Datei math.h definiert. Bei Verwendung der Funktion muß entweder die Header-Datei math.h includiert werden mit #include <math.h> oder deren Prototyp muss vor Gebrauch definiert sein mit: double pow(double, double); /*Prototyp von pow()*/ Return-Wert Übergabe-Werte oder Argumente oder Parameter, die an die Funktion übergeben werden ANSI-Standard: Der Prototyp einer Funktion besteht aus 3 Teilen: Datentyp der Rückgabe-Werts Name der Funktion Datentypen der Parameter, die an die Funktion übergeben werden Beispiel: Berechnung der Wurzel aus 77 sowie 77 2. /*Datum*/ /*Thema*/ /*Name*/ #include <stdio.h> double pow(double, double); /*Prototyp*/ int main() double x = 77, y ; y = pow(x, 0.5) ; /*Wurzel aus 77*/ printf( Wurzel aus 77 ergibt: %.3f\n, y) ; printf( 77 hoch 2 ergibt: %.3f\n, pow(x, 2.0)) ; return 0; Dr.-Ing. K. Jäger-Hezel, 10.11.2006 14

Funktion sqrt() Funktion sqrt(x) ( square root ), berechnet die Quadratwurzel des Arguments x. Der Wert x darf nicht negativ sein. Die Funktion gibt den Wert der Quadratwurzel zurück, wenn die Berechnung korrekt ist. Falls das Argument x negativ ist, so wird 0 zurückgegeben. Der Prototyp von sqrt() ist in math.h enthalten: double sqrt(double); Übung: Gegeben: double st = 16; double erg; Gesucht ist die Quadratwurzel der Variablen st, berechnet mit der Funktion pow() und der Funktion sqrt(). Ergebnis nach erg. Nur C-Code. #include <stdio.h> #include <math.h> int main() double st = 16; double erg; erg = pow(st, 0.5); printf( Ergebnis von pow(): %10.4lf\n, erg); printf( Ergebnis von sqrt(): %10.4lf\n, sqrt(st)); return 0; Dr.-Ing. K. Jäger-Hezel, 10.11.2006 15

modulo -Funktion Während bei der Division zweier Ganzzahlen der Rest verworfen wird, ist das Ergebnis der modulo -Funktion genau dieser Rest. C- Code: % Division von Ganzzahlen - verwirft Ergebnis und liefert den Rest! Beispiele: 7%6 = 1 sprich: 7 modulo 6 9%3 = 0 3%9 = 3 4%9=4.. 9%9=0 10%9=1 3728%2 = 0 Zahl ist gerade 2555551%2 =1 Zahl ist ungerade Übung: Frage nach ganzer Zahl. Überprüfe, ob die Zahl durch 5 teilbar ist. Wenn ja, Ausgabe Zahl durch 5 teilbar. Wenn nicht, gibt Text nicht teilbar! aus und gib die nächst kleinere Zahl, die durch 5 teilbar ist, aus. Struktogramm und C-Code Dr.-Ing. K. Jäger-Hezel, 10.11.2006 16

Auff. Bitte eine ganze positive Zahl eingeben! Einlesen nach int zahl ja zahl durch 5 teilbar? nein Ausgabe: Zahl ist durch 5 teilbar! Ausgabe: Zahl ist nicht teilbar! zahl = zahl -1 Solange (zahl >0 und nicht teilbar durch 5) ja zahl > 0 nein Richtig wäre gewesen: zahl ersetzen (zahl > 0) && ( zahl!= zahl (zahl modulo 5)) Dr.-Ing. K. Jäger-Hezel, 10.11.2006 17

C-Code: #include <stdio.h> int main() int zahl = 0; printf( Bitte ganze positive Zahl eingeben!\n ); do scanf( %d, &zahl); fflush(stdin); while (zahl <=0); int rest= zahl %5; if(rest == 0 ) /*Vergleichsoperator identisch gleich */ printf( Zahl ist durch 5 teilbar.\n ); else printf( Zahl ist nicht durch 5 teilbar!\n ); do zahl = zahl -1; rest = zahl%5; while(zahl >0 && rest >0); if(zahl>0) printf( Richtig wäre gewesen: %d\n, zahl); return 0; Ersatz-Code für do..while: do zahl--; while( zahl>0 && zahl!= zahl - (zahl%5)); Dr.-Ing. K. Jäger-Hezel, 10.11.2006 18

Logische Operatoren Mit logischen Operatoren werden zusammengesetzte Bedingungen formuliert. C-Code ODER binärer Operatoren (Bedingung1 Bedingung2) UND && && NOT! unärer Operator!(Bedingung) In C liefert ein logischer Ausdruck als Ergebnis: entweder falsch, d.h. den int Wert 0 oder wahr d.h. den int Wert 1 Wahrheitstabellen: AND: OR: Bed.1 w w f f w w f f Bed.2 w f w f w f w f Erg. w f f f w w w f NOT: f w w f Beispiele für logische Ausdrücke: x y Logischer Ausdruck Ergebnis 1-1 x <= y y >= 0 0 (falsch) 0 0 x> -5 && y == 0 1 (wahr) 1 0 x == 1 &&!y 1 (wahr) 0 1!(x+1) (y-2) >0 0 (falsch) Dr.-Ing. K. Jäger-Hezel, 10.11.2006 19

Übung: Fordere eine ganze positive Zahl an, prüfe die Eingabe und gibt die Quersumme dieser Zahl aus. Struktogramm und C-Code Auff. Ganze positive Zahl eingeben! Einlesen der zahl und Prüfung der Eingabe int sum =0, int rest =0 rest = zahl % 10; sum = sum + rest; zahl = zahl /10 Solange (zahl > 0) Ausgabe Quersumme sum #include <stdio.h> int main() int zahl = 0, sum =0; do printf( Bitte eine positive ganze Zahl eingeben!\n ); scanf( %d, &zahl); fflush(stdin); while( zahl <= 0); do sum = sum + zahl %10; zahl = zahl/10; while (zahl > 0); printf( \nquersumme: %d, sum); return 0; Dr.-Ing. K. Jäger-Hezel, 10.11.2006 20

Zählschleife ( for -Schleife) Index mit festem Anfangswert festem Endwert Erhöhung um festen Wert pro Schleifenumlauf Struktogramm solange( i <= 10 ) Aktionen i = i+1 C- Code for( int i = 1; i<=10; i = i+1) oder for(int i =1; i<=10; i++).. Inkrement-Dekrement-Operator Unärer Operator, der den Wert um 1 erhöht bzw. erniedrigt. i++; entspricht i = i+1; i wird um 1 erhöht. i--; entspricht i = i -1; i wird um 1 erniedrigt Schreibweise ist in for-schleifen üblich: for( s= 1; s<=10; s++) Man unterscheidet zwischen Postfix und Präfix: Postfix: j = i++; bedeutet: j = i; i = i+1; Zuerst wird der Wert von i dem Wert von j zugeordnet und dann wird i um 1 erhöht. Dr.-Ing. K. Jäger-Hezel, 10.11.2006 21

Präfix: j = ++i; bedeutet: i = i+1; j = i; Zuerst wird i um 1 erhöht und dann sein Wert dem Wert von j zugeordnet. Beispiel: int i,j; i = 1; j = ++i +1; /* i = 2, j = 3 */ i wird um 1 erhöht, bevor es im Ausdruck verwendet wird. i = 1; j = i++ +1; /* i = 2, j = 2 */ i wird um 1 erhöht, nachdem es im Ausdruck verwendet wird. Übung: Geben Sie eine Multiplikationstabelle von 1 bis 10 am Bildschirm aus. 1 2 3 4 5 6 7 8 9 10 1 1 2 3 4 5 6 7 8 9 10 2 2 4 6 8 10 12 14 16 18 20 3 3 6 9 12 15 18 21 24 27 30 4 5 6 7 8 9 10 10 20 30 40 50 60 70 80 90 100 Hilfestellung: 2 ineinander geschachtelte for-schleifen Dr.-Ing. K. Jäger-Hezel, 10.11.2006 22

Ausgabe Kopfzeile mit Tabulator-Zeichen Int Variablen Zeile = 1; spalte = 1; erg = 0; Solange zeile <=10 Ausgabe Zeilennummer zeile Solange spalte <=10 Erg = zeile * spalte Ausgabe: \t erg Zeile = zeile +1 Spalte = spalte +1 #include <stdio.h> int main() printf( \n\t1\t2\t3\t4\t5\t6\t7\t8\t9\t10 ); int z = 0, s = 0; int erg = 0; for( z = 1; z<=10;z++) printf( \n%d, z); for( s= 1; s<=10; s++) erg = z*s; printf( \t%d,erg); return 0; Dr.-Ing. K. Jäger-Hezel, 10.11.2006 23