Documentos de Académico
Documentos de Profesional
Documentos de Cultura
T E C H N I K
L E I D E N S C H A F T
www.tugraz.at
Inhalt Teil 2:
Variablen
Symbolische Namen fr Speicherstellen
"! "! "! "! "! Mssen vor Verwendung definiert werden Namen beliebig lang, bestehend aus Buchstaben, Ziffern und _ Drfen nicht mit Ziffer beginnen Keine reservierten Wrter (z.B. if, while, short, return, !) Case-sensitiv! (counter " Counter)
Datentypen
Verschiedene Datentypen
"! Bestimmen Speicherbedarf "! Bestimmen Verhalten von Operationen auf diesen Daten
int ganze Zahl (natrliche Gre) float Gleitkomma-Zahl (einfache Genauigkeit) double Gleitkomma-Zahl (doppelte Genauigkeit) char Zeichen (character) void keine (oder beliebige) Daten
DI Dr. Christian Safran, IICM
Modifier
signed unsigned short long Z.B.:
"! unsigned char, unsigned long int, short int, ...
signed ist default (d.h. kann weggelassen werden) int kann auch weggelassen werden:
"! unsigned, unsigned long, short
DI Dr. Christian Safran, IICM
!! Lsung:
sizeof Operator
Programm test_types.c
1 2 3 4 5 6 7 8 9 10 11 12 // test_types.c - prints the size of primitive C datatypes #include <stdio.h> char a_char = '\0'; int an_int = 0; short a_short = 0; long a_long = 0; long long a_long_long = 0; float a_float = 0.0f; double a_double = 0.0; long double a_long_double = 0.0;
Programm test_types.c
13 int main() 14 { 15 printf("Size 16 printf("Size 17 printf("Size 18 printf("Size 19 printf("Size 20 printf("Size 21 printf("Size 22 printf("Size a_long_double); 23 return 0; 24 }
of of of of of of of of
char: int: short: long: long long: float: double: long double:
Achtung: Zahl und Typ der Parameter muss mit format string bereinstimmen (Compiler bemerkt hier keine Fehler) ! Weitere Optionen (width, precision, ...): man 3 printf
DI Dr. Christian Safran, IICM
Wahrheitswerte in C
Keine boolschen Variablen Interpretation von Integervariablen
"! 0 .. False "! > 0 .. true
Der Zuweisungsoperator =
Links von = steht immer eine Variable, der der Wert des Ausdrucks rechts von = zugewiesen wird Beispiele:
int sum, counter; sum = counter; counter = sum = 0; // uninitialized variable !
Arithmetische Operatoren
+ - * / % Beispiele:
int counter = 10; int sum = 0; sum = sum + counter; counter = counter - 1; float pi = 3.14159265; float radius = 1.5; float circumference = 2 * pi * radius;
DI Dr. Christian Safran, IICM
int sum = one + half; sum = one half; sum = one * half;
// is only 1 ! // is 0 ! // is 0 !
Modulo-Operator %
Nicht fr float und double Beispiel:
unsigned seconds = 12345; unsigned unsigned unsigned unsigned // seconds since midnight // 3 // 205 // 25 // 45
hours = seconds / 3600; minutes = seconds / 60; minutes_left = minutes % 60; seconds_left = seconds % 60;
Klammern ( )
int what_is_this = 1 + 2 / 3 4 * 5; int number_1 = 2; int number_2 = 3; float average = number_1 + number_2 / 2.0; // 3.5 (!) average = (number_1 + number_2) / 2.0; // 2.5 average = (number_1 + number_2) / 2; // 2.0 (!) // ???
Kurzformen:
counter++; ++counter; counter--; --counter;
Demo
// test++.c - demonstrates post- und preincrement and -decrement! ! #include <stdio.h>! ! int result = 0;! int number = 2;! ! int main()! {! result = number++;! printf("Post Increment: %d , %d \n",result, number);! result = ++number;! printf("Pre Increment: %d , %d \n",result, number);! result = number--;! printf("Post Decrement: %d , %d \n",result, number);! result = --number;! printf("Pre Decrement: %d , %d \n",result, number); ! return 0;! DI }!Dr. Christian Safran, IICM
Weitere Kurzformen: += -= *= /=
Kombination aus Zuweisung und arithmetischen Operator Beispiele:
seconds += 60; ist dasselbe wie: seconds = seconds + 60; product *= --counter; ist dasselbe wie: counter = counter 1; product = product * counter;
DI Dr. Christian Safran, IICM
&& AND
int ok = (month >= 1) && (month <= 12);
|| OR
int invalid_month = (month < 1) || (month > 12); ok = !((month < 1) || (month > 12)); // all the same: ok = !(month < 1) && !(month > 12); ok = (month > 0) && !(month >= 13);
DI Dr. Christian Safran, IICM
Beispiel:
// does not crash if x == 0 int ok = (x != 0) && (1 / x < 10);
Ternrer Operator: ? :
spter
Bit-Operationen
Bitweises NOT/AND/OR/XOR Shift-Operatoren spter
C Operator Precedence
Operator-Typ
Primre Auswertung Unre Operatoren
Operator
( ) [ ] . -> expr++ expr-* & + - ! ~ ++expr --expr (typecast) sizeof * / % + >> << < > <= >=
Assoziativitt
links nach rechts rechts nach links
Binre Operatoren
== != & ^ | && ||
Demonstration
// test_precedence.c - demonstrates operator precedence! #include <stdio.h>! ! int result = 0;! int number = 5;! ! int main()! {! result = (1 < number < 4);! printf("<: %d\n",result);! number = 0; ! result = number == result;! printf("<: %d\n",result); ! return 0;! }!
DI Dr. Christian Safran, IICM
1.a. Hausbung
Rechnen mit der Matrikelnummer
"! Bsp: 1330218 "! sum = 1+3+3 = 7 "! product = 0+2+1+8 = 11
"! result = (Pr-Inkrement von product Post-Inkrement von sum) * sum "! result / (letzte Stelle der Matrikelnummer + 1)
"! Integerdivision "! Rest "! Gleitkommadivision
DI Dr. Christian Safran, IICM
1.a. Hausbung
Ausgabe:
! "Result = [Ergebnis der Subtraktion und Multiplikation]\n"! "Integer division = [Ganzzahl Divisionsergebnis]\n"! "Remainder = [Rest]\n"! "Division = [dezimales Divisionsergebnis]\n"!
1.a. Hausbung
Aufgabenstellung im Wiki
"! Halten Sie sich genau an die Anforderungen! "! Ihre Abgabe wird automatisiert getestet. "! Feedback: Anzahl der bestandenen Testflle.