Kompaktkurs C-Programmierung

Ähnliche Dokumente
Grundlagen. Kapitel 1

Einführung in die C-Programmierung

Klausur Programmieren in C Sommersemester 2007 Dipl. Biol. Franz Schenk 13. April 2007, Uhr Bearbeitungszeit: 105 Minuten

Vorlesung C-Kurs 9:15-10:45 Mathe 11:15-12:45 1. Woche Hörsaal 1 2. Woche Hörsaal 7

Übungen zu C++ Kapitel 1

DLLs (dynamic loaded libraries) mit MingW erstellen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

1 Vom Problem zum Programm

Einführung in PHP. (mit Aufgaben)

Übersicht Programmablaufsteuerung

Objektorientierte Programmierung für Anfänger am Beispiel PHP

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

6. Grundlagen der Programmierung

Einführung in die Programmierung

Allgemeines. Verschiedene Sprachkonzepte C-Sprachfamilie C-ähnliche Programmiersprachen Allgemeines zu C. #include <stdio.h>

Wie man eigene Programme erstellt

Version 0.3. Installation von MinGW und Eclipse CDT

Arbeiten mit UMLed und Delphi

Grundlagen der Informatik - 6. Praktikum

Excel Funktionen durch eigene Funktionen erweitern.

Objektbasierte Entwicklung

Einführung zum Arbeiten mit Microsoft Visual C Express Edition

Zum Abschluss wird gezeigt, wie aus einem C++ Quell-Programm ein ausführbares Programm erzeugt wird. 1. Installation von NetBeans...

M. Graefenhan Übungen zu C. Blatt 3. Musterlösung

2.4 Das erste C++-Programm *

The ToolChain.com. Grafisches Debugging mit der QtCreator Entwicklungsumgebung

Informatik 2 Labor 2 Programmieren in MATLAB Georg Richter

HTML5. Wie funktioniert HTML5? Tags: Attribute:

Stapelverarbeitung Teil 1

Übung 9 - Lösungsvorschlag

Referenzen Typo3. Blog der Internetagentur Irma Berscheid-Kimeridze Stand: Juni 2015

VB.net Programmierung und Beispielprogramm für GSV

Fakultät Angewandte Informatik Lehrprofessur für Informatik

Die Programmiersprache C

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Zählen von Objekten einer bestimmten Klasse

Kapitel 1. Grundlagen

Installation Hardlockserver-Dongle

Java Einführung Programmcode

Anweisungsblöcke (dazu zählen auch Programme) werden in geschweifte Klammern eingeschlossen.

Klausur in Programmieren

Seriendruck mit der Codex-Software

Native Zeichenketten (C-Strings)

Arbeiten mit dem Outlook Add-In

Was ich als Bürgermeister für Lübbecke tun möchte

Java: Vererbung. Teil 3: super()

Qt-Projekte mit Visual Studio 2005

Viele Bilder auf der FA-Homepage

! " # $ " % & Nicki Wruck worldwidewruck

YouTube: Video-Untertitel übersetzen

Systemprogrammierung: Erste Schritte (P) Das Manpage-System (P) Versionsverwaltung mit Subversion (P)

Die Post hat eine Umfrage gemacht

MPI-Programmierung unter Windows mit MPICH2. Installieren von MPICH2, Übersetzen, Ausführen und Debuggen von MPI-Programmen. Christian Terboven

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff

Informatik I (D-MAVT)

AUTOMATISCHE -ARCHIVIERUNG. 10/07/28 BMD Systemhaus GmbH, Steyr Vervielfältigung bedarf der ausdrücklichen Genehmigung durch BMD!

Print2CAD 2017, 8th Generation. Netzwerkversionen

Java Kurs für Anfänger Einheit 5 Methoden

Erste Schritte. Das Arduino-Board. Ihr Fundino-Board. Programmieren für Ingenieure Sommer Andreas Zeller, Universität des Saarlandes

SEMINAR Modifikation für die Nutzung des Community Builders

Informatik Grundlagen, WS04, Seminar 13

Die neue Aufgabe von der Monitoring-Stelle. Das ist die Monitoring-Stelle:

Nicht über uns ohne uns

Ingenieurinformatik Diplom-FA (Teil 2, C-Programmierung)

Algorithmen mit Python

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

PVL 3 - Roulette. (5 Punkte) Abgabe bis

Plugins. Stefan Salich Stand

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Professionelle Seminare im Bereich MS-Office

.NET Code schützen. Projekt.NET. Version 1.0

Die Invaliden-Versicherung ändert sich

Übungen Programmieren 1 Felix Rohrer. Übungen

Was meinen die Leute eigentlich mit: Grexit?

Übung - Datensicherung und Wiederherstellung in Windows 7

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Über die Internetseite Hier werden unter Download/aktuelle Versionen die verschiedenen Module als zip-dateien bereitgestellt.

