• Keine Ergebnisse gefunden

Grundlegende Anweisungen in C++

N/A
N/A
Protected

Academic year: 2021

Aktie "Grundlegende Anweisungen in C++"

Copied!
13
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Grundlegende Anweisungen in C++

Peter Bastian

Dieses Dokument basiert auf einer urspr¨unglich englischen Fassung von Kathari- na Vollmayr-Lee (http: // www. eg. bucknell. edu/ ~ kvollmay/ caps_ s2010/ C+ +_

summary. pdf).

1 Kompilieren

C++-Programme lassen sich mit dem GNU C++-Compiler g++ ¨ubersetzen. Dabei kann mit der Option -o der Name der zu erzeugenden ausf¨uhrbaren Datei angeben (sonst heißt das Executable einfacha.out).

Beispiel:

g++ testApp.cc (erzeugt das Programm a.out) g++ -o testApp testApp.cc (erzeugt das Programm testApp)

Bei vielen Unix-Systemen befindet sich das aktuelle Verzeichnis aus Sicherheits- gr¨unden nicht im Pfad in dem nach ausf¨uhrbaren Programmen gesucht wird. Um ein ubersetztes Programm zu starten ist es deshalb n¨¨ otig ein./voranzustellen (.bezeich- net das aktuelle Verzeichnis), also: ./a.outbzw../testApp

2 C++-Syntax und Kommentare

Jeder C++-Befehl wird durch ein Semikolon (;) abgeschlossen. Ein Zeilenumbruch hat in C++ keine Bedeutung, d.h. man kann einen C++-Befehl auch ¨uber mehrere Zeilen verteilen.

Kommentare sollen den geschriebenen Code f¨ur Außenstehende kurz und knapp erl¨autern.

Kommentare sind ein unverzichtbarer Bestandteil eins Programms. Sie erkl¨aren die Funktionsweise von Programmen (nicht nur Anderen, sondern auch dem Autor, wenn er seinen Code nach l¨angerer Pause wieder verstehen will!) und werden vom Compiler ignoriert.

/∗ ... ∗/ kennzeichnet den Text zwischen/∗und*/als Kommentar (mehrere Zeilen sind m¨oglich)

// ... kennzeichnet den Rest der Zeile hinter//als Kommentar

(2)

3 Datentypen

Datentyp Variablendeklaration Zuweisung Darstellungsbereich

(Beispiel) (Beispiel)

ganze Zahlen short i1,i2; i1 = 3; [−32768...32767]

int i1,i2; [−2.14·109...2.14·109]

long i1,i2; [−2.14·109...2.14·109]

unsigned i1,i2; [0...4.29·109]

unsigned long i1,i2; [0...4.29·109]

reelle Zahlen float f1,f2; f1 = 3.2; f2 = 2.1E-3; ±[10−38...1038] 7 Stellen genau

double f1,f2; ±[10−308...10308]

16 Stellen genau

long double f1,f2; ±[10−4932...104932]

19 Stellen genau einzelne Zeichen char c1,c2; c1 = ’R’

Zeichenketten string s1,s2; s1 = "Farmer"

logischer Ausdr¨ucke bool b1,b2; b1 = true; b2 = false

3.1 Konstanten

Der Wert einer Konstanten kann nach der Definition nicht mehr ge¨andert werden. Eine konstante Konstante wird definiert durch

const type VariablenName = Wert;

Beispiele:

c o n s t int P u n k t e z a h l = 10;

c o n s t d o u b l e e p s i l o n = 1 E - 2 0 ;

4 Ein- und Ausgabe

4.1 Ein- und Ausgabe auf dem Bildschirm:

Um die Ein- und Ausgabeanweisungen benutzen zu k¨onnen, ist es notwendig zuerst eine Headerdatei einzubinden, die die entsprechenden Funktionsdeklarationen enth¨alt (am Beginn der Programmdatei):

# i n c l u d e < i o s t r e a m >

std::cout ist der Standard-Output. Die Ausgaben auf std::cout landen auf dem Bildschirm. Die Ausgabe von std::endl f¨uhrt zu einem Zeilenumbruch. std::cin ist der Standard-Input und liest von der Tastatur.

4.1.1 Ausgabe int v a l u e = 4 2 ;

std :: c o u t < < " A u s z u g e b e n d e r T e x t ... " ;

