Formatierte Eingabe, Datentypen float und double - FB2

Werbung
Fachhochschule Frankfurt am Main
FB 2
Fachhochschule Frankfurt am Main
FB 2
Höhere Programmiersprache
SS 2008
Modul 12: Höhere Programmiersprache
SS 2008
Vorlesung 4:
Formatierte Eingabe,
Datentypen float und
double
Fachhochschule Frankfurt am Main
FB 2
Modul 12: Höhere Programmiersprache
SS 2008
Inhalt
• Zweierkomplement / Zahlensysteme / Umrechnung
• Beispielprogramm Eingabe – Verarbeitung – Ausgabe
• Formatierte Eingabe mit scanf
• Datentyp float
• Datentyp double
• Mathematische Funktionen mit Datentyp double
(Bibliothek math.h)
Dr. J. Raimann
1
Fachhochschule Frankfurt am Main
FB 2
Fachhochschule Frankfurt am Main
FB 2
Höhere Programmiersprache
SS 2008
Modul 12: Höhere Programmiersprache
SS 2008
Organisatorisches
•
•
Klausurtermin: Montag, 7.7.2008 von 16-17 Uhr
Ort: Gebäude 8 / Raum 107
Fachhochschule Frankfurt am Main
FB 2
Modul 12: Höhere Programmiersprache
SS 2008
Ergänzung: Zweierkomplement
•
•
Dr. J. Raimann
Unterscheidung +/• Anhand des ersten (obersten) Bits
• Bei negativen Zahlen: 1, z.B. 1000 0000 entspricht -128 dezimal
• Bei positiven Zahlen: 0, z.B. 0000 0001 entspricht +1 dezimal
Überlauf
2
Fachhochschule Frankfurt am Main
FB 2
Fachhochschule Frankfurt am Main
FB 2
Höhere Programmiersprache
SS 2008
Modul 12: Höhere Programmiersprache
SS 2008
Zahlensysteme
• Dezimalsystem
• Binärsystem
• Hexadezimalsystem
• Oktalsystem
sind Stellenwertsysteme (Positionssysteme)
– d.h. die Wertigkeit der jeweiligen Ziffer ergibt sich durch den Wert der Stelle
(Position) multipliziert mit dem Wert der Ziffer.
– Der Wert der Zahl ergibt sich durch Addition der Werte der jeweiligen
Stellen.
• Beispiel:
– 123 dezimal
= 1 Hunderter + 2 Zehner + 3 Einer
= 1 * 102 + 2 * 101 + 3 * 100
– 101 dual
= 1 Vierer + 0 Zweier + 1 Einer
= 1 * 22 + 0 * 21 + 1 * 20 = 5 dezimal
– 7F hexadezimal = 7 Sechzehner + 15 Einer
= 7 * (16)1 + 15 * (16)0 = 127 dezimal
Fachhochschule Frankfurt am Main
FB 2
Modul 12: Höhere Programmiersprache
SS 2008
Umrechnung zwischen Zahlensystemen
"Restwertmethode": Teilen durch die jeweilige Basis des Zahlensystems
Beispiel 1: 142 Dezimalsystem -> Oktalsystem ?
• 142 / 8 = 17 Restwert 6 (der Restwert wird aus 142 mod 8 berechnet)
• 17 / 8 = 2
Restwert 1
• 2/8=0
Restwert 2
• 142 dezimal ist demnach 216 im Oktalsystem.
Beispiel 2: 79 Dezimalsystem -> Binärsystem ?
• 79 / 2 = 39
Restwert 1
• 39 / 2 = 19
Restwert 1
• 19 / 2 = 9
Restwert 1
• 9/2=4
Restwert 1
• 4/2=2
Restwert 0
• 2/2=1
Restwert 0
• 1/2=0
Restwert 1
• 79 dezimal ist demnach 1001111 im Binärsystem.
Dr. J. Raimann
3
Fachhochschule Frankfurt am Main
FB 2
Fachhochschule Frankfurt am Main
FB 2
Höhere Programmiersprache
SS 2008
Modul 12: Höhere Programmiersprache
SS 2008
Aufbau eines (einfachen) C-Programms: Standard-Template
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
...
Programm-Code
...
system("pause");
}
Fachhochschule Frankfurt am Main
FB 2
Modul 12: Höhere Programmiersprache
SS 2008
Beispielprogramm Eingabe – Verarbeitung - Ausgabe
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int x,y;
printf("\n\t\tRechenprogramm \n\n");
printf("\nBitte x eingeben :");
scanf("%i", &x);
printf("\nBitte y eingeben :");
scanf("%i",&y);
printf("\n\n %i + %i ist %i",x,y,x+y);
printf("\n\n %i - %i ist %i",x,y,x-y);
printf("\n\n %i * %i ist %i",x,y,x*y);
printf("\n\n %i / %i ist %i",x,y,x/y);
system("pause");
}
Dr. J. Raimann
4
Fachhochschule Frankfurt am Main
FB 2
Höhere Programmiersprache
SS 2008
Fachhochschule Frankfurt am Main
FB 2
Modul 12: Höhere Programmiersprache
SS 2008
Eingabe – Verarbeitung - Ausgabe
Eingabe
Verarbeitung
Variablendefinition
int x,y;
z.B.
x+y
scanf("%i", &x);
scanf("%i",&y);
Einlesen in Variable
erfolgt mittels
Adressoperator &
Eingabeanweisung
Fachhochschule Frankfurt am Main
FB 2
Ausgabe
printf("\n\n
%i + %i
ist %i",
x,y,x+y);
Ausgabeanweisung
Modul 12: Höhere Programmiersprache
SS 2008
Formatierte Eingabe mit scanf
• Mit scanf können Werte eingelesen werden
•
Prototyp definiert in stdio.h
•
int scanf (%Steuerstring, Parameter, ..);
• Ähnliche Formatanweisungen wie bei printf
•
%c
Zeichen
•
%s
String
•
%i
Ganzzahl
•
%f
Gleitkommazahl
• Modifizierer (für Formatanweisungen)
• l long
z.B. %lf, %Lf
• h short
• Rückgabewert der Funktion
• Anzahl der erfolgreich eingelesenen Werte
• bei Fehler in Konvertierung erfolgt Abbruch, d.h. Ignorieren der weiteren
eingelesen Werte
Dr. J. Raimann
5
Fachhochschule Frankfurt am Main
FB 2
Höhere Programmiersprache
SS 2008
Fachhochschule Frankfurt am Main
FB 2
Modul 12: Höhere Programmiersprache
SS 2008
Besonderheiten bei der Verwendung von scanf
• Werden Zeichenketten mit scanf eingelesen, so werden diese nur bis
zum ersten Whitespace-Zeichen (Leerzeichen, Tab, ...) gelesen.
• Dieses Problem kann folgendermaßen umgangen werden:
scanf("%[a-zA_Z \t]", ctext);
• Liest alle in den Klammern [] angegebenen Zeichen (inkl. Leerzeichen,
Tab)
Oder
scanf("%[^\n]", ctext);
• Liest alle Zeichen bis zum Neuzeile-Zeichen \n
Fachhochschule Frankfurt am Main
FB 2
Modul 12: Höhere Programmiersprache
SS 2008
Fließkommazahlen
•
•
•
Fließkommazahlen (auch als Gleitkomma- oder Gleitpunktzahlen
bezeichnet) sind Zahlen mit Nachkommastellen.
Der C-Standard kennt die folgenden drei Fließkommatypen:
– den Typ float für Zahlen mit einfacher Genauigkeit,
– den Typ double für Fließkommazahlen mit doppelter
Genauigkeit,
– den Typ long double für zusätzliche Genauigkeit.
Darstellung
– Darstellung mit Dezimalpunkt
0.0001001
– oder mit Exponent und Dezimalpunkt 1.001*10-4
100.1
1.001*102
Mantisse
Exponent
Basis
Dr. J. Raimann
6
Fachhochschule Frankfurt am Main
FB 2
Höhere Programmiersprache
SS 2008
Fachhochschule Frankfurt am Main
FB 2
Modul 12: Höhere Programmiersprache
SS 2008
Beispiel-Deklaration Datentyp float
float fresult_div;
fresult_div = 5.0 / 7.0;
• Mit dem Datentyp float können Fließkommazahlen mit einfacher
Genauigkeit dargestellt werden.
Fachhochschule Frankfurt am Main
FB 2
Modul 12: Höhere Programmiersprache
SS 2008
Genauigkeit Fließkomma-Datentypen
Dr. J. Raimann
float
4 Byte in
der Regel
-3.4*1038 bis +3.4*1038
double
8 Byte in
der Regel
-1.7*10308 bis +1.7*10308
long double
10 Byte in
der Regel
-l.1*104932 bis +1.1*104932
7
Fachhochschule Frankfurt am Main
FB 2
Fachhochschule Frankfurt am Main
FB 2
Höhere Programmiersprache
SS 2008
Modul 12: Höhere Programmiersprache
SS 2008
Beispielprogramm Datentyp float
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
float fresult_div;
fresult_div = 5.0 / 7.0;
printf("%f\n", fresult_div );
system("PAUSE");
}
Fachhochschule Frankfurt am Main
FB 2
Modul 12: Höhere Programmiersprache
SS 2008
Datentyp double
•
•
•
•
Dr. J. Raimann
Für Fließkommazahlen mit »doppelter Genauigkeit«
Doppelte Genauigkeit bezieht sich dabei auf die Anzahl an wirksamen
Nachkommastellen und damit auch auf den Wertebereich.
Der Datentyp double kann Fließkommazahlen im Bereich 1.7E-308 bis
1.7E+308 mit fünfzehnstelliger Genauigkeit darstellen.
Der Formatstring für double-Werte lautet %lg (oder %lf).
8
Fachhochschule Frankfurt am Main
FB 2
Fachhochschule Frankfurt am Main
FB 2
Höhere Programmiersprache
SS 2008
Modul 12: Höhere Programmiersprache
SS 2008
Mathematische Funktionen mit Datentyp double
(Bibliothek math.h)
•
•
•
•
•
•
•
sin
cos
tan
sqrt
exp
log
log10
Fachhochschule Frankfurt am Main
FB 2
Modul 12: Höhere Programmiersprache
SS 2008
Beispielprogramm Datentyp double
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
int main(void)
{
double dzahl, dsqrt;
printf("Bitte eine Zahl eingeben: ");
scanf("%lf",&dzahl);
dsqrt = sqrt(dzahl);
printf("Die Quadratwurzel von %lf ist %lf\n", dzahl, dsqrt);
system("PAUSE");
}
Dr. J. Raimann
9
Herunterladen