FORUM HANDREICHUNG (STAND: AUGUST 2013)

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Entwicklung des Dentalmarktes in 2010 und Papier versus Plastik.

7. Arduino-Stammtisch: Tool-Chain und eigene Bibliotheken

EasyWk DAS Schwimmwettkampfprogramm

Deklarationen in C. Prof. Dr. Margarita Esponda

Programmieren in C. Jan Gampe. 13. Oktober Skript zur Vorlesung

Anleitung über den Umgang mit Schildern

Installation und Inbetriebnahme von Microsoft Visual C Express

Das Leitbild vom Verein WIR

C++ mit Eclipse & GCC unter Windows

Tevalo Handbuch v 1.1 vom

Einführung zum MS Visual Studio

Informationen zum Ambulant Betreuten Wohnen in leichter Sprache

Tutorium Rechnerorganisation

Linux Prinzipien und Programmierung

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Transkript:

Kompaktkurs C-Programmierung 26. 03. 2007 Franz Schenk

Organisatorisches Vorlesung Accountvergabe Skriptverkauf Übungen: zwei Blöcke (13:15-14:45 / 14:45-16:15) Gruppenübung Rechnerübung Klausur Ferien: Karfreitag - Ostermontag

C: Geschichtliches 1969/1973 Entwicklung von C um UNIX zu implementieren (v.a. Ken Thompson und Dennis Ritchie) 1978: Ritchie und Brian Kernighan veröffentlichen die erste Auflage von The C Programming Language (K&R) 1983 beginn der ANSI Standardisierung 1989: ANSI-C 89 1990 ISO-C 90 1999: C99 (ISO C 99)

Programmiersprachen.file "hello.c".section.rodata.lc0:.string "hello".text.globl main.type main, @function main: pushl %ebp movl %esp, %ebp subl $8, %esp andl $-16, %esp movl $0, %eax addl $15, %eax addl $15, %eax shrl $4, %eax sall $4, %eax subl %eax, %esp subl $12, %esp pushl $.LC0 call puts addl $16, %esp leave ret.size main,.-main Unterschiedliche Sprachkonzepte /* Hello World in C */ #include <stdio.h> main() printf("hello\n"); /* Hello World in perl */ print("hello\n");

Programmiersprachen Ziele der Entwickler von C: maschinennahe Programmierung ohne direkt Maschinenbefehle (Assembler) zu benutzen damit: Übertagbarkeit von Code auf beliebige Maschinen

Schritte der Programmentwicklung Werkzeuge: Editor Compiler (Übersetzer) / Linker Methodik: Quelltexterstellung Compilierung u.u. Fehlersuche und das ganze noch mal

Programmwerdung

Hello World /* Das allererste Programm */ #include <stdio.h> int main( ) Kommentarzeile Einbinden einer Bibliothek von Funktionen Hauptfunktion, die beim Programmaufruf gestartet wird. printf( Hello World!\n ); return 0; Anweisung: Hello World! ausgeben (mit Zeilenumbruch) Beenden der (Haupt)Funktion, Rückreichung eines Wertes

Ingredienzien eines Programms /* Das allererste Programm */ Kommentare sind für den Compilationsprozess belanglos. Sie erhöhen aber entschieden die Lesbarkeit, vor allem damit die Möglichkeit Code weiterzureichen. Aber auch der eigenen Erinnerung sehr dienlich! Kommentare sollen immer so viel wie möglich verwendet werden und werden immer viel zu wenig verwendet.

Ingredienzien eines Programms #include <stdio.h> Definiert, daß die Standardbibliothek für Ein- und Ausgabe verwendet werden soll. Damit müssen nicht alle Funktionen im eigenen Programm geschrieben werden, sondern können eingebunden werden. Eigene oder vorgefertigte Bibliotheken Wichtige Information für Präprozessor und Linker

Ingredienzien eines Programms int main() Die Funktionsdefinition main: Der Funktionsname. Diese ist eine spezielle Funktion, welche beim Programmstart aufgerufen wird. Alles, was in diesem Klammerpaar eingeschlossen wird, gehört zur Funktion. int: Rückgabewert der Funktion, den sie an den Aufrufer zurückliefert (hier: ein integer-wert) () in den Klammern könnte definiert sein, was der Funktion übergeben wird.

Ingredienzien eines Programms printf( Hello World!\n ); printf() Funktionsaufruf (Funktion ist in der stdio -Bibliothek enthalten) (...) Innerhalb der Klammern stehen ein oder mehrere Parameter, welche der Funktion übergeben werden. Mehrere Parameter würden durch Kommata getrennt. z.b. einekleinefunktion(param1,param2) ; Wichtig: Jede Befehlszeile wird damit abgeschlossen. \n Mitteilung, dass die Ausgabefunktion einen Zeilenumbruch einfügen soll.