std :: c o u t < < v a l u e < < std :: e n d l ; // g i b Wert von v a l u e a u s std :: c o u t < < " Der W e r t von v a l u e ist " < < v a l u e < < std :: e n d l ;

(3)

4.1.2 Eingabe int v a r i a b l e ;

std :: c o u t < < " G e b e n Sie e i n e g a n z e Z a h l ein : "

std :: cin > > v a r i a b l e ;

4.2 IO-Manipulatoren

Mit IO-Manipulatoren l¨asst sich die Art der Ausgabe beeinflussen. F¨ur die Manipula- toren mit Argument muss der Headeriomanip eingebunden werden.

# i n c l u d e < iomanip >

Die Manipulatoren ohne Argument sind bereits in iostreamdeklariert.

4.2.1 Integer Manipulatoren dec Ausgabe als Dezimalzahl oct Ausgabe als Oktalzahl hex Ausgabe als Hexadezimalzahl Beispiel:

# i n c l u d e < i o s t r e a m >

int m a i n () {

int a = 12;

std :: c o u t < < " 12 is o c t a l " < < std :: oct < < a

< < " w h i c h is h e x a d e c i m a l "

< < std :: hex < < a < < std :: e n d l ; }

Ausgabe:

12 is octal 14 which is hexadecimal c

4.2.2 Fließkomma Manipulatoren

fixed Ausgabe als Festkommazahl

scientific Ausgabe als Fließkommazahl

setprecision(int p) Ausgabe mit pStellen Genauigkeit

setw(int w) Ausgabe mit wStellen Breite

Beispiel:

# i n c l u d e < i o s t r e a m >

# i n c l u d e < iomanip >

int m a i n ()

(4)

{

std :: c o u t < < " 1/3 is w i t h t h r e e d i g i t s " < < std :: s e t w ( 1 5 ) ; std :: c o u t < < std :: s e t p r e c i s i o n (3) < < 1 . / 3 . < < std :: e n d l ; std :: c o u t < < " 1/3 is w i t h t w e l v e d i g i t s " < < std :: s e t w ( 1 5 ) ; std :: c o u t < < std :: s e t p r e c i s i o n ( 1 2 ) < < 1 . / 3 . < < std :: e n d l ; }

Ausgabe:

1/3 is with three digits 0.333 1/3 is with twelve digits 0.333333333333

4.2.3 Format Manipulatoren left Linksb¨undige Ausgabe right Rechtsb¨undige Ausgabe Beispiel:

# i n c l u d e < i o s t r e a m >

# i n c l u d e < iomanip >

int m a i n () {

std :: c o u t < < std :: l e f t ;

std :: c o u t < < " 1/3 is w i t h t h r e e d i g i t s " < < std :: s e t w ( 1 5 ) ; std :: c o u t < < std :: s e t p r e c i s i o n (3) < < 1 . / 3 . < < std :: e n d l ; std :: c o u t < < " 1/3 is w i t h t w e l v e d i g i t s " < < std :: s e t w ( 1 5 ) ; std :: c o u t < < std :: s e t p r e c i s i o n ( 1 2 ) < < 1 . / 3 . < < std :: e n d l ; }

Ausgabe:

1/3 is with three digits 0.333

1/3 is with twelve digits 0.333333333333

4.2.4 Boole’sche Manipulatoren

boolalpha Ausgabe als Zeichenkettetrue/false

noboolalpha Ausgabe als0/1

(5)

Beispiel:

# i n c l u d e < i o s t r e a m >

int m a i n () {

b o o l a = t r u e ;

std :: c o u t < < " w i t h o u t b o o l a l p h a f l a g the v a l u e of a is " ; std :: c o u t < < a < < std :: e n d l ;

std :: c o u t < < " w i t h b o o l a l p h a f l a g the v a l u e of a is " ; std :: c o u t < < std :: b o o l a l p h a < < a < < std :: e n d l ;

}

Ausgabe:

without boolalpha flag the value of a is 1 with boolalpha flag the value of a is true

4.3 Ein-/Ausgabe mit einer Datei:

F¨ur die Ein-/Ausgabe mit Dateien ist die Headerdatei, ist es notwendig die Headerdatei fstream einzubinden:

# i n c l u d e < fstream >

die die Klassen ofstream (zur Ausgabe von Daten in eine Datei) undifstream (zum Einlesen von Daten aus einer Datei) zur Verf¨ugung stellt.

