![Page 1: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/1.jpg)
C-Block 1LU 182.109 Systemprogrammierung
Harald Paulitsch
![Page 2: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/2.jpg)
2
Entstehung von C
• 1972 entstanden• von Dennis Ritchie für UNIX entworfen• durch UNIX große Verbreitung• ab 1993 Bestrebungen C zu standardisieren
American National Standard Institute (ANSI)
![Page 3: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/3.jpg)
3
Goals & „non Goals“
• Ziele– Überblick über C– Grundlegendes über C-Programmierung– Hilfestellungen zum Selbststudium
• Was kann dieser Kurs nicht?– Ihnen das Üben abnehmen– „C beibringen“ das müssen Sie selber
![Page 4: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/4.jpg)
4
ProgrammentwicklungAufgabe
Lösung
Implementierung
Design
Analyse
![Page 5: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/5.jpg)
5
Unser erstes C-Programm 1/2
Schreiben Sie ein Programm, das den Schriftzug„Hello world“
auf dem Terminal ausgibt.
![Page 6: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/6.jpg)
6
Unser erstes C-Programm 2/2
/* Hello World! */
#include <stdio.h>
int main(int argc, char *argv[]){
printf(“Hello, world!\n”);return 0;
}
![Page 7: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/7.jpg)
7
Rückblende
• Kommentare/* Kommentar */
• Definition der Funktion mainint main(int argc, char *argv[]){...}
• Headerdateien includieren#include<stdio.h>
• Ausgabe mittels printfprintf(„Hello world\n“);
• terminieren mit Rückgabewertreturn 0;
![Page 8: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/8.jpg)
8
Elemente von C
• Variablen, Konstanten, Operatoren, Ausdrücke• Kontrollflussmechanismen• Arrays• Pointer & Pointerarithmetik• Funktionen• Strukturen und benutzerdefinierte Typen
![Page 9: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/9.jpg)
9
Was kann C?
• kompakte effiziente Sprache, Source ist portabel• Preprozessor mit Makroersetzung• Flexible Programmierung
– Hochsprache– Maschinennahe Operatoren– Direkter Speicherzugriff– Adressarithmetik
![Page 10: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/10.jpg)
10
... und was kann C nicht?
• keine Laufzeittests– Stackoverflow– Bereichsüberschreitung (Arrays)
• keine komplexen Datentypen– keine Strings mit impliziter Funktionalität
(Vergleich, Aneinanderhängen, ...)
![Page 11: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/11.jpg)
11
Unser zweites C-Programm 1/5
Schreiben Sie ein Programm, das eine Umrech-nungstabelle von Schilling in Euro auf dem Terminal ausgibt.x[Euro]=x[Schilling]/13.7603
![Page 12: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/12.jpg)
12
Unser zweites C-Programm 2/5#include <stdio.h>
int main(int argc, char *argv[]){
return 0;}
![Page 13: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/13.jpg)
13
Elementare Datentypen 1/3
• Ganzzahlig– char⇒ ein Zeichen (compilerabhängig)– int ⇒ Zahl (compilerabhängig)– short ≤ int⇒ Zahl (compilerabhängig)– long ≥ int⇒ Zahl (compilerabhängig)
• Modifier– signed– unsigned
![Page 14: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/14.jpg)
14
Elementare Datentypen 2/3
• Fließkommazahlen– float⇒ eine Fließkommazahl– double≥float⇒ eine Fließkommazahl
• auch hier wieder: Länge (Mantisse & Exponent) ist complierabhängig
• Dot (.) nicht Komma (,) trennt den ganzzahligen vom gebrochenen Anteil
![Page 15: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/15.jpg)
15
Elementare Datentypen 3/3• Obwohl Wertebereich der einzelnen Datentypen nicht konkret
spezifiziert, so wird im ANSI C Standard [1] dennoch zumindest ein Minimalumfang dieser Wertebereiche (definiert in limits.h) gefordert.
• Beispiele – CHAR_BIT⇒ 8 /* d.h. ‚char‘ hat mind. 8 bits */– SCHAR_MIN⇒ -127– SCHAR_MAX⇒ +127– INT_MIN⇒ -32767 /* d.h. ‚int‘ hat mind. 16 bits */– INT_MAX⇒ +32767– … /* und so weiter */
[1] ANSI C Standard „C99“, Abschnitt 5.2.4.2, Numerical Limits
![Page 16: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/16.jpg)
16
Variablen 1/4
• Name– Buchstaben, Ziffern, ‘_‘ (case-sensitive,
Postleitzahl ≠ postleitzahl)– erstes Zeichen muss Buchstabe sein– nur die ersten 32 Zeichen sind relevant– keine Schlüsselwörter (if, while, int, ...)
![Page 17: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/17.jpg)
17
Variablen 2/4
• Definition– am Beginn jedes Blockes– als Parameter einer Funktion
(Achtung! keine Defaultwerte)– global (ausserhalb jedes Blockes)
am besten vor allen Funktionen
![Page 18: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/18.jpg)
18
Variablen 3/4
• Beispieldefinitionen– Blockbeginn{int nLower; ...
– Funktionsparameterint FooBar(int nUpper){ ...
– globalint nStep;int main(int argc,char *argv[]){...
![Page 19: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/19.jpg)
19
Variablen 4/4
• Initiailisierung– Blockbeginn{int nLower = 42; ...
– Funktionsparameterkeine Initialisierung/Defaultwerte
– globalint nStep = 13;int main(int argc,char *argv[]){...
![Page 20: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/20.jpg)
20
Unser zweites C-Programm 3/5#include <stdio.h>
int main(int argc, char *argv[]){int nI = 0;
return 0;}
![Page 21: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/21.jpg)
21
Konstanten 1/2
• Schreibweise der Zahl drückt einen Typ aus:– ganzzahlig: 3356, -34, (27 + 3 * 2)– lang: 456456L, -1L– Gleitpunkt: 10., 3.141, -1.E-6
• Zahlensysteme– oktal: 012, 015, 040– hex: 0x41, 0xABBA, 0x0ED
![Page 22: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/22.jpg)
22
Konstanten 2/2
• ein charakter: ‘a‘, ‘\n‘, ‘\0‘Vorsicht! einfache Hochkommata verwenden (auf der deutschen Tastatur Shift-#)
• Definition mit dem Preprozessor– #define NAME Wert
Klammern sind wichtig!#define FACTOR 3 + 4X = FACTOR * 5;
![Page 23: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/23.jpg)
23
Unser zweites C-Programm 4/5#include <stdio.h>#define EURO_KURS 13.7603int main(int argc, char *argv[]){
int nI = 0;
return 0;}
![Page 24: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/24.jpg)
24
Operatoren 1/7
• Arithmetische Operatoren– binär: +, -, *, /, %– unär: -(Negation), ++(Increment),
--(Decrement)
• Vergleichsoperatoren< > <= >= == !=Ergebnis ist true(1) oder false(0)
![Page 25: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/25.jpg)
25
Operatoren 2/7
• logische Operatoren– Anzahl der Argumente:
• binär: && (log. AND), || (log. OR)• unär: ! (log. NOT)
– Ergebnis ist true(1) oder false(0)– Auswertung von links nach rechts bis das
Ergebnis feststeht („short circuit semantics“)
![Page 26: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/26.jpg)
26
Operatoren 3/7
• bitweise Operatoren– binär: & (AND), |(OR),
^ (XOR), << bzw. >> (SHIFT)– unär: ~ (NOT)
Klammern setzten oder Prioritäten beachten!
![Page 27: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/27.jpg)
27
Operatoren 4/7
• Zuweisungsoperatoren=, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=Syntaxformen:– variable OP= expression;– variable = variable OP (expression);
• Typumwandlungsoperatoren (casts)Syntax: ( typ ) expression
![Page 28: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/28.jpg)
28
Operatoren 5/7
• Zuweisung - binäres MinusnI = 2 - 1;
• Postincrement - PrädecrementnI++ == 2 (false), --nI ==1 (true)
• logisches ANDif( (nI > 5) && (nI < 11) )(true ∀ nI ∈ {6,7,8,9,10})
![Page 29: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/29.jpg)
29
Operatoren 6/7
• Typumwandlungint nI=15;(double) nI / 4 + 0.25; /* 4. */nI / 4 + 0.25; /* 3.25 */nI / 4. + 0.25; /* 4. */
• ZuweisungsoperatorennI *= 5 + 1; /* nI = nI * (5 + 1) */
![Page 30: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/30.jpg)
30
Operatoren 7/7
• bitweise OperatorennA = 6; /* 0110 = 6 */nB = 3; /* 0011 = 3 */nC = nA | nB; /* 0111 = 7 */nD = 12; /* 1100 = 12 */nE = nC & nD; /* 0100 = 4 */nF = nE >> 2; /* 0001 = 1 */
![Page 31: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/31.jpg)
31
Ausdrücke
• Ausdrücke werden gebildet aus– Konstanten– Variablen– Funktionsaufrufen– Operatoren zur Verknüpfung
• Priorität und Assoziativität– Klammern, bzw. auswendig lernen
![Page 32: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/32.jpg)
32
Statements und Blöcke
• Statements– Durch ; werden Ausdrücke zu StatementsnI = 0715;
• Blöcke– Durch {} werden eingeschlossene
Deklarationen und Statements zu Blöcken– Kein ; nach }
![Page 33: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/33.jpg)
33
Lokale Variablen
• in einem Block sind lokale Variablen möglich– Deklaration am Beginn des Blockes (nach {)– Geltungsbereich (Scope) auf Block begrenzt– können äußere Variablen überlagernint nI;int main(int argc, char *argv[]){int nI;nI = 15; /* lokales nI */
![Page 34: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/34.jpg)
34
Kontrollflussmechanismen 1/2
• if( expression ){statements
}else{statements
}
• expression kann ein beliebiger Ausdruck seinjeder Wert != 0 ist true ⇒ if-Zweig,0⇒ else-Zweig (optional)
![Page 35: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/35.jpg)
35
Kontrollflussmechanismen 2/2
• switch( expression ){case CONST1:
statementsbreak; /* break nicht vergessen!! */
case CONSTn:statementsbreak;
default:statementsbreak;
}
![Page 36: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/36.jpg)
36
Schleifen
• while( expression ){statements
}• do{
statements}while( expression );
• for( PräExp; CondExp; PostExp ){statements
}
![Page 37: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/37.jpg)
37
Explizite Schleifenunterbrechung
• breakAbbruch der innersten Schleife
• continueBeendigung des momentanen DurchlaufsFortsetzung mit nächster Iteration
• Return expressionbeendet die Ausführung einer Funktion
![Page 38: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/38.jpg)
38
Strukturierung
• Leerzeichen, Leerzeilen und Klammern zur Strukturierung verwenden– Was bedeutet: if(nI&5+nJ==15)
a) if( ((nI & 5) + nJ) == 15 )b) if( (nI & (5 + nJ)) == 15 )c) if( nI & ((5 + nJ) == 15) )d) if( nI & (5 + (nJ == 15)) )
• Blöcke durch Einrücken kenntlich machen
![Page 39: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/39.jpg)
39
So nicht!#include <stdio.h>#define PO(o,t)\(((o>64)&&(o<91))?(((t>96)&&(t<123))?(t-32):(t)):(((t>64)&&(t<91))?(t+32):(t)))
void main() { char *poo= "poot",*Poo="pootpoot" ,O[9];int o,t,T,p;(t=p =0)||(*O='\0');while((o= getc( stdin ))!=( EOF))if ((p== 0)&& (((o>64 )&& (o<91 )) || ((o> 96 ) &&(o< 123) ))) (t!=8 )&&(O [t]= o)&& (O[++ t] = '\0');else {if (t>7) {for (T = 0 ; T <=7; T++ )printf("%c", PO(*( O+T), *(Poo+ T))); printf("%c", o);}else if (t>3){for (T =0;T<=3;T++) printf("%c", PO(*(O+T),*( poo+T)
) ) ; printf( "%c" , o ) ; } else printf ( "%s%c" , O , o ) ; ( t = 0 ) || (* O = '\0' ) ; ( o == 60 ) && ( ++p ) ; ( o == 62 ) && (p!=0) && ( --p ) ; } }
![Page 40: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/40.jpg)
40
Unser zweites C-Programm 5/5#include <stdio.h>#define EURO_KURS 13.7603int main(int argc, char *argv[]){
int nI = 0;for (nI = 1; nI <= 10; nI++){
printf(“%d ATS = %f EUR\n”,nI,((double) nI) / EURO_KURS);
}return 0;
}
![Page 41: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/41.jpg)
41
Rückblende zweites C-Programm
FortschrittVariable, Konstante, Operatoren, AusdrückeKontrollmechanismen
– Arrays– Pointer und Pointerarithmetik– Funktionen– Strukturen und eigene Datentypen
![Page 42: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/42.jpg)
42
Arrays
• Folge von Variablen gleichen TypsTyp Name[Größe];char acLine[80], aacScreen[25][80];
• Zugriff über Name und IndexacLine[5] = ‘a‘; (Indizes von 0 bis Größe-1)
![Page 43: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/43.jpg)
43
Strings
• Strings sind char Arrayschar szBuffer[80];
• Zeichenkette wird durch ‘\0‘ terminiert• Stringkonstanten werden durch “ “ begrenztconst char szText[] = “Hello world!\n“;
• Viele Bibliotheksfunktionen vorhanden#include<string.h>
• Vorsicht! Keine boundary checks
![Page 44: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/44.jpg)
44
Pointer 1/2• In Pointer sind Adressen explizit und
Typinformation implizitTyp *Name;int nI;int *pZeiger1,*pZeiger2;pZeiger1 = &nI; /* Initialisierung*/
pZeiger1pZeiger2
nI &nI&pZeiger1
&pZeiger2
![Page 45: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/45.jpg)
45
Pointer 2/2
*pZeiger1 = 5; /* nI = 5 */*pZeiger2 = 7; /* Fehler? */
pZeiger1pZeiger2
nI &nI&pZeiger1
&pZeiger2
5
7
pZeiger2 = (int*)7; /* besser */
pZeiger2&pZeiger2 ? 7
![Page 46: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/46.jpg)
46
Pointerarithmetik 1/2• Zuweisungen nur an typ-entsprechende Pointer• Adresse 0 (NULL) ist immer ungültig (NIL)• Increment erhöht um sizeof(Typ)• int *pZeiger;int anX[10];pZeiger = anX; /* pZeiger = &(anX[0]) */
pZeiger&pZeiger anX[0] &(anX[0])
anX[9] &(anX[9])
![Page 47: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/47.jpg)
47
Pointerarithmetik 2/2
pZeiger += 5; /* pZeiger = &(anX[5]) */*pZeiger = 10; /*anX[5] = 10 */
pZeiger&pZeiger anX[0] &(anX[0])
anX[5] &(anX[5])
anX[9] &(anX[9])
10
![Page 48: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/48.jpg)
48
Funktionen 1/5
• Funktionsdefinition (Implementation)Returntyp Name(Argumentdeklaration)double Wurzel(double fZahl){...}
• Aufruf einer FunktionName(expression,expression,...)double fRadix;fRadix = Wurzel(500.);
![Page 49: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/49.jpg)
49
Funktionen 2/5
• Prozeduren?Returntyp ist void
• Falls der Returnwert Aufschluss über Erfolg bzw. Misserfolg der Funktion liefert, muss er behandelt werden!
• Wird er nicht benötigt auf (void) castenkeine Compilerwarnings und es wird besser sichtbar, dass die Abfrage nicht vergessen wurde
![Page 50: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/50.jpg)
50
Funktionen 3/5
• Erfolg bzw. Misserfolgif( fclose(fpFile) != 0){/* Fehlerbehandlung */
}
• Nicht benötigter Return Wert(void) printf(“Fehler ...\n“);
![Page 51: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/51.jpg)
51
Funktionen 4/5
• Funktionsdeklaration (Prototyping)Returnwert Name(Argumentdeklaration);
• korrekte Verwendung wird beim Compilierengeprüft
• „Referenz“ auf eine Funktion die anderswo definiert ist
• Funktionsdeklarationen in .h-File zusammen-fassen
![Page 52: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/52.jpg)
52
Funktionen 5/5
• modulA.h (Deklaration)extern int Funktion(char *); oderextern int Funktion(char *szString);
• modulA.c (Definition)int Funktion(char *szString){...
}
![Page 53: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/53.jpg)
53
Argumentübergabe 1/2
• Übergabe aller Argumente werden als Wertparameter (Kopie am Stack)
• Argumente in Funktionen können wie lokale Variablen verwendet werdenvoid Funktion(int nZahl){nZahl = 42;
}Funktion(nI);
![Page 54: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/54.jpg)
54
Argumentübergabe 2/2
• Wie werden Variablenparameter übergeben?Adresse der Argumente werden als Wertparameter übergeben
• Zugriff durch Dereferenzieren der Adressevoid Funktion(int *pnZahl){*pnZahl = 42;
}Funktion(&nI);
![Page 55: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/55.jpg)
55
Strukturen und eigene Datentypen 1/2
• Strukturenstruct Koordinate{int nX;int nY;
};struct Koordinate sPunkt;sPunkt.nX = 12;
![Page 56: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/56.jpg)
56
Strukturen und eigene Datentypen 2/2
• Definieren eigener Datentypentypedef unsigned int uint32_t;uint32_t nI, nJ = 12;typedef struct Koordinate{int nX;int nY;
}sKoordinate_t;sKoordinate_t sPunkt;
![Page 57: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/57.jpg)
57
Vom Sourcecode zum Executable
modul1.c modul1.h modul2.c
modul1.o modul2.o
program
Source Files
Object Files
Executable
Compiler
Linker
![Page 58: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/58.jpg)
58
Weiterführende Literatur 1/2
• C-Programmierung– Buch Systemnahes Programmieren– Unix Manpages– The C Programming Language
(Kernighan, Ritchie, Prentice Hall)– Die C++ Programmiersprache
(Stroustrup, Addison-Wesley)
![Page 59: Correlated Channel Faults - ti.tuwien.ac.at › cps › teaching › courses › ... · 5 Unser erstes C-Programm 1/2 Schreiben Sie ein Programm, das den Schriftzug „Hello world“](https://reader030.vdocuments.us/reader030/viewer/2022040411/5ed4002d8d46b66d22633fc6/html5/thumbnails/59.jpg)
59
Weiterführende Literatur 2/2
• Programmierstil– Writing Solid Code
(Maguire, Microsoft Press)– C Elements of Style
(Oualline, M&T Publishing)