Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren,...

85
Vorlesung 1

Transcript of Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren,...

Page 1: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Vorlesung 1

Page 2: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

• C Sprache

• Algorithmen

• Effektivität von Algorithmen

• Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren

Page 3: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Elektrotechnik

• Kleine Klausuren: max. 6 P. (3 * 2P.)

• Laboren(8-13 Wochen): max. 18 P. (6 * max. 3P.)

• Hausaufgabe: max. 10 P. (Note * 2P.)

• Grosse Klausur : max. 10 P. (Note * 2P.)

• Zusammen: max. 44 P.

Page 4: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Elektrotechnik

38 - 44 P. Note 5

32 - 37 P. Note 4

26 - 31 P. Note 3

20 - 25 P. Note 2

Page 5: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Informatik

• Grosse Klausur: es soll einen Note 2 erreicht werden

• Schriftliche Prüfung im Prüfungsperiod

Page 6: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Informatik labor

• 3 kleine Klausur

• Hausaufgabe

• Durchschnitt + od. - 1

Page 7: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

• Vor C:

Multics project—General Electric, MIT, und Bell Laboratory (1969) (kein Erfolg) – zu große OP System

Bell Laboratory - Ken Thompson, Dennis Ritchie, Brian Kernighan – „UNIX”

Ken Thompson – prog. Sprache B

Page 8: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.
Page 9: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

• BCPL und B sind typenlose Sprachen

• C hat eine Reihe von Datentypen– Zeichen, ganze Zahlen, Gleitpunktzahlen– Es gibt eine Hierarchie von abgeleitete

Datentypen (mit Hilfe von Zeigern, Vektoren, Strukturen und Unionen erzeugt)

– Kontrollstrukturen, die für wohlstrukturierte Programme nötig sind:

Page 10: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

– Kontrollstrukturen, die für wohlstrukturierte Programme nötig sind:

• Zusammenfassung von Anweisungen { }• Entscheidungen (if-else)• Auswahl von einem aus einer Menge von

möglichen Fällen (switch)• Schleifen mit Test des Abbruchkriteriums am

Anfang (while, for)• oder am Ende (do)• Vorzeitiges Verlassen einer Schleife (break)

Page 11: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

– Funktionen können Werte der elementare Typen, aber auch von Strukturen, Unionen oder als Zeigern als Resultat liefern.

– Jede Funktion darf rekursiv aufgerufen werden

– Die lokalen Variablen einer Funktion sind typischerweise „automatisch”, das heißt, sie werden bei jedem Aufruf der Funtion neu erzeugt werden

Page 12: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

– Funktionsdefinitionen können nicht verschachtelt werden,

– Die Funktionen eines C Programms können sich in verschiedenen Quelldateien befinden, die getrennt voneinander übersetzt werden

– Ein Preprozessor ersetzt Makros im Programmtext, fügt andere Quelldateien ein und ermöglicht bedingte Übersetzung

Page 13: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

– ANSI C standard 1988– Definition einer Bibliothek, die zu C gehört

• Funktionen zum Zugriff auf das Betriebsystem (Dateien zu lesen und schreiben)

• Funktionen für formattierte Ein- und Ausgabe• Funktionen für Speicherverwaltung etc.

Page 14: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.
Page 15: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.
Page 16: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

#include <stdio.h>

main()

{

printf(”hello, world\n”);

}

Page 17: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

#include <stdio.h>

int main()

{

int a,b,c;

int summe;

a = 1; b = 2; c = 3;

summe = a+b+c;

printf(”summe=%d \n”,summe);

return 0;

}

Page 18: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

• Arithmetische Operatorenbinäre +, -, /, *, %unäre +, -

• Vorrang

arithmetische Operatoren werden von links her zusammenfaßt

• Verbindung von arithmetische Operatorenc = a = d+e;von rechts her

+, - (unären)

*, / , %

+, - (binären)

Page 19: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Datentypen

• 4 elementare Datentypenchar ein Byte, ein Zeichen – Grundelement des

Speichers

int ganzahliger Wert, 16 oder 32 Bits

float ein einfach genauer Gleichpunktwert

double ein doppelt genauer Gleichpunktwert

Page 20: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Varianten dieser elementaren Typen

• short int

• long int

das Wort int kann ausgelassen werden

short und int haben wenigstens 16 Bits

long hat mindestens 32 Bits

short ist nicht länger als int

int ist nicht länger als long

Page 21: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Varianten dieser elementaren Typen

• signed

• unsigned

char oder int (sind ≥ 0)

Page 22: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

• Wertebereich

int -32768...32767

unsigned int 0...65535