4.3.1 Ausgabe d o u b l e a = 1 0 0 . 0 ;

std :: o f s t r e a m o u t f i l e ( " D a t e i n a m e . txt " );

o u t f i l e < < a ;

schreibt den Wert der Variablenain eine Datei mit dem Namen Dateiname.txt. 4.3.2 Eingabe

Eine Datei mit dem NamenEingabedatei.txtenth¨alt drei Zahlen, die entweder durch ein Leerzeichen oder einen Zeilenumbruch voneinander getrennt sind. Das folgende Programmfragment liest die Zahlen in die Variablenabiscvom Typdoubleund gibt sie auf den Bildschirm aus:

d o u b l e a , b , c ;

std :: i f s t r e a m i n f i l e ( " E i n g a b e d a t e i . txt " );

i n f i l e > > a > > b > > c ;

std :: c o u t < < " a = " < < a < < " b = " < < b < < std :: e n d l ; std :: c o u t < < " c = " < < c < < std :: e n d l ;

(6)

5 Arithmetische Berechnungen

5.1 Operationen

+ − ∗ /

5.2 Mathematische Funktionen

Um die nachfolgenden Funktionen benutzen zu k¨onnen, muss die Headerdatei cmath am Anfang des Programms eingebunden werden:

# i n c l u d e < cmath >

C++ Name Funktion pow(x,y) xy sin(x)

cos(x) tan(x)

asin(x) sin−1(x) im Bereich [−π/2, π/2]

acos(x) cos−1(x) im Bereich [0, π]

atan(x) tan−1(x) im Bereich [−π/2, π/2]

sinh(x) cosh(x) tanh(x)

exp(x) ex

log(x) ln(x)

sqrt(x)

x

fabs(x) |x|

floor(x) gr¨oßte ganze Zahl, die kleiner oder gleichxist; z.B.:floor(5.768)= 5 ceil(x) kleinste ganze Zahl, die nicht kleiner alsxist; z.B.:ceil(5.768)= 6 fmod(x,y) Fließkomma-Rest der Divisionx/y. Ergebnis hat dasselbe Vorzeichen wiex.

x % y Rest der ganzzahligen Divisionx/y.xundyussen ganzzahlig sein.

6 Programmflusssteuerung

6.1 Vergleichsoperatoren

C++ Name Funktion Beispiel

== Gleichheit i1 == i2

!= 6= i1 != i2

> > i1 > i2

< < i1 < i2

>= ≥ i1 >= i2

<= ≤ i1 <= i2

&& logisches UND (i1 != i2)&& (i1 == i3)

|| logisches ODER (i1 == i2) || (i1 == i3)

Vorsicht! In C++ unterscheiden sich der Zuweisungsoperator = und der Operator zum Test auf Gleichheit==. Die Verwechslung von beiden ist einer der h¨aufigen Fehler in C++.

(7)

6.2 Fallunterscheidungen

6.2.1 if, else if, else // b e d i n g t e A u s f ¨u h r u n g if ( B e d i n g u n g )

{

A n w e i s u n g e n }

// b e d i n g t e A u s f ¨u h r u n g m i t A l t e r n a t i v e if ( B e d i n g u n g )

{

A n w e i s u n g e n }

e l s e {

A n w e i s u n g e n }

// b e d i n g t e A u s f ¨u h r u n g m i t m e h r e r e n A l t e r n a t i v e n if ( B e d i n g u n g )

{

A n w e i s u n g e n }

e l s e if {

A n w e i s u n g e n }

e l s e {

A n w e i s u n g e n }

Beispiel:

if ( i >0) {

std :: c o u t < < " i ist p o s i t i v " < < std :: e n d l ; }

e l s e if ( i <0) {

std :: c o u t < < " i ist n e g a t i v " < < std :: e n d l ; }

e l s e {

std :: c o u t < < " i ist n u l l " < < std :: e n d l ; }

6.2.2 switch/case/default

(8)

// U n t e r s c h e i d u n g m e h r e r e r M ¨o g l i c h k e i t e n s w i t c h ( C a s e V a r i a b l e )

