4. Ein-/ Ausgabe, Ausdrücke
Transcription
4. Ein-/ Ausgabe, Ausdrücke
Institut für Informatik LV "Grundlagen der Informatik" Übungsaufgaben zu Programmierung in C (Teil 1) Aufgabenkomplex: Programmieren in C (Teil 1 von 2) (Ein-/Ausgabe, Ausdrücke, Steueranweisungen) Hinweise: - Alle mit * gekennzeichneten Aufgaben sind zum zusätzlichen Üben gedacht. - Die Studentinnen und Studenten der Studiengänge MB und KGB müssen gemäß den Prüfungsplänen der entsprechenden Fakultäten einen Beleg anfertigen und vor dem Übungsleiter verteidigen, um zur Prüfung (Klausur) zugelassen zu werden. Die Belegaufgaben sowie Hinweise dazu finden Sie unter: Y:\Lehre\LV_Gr_d_Inf_WS0304 \Belegaufgaben (Rammler-Bau) bzw. L:\Lehre \LV_Gr_d_Inf_WS0304\Belegaufgaben (Weisbach-Bau). Freeware-C-Compiler lccwin32 für Ihren privaten PC In der Übung verwenden wir den C-Compiler der Entwicklungsumgebung Microsoft Visual C++. Dieses kommerzielle System können wir Ihnen leider nicht kostenfrei zur Verfügung stellen. Stattdessen können wir Ihnen den C-Compiler (Freeware) lccwin32 anbieten, falls Sie auf Ihrem privaten PC einen C-Compiler installieren möchten. lccwin32 ist ein hervorragender C-Compiler mit integrierter Entwicklungsumgebung, mit dem Sie alle CÜbungsaufgaben zu Hause vorbereiten können. Für die Entwicklung von C-Programmen ergeben sich vom Bedienungskomfort her keine Abstriche gegenüber Visual C++. (Im PCPool Rammler-Bau ist lccwin32 installiert.) Sie finden die benötigten Installationsfiles im Verzeichnis Y:\Lehre\C-Compiler_ lccwin32_Freeware (Rammler-Bau) bzw. L:\C-Compiler_lccwin32_Freeware (WeisbachBau). Nähere Einzelheiten zur einfachen Installation erfahren Sie im File ReadMeFirst_lccwin32.txt in diesem Verzeichnis. Zur Entwicklung von C-Programmen mit Visual C++ Die Arbeitsweise mit der Entwicklungsumgebung Visual C++ wird im Word-File Y:\Lehre\Prog_C\c_entw.doc bzw. L:\Prog_C\c_entw.doc erläutert. Studieren Sie die Vorgehensweise bei der Programmentwicklung in C anhand dieses Dokuments. Der Compiler zeigt Ihnen nur die syntaktischen Fehler an (und nicht die logischen Fehler). Überprüfen Sie deshalb stets die Korrektheit Ihres Programmes durch Programmtests mit sinnvoll gewählten Test-Eingabewerten und im voraus bekannten korrekten Ausgaben. Alle kritischen Zweige Ihres Programms sollten dabei durchlaufen werden. 1. 1.1 Ein-/Ausgabe in C Das erste Programm: Hello, world! Schreiben Sie zu Beginn - wie weltweit in jedem Programmierkurs üblich - ein C-Programm, das die konstante Zeichenkette "Hello, world!" auf dem Bildschirm ausgibt. - Speichern Sie den Quelltext in Ihrem Homeverzeichnis Z:\Eigene Dateien bzw. W:\ mit beliebigem Namen und dem Typ .c von C-Quelltexten ab (und nicht mit dem Typ .cpp von C++ - Quelltexten). - Compilieren und verbinden Sie das Programm (Menü: Project/Build). - Führen Sie es aus (Build/Execute). - Vergessen Sie nicht, am Ende der Arbeit mit diesem (und jedem!!) Programm den Workspace durch File/Close Workspace zu schließen. 1 Institut für Informatik LV "Grundlagen der Informatik" 1.2 Übungsaufgaben zu Programmierung in C (Teil 1) Volumen und Oberfläche einer Kugel (vgl. Aufgabenkomplex Struktogramme, Aufg. 2) Schreiben Sie ein C-Programm, das Volumen und Oberfläche einer Kugel berechnet - Das Programm soll die Antwort in einem ganzen Satz geben, z.B.: Die Kugel mit dem Radius 2 hat das Volumen 33.51 und die Oberflaeche 50.27. - Schreiben Sie den Programmtext, weiter siehe 1.1 *1.3 Konvertierung von Währungen Schreiben Sie ein C-Programm für die Konvertierung zwischen zwei Währungen (vgl. Aufgabenkomplex Struktogramme, Aufg. 3) - Eingabe der Währungsbezeichnungen und des Wechselkurses - Eingabe des Betrages in einer Währung - Subtraktion der Tauschgebühr von 0,5% - Ausgabe des berechneten Betrages. 2. 2.1 Arithmetische und logische Ausdrücke in C-Programmen Arithmetische Ausdrücke In einem C-Programm sollen arithmetische Ausdrücke berechnet werden. Die Variablen a, b, c, d und e sind vom Typ int, die Variablen r, x und y vom Typ double. Hinweis: Sie können das Programmfragment Y:\Lehre\Prog_C\arith_ausdr_fr.c bzw. L:\Prog_C\arith_ausdr_fr.c nutzen. a) r= a + b − 2c +c y b) r= a + b − 2c +c d c) r= a+b sin(2 x) + a (c − d ) |c−d |e d) cos 2 (4 x) + sin(2 x) + 8 r = 1+ |c−e| e) r = ( a + b) 7 ,3 f) r = 10 x 2 − ln 5 x - Geben Sie die Resultatwerte r für die Teilaufgaben a) bis f) aus. - Zur Kontrolle hier die Ergebnisse: Für a=1, b=2, c=3, d=4, e=5, x=0.25, y=4.0 nimmt r folgende Werte an: a) 2.25 b) 3 c) -0.712345 d) 5.38568 e) 3040.78 f) -6.24011 2 Institut für Informatik LV "Grundlagen der Informatik" 2.2 Übungsaufgaben zu Programmierung in C (Teil 1) Logische Ausdrücke Testen Sie in einem C-Programm durch Berechnung von logischen Ausdrücken und entsprechender Ausgabe, ob: a) ein einzulesender x-Wert im Bereich -3 ... + 7.5 liegt, und welchen Wert eine Variable annimmt, der dieser Vergleichsausdruck zugewiesen wird *b) ein Punkt (gegeben durch seine reellen Koordinaten x, y) innerhalb des Einheitskreises liegt *c) ein Bildpunkt innerhalb eines definierten Fensters mit den Eckpunkten x1,y1 und x2,y2 liegt. Hinweis: Sie können das Programmfragment Y:\Lehre\Prog_C\log_ausdr_fr.c bzw. L:\Prog_C\log_ausdr_fr.c nutzen. 3. Steueranweisungen (Selektion und Schleifen) in C 3.1 Schreiben Sie ein C-Programm zur Bestimmung des Wertes folgender Maxima: (vgl. Aufgabenkomplex Struktogramme, Aufg. 5): a) Es seien zwei reelle Zahlen einzugeben. Bestimmen Sie den Wert eines Maximums durch einfache Selektion. b) Bestimmen Sie den Wert eines Maximums dreier beliebiger reeller Zahlen durch geschachtelte Selektion. *3.2 Lösung der quadratischen Gleichung x² + px + q = 0 (vgl. Aufgabenkomplex Struktogramme, Aufg. 6) Schreiben Sie ein C-Programm für die Lösung einer quadratische Gleichung x² + px + q = 0 (reelle bzw. komplexe Lösungen): - Wertzuweisung an p und q durch Eingabe - Fallunterscheidung (Wert der Diskriminante) - Ergebnisausgabe 3 Institut für Informatik LV "Grundlagen der Informatik" 3.3 Übungsaufgaben zu Programmierung in C (Teil 1) C-Programm für die Berechnung des Wertes einer Funktion mit versch. Definitionsbereichen (vgl. Aufgabenkomplex Struktogramme, Aufg. 9): - Eine Funktion y=f(x) sei definiert durch - Ein beliebiger Argumentwert x soll eingelesen, sein Funktionswert y(x) berechnet und die Werte x und y ausgegeben werden. 3.4 „Minicomputer“ (vgl. Aufgabenkomplex Struktogramme, Aufg. 12) Schreiben Sie ein C-Programm für die Nachbildung eines "Minicomputers", der einfache arithmetische Ausdrücke der Form <operand_1> <operator> <operand_2> berechnet. - Einzugeben sind: operand_1, operator, operand_2 . Beachten Sie beim Einlesen, dass %c Trennzeichen nicht überliest. - Zugelassene Operatoren: + Addition Subtraktion Multiplikation * oder . / oder : Division Bei Division durch Null bzw. unzulässigem Operator ist eine Fehlerausschrift auszugeben. Die Ergebnisausgabe soll im Programm nur einmal erfolgen. 3.5 Summe von n beliebigen Zahlen mit zwei verschiedenen Datenmodellen (vgl. Aufgabenkomplex Struktogramme, Aufg. 7.a)b) Programmieren Sie die Berechnung der Summe von n beliebigen reellen Zahlen. Die Anzahl n der Zahlen sei dem Nutzer bekannt und kann somit eingelesen werden. a) Legen Sie zunächst folgendes Datenmodell zugrunde: Alle Zahlen sollen in eine einfache Variable (z.B. x) eingelesen werden. Lösen Sie diese Aufgabe in drei Varianten mit den 3 verschiedenen Schleifenarten (Abweisschleife, Nichtabweisschleife, Zählschleife). b) Verwenden Sie jetzt ein anderes Datenmodell: Die Zahlen sollen in ein eindimensionales Feld (d.h. in einen Vektor) eingelesen werden (z.B. mit den Komponenten: x[1], x[2], ..., x[n] ). Es sei bekannt, dass n maximal gleich 100 ist. Benutzen Sie hier nur die Zählschleife 4 Institut für Informatik LV "Grundlagen der Informatik" 3.6 Übungsaufgaben zu Programmierung in C (Teil 1) Wert eines Maximums von n beliebigen reellen Zahlen (vgl. Aufgabenkomplex Struktogramme, Aufg. 8) Schreiben Sie ein C-Programm für die Bestimmung des Wertes eines Maximums von n beliebigen reellen Zahlen. Die ganzzahlige Anzahl n; n>=2; sei dem Nutzer bekannt. Falls n falsch eingegeben wird, ist die Eingabe zu wiederholen. Zu verwendendes Datenmodell: Die Zahlen sollen in ein Feld (d.h. in einen Vektor) eingelesen werden (z.B. mit den Komponenten: x[1], x[2], ..., x[n] ). Testen Sie die logische Korrektheit Ihres Programmes mit folgenden Zahlenwerten: (2, 5, 3, 3, 2), (-2, -4, -1). 3.7 Tabellierung einer Funktion a) Schreiben Sie ein C-Programm zur Tabellierung der Funktion y=(3x+4) / (2x-1) (vgl. Aufg.-komplex Struktogramme, Aufg.11). - Tabellieren Sie die Funktion im Bereich xa <= x <= xe mit der Schrittweite xs. - Anfangswert xa, Endwert xe und Schrittweite xs sind einzulesen. - Beachten Sie die Polstelle (eine Funktionswertberechnung bei x=0.5 ist nicht möglich!). *b) Wie Sie beobachtet haben, sind im Programm gemäß 3.7a) Tabellierungen mit mehr als 25 Zeilen durch die Schnelligkeit der Ausgabe nicht mehr vollständig lesbar. Ergänzen Sie deshalb das Programm aus 3.7a) in folgender Weise: Nach einer entsprechenden Anzahl von Ausgabezeilen soll die Ausgabe jeweils angehalten und erst durch Eingabe eines beliebigen Zeichens (gefolgt von <ENTER> bzw. ohne <ENTER>) fortgesetzt werden. 3.8 (Nichtrekursive) Berechnung der Fakultät a) Programmieren Sie die nichtrekursive Berechnung der Fakultät n_fakultaet = n! =n*(n-1)*...*1 (n>=0, ganz), wobei per definitionem gilt: 0! = 1 Schreiben Sie je ein C-Programm unter Verwendung der Zählschleife, der Abweisschleife und der Nichtabweisschleife (vgl. Aufgabenkomplex Struktogramme, Aufg.13) *3.9 Näherungsweise Berechnung der Exponentialfunktion Schreiben Sie ein C-Programm zur näherungsweisen Berechnung der Exponentialfunktion exp(x) mit Hilfe der TAYLOR-Reihe (vgl. Aufgabenkomplex Struktogramme, Aufg.15) ( konvergiert für |x|<∞ ) in folgender Weise: - Der x-Wert ist einzulesen. - Die Berechnung ist abzubrechen, wenn das nächste Glied der Reihe betragsmäßig kleiner als eine einzulesende Genauigkeitsschranke (epsilon < 1 ) ist. - Bei Aufstellung des Lösungsalgorithmus ist zu beachten, daß es unrationell ist, die einzelnen Reihenglieder völlig unabhängig voneinander zu berechnen. Nutzen Sie aus, dass offensichtlich Mit g0=1 (erstes Glied) für i=1, 2, ... gilt: 5 Institut für Informatik LV "Grundlagen der Informatik" *3.10 Übungsaufgaben zu Programmierung in C (Teil 1) Fehlersuche Mit dem aus der Schule bekannten Euklidischen Algorithmus wird der größte gemeinsame Teiler zweier ganzer Zahlen in folgender Weise berechnet: *********************** wiederhole berechne Rest der ganzzahligen Division beider Zahlen ( Rest=größereZahl % kleinereZahl ) ersetze größereZahl durch kleinereZahl und kleinereZahl durch Rest bis der Rest gleich Null ist. Wert auf der größerenZahl ist der größte gemeinsame Teiler. *********************** Das Programm Y:\Lehre\Prog_c\Fehlbei1.c bzw. L:\Prog_c\Fehlbei1.c enthält typische Anfängerfehler. Versuchen Sie, diese anhand der Fehlerausschriften nach dem Compilieren und Linken bzw. nach dem Ausführen zu finden und zu korrigieren. 6