float 3.4e-38...3.4e+38

double 1.7e-308...1.7e+308

long double 3.4e-4932...1.1e+4932

Page 23: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Konstanten• ganzzahlige Kostante 1234 hat den Typ int• long-Konstante 12345678l oder 12345678L• vorzeichenlose Kostante 456u oder 456U• 5789ul oder 5789UL unsigned long• 036 oktal• 0x36 oder 0X36 hexadezimal• 0XFUL unsigned long mit Dezimalwert 15• Gleitpunktkonstanten 123.4 (enthalten einen

Dezimalpunkt) oder 1e-2 (enthalten einen Exponenten) sind double

• 113.6f oder 113.6F hat Typ float• 113.6l oder 113.6L hat Typ long double

Page 24: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Elementare printf Umwandlungen

Zeichen Argument; Ausgabe als

d,i int; dezimale Zahl

o int; oktale Zahl ohne Vorzeichen

x, X int; hexadezimale Zahl ohne Vorzeichen

u int; dezimale Zahl ohne Vorzeichen

c int; einzelnes Zeichen

Page 25: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

• %d als dezimale ganze Zahl ausgeben• %6d als dezimale ganze Zahl ausgeben,

mindestens 6 Zeichen breit• %f als Gleitpunktzahl ausgeben• %6f als Gleitpunktzahl ausgeben, mindestens 6

Zeichen breit• %.2f als Gleitpunktzahl ausgeben, 2 Zeichen hinter

Dezimalpunkt (abgerundete Zahl)• %6.2f als Gleitpunktzahl ausgeben, 6 Zeichen breit

und 2 Zeichen hinter Dezimalpunkt

Page 26: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

• float f = 1.23456789;

• printf("f=%f \n",f);

1.234568

• printf("f=%15f \n",f);

1.234568

• printf("f=%-15f \n",f);

1.234568

• printf("f=%.3f \n",f);

1.235

Page 27: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

• float f = 123.23456789;

• printf("f=%f \n",f);

123.234566

• printf("f=%3.3f \n",f);

123.235

• printf("f=%15e \n",f);

1.232346e+002

• printf("f=%15.2e \n",f);

1.23e+002

Page 28: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Elementare printf Umwandlungen

Zeichen Argument; Ausgabe als

s char*; aus der Zeichenkette werden Zeichen ausgegeben

f double; [-]m.dddddd , wobei die Genauigkeit die Anzahl der d festlegt

e, E double; [-]m.dddddde±xx , wobei die Genauigkeit die Anzahl der d festlegt

Page 29: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

• zeile ist ”hello, world” Zeichenketteprintf(”:%s:”,zeile);

:hello, world:printf(”:%10s:”,zeile);

:hello, world:printf(”:%.10s:”,zeile);

:hello, wor:printf(”:%-15s:”,zeile);

:hello, world :printf(”:%15.10s:”,zeile);

: hello, wor:printf(”:%-15.10s:”,zeile);

:hello, wor :

Page 30: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

• Vereinbarungen

int i,j,k;

double a,b;

• Eine Variable kann bei ihrer Vereinbarung auch initialisiert werden

double a = 1.3, b = 2.3;

• Mit dem Attribut const kann bei der Vereinbarung einer Variablen angegeben werden, daß sich ihr Wert nicht ändert.

const int a=3;

dann a=a+1; /*ist falsch*/

Page 31: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

• Das Komma Operator

mehrere Zuweisungen kann verbindet werden

int i,j,k;

i = 3; j = 4;

k = i, i = j;

die Auswertung geht von links her

Page 32: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Mathematische Bibliothekfunktionen• in <math.h> deklariert abs int abs(int)acos double acos(double)asin, atan, atan2 double atan2(double,double)atof, string to a floating point double atof(const char*)cabs, ceil(x), kleinster ganzzahliger Wert, der nicht kleiner als x istcos, cosh, exp, fabs, floor(x), größter ganzzahliger Wert, der nicht größer als x istlog, log10, pow, sin, sinh, sqrt, tan, tanh

Page 33: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

long a;

float f = 123.9;

a=f;

printf("a=%ld \n",a);

a=123

Page 34: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

long a;

float f = 123.9;

f=f-(a=f);

printf("a=%ld \n",a);

printf("f=%15.2e \n",f);

a=123

f= 9.00e+002

Page 35: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Schleifen

• for Schleife

• while Schleifewhile (Ausdruck) Anweisungen

• do while Schleifedo Anweisungenwhile (Ausdruck);

Page 36: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

do while Schleife

do Anweisungen

while (Ausdruck);

Anweisung(en)

Ausdruck