Richtlinien für schönen und guten Code #include "stdio.h" #define e 3 #define g (e/e) #define h ((g+e)/2) #define f (e g h) #define j (e*e g) #define k (j h) #define l(x) tab2[x]/h #define m(n,a) ((n&(a))==(a)) long tab1[]= 989L,5L,26L,0L,88319L,123L,0L,9367L ; int tab2[]= 4,6,10,14,22,26,34,38,46,58,62,74,82,86 ; main(m1,s) char *s; int a,b,c,d,o[k],n=(int)s; if(m1==1) char b[2*j+f g]; main(l(h+e)+h+e,b); printf(b); else switch(m1 =h) case f: a=(b=(c=(d=g)<<g)<<g)<<g; return(m(n,a c) m(n,b) m(n,a d) m(n,c d)); case h: for(a=f;a<j;++a)if(tab1[a]&&!(tab1[a]%((long)l(n))))return(a); case g: if(n<h)return(g); if(n<j)n =g;c='d';o[f]=h;o[g]=f; elsec='\r' '\b';n =j g;o[f]=o[g]=g; if((b=n)>=e)for(b=g<<g;b<n;++b)o[b]=o[b h]+o[b g]+c; return(o[b g]%n+k h); default: if(m1 =e) main(m1 g+e+h,s+g); else *(s+g)=f; for(*s=a=f;a<e;) *s=(*s<<e) main(h+a++,(char *)m1);

... mehr über guten Code Wozu guter Code? > andere sollen ihn lesen können > man selbst soll ihn (schnell) lesen können > andere und man selbst sollen verstehen, was der Code bewirkt. Daher: > Kommentieren > Kommentieren > Kommentieren > Strukturieren > Lesbarkeit erhöhen: Leerzeichen, Leerzeilen > Einfache Lösungen

... noch mehr über Stil #include <stdio.h> int l;int main(int o,char **O, int I)char c,*d=o[1];if(o>0) for(l=0;d[l ];D[l ++] =10)D [l++] =120;D[l] = 110;while (!main(0,o,l))d[l] += 20; putchar((d[l]+1032) /20 ) ;putchar(10);else c=o+ (D[I]+82)%10 (I>l/2)* (D[I l+i]+72)/10 9;D[I]+=I<0?0 :!(o=main(c/10,o,i 1))*((c+999 )%10 (D[I]+92)%10);return o; Ein gutes oder schlechtes Beispiel für: - selbst-dokumentierenden Code? - leicht zu wartenden Code

... mehr dubiose Beispiele #define _ F<00 F OO ; int F=00,OO=00; main()f_oo();printf("%1.3f\n",4.* F/OO/OO);F_OO() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Code verschleiern als Spiel: obfuscation viele schöne Beispiele: http://www.de.ioccc.org

Vom Code zum Programm gcc -Wall -o hallo hallo.c gcc gnu compiler collection Compiler und linker -Wall Warnungen werden ausgegeben (noch besser: -ansi -pedantic) Es werden nicht nur Fehler gemeldet, welche den Sprachstandard verletzen, sondern auch Warnungen ausgegeben. -o hallo erzeugt als ausführbares Programm die Datei hallo aus dem Quellcode in Datei hallo.c Die Endung.c ist nicht zwingend, hilft aber vielen Editoren zu erkennen, welche Sprache vorliegt.

Compilationsschritte Lexikalische Analyse -> Tokenerzeugung Präprozessierung Syntaktische Analyse Semantische Analyse

Programmausführung hallo Hello World! Funktioniert oft nicht. ls -al hallo r r r 1 schenk schenk 6.9K 2007 02 28 15:49 hallo Möglichkeit 1: unzulängliche Rechte. Abhilfe mit chmod echo $PATH Möglichkeit 2: Die Systemvariable PATH ist zeigt nicht auf das aktuelle Verzeichnis. Abhilfe:./hallo oder: export PATH=$PATH:.

Hello World, improved Noch mehr Hello World #include <stdio.h> int main() int zaehler = 0; while (zaehler < 10) printf( Hello World!\n ); zaehler = zaehler + 1; return 0;

Hello World, nummeriert Hello World, mit Zahlen #include <stdio.h> int main() int zaehler = 0; while (zaehler < 10) printf( Hello World %d!\n, zaehler); zaehler = zaehler + 1; return 0;

Hello World, manchmal Hello World, mit geraden Zahlen #include <stdio.h> int main() int zaehler = 0; while (zaehler < 10) if ( zaehler%2 == 0) printf( Hello World %d!\n, zaehler); zaehler = zaehler + 1; return 0;

Hello World, manchmal, ganz genau Hello World, nur mit geraden Zahlen #include <stdio.h> int main() int zaehler = 0; while (zaehler < 10) if ( zaehler%2 == 0 && zaehler!= 0) printf( Hello World %d!\n, zaehler); zaehler = zaehler + 1; return 0;