Ganze Zahlen, Ausdrücke Variablen/Konstanten InE1 M. Thaler, tham@zhaw.ch Office TG208 http://www.zhaw.ch/~tham 1
Um was geht es? Programmieren in C ganze Zahlen, Konstanten und Variablen 2
Lernziele Siekönnen Ganzzahlliterale und das Bilden von mathematische Ausdrücken mit Grundoperationen erklären den Datentyp int (Integer) erklären und diskutieren, speziell auch die Darstellung positiver und negativer Zahlen int-variablen vereinbaren und in Programmen einsetzen weitere Ganzzahltypen aufzählen und bei Bedarf einsetzen EBNF und Syntaxdiagramme interpretieren und diskutieren 3
Inhalt Zahlen und Ausdrücke VariablenvomTyp int Weitere Ganzzahltypen EBNF und Syntaxdiagramme 4
Leseempfehlung Kapitel 2.1/2.2/2.3 Variablen Wikibooks, C Programmierung WEB-Page / OLAT oder https://upload.wikimedia.org/wikibooks/de/8/8d/cprogrammierung.pdf 5
Weitere Informationen Kapitel 5.2 Der Datentyp int Jürgen Wolf, "C von A bis Z" (Rheinwerk Openbook) http://openbook.rheinwerk-verlag.de/c_von_a_bis_z 6
Inhalt Zahlen und Ausdrücke VariablenvomTyp int Weitere Ganzzahltypen EBNF und Syntaxdiagramme 7
Zahlen in Programmen Die Zahl21 im Programm als ganze Zahl interpretiert Ganzzahlliteral DerText "21" im Programm als Text interpretiert Zeichenkette bzw. String Die Funktion printnum() gibt einen Zahlenwert aus (ganze Zahl) selbstdefinierte Funktion 8
Ausdrücke Ausdruck Kombination aus Konstanten (Zahlen), Variablen, Rückgabewerten von Funktionen und Operatoren Die Auswertung eines Ausdrucks ergibt einen Wert Wert hier der Variablen mit Namen wert zugewiesen Beispiel Ausdruck wert = 3 * variable + 15 / 32 + square(5 + 1); Ausdruck 9
Ausdrücke mit Zahlen (Konstanten) MitZahlen rechnen ÜblicheOperatoren: + - * / % Ganzzahldivision / Rest wird ignoriert Modulo-Operation % Rest der Ganzzahldivision Punkt- vor Strichrechnung: */% vor +- gleiche Priorität: links rechts Verabeitungsreihenfolge mit Klammern beeinflussbar 1+1 1-3 20+1*2 (20+1)*2 (20+1)*2/3 (20+1)*(2/3) 37/10 37%10 85000*85000 0x64 0100! FehlerbeizugrossenZahlen 10
... Ausdrücke mit Zahlen (Konstanten) Ganzzahlliterale kein Präfix dezimal, z.b. 39 00100111 = 39 10 Präfix 0x hexdezimal, z.b. 0x3F 0011'1111 = 63 10 Präfix 0 octal, z.b. 0127 01'010'111 = 87 10 11
Inhalt Zahlen und Ausdrücke VariablenvomTyp int Weitere Ganzzahltypen EBNF und Syntaxdiagramme 12
Der Datentyp int Standard Datentypin C fürganzezahlen int kurz für Integer Ganzzahlliteral ohne Kennzeichnung Typ int Beispiele: 125, 0x3A, 034 Nichtvorgegebenin C AnzahlBits typische Grösse: 4 Bytes bzw. 32 Bits manchmal auch 16 Bits oder 64 Bits Negative Zahlen Darstellung: 2er-Komplement Format einfache Regel: höchstwertiges Bit = 1 Zahl negativ - Gewicht höchstwertiges Bit: -2 n-1 13
... der Datentyp int Wertebereich für n-bit Zahl -2 n-1... 2 n-1-1 Integer = 4 Bytes -2 31... 2 31-1 -2'147'483'648... 2'147'483'647 Integer = 2 Bytes -2 15... 2 15-1 -32'768... 32'767 14
Übung Was gibt printnum() aus? 0xFFFF 0xFFFFFFFF 48000 * 48000 15
Important! Beim Rechnen mit ganzen Zahlen muss mit einem Überlauf gerechet werden: es gibt weder Compiler- noch Laufzeitfehler 16
Variablen Bisjetzt Ganzzahlliterale verwendet Frage wie z.b. Resultate von Berechnungen weiterverwenden? Benötigen Möglichkeit Resultat aufzuheben "Speicher" Lösung: Variablen stellen Speicherstellen dar haben einen Namen und einen Typ müssen vereinbart werden - Form: Datentyp Variablenname; // Erklaerung int resultat; // Vereinbarung einer Variablen vom Typ int 17
Vereinbarung von Variablen Vereinbarungen stehen am Anfang eines Blocks vor Anweisungen - seit C99 auch innerhalb eines Blocks erlaubt sind nur innerhalb des Blocks gültig mehrere Variablen pro Typ vereinbar reservieren Speicherplatz haben noch "keinen" Wert int main(void) { } int preis; // Preis in Rappen int summe = 0, artikel; // Gesamtbetrag // Artikelnummer preis =... ;... // Anweisungen Block Anfang Variable preis Variable summe, mit 0 initialisiert Block Ende 18
... Vereinbarung von Variablen Zwei Aspekte Deklaration - preis Variable vom Typ int Definition - reserviert Speicherplatz für preis - Initialisierung weist Variablen Wert zu Deklaration und Definition/Initialisierung - meist zusammen int preis; int summe = 0, artikel; - Ausnahme: Deklaration einer Variablen aus anderem Modul (extern-deklaration: mehr dazu später) nicht initialiserte Variablen haben keinen definierten Wert 19
Variablennamen Namen Bezeichner bzw. Identifier können aus Buchstaben, Ziffern und Unterstrichen bestehen Unterscheidung von Gross-/Kleinschreibung Umlaute und andere Sonderzeichen nicht erlaubt dürfen nicht mit Zahl beginnen sollen nicht mit einem Unterstrich beginnen dürfen keine Schlüsselwörter sein richtig saldo ueberlauf grenzwert celsiustofahrenheit falsch 6name char übergabe berechne_a/b 20
... Variablennamen Konventionen Name soll Zweck der Variable beschreiben Name beginnt mit Kleinbuchstaben - bei mehreren Worten Anfangsbuchstaben ab 2. Wort gross - Beispiel: dieerstezahl wird CamelCase-Notation genannt bei klarem Zweck auch kurze Namen erlaubt - Beispiele x für x-koordinate i für Lauf- bzw. Zählvariablen etc. 21
Variablen verwenden Beispiel 22
Zuweisungen Variablen sind Speicherstellen können ausgelesen und/oder verändert werden einer Variablen kann ein Wert zugewiesen werden Zuweisungsoperator in C ist = int anzahl = 250; // Definition und Initialisierung anzahl = 300; // Zuweisung neuer Wert Zuweisung: Variablenname = Ausdruck; Ergebnis der Ausdruck-Berechnung an Variable zugewiesen Ausdruck kann Variable selbst enthalten anzahl = anzahl + 1; summe = preis * anzahl - rabatt; 23
Kombinierte Zuweisungen Variable häufig auch im Ausdruck anzahl = anzahl + 1; summe = summe + i; produkt = produkt * 2; Kurzform anzahl += 1; summe += i; produkt *= 2; MöglicheOperatoren: +=, -=, *=, /=, %= 24
Globale Variablen Variablen ausserhalb von Funktionen definierbar sind funktionsübergreifend verfügbar Beispiel Globale Variablen wenn möglich vermeiden 25
Inhalt Zahlen und Ausdrücke Zahlensysteme VariablenvomTyp int Weitere Ganzzahltypen EBNF und Syntaxdiagramme 26
Weitere Ganzzahltypen long grösserer Wertebereich: oft 8 Bytes Literale mit angehängtem L long int grossezahl; // Typ: long int long auchgrossezahl; // Kurzform grossezahl = 24L; // short kleinerer Wertebereich: oft 2 Bytes short int kleinezahl; // Typ: short int short auchkleinezahl; // Kurzform 27
Weitere Ganzzahltypen unsigned nur positive Zahlen Wertebereich 0.. 2 n -1 Literale mit angehängtem U oder u char unsigned short int kleinepositivezahl; // Typ: unsigned short unsigned positivezahl; // Typ: unsigned int positivezahl = 25u; Grösse: 1 Byte, Ganzzahltyp Zuweisung: Zahl oder Zeichen möglich bei Zeichen Zeichencode gespeichert, i.d.r. ASCII Zeichenliterale in Single Quotes: 'a' char zeichen = 'a'; // speichert 97, ASCII-Code von a char gleicheszeichen = 97; // speichert ebenfalls 97 28
Grössen der Ganzzahltypen Grössen von Ganzzahltypen abhängig von C Umgebung In limits.h Angaben zu Typgrössen definiert Konstanten für Maximal- und Minimalwert: INT_MAX, INT_MIN, LONG_MAX, CHAR_MAX, etc. printf("maximum Typ int: %d\n", MAX_INT); // -> 2147483647 sizeof-operator gibt Speichergrösse von Typen, Variablen und Konstanten in Anzahl Bytes an sizeof(12) // typische Grösse: 4 sizeof('a') // typische Grösse: 1 sizeof(int) // typische Grösse: 4 sizeof(long) // typische Grösse: 8 abhängig von C Umgebung 29
Inhalt Zahlen und Ausdrücke Zahlensysteme VariablenvomTyp int Weitere Ganzzahltypen EBNF und Syntaxdiagramme 30
Syntaxdiagramme und EBNF int preis; int summe = 0, artikel; Darstellungvon Syntax und Grammatik: EBNF EBNF: Erweiterte Backus Nauer Form vollständige, kompakte Darstellung was C-Code ist Vereinbarung ::= Typ ( Bezeichner [ "=" Konst-Ausdr]) { "," Bezeichner [ "=" Konst-Ausdr] } ";" EBNF eher schwierig zu lesen Alternative Syntaxdiagramme Quadrate: Elemente in anderem Diagramm Kreis: Elemente in Code 31
... Syntaxdiagramme und EBNF Korrespondenz EBNF und Syntaxdiagramme Komposition E1 E2 bzw. (E1 E2) E1 E2 Auswahl E1 E2 E1 E2 Option [E1] E1 Wiederholung, 0-N mal {E1} E1 32
Übersicht C++ 33
Zusammenfassung Normalerweise Ganzzahltyp int Wortbreite int nicht vorgegeben, oft 32 Bits Bei guten Gründen auch long, short, unsigned Zeichen immer char 8 Bits Syntaxdiagramme beschreiben die Syntax der Programmiersprache 34