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