{

c a s e W e r t 1 : {

A n w e i s u n g e n }

b r e a k ; // wenn b r e a k f e h l t w i r d d e r // f o l g e n d e B l o c k a u c h a u s g e f ¨u h r t c a s e W e r t 2 a :

c a s e W e r t 2 b : {

A n w e i s u n g e n }

b r e a k ; d e f a u l t :

{

A n w e i s u n g e n }

}

6.3 Wiederholungen

6.3.1 while-Schleife

// w i e d e r h o l e s o l a n g e B e d i n g u n g wahr i s t w h i l e ( B e d i n g u n g )

{

A n w e i s u n g e n }

Beispiel:

int i =0;

w h i l e ( i <10 ) {

i = i +1;

std :: c o u t < < " i = " < < i < < std :: e n d l ; }

6.3.2 for-Schleife

// f u e h r e I n i t i a l i s i e r u n g s a n w e i s u n g e n a u s

// v o r j e d e r W i e d e r h o l u n g f ¨u h r e A k t u a l i s i e r u n g s a n w e i s u n g e n // aus , w i e d e r h o l e s o l a n g e B e d i n g u n g wahr i s t

for ( I n i t i a l i s i e r u n g ; B e d i n g u n g ; A k t u a l i s i e r u n g ) {

A n w e i s u n g e n }

Beispiel:

(9)

for ( int i =0; i < 1 0 ; ++ i ) {

std :: c o u t < < " i = " < < i < < std :: e n d l ; }

6.3.3 do-Schleife

// f ¨u h r e e i n m a l aus , w i e d e r h o l e wenn B e d i n g u n g wahr i s t do