Ausdruck ≠ 0

Ausdruck = 0

Page 37: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Anweisungen werden durchgeführt bis Ausdruck bleibt von 0 verschieden

j = 0; i = 4;

do {

j = j+i;

i = i-1;

}

while (i>0);

j = 0; i = 4;

do {

j = j+i;

i = i-1;

}

while (i);

j = 0; i = 4;

do

j = j+i;

while (i = i-1);

Page 38: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

while Schleife

Ausdruck Ausdruck = 0

Anweisung(en)

Ausdruck ≠ 0

while (Ausdruck) Anweisungen

Page 39: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Ist Ausdruck von 0 verschieden, so wird Anweisung ausgeführt und anshließend

Ausdruck erneut bewertet

i = 10; sum = 0;

while (i>0) { sum=sum+i;i= i-1};

i = 10; sum = 0;

while (i) { sum=sum+i;i= i-1};

Page 40: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

for Schleife

for (init;test;post-expr)

statement;

Page 41: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.
Page 42: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

if else Anweisung

if (Ausdruck)

Anweisung1

else

Anweisung2

Ausdruck hat einen von 0 verschiedenen Wert, so wird Anweisung 1 ausgeführt. Bei 0 wird Anweisung 2 ausgeführt.

Page 43: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Inkrement- und Dekrement-Operatoren

• Der Inkrement-Operator ++ (addiert 1 zu seinem Operanden)

• Der Dekrement-Operator -- (substrahiert 1)

• Präfix-Notation ++n

• Postfix-Notation n++

n = 5;

x = n++; /* x ist 5, n ist 6 */

n = 5;

x = ++n; /* x ist 6, n ist 6 */

Page 44: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

a b

Nab

iafdxxfN

i

b

a

