Vorlesung 2.Tag - Technische Universität Braunschweig

Werbung
Einführung in die
Programmiersprache C
2.Tag
Institut für Mathematische
Optimierung Technische Universität Braunschweig
Vergleichsoperatoren
Operator
Beschreibung
>
echt größer
>=
größer oder gleich
<
kleiner
<=
kleiner oder gleich
==
gleich
!=
ungleich
Beispiel:
(a >= b)
Ist a wirklich größer oder gleich b, so liefert die
Klammer den Wert 1 zurück, sonst 0.
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Logische Operatoren und
Wahrheitstafel
&& und
||
oder
!
nicht
Geben je nach Wahrheitswert zweier Variablen p und
q folgende Wahrheitswerte zurück:
p
q
p&&q
p||q
!p
0
0
0
0
1
0
1
0
1
1
1
1
1
1
0
1
0
0
1
0
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Beispiel für Vergleichs- und logische
Operatoren
#include<stdio.h>
int main(void)
{
int antw1,antw2,antw3;
double zahl1=1.1,zahl2=3.3,zahl3=-2.0;
antw1 = ( (zahl1 > zahl2) || (zahl2 != 3.3) );
antw2 = ( (zahl2 + zahl3!=0.0) && (zahl1 == 0.0) );
antw3 = ( (!antw2) || (zahl3 > 0.0) );
printf("antw1=%d\tantw2=%d\tantw3=%d\n",antw1,antw2,antw3);
return 0;
}
Welchen Werte haben antw1, antw2 und antw3?
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Die for-Schleife
• Die for-Schleife hat die Form:
for(Ausdruck1;Ausdruck2;Ausdruck3)
{
Anweisungen;
}
• Gibt es nur eine Anweisung, können die
geschwungenen Klammern weggelassen werden.
Was
Wann
Ausdruck1
Initialisierung vor 1. Schleifendurchlauf
Ausdruck2
Bedingung vor jedem Schleifendurchlauf
Ausdruck3
Veränderung nach jedem Schleifendurchlauf
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Beispiel einer for-Schleife
#include<stdio.h>
int main(void)
{
int i;
for( i=0 ; i<10 ; i++ )
printf("%d\n",i);
return 0;
}
Was wird ausgegeben und warum?
Institut für Mathematische Optimierung – Technische Universität Braunschweig
2. Beispiel einer for-Schleife
#include<stdio.h>
int main(void)
{
int i;
for(i=0;i<10;printf("%d\n",i))
i++;
return 0;
}
Unterschied zum letzten Beispiel? Was wird hier
ausgegeben?
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Beispiel Endlosschleife
Vorsicht! Setzt man die Bedingungen für die Schleife schlecht, so
können auch Endlosschleifen entstehen. Nachfolgend das erste
Beispiel einer for-Schleife, in dem die zweite Bedingung verändert
wurde:
…
int main(void)
{
int i;
for(i=0;i>=0;i++)
printf("%d\n",i);
return 0;
}
Ausgabe: 0,1,2,…,10,11,…
Abbruch eines Programms mit Strg+c
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Aufgabe
Schreiben Sie ein Programm, dass die Zahlen 10,…,1
ausgibt. Verwenden Sie hierfür folgendes Grundgerüst:
#include<stdio.h>
int main(void)
{
for( ; ; )
printf();
return 0;
}
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Lösung
#include<stdio.h>
int main(void)
{
int i;
for(i=10;i>0;i--)
printf("%d\n",i);
return 0;
}
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Die while-Schleife
Die while-Schleife
Ausdruck1;
while(Ausdruck2)
{
Anweisungen;
Ausdruck3;
}
ist fast gleichwertig mit der for-Schleife (Unterschied bei continue, später)
for(Ausdruck1;Ausdruck2;Ausdruck3)
{
Anweisungen;
}
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Beispiel für while-Schleife
double zahl;
int zaehler=0;
printf("Bitte geben Sie eine beliebige Zahl ein!\t");
scanf("%lf",&zahl);
while(zahl>=1.0)
{
zaehler++;
zahl=zahl/2;
}
printf("Diese Zahl kann %d-mal halbiert werden und ist dann mit
einem Wert von %lf kleiner als 1!",zaehler,zahl);
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Die do-while-Schleife
Die dritte Schleifen-Variante, die C bietet, ist:
do
{
Anweisungen;
}while(Ausdruck);
Diese Schleife wird ausgeführt, solange Ausdruck
wahr ergibt. Da aber Ausdruck nach dem jeweiligen
Durchlaufen der Schleife ausgeführt wird, wird die
Schleife mindestens einmal durchlaufen.
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Beispiel für do-while-Schleife
double zahl;
int zaehler=0;
printf("Bitte geben Sie eine beliebige Zahl ein!\t");
scanf("%lf",&zahl);
do
{
zaehler++;
zahl=zahl/2;
}while(zahl>=1.0);
printf("Diese Zahl kann %d-mal halbiert werden und ist dann mit einem
Wert von %lf kleiner als 1!",zaehler,zahl);
Ausgabe: while/do-while-Schleife bei Eingabe einer Zahl <1.0 (>=1.0)?
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Aufgabe
Schreiben Sie ein Programm, dass solange
vom Benutzer die Eingabe einer Zahl verlangt,
bis eine 0 eingegeben wird. Das Programm soll
ansonsten jeweils die Quadratzahl der
eingebeben Zahl ausgeben. Benutzen Sie
dafür eine while- oder do-while-Schleife!
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Lösung
int main(void)
{
int a;
printf("Geben Sie eine Zahl ein:\t");
scanf("%d",&a);
while(a!=0)
{
printf("Quadratzahl ist %d\nNoch ne Zahl bitte:\n",a*a);
scanf("%d",&a);
}
return 0;
}
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Die if-Bedingung
Die bedingten Anweisungen in C haben die Form:
if(Ausdruck1)
{
Anweisungen;
}
else
{
Anweisungen;
}
wobei es keinen else-Block geben muss. Die
Anweisungsblöcke können wiederrum if-else-Blöcke
enthalten.
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Aufgabe
Schreiben Sie ein Programm, dass eine Zahl einliest
und danach ausgibt, ob diese positiv ist oder negativ.
Verwenden Sie dafür die if-else-Anweisung.
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Lösung
...
double zahl;
printf("Bitte geben Sie eine beliebige Zahl ein!\t");
scanf("%lf",&zahl);
if(zahl>=0.0)
printf("Die Zahl ist positiv!\n");
else
printf("Die Zahl ist negativ!\n");
return 0;
}
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Die Anweisungen continue und break
• Der Befehl continue dient dazu, Teile einer Schleife zu
überspringen. Genauer wird der Teil der Schleife, der
nach dem continue steht, übersprungen.
• Mit dem Befehl break wird die aktuelle Schleife
komplett abgebrochen und die nächste Anweisung
im Programm ausgeführt.
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Beispiel für den continue-Befehl
int j=0;
while (j < 10)
{
if (j > 8)
{
j++;
continue;
}
printf("Aktueller Wert von j: %d\n", j);
j++;
}
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Beispiel verbessert durch break-Befehl
int j=0;
while (j < 10)
{
if (j > 8)
break;
printf("Aktueller Wert von j: %d\n", j);
j++;
}
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Die switch-Anweisung
Die switch-Anweisung ist eine weitere Möglichkeit, bedingte
Anweisungen zu geben. Ihre allgemeine Form ist:
switch(wert)
{
case konstante1: Anweisungen;
break;
case konstante2: Anweisungen;
break;
case konstante3: Anweisungen;
break;
...
default: Anweisungen;
break;
}
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Beispiel für die switch-Anweisung
char antwort;
printf("Verstehen Sie die switch-Anweisung? Antwort mit j oder n.\t");
scanf("%c",&antwort);
switch(antwort)
{
case 'j': printf("Das ist schoen!\n");
break;
case 'n' : printf("Dann schauen Sie sich das nochmal an!\n");
break;
default : printf("Das soll eine Antwort sein?\n");
break;
}
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Definieren eigener Funktionen
• Bisher bekannte Funktionen: z.B. printf() und scanf() (durch
#include<stdio.h> durch den Präprozessor eingebunden)
• Jetzt: Definition eigener Funktionen! Beispiel:
double quadrat(double zahl)
{
return zahl*zahl;
}
• Die Funktion quadrat verlangt als Parameter eine Variable
vom Typ double und gibt das Quadrat der Zahl, auch vom
Typ double zurück (return-Befehl).
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Warum eigene Funktionen?
• Code ist übersichtlicher.
• Änderungen leicht vornehmbar.
• Code ohne Probleme schnell wiederverwendbar
(Bausteinprinzip)
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Funktionen im Quellcode
• Funktionen können erst verwendet werden, nachdem
sie am Anfang des Quellcodes deklariert wurden. Dies
geschieht durch einen Funktionsprototyp:
double quadrat(double zahl);
So „weiß“ der Kompiler, dass es eine solche Funktion
gibt.
• Die Funktiondefinition kann dann später oder in einer
anderen Datei erfolgen.
• Definitionen von Funktionen dürfen nicht geschachtelt
werden!
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Funktionsaufruf
Der Funktion müssen die richtigen Variablen mit dem
entsprechendem Datentyp übergeben werden:
double zahl1=3.2, zahl2;
zahl2=quadrat(zahl1);
Der Funktion quadrat wird hier wie gewünscht eine
double-Variable übergeben und auch eine Wert vom
Datentyp double zurückgegeben. Die
Variablenbezeichnungen beim Aufruf der Funktion
(hier zahl1) und innerhalb der Funktion (hier zahl)
dürfen unterschiedlich sein.
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Beispiel (in main wird Funktion
quadrat() aufgerufen)
#include<stdio.h>
double quadrat(double );
int main(void)
{
double a;
printf("Bitte Zahl eingeben:");
scanf("%lf",&a);
printf("Quadrat von %.2f: %f\n",a,quadrat(a));
}
double quadrat(double zahl)
{
return zahl*zahl;
}
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Kommentare
Kommentare sollen das Verstehen und
Nachvollziehen eines Programms ermöglichen, sie
werden vom Compiler ignoriert. Hierfür existieren
zwei Typen:
• Blockkommentar (der Text wird zwischen /* und */
auskommentiert):
/* text */
• Zeilenkommentar (der Text wird in der kompletten
Zeile hinter // auskommentiert):
// text
Institut für Mathematische Optimierung – Technische Universität Braunschweig
Herunterladen