{

A n w e i s u n g e n // A ch tu ng : Anweisungen we rde n a u s g e f ¨u h r t // b e v o r d i e B e d i n g u n g ¨u b e r p r ¨u f t w i r d . } w h i l e ( B e d i n g u n g );

Beispiel:

int i =0;

do {

i = i +1;

std :: c o u t < < " i = " < < i < < std :: e n d l ; } w h i l e ( i <11 );

(10)

7 Funktionen

Eine Funktion ist eine zusammengefasste Abfolge von Anweisungen. Es ist n¨utzlich, eine benutzerdefinierte Funktion zu schreiben, wenn eine immer wieder kehrende Auf- gabe erledigt werden soll. Funktionen helfen auch dabei ein Programm zu strukturieren und lesbarer zu machen. Die Ausf¨uhrung aller C++-Programme startet mit der Funk- tionmain. Drei Schritte sind bei der Benutzung einer Funktion wichtig:

1. Eine Funktion muss deklariert sein, bevor man sie benutzen kann:

R¨uckgabetyp Funktionsname( Argumentliste );

d o u b l e f e e t I n c h T o M e t e r ( int , d o u b l e );

v o i d m e t e r T o F e e t I n c h ( d o u b l e meter , int & feet , d o u b l e & i n c h );

Der R¨uckgabetyp gibt an welchen Typ von Variable die Funktion zur¨uck liefert.

voidbedeutet dass die Funktion keinen Wert zur¨uck gibt.

In der Argumentliste steht eine Liste von durch Komma getrennten Variablenty- pen, die die Eingabeparameter der Funktion beschreiben. Wahlweise darf nach dem Typ auch ein Variablennamen stehen. Das macht das Programm lesbarer.

Steht nach dem Variablentyp ein&wird eine Referenz der Variablen ¨ubergeben, d.h. wird der Wert der Variablen in der Funktion ver¨andert, dann ¨andert sich auch der Wert der ¨ubergebenen Variablen im aufrufenden Programmteil (dass kann auch dazu verwendet werden, mehrere Ergebnisse zur¨uckzuliefern). Sonst wird eine Kopie der Variablen angelegt, ¨Anderungen des Variablenwertes haben dann nur lokale Auswirkungen innerhalb der Funktion.

2. Verwendung der Funktion:

Funktionsname( Parameterliste );

int f e e t =6;

d o u b l e m e t e r = f e e t I n c h T o M e t e r ( feet , 1 . 5 ) ; d o u b l e i n c h ;

m e t e r T o F e e t I n c h ( meter , feet , i n c h );

3. Jede Funktion muss an einer Stelle definiert (=implementiert) werden:

R¨uckgabetyp Funktionsname( Argumentliste ) {

Deklarationen und Anweisungen }

Steht die Definition einer Funktion vor ihrem ersten Aufruf, dann ist Deklaration nicht n¨otig.

Beispiel:

(11)

d o u b l e f e e t I n c h T o M e t e r ( int feet , d o u b l e i n c h ) {

r e t u r n 0 . 3 0 4 8 * f e e t + i n c h * 0 . 0 2 5 4 ; };

v o i d m e t e r T o F e e t I n c h ( d o u b l e meter , int & feet , d o u b l e & i n c h )

{

f e e t = int ( m e t e r / 0 . 3 0 4 8 ) ;

// ¨a n d e r t Wert von m e t e r i n a u f r u f e n d e r F u n k t i o n n i c h t m e t e r = m e t e r - 0 . 3 0 4 8 * f e e t ;

i n c h = m e t e r / 0 . 0 2 5 4 ; };

(12)

8 Kommandozeilenparameter

Einem Programm lassen sich beim Aufruf Argumente ¨ubergeben. Dies ist praktisch, da sich die Kommandozeile bei wiederholten Aufrufen editieren l¨asst, so dass man nicht alle Werte neu eingeben muss, wenn sich einzelne ¨andern (im Gegensatz zum Einlesen von der Tastatur im Programm).

Die Funktionmainhat entweder kein Argument oder zwei Argumente:

//∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ // F i l e n a m e : c m d l i n e . c c

// C o m p i l i n g : g++−o c m d l i n e c m d l i n e . c c //∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗

# include < i o s t r e a m >

int m a i n ( int argc , c h a r * a r g v []) {

for ( int i =0; i < a r g c ;++ i )

std :: c o u t < < a r g v [ i ] < < std :: e n d l ; r e t u r n 0;

}

Beispielaufruf:

./cmdline methodeX 2.4 5

• Das erste Argument argc gibt die Anzahl der Kommandozeilenparameter plus eins an, da der Name des aufgerufenen Programms immer zus¨atzlich als Kom- mandozeilenparameter ¨ubergeben wird.

• Das zweite Argumentargv ist ein Feld von Zeichenketten, deren Werte sich mit dem eckige Klammer Operator abfragen lassen.

– argv[0]enth¨alt den Programmnamen, also./cmdline – argv[1]enth¨alt den ersten Parameter, alsomethodeX – argv[2]enth¨alt den zweiten Parameter, also2.4 – argv[3]enth¨alt den dritten Parameter, also5

8.1 Konvertierung von Zeichenketten

Die als Zeichenketten vorliegenden Kommandozeilenparameter lassen sich in Zahlen konvertieren. Dazu muss der Header cstdlibeingebunden werden.

# include < cstdlib >

F¨ur die Konvertierung in eine Fließkommazahl dient die Funktion atof: d o u b l e a = a t o f ( a r g v [ 2 ] ) ;

F¨ur die Konvertierung in eine Ganzzahl gibt es die entsprechende Funktionatoi. int b = a t o i ( a r g v [ 3 ] ) ;

(13)

9 N¨ utzliche Online-Referenz

http://www.cplusplus.com

enth¨alt ein Suchfeld f¨ur C++ Funktionen. Die meisten Beschreibungen sind mit ei- nem kleinen Beispiel versehen.

Referenzen

ÄHNLICHE DOKUMENTE

• Damit eine Funktion mit einer Variablen ein Maximum in einem Punkt erreicht, muss die Ableitung in diesem Punkt Null

ƒ Abhängige Variable (Regressand, response, outcome): Diese Variable soll aus der anderen Variable berechnet werden.. Methode der Kleinsten Quadrate Methode der

[r]

Eine Funktion heißt einein- deutig, wenn es auch umgekehrt zu jedem f(x)-Wert genau einen x -Wert gibt.. Das Schaubild (der Graph ) einer Funktion ist die vollst¨ andige

• Bildlich kann man sich die Achsenspiegelung in der Ebene so vorstellen, dass man die zu spiegelnde Figur um die Spiegelachse auf die andere

• Bildlich kann man sich die Punktspiegelung in der Ebene so vorstellen, dass man die zu spiegelnde Figur um den Spiegelpunkt um 180

2. Hier sollte man sich ¨ uberlegen, wann zwei Funktionen als gleich angesehen werden k¨onnen. Es ist jedoch oft zweckm¨aßig, als Argumente auch Teilmengen des

Bestimmen Sie den Definitionsbereich der folgenden Funktionen von zwei