/

))1(()(1

Page 45: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

#include <stdio.h>#include <math.h>

int main(){ int i,N=10; double a=1,b=2,del,x,sum,f,integral; del = (b-a)/N; sum = 0.0; for(i=1;i<=N;i=i+1) { x = a+del*(i-1); f = sin(x); sum = sum + f; }

integral = sum*del;printf("Integral = %lf\n",integral);printf("Integral = %lf\n",-cos(b)+cos(a));return 0;}

Page 46: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Bedingter Ausdruck

if (a>b)

z = a;

else

z = b;

z = (a>b)?a:b;

Ausd1?Ausd2:Ausd3

Auch in Form

Page 47: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Zuweisungen und Ausdrücke

i = i+2;

Ausdruck

mit Zuweisungsoperator ( +=)

i += 2;

(+, -, *, /, %, <<, >>, &, |, ^)

Page 48: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

#include <stdio.h>#include <math.h>

int main(){ int i,N=10; double a=1,b=2,del,x,sum,f,integral; del = (b-a)/N; sum = 0.0; for(i=1;i<=N;i+=1) { x = a+del*(i-1); f = sin(x); sum += f; }

integral = sum*del;printf("Integral = %lf\n",integral);printf("Integral = %lf\n",-cos(b)+cos(a));return 0;}

Page 49: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Operatoren• Vergleichsoperatoren== prüft auf Gleicheit ( a == b )!= prüft auf Ungleicheit ( a != b )>, >=, <, <=• Verknüpfungen&& AND (und-Verknüpfung)|| OR (oder-Verknüpfung)! NOT (Komplement; unär)Beispiel(a == b) && (c == d) || !(c == e)

Page 50: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

#include <stdio.h>int main(){ int z1,nprim,i; z1=23; i=z1/2; nprim=0; while ((i>=2)&&(!nprim)) { if (z1%i==0) nprim=1; i--; } if (nprim) printf("Nicht Prim \n"); else printf("Prim \n");return 1;}

Page 51: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Die switch Anweisung

Es ist eine Auswahl unter mehreren AlternativenUntersucht, ob ein Ausdruck einen von mehreren

Konstanten ganzzahligen Werten besitzt.

switch(Ausdruck){case const-Ausdruck1:Anweisung1case const-Ausdruck2:Anweisung2default : Anweisung3}

Page 52: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.
Page 53: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

i = 2;

switch(i){

case 1: printf(”Montag”);break;

case 2: printf(”Dienstag”);break;

case 3: printf(”Mittwoch”);break;

case 4: printf(”Donnerstag”);break;

case 5: printf(”Freitag”);break;

case 6: printf(”Sammstag”);break;

case 7: printf(”Sonntag”);break;

default : printf(”Fehler”);

}

Page 54: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.
Page 55: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Operatoren• Bit-Operatoren& Bit-AND| Bit-OR^ Bit-XOR~ Bit NOT >> Bitshift nach Rechts<< Bitshift nach Linksint i = 8;i = i >> 2; /* Dividierung mit 4 */i= i << 2; /* Multiplizierung mit 4 */

Page 56: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Funktionen und Programmstruktur

FunktionsdefinitionFunktionstyp Funktionsname(Parameterdeklarationen){Vereinbarungen und Anweisungenreturn Ausdruck}

return-Anweisung liefert einen Wert als Resultat von der aufgerufenen Funktion zum Aufrufen

Page 57: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

double addiert(double a, double b)

{

return a+b;

}

void ausschreibt(double a)

{

printf(”%lf ”,a);

} /*Funktion ohne Ausgangswert*/

Page 58: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

#include <stdio.h>

#include <math.h>

double fv(double x)

{

return sin(x);

}

int main(){ int i,N=10; double a=1,b=2,del,x,sum,f,integral; del = (b-a)/N; sum = 0.0; for(i=1;i<=N;i+=1) { x = a+del*(i-1); f = fv(x); sum += f; }integral = sum*del;printf("Integral = %lf\n",integral);printf("Integral = %lf\n",-cos(b)+cos(a));return 0;}

Page 59: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

#include <stdio.h>#include <math.h>

double fv(double x){ return sin(x);}

int main(){ int i,N=10; double a=1,b=2,del,x,sum,f,integral; del = (b-a)/N; sum = 0.0; for(i=1;i<=N;i+=1) sum += fv(a+del*(i-1));

integral = sum*del;printf("Integral = %lf\n",integral);printf("Integral = %lf\n",-cos(b)+cos(a));return 0; }

Page 60: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

#include <stdio.h>#include <math.h>

double fv(double x){ return sin(x);}

int main(){ int i,N=10; double a=1,b=2,del,x,sum,f,integral; del = (b-a)/N; sum = 0.0; for(i=1;i<=N;) sum += fv(a+del*(i++-1));

integral = sum*del;printf("Integral = %lf\n",integral);printf("Integral = %lf\n",-cos(b)+cos(a));return 0; }

Page 61: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

#include <stdio.h>#include <math.h>

double fv(double x){ return sin(x);}

int main(){ int i,N=10; double a=1,b=2,del,x,sum,f,integral; for(i=1,sum=0.0,del = (b-a)/N;i<=N;sum += fv(a+del*(i++-1))) ;

integral = sum*del;printf("Integral = %lf\n",integral);printf("Integral = %lf\n",-cos(b)+cos(a));return 0;}

Page 62: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Zeiger und Vektoren

Ein Zeiger ist eine Variable, die die Adresse einer Variablen enthält.

& unäre Adress-Operator* Inhalts-Operator (indirection, dereferencing)int x = 1, y = 2;int *ip;ip = &x;y = *ip;*ip = 0;

Page 63: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Zeiger und Vektoren

Die Vereinbarung

int a[10];

double v[25];

definiert einen Vektor mit 10 (25) Elementen, einen Block aus 10 (25) aufeinanderfolgenden Objekten, mit den Namen

a[0] a[1] ... a[9]

Page 64: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Zeiger und Vektoren

Vereinbart man pa als Zeiger auf einen int Wert

int *pa;

dann zeigt pa durch die Zuweisung

pa = &a[0];

auf das erste Element 0 von a; pa enthält die Adresse von a[0]

Page 65: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Zeiger und Vektoren

pa + 1 ist eine Zeiger auf das nachfolgende Element

pa + i ist eine Zeiger auf das i-te Element nach (hinter) pa

Statt a[i] auch *(a+i) geschrieben werden kann

pa = &a[0]; equivalent mit pa = a;

Page 66: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Zeigern als Funktionsargumente

void tausch(int *px,int *py){ int temp; temp = *px; *px = *py; *py = temp;}in main() Funktiontausch(&a,&b);

Page 67: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Zeigern als Funktionsargumente• Auswahl maximaler Element#include <stdio.h>#include <stdlib.h>

int max(int *v,int g){int maxwert = 0;if(g){ maxwert = v[0];while(--g) if (v[g]>maxwert) maxwert =

v[g];}return maxwert;}

int main(){int vekt[10],i;for (i=0;i<10;i++){ vekt[i] = rand();

}printf("%d \n",max(vekt,10));

return 0;}

Page 68: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Char Zeiger

”konstante Zeichenkette”

das ist ein Zeichenvektor

der Vektor wird mit dem Nullzeichen ‘\0’ beendet

char *Zeichenzeiger;

Zeichenzeiger = ”Hallo”;

char Zeichenpuffer[] = ”Hallo”;

Zeichenzeiger:

H a l l o \0 Zeichenzeiger:

·

·

Zeichenpuffer: H a l l o \0

Page 69: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Char Zeiger

int strlen(char *c){int n;for(n = 0;*s!=‘\0’;s++) n++;return n;}

int main(){printf(”%d”,strlen(”Guten Tag”);

Page 70: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Char Zeigerint strlen(char *c){int n;for(n = 0;*s!=‘\0’;s++) n++;return n;}int main(){char *Zeichenzeiger;Zeichenzeiger = ”Hallo”;char Zeichenpuffer[] = ”Hallo”;strlen(Zeichenpuffer);strlen(&Zeichenpuffer[]);strlen(Zeichenzeiger);strlen(Zeichenzeiger+2);strlen(Zeichenpuffer+2);

Page 71: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

void strcpy(char *s,char *t)

{int i = 0;while (t[i]!=‘\0’) {s[i]=t[i];i++;}

s[i]=t[i];

}

void strcpy(char *s,char *t)

{int i = 0;while ((s[i]=t[i])!=‘\0’) i++;

}

Page 72: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Type-Aliases (typedef)

Mit typedef kann man ein Alias für einen existierenden Typ deklarieren:

typedef existing-type new-type;

Beispiele:

typedef int INTEGER;

typedef int bool;

typedef unsigned int uint;

Page 73: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Präzedenz und BindungEnglisch: „precedence” und „ associativity” („grouping”)

Ohne diese ist ein Ausdruck der Art

a + b * c

nicht eindeutig

Präzedenz: Reihenfolge der Auswertung der Operatoren

Assoziativität: Reihenfolge bei Operatoren gleicher Präzedenz

Page 74: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

C preprozessor

# include Definitionsdatei einfügen

#include <filename>

#include „filename”

#define Textersatz

Page 75: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Ersatztext

#define Name Ersatztext

#define sqr(x) x*x

a = 2;

c = sqr(a); → c = a*a;

/* c wird 4 sein */

Page 76: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Ersatztext

#define sqr(x) x*x

a = 2; b = 3;c = sqr(a+b); → c = a+b*a+b;

/* c wird 2+3*2+3=11 sein */

#define sqr(x) (x)*(x)c = sqr(a+b); → c = (a+b)*(a+b);

Page 77: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Ersatztext

#define sqr(x) (x)*(x)

a = 1; b = 2;

c = 9/sqr(a+b); → c = 9/(a+b)*(a+b);

/* c wird 9/3*3=9 sein */

#define sqr(x) ((x)*(x))

Page 78: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Ersatztext

#define ab(x) (x<0)?(-x):(x)

#define max(a,b) (a)>(b)?(a):(b)

Page 79: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Strukturen

• eine Ansammlung von einer oder mehrerer Variablen (auch mit verschiedenen Typen)

• unter einem einzigen Namen zusammenfassen

struct point {double x;double y;};

Page 80: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Strukturen

•das reservierte Wort struct steht am Anfang

•Strukturvereinbarung – Liste von Deklarationen

•Etikett – hier point

•Etikett ist für Abkürzung für den Teil der Vereinbarung in geschweiften Klammern

Page 81: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Strukturen

struct point pt;

•deklaration eine Variable pt, die eine Struktur vom Typ struct point ist.

•Initialisieren von Strukturen

struct point pt1 = {100,200};

Page 82: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Strukturen

•Verweis auf eine Komponente einer bestimmten Struktur

Struktur-Variablenname.Komponente

struct point pt;

pt.x = 150.5;

Page 83: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Rekursion#include <stdio.h>void printzahl(int zahl){if (zahl<0){ putchar('-'); zahl = -zahl; }if (zahl/2) printzahl(zahl/2);putchar(zahl % 2 +'0');}int main(){ int i = 32;printzahl(i);printf("\n");return 0;}

Page 84: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

Argumente aus der Kommandozeile

• Wenn main aufgerufen wird, werden zwei Argumente Übergeben

• argc für argument count

• argv für argument vector

argv[0] der Programmname

argv[1] das erste Argument

argv[argc-1] das letzte Argument

hat argc den Wert 1, gibt es keine Argumente auf der Kommandozeile

Page 85: Vorlesung 1. C Sprache Algorithmen Effektivität von Algorithmen Programme specifizieren, Algorithmen zu ausarbeiten, Quelltext generieren, dokumentieren.

#include <stdio.h>int main(int argc,char *argv[]){ int i,j; for (i=1;i<argc;i++) { j=0; while(argv[i][j])putchar(argv[i][j++]+'A'-'a'); }return 0;}