Programmiersprache C Erstellen und Übersetzen von C

Werbung
Ingenieurinformatik
Programmiersprache C
Teil 1
Die Programmiersprache C wurde 1972 von Dennis M. Ritchie in den Bell Laboratories
(USA) entwickelt. Als Vorgänger von C galt die System-Programmiersprache B oder BCPL
(Basic Combined Programming Language). Daher der Name C.
C++ ist die objektorientierte Erweiterung von C.
Charakteristische Eigenschaften:
• maschinennah : C ist eine Hochsprache, in der Elemente höherer
Programmiersprachen (wie Prozeduren, Blöcke, Schleifen und Datentypen etc. ) mit
Assembler-ähnlichen Konstrukten(z. B. Inkrement- und Dekrement-Operatoren)
vereinigt sind.
• portable: C zeichnet sich durch eine weitgehend maschinenunabhängige
Programmierung aus.
• universell : In C werden Datenbankprogramme, Kalkulationsprogramme sowie
Grafik-Applikationen geschrieben.
C-Syntax: Grammatik der Programmiersprache C
Der Programmtext wird nach genau festgelegten Regeln formuliert. Diese Regeln sind durch
die Grammatik einer Programmiersprache festgelegt.
C-Compiler: Softwareprogramm zur Übersetzung des in C geschriebenen Programmcodes
in Maschinenbefehle, die der Prozessor des Rechners unmittelbar ausführen kann.
Erstellen und Übersetzen von C-Programmen
1. Anhand eines Texteditors wird der Quellcode in einer Quelldatei mit der Endung .c
abgelegt.
2. Die Quelldatei wird dem Compiler zur Übersetzung gegeben. Geht alles gut, so erhält
man eine Objektdatei (gleicher Dateiname mit Endung .obj) , die den Maschinencode
enthält.
3. Schließlich bindet der Linker eine oder mehrere Objektdateien (mit Hilfe des
Makefile) mit Funktionen der Standardbibliothek oder selbst erstellten schon früher
übersetzten Programmteilen (aus dem Projekt) zu einer ausführbaren Datei mit der
Endung .exe.
IDE („integrated development environment“):
Moderne Compiler bieten eine integrierte Entwicklungsumgebung, welche die obigen drei
Schritte zusammenfasst. Von einer gemeinsamen Benutzeroberfläche aus wird das Programm
editiert, kompiliert, gelinkt und ausgeführt (www.lcc.com).
Dr.-Ing. K. Jäger-Hezel, 10.11.2006
1
Ingenieurinformatik
Editor
Quelldatei …c
Compiler
Header-Datei ….h
Objektdatei …..obj
Benutzer-Bibliotheken
Linker
Standardbibliotheken
Ausführbare Datei
…exe
Struktur von C-Programmen
Beispiel: C-Programm „Hello world“
#include <stdio.h>
int main()
{
printf(„\nHello world!\n“);
return 0;
}
Typ Funktionsname
Beginn der Funktion
Rückgabe des integer Wertes 0
Ende der Funktion
Ausgabe:
Hello world!
Dr.-Ing. K. Jäger-Hezel, 10.11.2006
2
Ingenieurinformatik
Ein C-Programm besteht aus einzelnen Funktionen, die sich gegenseitig aufrufen. Die
Funktion main() hat eine besondere Rolle. Sie bildet das Hauptprogramm und muss daher in
jedem C-Programm vorhanden sein. Jede andere Funktion entspricht einem Unterprogramm.
Die main()-Funktion unterscheidet sich – abgesehen vom feststehenden Namen - nicht von
der Struktur anderer Funktionen.
Die Programmausführung beginnt mit der ersten Anweisung in der Funktion main().
Die Anweisung #include ist für den Preprocessor bestimmt, der die sog. Header-Dateien (z.
B. stdio.h) an diese Stelle in den Quellcode kopiert. Dadurch stehen dem Programm alle
Definitionen von Funktionen zur Verfügung, die in den Header-Dateien enthalten sind.
Der Funktionsblock im Programmbeispiel „Hello world“ enthält zwei Anweisungen. Mit
printf wird der Text auf dem Bildschirm ausgegeben. Das Steuerzeichen „\n“ löst einen
Zeilenvorschub aus. Die zweite Anweisung return 0; beendet die die Funktion main() und
damit das Programm. Dabei wird der Wert 0 dem aufrufenden Programm als Exit-Code
zurückgegeben. Jede Anweisung wird in C mit einem Semikolon beendet.
Beispiel: C-Programm für Multiplikation zweier Ganzzahlen
#include <stdio.h>
/*Multiplication zweier Ganzzahlen*/
int main()
{
int a;
int b;
int erg;
a = 3;
b=4;
erg = a*b;
printf(„\nErgebnis: %d“, erg);
return 0;
}
Jede Zeichenfolge, die das Zeichenpaar /* ….. */ einschließt, ist Kommentar und wird vom
Compiler ignoriert.
Dr.-Ing. K. Jäger-Hezel, 10.11.2006
3
Ingenieurinformatik
Definition von Variablen
Variablennamen
Variablen und Funktionen werden im Programm über Namen angesprochen. Für die Bildung
von Namen gelten folgende Regeln:
•
•
•
•
Folge von Buchstaben, Ziffern oder Unterstrichen (_). Deutsche Umlaute und der
Buchstabe ß sind nicht zulässig. Groß- und Kleinbuchstaben werden unterschieden
(„case sensitiv“).
Das erste Zeichen muss ein Buchstabe oder ein Unterstrich sein.
Ein Name kann beliebig lang sein. (Signifikant sind nach ANSI-Standard nur die
ersten 31 Zeichen.)
Schlüsselwörter (z.B. float , int , long etc.) dürfen nicht als Name benutzt werden.
Datentypen
In C gibt es zwei Gruppen von elementaren Datentypen: Ganzzahlen und Gleitpunktzahlen
Typ
Speicherplatz
Wertebereich
Ganzzahlen:
(unsigned)
signed
(signed)
unsigned
(signed)
unsigned
(signed)
unsigned
char
char
short
short
int
int
long
long
1Byte
1Byte
2Byte
2Byte
4Byte
4Byte
4Byte
0 bis 255
-128 bis +127
-32768 bis 32767
0 bis 65535
-2147483648 bis 2147483648
0 bis 4294967295
„
Ganzza hlige Datentypen haben die Schlüsselworte signed (mit Vorzeichen) und unsigned
(ohne Vorzeichen). Die Größe des benötigten Speicherplatz bleibt dabei erhalten. Nur der
Wertebereich ändert sich, da bei signed-Werten das höchste Bit das Vorzeichen bestimmt.
Die Datentypen short, int und long werden standardmäßig mit Vorzeichen interpretiert, der
Typ char standardgemäß ohne Vorzeichen.
C unterscheidet nicht zwischen Zeichen und Ganzzahl, da Zeichen intern als Ganzzahlen
dargestellt werden, und zwar im Zeiche ncode der Maschine (ASCII-Code).
Gleitpunktzahlen:
Typ
Speicherplatz
float
double
long double
4Byte
8Byte
10Byte
Dr.-Ing. K. Jäger-Hezel, 10.11.2006
Genauigkeit
Wertebereich
(dezimal)
9 Stellen
1.2E-38 bis 3.4E+38
15 Stellen
2.3E-308 bis 1.7E+308
19 Stellen
3.4E-4932 bis 1.1E+4932
4
Ingenieurinformatik
Zur Darstellung der Gleitpunktzahlen wird üblicherweise das IEEE-Format verwendet:
Beispiel: float mit 32 Bit
Vorzeich.
31
Exponent zur Basis 2
30 ………………..
Mantisse
24 23 …………………………………0
Die Mantisse hat einen Wert der größer oder gleich 1 und kleiner 2 ist. Der reservierte
Speicherplatz für die Mantissse bestimmt die Genauigkeit, der für den Exponenten den
Wertebereich.
„normalisierte“ Form
Beispiel:
-4.5 = -1 * 1.125 * 22
Die Genauigkeit gibt an, wie viel Dezimalstellen einer Zahl gespeichert werden können. Zum
Beispiel bedeutet 9 Stellen genau, dass die 10. Dezimalstelle nicht mehr genau gespeichert
werden kann. So sind die Zahlen 1234567.89 und 1234567.897 nicht unterscheidbar, ebenso
nicht 0.000123456789 und 0.0001234567897.
Beim lcc-Compiler hat der Datentyp float eine 24 Bit lange Mantisse. (vgl. Header-Datei
float.h).
Wertzuweisung
Die Zuweisung eines Wertes erfolgt immer von rechts nach links.
Beispiel: a = 5;
Funktion „printf“
Die Funktion printf dient zur Ausgabe am Bildschirm. Die in der Klammer enthaltene
Zeichenkette wird ausgegeben. Die darin enthaltenen Formatelemente (sog. Formatierer)
werden durch die Werte der Argumente nach dem Komma ersetzt.
Beispiel:
printf(„Hello world!“);
Dr.-Ing. K. Jäger-Hezel, 10.11.2006
Ausgabe: Hello world!
5
Ingenieurinformatik
Bildschirmausgabe mit Anführungszeichen:
printf(„\“Text\““);
Ausgabe: „Text“
Formatierer:
%d
%f
%lf
%c
%s
Ausgabe als Dezimalzahl
Ausgabe als Gleitkommazahl mit einfacher Genauigkeit float
Ausgabe als Gleitkomma mit doppelter Genauigkeit double
Ausgabe als Zeichen
Ausgabe einer Zeichenkette
Beispiel:
printf(„%d %f“, 333,1.234);
Ausgabe: 333 1.234000
Feldbreite:
bedeutet: minimale Ausgabelänge (bzw. Feldlänge), schneidet nicht ab.
printf(„%2d“, 123);
printf(„%2d“,1);
Ausgabe:123
Ausgabe:_1
printf(„%f“, 9.8765);
printf(„%4.2f“, 9.8765);
Ausgabe:9.876500
Ausgabe: _9.88
Ausgabe linksbündig/rechtsbündig:
printf(„rechtsbündig:%5d linksbündig: %-5d“, 123,123);
Ausgabe: rechtsbündig:__123 linksbündig: 123__
Funktion „scanf“
Funktion zur Eingabe von Daten. Die Zeichen werden von der Standardeingabe
(Tastaturpuffer) gelesen, gemäß Formatierer konvertiert und der konvertierte Wert wird in der
Variablen gespeichert, die durch das Argument adressiert wird.
Beispiel:
int a;
scanf(„%d“, &a);
Dr.-Ing. K. Jäger-Hezel, 10.11.2006
6
Ingenieurinformatik
& ist Adressoperator, d.h. &a liefe rt die Adresse der Variablen a (Zeiger (pointer) auf die
Variable a).
Für jedes Formatelement wird das nächste Eingabefeld eingelesen, konvertiert und in die
entsprechende Variable abgelegt. Eingabefelder sind durch Zwischenraumzeichen (Leer,
Tabulator- und Newline-Zeichen) voneinander getrennt.
Beispiel:
int a = 0;
int b = 0;
printf(„Bitte zwei Integer-Zahlen eingeben!“);
scanf(„%d%d“,&a,&b);
fflush(stdin);
Eingabe:
12
enter
Inhalt: a=1
b=2
1
2
enter
enter
a=1
b=2
12
enter
a = 12 b=0 scanf wartet auf weitere Eingabe!
Wichtiger Hinweis:
Um Fehler beim Einlesen zu Vermeiden, empfiehlt es sich, nach der scanf-Funktion die
Anweisung fflush(stdin) durchzuführen. Dadurch wird der Tastaturpuffer gelöscht.
Rückgabewert der scanf -Funktion:
Die scanf-Funktion gibt einen Wert zurück, der die Anzahl der tatsächlich eingelesenen (und
konvertierten) Werte (bzw. Eingabefelder) angibt. Daran kann erkannt werden, ob die
Eingabe erfolgreich war.
Beispiel:
int a,b,ret;
do{
printf(„ \nZwei Ganzzahlen eingeben ! “ ) ;
ret = scanf( „ %d%d“, &a,&b);
fflush(stdin);
}while(ret != 2);
Dr.-Ing. K. Jäger-Hezel, 10.11.2006
7
Ingenieurinformatik
„ do…while“
Schleife
Struktogramm:
Anweisung
Solange (Ausdruck wahr ist)
fußgesteuerte („nicht abweisende“) Schleife
C-Anweisung:
do
{
…..
…..
} while( <Bedingung>);
„while“
Schleife
Struktogramm:
Solange (Ausdruck wahr ist)
Anweisung
kopfgesteuerte („abweisende“) Schleife
C-Anweisung:
while ( <Bedingung>)
{
…..
…..
}
Dr.-Ing. K. Jäger-Hezel, 10.11.2006
8
Ingenieurinformatik
Übung: Prüfung von Benutzereingaben
Beispiel Copy-Shop: Die eingegebene Anzahl der Kopien soll geprüft werden.
Def. und Initialisierung der Variablen zahl
Auff. Anzahl Kopien eingeben
Einlesen nach zahl
Solange zahl <1
Ausgabe: Sie haben korrekt eingegeben.
Ausgabe: Das Programm ist beendet
/*Datum*/
/*Thema*/
/*Name*/
#include <stdio.h>
int main()
{
int zahl = 0;
do
{
printf(„Bitte geben Sie die Anzahl der Kopien ein!“);
scanf(„%d“,&zahl);
fflush(stdin);
/*Löschen des Eingabepuffers*/
} while( zahl <1);
printf(„Sie haben korrekt eingegeben! \n“);
printf(„Das Programm ist beendet.“);
return 0;
}
Dr.-Ing. K. Jäger-Hezel, 10.11.2006
9
Ingenieurinformatik
Verzweigung mit „if….else“ Anweisung
if(Bedingung)
{
Anw. 1;
….
} else
{
Anw. 2;
….
}
Bed.
ja.
nein
Anw.1
Anw.2
Arithmetische Typenumwandlung
In C ist es möglich, die arithmetischen Datentypen zu mischen. Das bedeutet, dass die
Operanden einer arithmetischen Operation verschiedene Datentypen haben können. Der
Compiler nimmt dann automatisch eine implizite Typanpassung vor. Dabei gilt generell, dass
der Datentyp mit dem kleineren Wertebereich in den Datentyp mit dem größeren
Wertebereich umgewandelt wird, damit der Wert erhalten bleibt.
Mit dem Cast-Operator kann der Datentyp explizit geändert werden.
Problem: Bei der Division zweier Ganzzahlen können Brüche entstehen.
int a,b,c;
a = 4;
b = 3;
c = a/b;
Dr.-Ing. K. Jäger-Hezel, 10.11.2006
/*Ergebnis: Inhalt von c ist 1, da der Rest verworfen wird. */
10
Ingenieurinformatik
Lösung: Das Ergebnis einer Gleitpunktzahl zuordnen.
int a,b;
a = 4;
b = 3;
float erg;
erg = a/b;
/*Ergebnis: Inhalt von erg ist 1.000000 */
2 Lösungmöglichkeiten:
implizite Typumwandlung:
erg = 1.0 * a/b;
/* Inhalt von erg ist 1.333333*/
oder:
explizite Typumwandlung mit dem Cast-Operator:
erg = (float) a/b;
/* Inhalt von erg ist 1.333333*/
Cast-Operator
Übung: Copy-Shop
•
•
•
•
•
•
Anzahl der Kopien eingeben (Eingabe > 0)
Abfangen fehlerhafter Benutzereingaben
Meldung, wenn Falscheingabe
Preis pro Kopie definieren (50 Cent pro Kopie)
Gesamtpreis in Cent ausgeben
Gesamtpreis in Euro ausgeben
Dr.-Ing. K. Jäger-Hezel, 10.11.2006
11
Ingenieurinformatik
Init. und Def. int zahl = 0
Init und Def. int preis = 50
Aufforderung „Kopierzahl eingeben“
Einlesen in zahl
zahl < 1
ja
Sie haben falsch eingegeben!
nein
Kopierzahl wird übernommen!
Solange (zahl <1)
preis = preis * zahl
Ausgabe von preis in Einheit Cent
Ausgabe von preis/100 in Einheit Euro
Ausgabe „Programm ist beendet!“
Dr.-Ing. K. Jäger-Hezel, 10.11.2006
12
Ingenieurinformatik
C-Code:
/*Datum*/
/*Thema*/
/*Name*/
#include <stdio.h>
int main()
{
int zahl = 0;
int preis = 50;
/* Preis in Cent */
do
{
printf(„Bitte geben Sie die Anzahl der Kopien ein: “);
scanf(„%d“,&zahl);
fflush(stdin);
/*Löschen des Eingabepuffers*/
if(zahl<1)
{
printf(„\nSie haben falsch eingegeben!“);
}else
{
printf(„\nKopierzahl %d wird übernommen!“, zahl);
}
} while( zahl <1);
preis = preis *zahl;
printf(„Gesamtpreis in Cent: %d\n“, preis);
printf(„Gesamtpreis in Euro: %5.2f\n“, (float)preis/100);
printf(„Das Programm ist beendet!“);
return 0;
}
Formatelement %5.2f bedeutet: 5 ist die minimale Feldbreite bzw. Ausgabelänge (ohne
Dezimalpunkt) und 2 die Anzahl der Stellen hinter dem Dezimalpunkt.
Beispiele:
float y = 2.98765;
printf(„>%10f<\n“,y);
printf(„>%-10f< \n“,y);
printf(„>%10.2f<\n“,y);
Dr.-Ing. K. Jäger-Hezel, 10.11.2006
Ausgabe :
> 2.987650<
>2.987650 <
>
2.99<
linksbündig
13
Ingenieurinformatik
Funktion pow()
„power“ berechnet die Potenz xy . Ist als Funktion in der Header-Datei math.h definiert.
Bei Verwendung der Funktion muß entweder die Header-Datei math.h includiert werden mit
•
#include <math.h>
oder
•
deren Prototyp muss vor Gebrauch definiert sein mit:
double pow(double, double);
Return-Wert
/*Prototyp von pow()*/
Übergabe-Werte oder Argumente oder
Parameter, die an die Funktion übergeben werden
ANSI-Standard:
Der Prototyp einer Funktion besteht aus 3 Teilen:
• Datentyp der Rückgabe-Werts
• Name der Funktion
• Datentypen der Parameter, die an die Funktion übergeben werden
Beispiel: Berechnung der Wurzel aus 77 sowie 772 .
/*Datum*/
/*Thema*/
/*Name*/
#include <stdio.h>
double pow(double, double);
/*Prototyp*/
int main()
{
double x = 77 , y ;
y = pow(x, 0.5) ;
/*Wurzel aus 77*/
printf(„Wurzel aus 77 ergibt: %.3f\n“, y) ;
printf(„77 hoch 2 ergibt: %.3f\n“, pow(x, 2.0)) ;
return 0;
}
Dr.-Ing. K. Jäger-Hezel, 10.11.2006
14
Ingenieurinformatik
Funktion sqrt()
Funktion sqrt(x) („square root“), berechnet die Quadratwurzel des Arguments x. Der Wert x
darf nicht negativ sein. Die Funktion gibt den Wert der Quadratwurzel zurück, wenn die
Berechnung korrekt ist. Falls das Argument x negativ ist, so wird 0 zurückgegeben.
Der Prototyp von sqrt() ist in math.h enthalten:
double sqrt(double);
Übung:
Gegeben:
double st = 16;
double erg;
Gesucht ist die Quadratwurzel der Variablen st, berechnet mit der Funktion pow() und der
Funktion sqrt(). Ergebnis nach erg. Nur C-Code.
#include <stdio.h>
#include <math.h>
int main()
{
double st = 16;
double erg;
erg = pow(st, 0.5);
printf(“Ergebnis von pow(): %10.4lf\n”, erg);
printf(„Ergebnis von sqrt(): %10.4lf\n“, sqrt(st));
return 0;
}
Dr.-Ing. K. Jäger-Hezel, 10.11.2006
15
Ingenieurinformatik
„modulo“-Funktion
Während bei der Division zweier Ganzzahlen der Rest verworfen wird, ist das Ergebnis der
„modulo“-Funktion genau dieser Rest.
C- Code: %
Division von Ganzzahlen - verwirft Ergebnis und liefert den Rest !
Beispiele:
7%6 = 1
9%3 = 0
3%9 = 3
4%9=4
…..
9%9=0
10%9=1
sprich: 7 modulo 6
3728%2 = 0
2555551%2 =1
Zahl ist gerade
Zahl ist ungerade
Übung:
•
•
•
•
Frage nach ganzer Zahl.
Überprüfe, ob die Za hl durch 5 teilbar ist.
Wenn ja, Ausgabe „Zahl durch 5 teilbar.
Wenn nicht, gibt Text „nicht teilbar!“ aus und gib die nächst kleinere Zahl, die durch 5
teilbar ist, aus.
Struktogramm und C-Code
Dr.-Ing. K. Jäger-Hezel, 10.11.2006
16
Ingenieurinformatik
Auff. „Bitte eine ganze positive Zahl eingeben!“
Einlesen nach int zahl
ja
zahl durch 5 teilbar ?
nein
Ausgabe: Zahl ist nicht teilbar !
Ausgabe: Zahl ist durch 5 teilbar!
zahl = zahl -1
Solange (zahl >0 und nicht teilbar durch 5)
ja
zahl > 0
nein
„Richtig wäre
gewesen: zahl“
ersetzen
(zahl > 0) && ( zahl != zahl – (zahl modulo 5))
Dr.-Ing. K. Jäger-Hezel, 10.11.2006
17
Ingenieurinformatik
C-Code:
#include <stdio.h>
int main()
{
int zahl = 0;
printf(„Bitte ganze positive Zahl eingeben!\n“);
do
{
scanf(„%d“, &zahl);
fflush(stdin);
}while (zahl <=0);
int rest= zahl %5;
if(rest == 0 )
/*Vergleichsoperator “identisch gleich“ */
{
printf(„Zahl ist durch 5 teilbar.\n“);
} else
{
printf(„Zahl ist nicht durch 5 teilbar!\n“);
do
{
zahl = zahl -1;
rest = zahl%5;
}while(zahl >0 && rest >0);
if(zahl>0)
{
printf(„Richtig wäre gewesen: %d\n“, zahl);
}
}
return 0;
}
Ersatz-Code für do…..while:
do
{
zahl--;
}while( zahl>0 && zahl != zahl - (zahl%5));
Dr.-Ing. K. Jäger-Hezel, 10.11.2006
18
Ingenieurinformatik
Logische Operatoren
Mit logischen Operatoren werden zusammengesetzte Bedingungen formuliert.
C-Code
ODER
||
binärer Operatoren
UND
&&
NOT
!
(Bedingung1
||
Bedingung2 )
&&
unärer Operator
!(Bedingung)
In C liefert ein logischer Ausdruck als Ergebnis :
entweder
„falsch“ , d.h. den int Wert 0
oder
„wahr“
d.h. den int Wert 1
Wahrheitstabellen:
AND:
OR:
Bed.1 w
w
f
f
w
w
f
f
Bed.2 w
f
w
f
w
f
w
f
________________________________________________________________
Erg. w
f
f
f
w
w
w
f
NOT:
f
w
_________________
w
f
Beispiele für logische Ausdrücke:
x
1
0
1
0
y
-1
0
0
1
Dr.-Ing. K. Jäger-Hezel, 10.11.2006
Logischer Ausdruck
x <= y || y >= 0
x> -5 && y == 0
x == 1 && !y
!(x+1) || (y-2) >0
Ergebnis
0 (falsch)
1 (wahr)
1 (wahr)
0 (falsch)
19
Ingenieurinformatik
Übung:
Fordere eine ganze positive Zahl an, prüfe die Eingabe und gibt die Quersumme dieser Zahl
aus.
Struktogramm und C-Code
Auff. „Ganze positive Zahl eingeben!“
Einlesen der zahl und Prüfung der Eingabe
int sum =0, int rest =0
rest = zahl % 10;
sum = sum + rest;
zahl = zahl /10
Solange (zahl > 0)
Ausgabe Quersumme sum
#include <stdio.h>
int main()
{
int zahl = 0, sum =0;
do
{
printf(„Bitte eine positive ganze Zahl eingeben! \n“);
scanf(„%d“, &zahl);
fflush(stdin);
}while( zahl <= 0);
do
{
sum = sum + zahl %10;
zahl = zahl/10;
}while (zahl > 0);
printf(„\nQuersumme: %d“, sum);
return 0;
}
Dr.-Ing. K. Jäger-Hezel, 10.11.2006
20
Ingenieurinformatik
Zählschleife (“for”-Schleife)
•
•
•
Index mit festem Anfangswert
festem Endwert
Erhöhung um festen Wert pro Schleifenumlauf
Struktogramm
solange( i <= 10 )
Aktionen
i = i+1
C- Code
for( int i = 1; i<=10; i = i+1)
{
…..
}
oder
for(int i =1; i<=10; i++)
Inkrement-Dekrement-Operator
Unärer Operator, der den Wert um 1 erhöht bzw. erniedrigt.
i++;
i--;
entspricht
entspricht
i = i+1;
i = i -1;
i wird um 1 erhöht.
i wird um 1 erniedrigt
Schreibweise ist in for-Schleifen üblich:
for( s= 1; s<=10; s++)
Man unterscheidet zwischen Postfix und Präfix:
Postfix:
j = i++;
Dr.-Ing. K. Jäger-Hezel, 10.11.2006
bedeutet:
j = i;
i = i+1;
Zuerst wird der Wert von i dem Wert von j zugeordnet und dann
wird i um 1 erhöht.
21
Ingenieurinformatik
Präfix:
j = ++i;
bedeutet: i = i+1;
j = i;
Zuerst wird i um 1 erhöht und dann sein Wert dem Wert von j
zugeordnet.
Beispiel:
int i,j;
i = 1;
j = ++i +1;
/* i = 2, j = 3 */
i wird um 1 erhöht, bevor es im
Ausdruck verwendet wird.
i = 1;
j = i++ +1;
/* i = 2, j = 2 */
i wird um 1 erhöht, nachdem es
im Ausdruck verwendet wird.
Übung:
Geben Sie eine Multiplikationstabelle von 1 bis 10 am Bildschirm aus.
1
2
3
4
5
6
7
8
9
10
1
1
2
3
4
5
6
7
8
9
10
2
2
4
6
8
10
12
14
16
18
20
3
3
6
9
12
15
18
21
24
27
30
10
20
30
40
50
60
70
80
90
100
4
5
6
7
8
9
10
Hilfestellung: 2 ineinander geschachtelte for-Schleifen
Dr.-Ing. K. Jäger-Hezel, 10.11.2006
22
Ingenieurinformatik
Ausgabe Kopfzeile mit Tabulator-Zeichen
Int Variablen Zeile = 1; spalte = 1; erg = 0;
Solange zeile <=10
Ausgabe Zeilennummer zeile
Solange spalte <=10
Erg = zeile * spalte
Ausgabe: \t erg
Spalte = spalte +1
Zeile = zeile +1
#include <stdio.h>
int main()
{
printf(„\n\t1\t2\t3\t4\t5\t6\t7\t8\t9\t10“);
int z = 0, s = 0;
int erg = 0;
for( z = 1; z<=10;z++)
{
printf(“\n%d”, z);
for( s= 1; s<=10; s++)
{
erg = z*s;
printf(“\t%d”, erg);
}
}
return 0;
}
Dr.-Ing. K. Jäger-Hezel, 10.11.2006
23
Zugehörige Unterlagen
Herunterladen