Pascal Schärli 08.03.2019
Pascal Schärli 08.03.2019
Pascal Schärli 08.03.2019
Wozu dient ein Compiler?
Übersetzen des Quelltexts in
ausführbaren Maschinen-Code
Pascal Schärli 08.03.2019
Sind folgende C++ Anweisungen gültig?
std::cout << "C++ is better than Java.";
int a = 100
if (1<2)
std::cout << "I knew it!" << std::endl;
Pascal Schärli 08.03.2019
a) Was repräsentiert ein Ausdruck?
Â
b) Geben Sie einen primären Ausdruck an!
Â
c) Geben Sie einen zusammengesetzten Ausdruck an!
Â
d) Was bedeutet es, einen Ausdruck auszuwerten?
Â
e) Welchen Typ haben die folgenden beiden Ausdrücke?
Eine Berechnung
0
1 + 1
Seinen Wert zu bestimmen
int
1/2
int
1*2
Pascal Schärli 08.03.2019
Gebt den Wert der folgenden Ausdrücke an
3 + 4 * 5
23
5 / 2
2
0.9 * 10.0
9.0
17 < 4
false
Pascal Schärli 08.03.2019
Wozu dient eine Variable?
Zur Speicherung eines (veränderbaren) Wertes unter einem Namen
Wahr oder Falsch?
Ein Variablenname ist ein Ausdruck.
Jede Variable hat einen Typ.
Pascal Schärli 08.03.2019
Was ist die Ausgabe dieser Programme?
int x = 10;
x = 2 * x;
std::cout << x << std::endl;
20
int y = 5;
int z = 3 * y;
std::cout << y + z << std::endl;
20
Pascal Schärli 08.03.2019
Welche Frage beantwortet der folgende Programmabschnitt?
int a;
std::cin >> a;
if (a % 2 == 0) {
std::cout << "Ja" << std::endl;
}
else {
std::cout << "Nein" << std::endl;
}
Ist die Eingabezahl a gerade?
Pascal Schärli 08.03.2019
Was ist die Ausgabe des folgenden Programmabschnitts?
int b = 1;
while (b < 100) {
std::cout << b << " ";
b = 3 * b;
}
1 3 9 27 81
Pascal Schärli 08.03.2019
Pascal Schärli 08.03.2019
(a = (b = 5)) = 42
a = (b = 5)
a = b = 5
Ist diese Expression ein lvalue oder rvalue?
Pascal Schärli 08.03.2019
a + a++
Ist diese Expression valid?
int a = 1;
((a) + (a++))
Was ist der Wert dieser Expression?
Ja
a++ hat höhere Präzedenz als die
Addition, aber das bedeutet nicht,
dass (a++) vor (a) ausgewertet
wird!
Abhängig nach Auswertungsrichtung
ist der Wert 3 oder 4
Pascal Schärli 08.03.2019
Pascal Schärli 08.03.2019
Fliesskommazahlen können entweder als float oder double geschrieben werden.
float
double
-> 32 Bit Floating point number
-> 64 Bit, doppelte präzision
double x = 1.5 / 4;
std::cout << x << std::endl;
0.375
Pascal Schärli 08.03.2019
Beim Rechnen mit verschiedenen Dateitypen wird immer in den "allgemeineren" Typ umgewandelt
bool
int
unsigned int
float
double
Pascal Schärli 08.03.2019
(y++ && y) + 2.0
(y++ * y) + 2.0
y = (x++ = 3)
3.0 + 3 - 4 + 5
5 % 4 * 3.0 + true * x++
Â
Â
Pascal Schärli 08.03.2019
(y++ && y) + 2.0
(y++ * y) + 2.0
y = (x++ = 3)
3.0 + 3 - 4 + 5
5 % 4 * 3.0 + true * x++
Welche Expressions sind gültig?
Pascal Schärli 08.03.2019
(y++ && y) + 2.0
(y++ * y) + 2.0
y = (x++ = 3)
3.0 + 3 - 4 + 5
5 % 4 * 3.0 + true * x++
Welche Expressions sind lvalues?
rvalue
rvalue
rvalue
rvalue
Pascal Schärli 08.03.2019
(y++ && y) + 2.0
Was ist der Wert dieser Expression?
(y++ * y) + 2.0
y = (x++ = 3)
3.0 + 3 - 4 + 5
5 % 4 * 3.0 + true * x++
2.0
undefined
7.0
4.0
Pascal Schärli 08.03.2019
int a = 2;
if (x < 7) {
int a = 8;
std::cout << a;
}
std::cout << a;
82
int a = 2;
if (x < 7) {
a = 8;
std::cout << a;
}
std::cout << a;
88
Pascal Schärli 08.03.2019
int sum = 0;
for (int i = 0; i < 5; ++i) {
int a;
std::cin >> a;
sum += a;
}
Was ist der Scope dieser Variablen?
sum
Mindestens das ganze Code Snippet
i
Innerhalb der for-Schleife
a
Innerhalb einer Iteration der for-Schleife
Pascal Schärli 08.03.2019
int i = 1;
do{
std::cout << i << " ";
i*=2;
} while(i < 10);
1 2 4 8
Â
Â
Pascal Schärli 08.03.2019
#include <iostream>
int main () {
std::cout << "Enter a number: ";
int n;
std::cin >> n;
// loop 1
for (int i = 1; i <= n; ++i)
std::cout << i << "\n";
// loop 2
int i = 0;
while (i < n)
std::cout << ++i << "\n";
// loop 3
i = 1;
do
std::cout << i++ << "\n";
while (i <= n);
return 0;
}
Lösung:
Pascal Schärli 08.03.2019
Wie müsste man die folgende for-Schleife in eine while-Schleife umwandeln?
for (int i = 0; i < n; ++i)
BODY
{
int i = 0;
while (i < n) {
BODY
++i;
}
}
Pascal Schärli 08.03.2019
Wie müsste man die folgende while-Schleife in eine for-Schleife umwandeln?
while (condition)
BODY
for ( ;condition; )
BODY
Pascal Schärli 08.03.2019
Wie müsste man die folgende do-while-Schleife in eine for-Schleife umwandeln?
do
BODY;
while (condition);
BODY;
for ( ;condition; )
BODY;
Pascal Schärli 08.03.2019
Pascal Schärli 08.03.2019
unsigned int n;
std::cin >> n;
unsigned int f = 1;
if(n != 0) {
do {
f = f * n;
--n;
} while(n > 0);
}
std::cout << f << std::endl;
while(true) {
int i1, i2;
std::cin >> i1 >> i2;
std::cout << i1+i2 << "\n";
int again;
std::cout << "Again?(0/1)\n";
std::cin >> again;
if(!again)
break;
}
unsigned int z;
unsigned int d;
for(std::cin >> z >> d ; z >= d ; z = z-d);
std::cout << z << std::endl;
Tipp:
Pascal Schärli 08.03.2019
unsigned int n;
std::cin >> n;
unsigned int x = 1;
if (n > 0) {
unsigned int k = 0;
bool e = true;
do {
if (++k == n) {
e = false;
}
x *= 2;
} while(e);
}
std::cout << x << std::endl;
Pascal Schärli 08.03.2019
double
Pascal Schärli 08.03.2019
double
Pascal Schärli 08.03.2019
Pascal Schärli 08.03.2019