Forschungszentrum caesar

Slides:



Advertisements
Ähnliche Präsentationen
ALP II: Objektorientierte Programmierung Sommersemester 2006
Advertisements

der Universität Oldenburg
Variablen und Datentypen
Zusammenfassung der Vorwoche
10. Grundlagen imperativer Programmiersprachen
(kleine!) Java Einführung Mittwoch, Heute Ziel: erstes Java-Programm erstellen Von der Aufgabenstellung bis zur Lösung Grundlagen Einfache.
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Grundlagen der Sprache
SWITCH - Anweisung.
SWITCH - Anweisung.
Datentyp- umwandlung. Literale sind: Bezeichner mit einem festen Wert wie z.B:
ARRAY oder FELD oder VEKTOR
Dynamischer Speicher und Struktur
WHILE - Anweisung.
Programmier-sprache C Weiter mit PP..
DO...WHILE Anweisung.
ARRAY oder FELD oder VEKTOR
Robotik mit LEGO Mindstorms
Imperative Programmierung
Boolesche Ausdrücke Ist der Rückgabewert eines Ausdrucks vom Typ boolean, so wird dieser als Boolescher Ausdruck bezeichnet (nach dem Mathematiker George.
Zusammenfassung Vorwoche
Das erste Programm (Folie 16)
Grundkonzepte Java - Klassendefinition
Einführung in die Programmiersprache C 1
Informatik 1 Übung 2.
Kontrollstrukturen Verwendung: Steuerung des Ablaufs.
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Präsentation C Tutorium von Daniel J. Nowak Folie 1 C Tutorium.
Einführung in die Programmierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Vorlesung 1.
PHP Basic.
Programmierung 1. Einführung Seite 1
Arduino Kurs Abend 2.
Informatik II Grundlagen der Programmierung Programmieren in C Programmstrukturen / Kontrollstrukturen Hochschule Fulda – FB ET Sommersemester 2014.
Informatik II Grundlagen der Programmierung Programmieren in C Benutzerinteraktion / Ein- und Ausgabe Hochschule Fulda – FB ET Sommersemester
Einführung in PHP.
Einführung in PHP 5.
Datentypen: integer, char, string, boolean
Datentypen Überblick Datentypen Einfache / fundamentale Datentypen
Programmieren in C Grundlagen C 2
BMEVIEEA100 Grundlagen der Programmierung
Vorlesung 3. if else Anweisung if (Ausdruck) Anweisung1 else Anweisung2 Ausdruck hat einen von 0 verschiedenen Wert, so wird Anweisung 1 ausgeführt. Bei.
PHP: Operatoren und Kontrollstrukturen
1 Tagesüberblick 2 Lösung Hausaufgabe/Fragen Datei- ein- und ausgabe Schleifen Vergleiche Wahrheit.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
1 VeranstaltungThemaTeilnehmerBetreuer AINF-Lehrgang PROGRAMMIEREN Martina GREILER Wolfgang KATOLNIG Peter RENDL Helfried TUISEL Peter ZYCH Heinz STEGBAUER.
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
(Syntax, Strings/Zahlen, Variablen, Arrays)
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Delphi Chars und Strings
Programmierkurs JavaUE 4 Anweisungen und ProgrammeDietrich BolesSeite 1 Programmierkurs Java Dr. Dietrich Boles Teil Imperative Programmierung Unterrichtseinheit.
Einführung in die Programmierung mit Java
Einführung in die Programmiersprache C 2
Java-Kurs - 4. Übung Hausaufgabe Weitere Kontrollstrukturen
Variablen und Datentypen
Pointer. Grundsätzliches: Im Arbeitsspeicher werden Daten gespeichert. Um auf die Daten eindeutig zugreifen zu können, werden diesen Daten Adressen zugeordnet.
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
Tutorium Software-Engineering SS14 Florian Manghofer.
Inhalte der Übungen 1.Grundlagen, Ein- und Ausgabe 2.Kontrollstrukturen (Projekt 1) 3.Funktionen 4.Zeiger, Felder (Projekt 2) 5.Strings, Strukturen 6.Fileverarbeitung.
Hello World! Javakurs 2013 Arne Kappen
Aufgaben zu Rückgabewerten
Durchschnitt (verbal)
Variable: typ varName = Wert Kiste: Art Aufschrift  Inhalt
SS 04 Christiane Rauh Christian Hellinger
Arrays in C Ein Array ist eine Variable, die aus einer Anzahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Schleifen Datenfelder (Arrays) Verzweigungen
 Präsentation transkript:

Forschungszentrum caesar Ein kleiner Einführungskurs in die Programmiersprache C Stefan Hartmann Forschungszentrum caesar

Was ist C? C ist das Produkt vieler Autoren und einer langjährigen Entwicklung. Erste Publikation: 1972 Vorgänger einiger Sprachen, z.B. C++, Java...

Ein einfaches Beispiel #include <stdio.h> #include <stdlib.h> int main () { printf("Hello World!"); system("Pause"); return 0; } #include: Einbindung einer Headerdatei aus der Standardbibliothek in den Programmtext Die Headerdatei <stdio.h> enthält Ein- und Ausgabebefehle; <stdlib.h> enthält vermischte Standardfunktionen wie z.B. system().

Ein einfaches Beispiel #include <stdio.h> #include <stdlib.h> int main () { printf("Hello World!"); system("Pause"); return 0; } main: legt den Programmstart des Hauptprogrammes fest

Ein einfaches Beispiel #include <stdio.h> #include <stdlib.h> int main () { printf("Hello World!"); system("Pause"); return 0; } int: gibt dem Computer einen ganzzahligen Rückgabewert zurück. (0= Alles Klar!)

Ein einfaches Beispiel #include <stdio.h> #include <stdlib.h> int main () { printf("Hello World!"); system("Pause"); return 0; } printf: Gibt einen Text aus.

Beispiel 2 #include <stdio.h> #include <stdlib.h> int main () { int dm; float euro; printf("Bitte ganze DM eingeben: "); scanf("%i", &dm); euro = dm / 1.95583; printf("Das sind %f Euro\n", euro); system("Pause"); return 0; } int dm: Deklariert die Variable dm als Variable vom Typ int. Der Typ gibt an, was in ihr gespeichert wird. (int = ganze Zahlen, „Integer“).

Beispiel 2 Formatierung: Es wird ein Integer- Wert eingelesen! #include <stdio.h> #include <stdlib.h> int main () { int dm; float euro; printf("Bitte ganze DM eingeben: "); scanf("%i", &dm); euro = dm / 1.95583; printf("Das sind %f Euro\n", euro); system("Pause"); return 0; } Formatierung: Es wird ein Integer- Wert eingelesen! Adresse der Variablen dm scanf: Damit werden eingegebene Zahlen bzw. Zeichenketten eingelesen, ist sozusagen das Gegenstück zu printf.

Beispiel 2 #include <stdio.h> #include <stdlib.h> int main () { int dm; float euro; printf("Bitte ganze DM eingeben: "); scanf("%i", &dm); euro = dm / 1.95583; printf("Das sind %f Euro\n", euro); system("Pause"); return 0; } float euro: Fließkommazahl (Zahl mit Nachkommastellen), die in der Variablen euro gespeichert wird.

Beispiel 2 Formatierung: Es wird eine Gleitkommazahl (float) #include <stdio.h> #include <stdlib.h> int main () { int dm; float euro; printf("Bitte ganze DM eingeben: "); scanf("%i", &dm); euro = dm / 1.95583; printf("Das sind %f Euro\n", euro); system("Pause"); return 0; } Formatierung: Es wird eine Gleitkommazahl (float) ausgegeben. Zeilentrenner Der letzte printf-Befehl gibt den errechneten Wert wieder aus.

Beispiele zur Formatierung %d (oder %i): dezimale ganze Zahl %6d (oder %6i): dezimale ganze Zahl, mindestens 6 Zeichen breit %hd short integer %ld: long integer %f: Gleitkommazahl in Festkommaform %.2f: Gleitkommazahl mit 2 Zeichen hinter dem Dezimalpunkt %6.2f: Gleitkommazahl mit 2 Zeichen hinter dem Dezimalpunkt, mindestens 6 Zeichen breit %e: Gleitkommazahl in Exponentialform %g: Gleitkommazahl, möglichst kompakt %s: Zeichenkette %c: einzelnes Zeichen

Aufgabe 1 Schreibe ein Programm zur Berechnung des Preises von Mehl (in Euro, Ausgabe mit 2 Nachkommastellen). 1kg Mehl kostet 0,89175€.

Auflösung Aufgabe 1 #include <stdio.h> #include <stdlib.h> int main () { float kg, euro; printf("Bitte Kilogramm eingeben: "); scanf("%f", &kg); euro = kg * 0.89175; printf("Das sind %.2f Euro\n", euro); system("Pause"); return 0; }

Variablen Wie kann ich eine Variable in C einbauen? Variable deklarieren, Beispiele: int j; float x, y; Initialisierung (Wertzuweisung), int j = 32; float x = 2; Wichtig: In C müssen alle Variablen immer am Anfang des Programms/jeder Funktion deklariert werden!

Typen von Variablen (maschinenabhängig!) char: ganze Zahlen von 0 bis 255(ASCII) short: kleine ganzzahlige Werte int: ganzzahlige Werte long: große ganzzahlige Werte unsigned int: positive ganzzahlige Zahlen float: Gleitkommazahl mit einfacher Genauigkeit double: Gleitkommazahl mit doppelter Genauigkeit bool: Wahrheitswert (0 oder 1)

ASCII-Code Im ASCII-Code werden Zeichen (z.B. Buchstaben, Datentyp char) als ganze Zahlen codiert. Beispiel: ‘A‘ == 65 Für einzelne Zeichen immer ‘.‘ schreiben; "..." ist für Zeichenketten reserviert.

Aufgabe 2 Schreibe ein Programm, mit dem man den ASCII-Code eines einzelnen Zeichen abfragen kann.

Auflösung Aufgabe 2 #include <stdio.h> #include <stdlib.h> int main () { char x; printf("Bitte eingeben:"); scanf("%c", &x); printf("Der ASCII-Code lautet: %d\n", x); system("Pause"); return 0; }

Felder (Arrays) Felder sind mehrere Variablen, die im Speicher direkt hintereinander liegen. int X[20]; ← Ein Feld von 20 int-Variablen; Achtung: Zählung beginnt bei 0! int X[3]={2,3,5} ← Auch Felder können initialisiert werden. int X[]={1,2,3,4} ← Bei initialisierten Feldern benötigt man keine Dimensionsangaben.

Zeichenketten (Strings) In C sind Strings einfach Arrays von char. Beispiel: char X[] = "hallo"; ist das gleiche wie: char X[] = {104, 97, 108, 108, 111, 0}; char X[] = {‘h‘, ‘a‘, ‘l‘ , ‘l‘, ‘o‘, ‘\0‘};

Frage Es sei txt eine Stringvariable: char txt[30]; Wie kann man das fünfte Zeichen von txt ausgeben lassen? printf(%c,txt[4]); Wie kann man die ersten 10 Zeichen ausgeben lassen? printf(%10s,txt);

Operatoren Besonderheiten: Test auf Gleichheit ist == (und nicht etwa = ) Test auf Ungleichheit ist != && steht für logisches UND || steht für logisches ODER & steht für bitweises UND (Was macht der Befehl x = x & 0177; ?) | steht für bitweises ODER ! steht für logisches NOT

Weitere Operatoren Inkrement und Dekrement: ++x oder x++ ↔ x = x+1 Aber: x=5; y=x++; → y=5, x=6 x=5; y=++x; → y=6, x=6 Zuweisungsoperatoren: z.B: x+=20; ↔ x = x+20; x-=12; ↔ x = x-12; x*=y; ↔ x = x*y; x/=12; ↔ x = x/12;

Aufgabe 3 Berichtige alle Fehler des folgenden „Programms“! #include <stdio.h> #include <stdlib.h> Int main () { char txt1= "Hallo\n"; print(txt1) char txt2[4]; scanf("%3s“, txt2); print(txt2; system("Pause"); return 0; }

Auflösung Aufgabe 3 #include <stdio.h> #include <stdlib.h> int main () { char txt1[]= "Hallo\n"; char txt2[4]; printf(txt1); scanf("%3s", txt2); printf(txt2); system("Pause"); return 0; }

Kontrollstrukturen Es gibt (u.A.) folgende Kontrollstrukturen: if und else while und do for switch-case

if (TEST) { IFBLOCK } else ELSEBLOCK if und else TEST if (TEST) { IFBLOCK } else ELSEBLOCK true false ELSEBLOCK IFBLOCK Wenn im IF- oder ELSEBLOCK oder in einem anderen Anweisungsblock nur eine einzelne Anweisung steht, kann man die geschweiften Klammern ( {} ) auch weglassen. Bei mehreren IF- und ELSE-Anweisungen bezieht sich das else stets immer auf das letzte if.

Aufgabe 4 In einem Programm finden sich folgende zwei Zeilen: /* Falls x oder y größer als 5 */ if ((x || y) >5) Warum tut diese if-Anweisung nicht das, was der Programmierer offenbar vorgesehen hat? Wie lautet die korrekte Bedingung, die diesem Kommentar entspricht?

Aufgabe 5 In einem Programm finden sich folgende Zeilen: x = 10.0/3.0 + 2.0/3.0; if (x == 4.0) printf("Exakt vier!!“); Obwohl x eine float-Variable ist und das Ergebnis der Berechnung auch 4 ergeben müsste, erscheint beim Ablauf des Programms der Text “Exakt vier!!“ nicht auf dem Bildschirm. Warum?

while while (TEST) { BLOCK } TEST true false BLOCK

do { BLOCK } while (TEST); do-while BLOCK do { BLOCK } while (TEST); TEST true false

for (INIT;TEST;STEP) { BLOCK } false BLOCK STEP

Beispiel Wir wollen ein Programm schreiben, das alle Buchstaben des Alphabets bis auf ‘E‘, ‘R‘ und ‘T‘ nacheinander ausgibt. #include<stdio.h> #include<stdlib.h> int main() { char ch; for (ch='A'; ch<= 'Z'; ch++) if (ch=='E' || ch=='R' || ch=='T') continue; printf("%c",ch); } system("PAUSE"); return 0;

Aufgabe 6 Schreibe ein Programm, das alle Kleinbuchstaben einer Zeichenkette in Großbuchstaben umwandelt. Tipp: Verwende die Funktion strlen(), die die Länge der Zeichenkette bestimmt. Die Funktion toupper() wandelt alle Klein- in Großbuchstaben um. Zu der Standardbibliothek kommen diese zur Verwendung der Funktion noch hinzu: #include <string.h> #include <ctype.h>

Auflösung Aufgabe 6 #include <stdio.h> #include <string.h> #include <ctype.h> #include <stdlib.h> int main() { char txt[80]; short index; printf("Zeichenkette:\n"); scanf("%s",txt); for ( index=0; index<strlen(txt); index++ ) txt[index] = toupper(txt[index]); printf(txt); system("pause"); return 0; }

switch-case switch (X) { case 1: case 2: //Code für X==1 und X==2 break; case 3: //Code für X==3 default: //Code für alle anderen Werte von X }

Aufgabe 7 In folgender switch-Anweisung wird abhängig vom Wert der char-Variablen ch der short-Variablen x ein Wert zugewiesen. Wandle die switch-Anweisung in eine else-if-Kette um.

switch (ch) { case ‘A‘: case ‘B‘: case ‘C‘: case ‘D‘: case ‘E‘: case ‘F‘: case ‘G‘: case ‘H‘: case ‘I‘: case ‘J‘: case ‘K‘: case ‘L‘: case ‘M‘: case ‘N‘: case ‘O‘: x = 1; break; case ‘a‘: case ‘b‘: case ‘c‘: case ‘d‘: case ‘e‘: case ‘f‘: case ‘g‘: case ‘h‘: case ‘i‘: case ‘j‘: case ‘k‘: case ‘l‘: case ‘m‘: case ‘n‘: case ‘o‘: X = 2; break; case ‘0‘: case ‘1‘: case ‘2‘: case ‘3‘: case ‘4‘: case ‘5‘: case ‘6‘: case ‘7‘: case ‘8‘: case ‘9‘: X = 3; break; case ‘#‘ : case ‘&‘ x = 4; break; default;: x = -1; break;

Auflösung Aufgabe 7 if(ch>=‘A‘ && ch<=‘O‘) x=1; else if(ch>=‘a‘ && ch<=‘o‘) x=2; else if(ch>=‘0‘ && ch<=‘9‘) x=3; else if(ch==‘#‘ || ch==‘&‘) x=4; else x=-1;

Definition: Rückgabewert Argumente Aufruf: Funktionen Definition: Rückgabewert Argumente Aufruf: Int max (int x, int y) { if (x >y) return x; } return y; max (12, 1)

Beispiel #include <stdio.h> #include <stdlib.h> int Summe (int s1, int s2) { return (s1+s2); } int main () int a=2, b=4, c; c= Summe (a,b); printf("Die Summe ist: %d\n",c); system("pause"); return 0; Definition der Funktion „Summe“ die als Rückgabewert (return) „s1+s2“ liefert Aufruf der Funktion „Summe“

Aufgabe 8 Schreibe nun ein Programm, welches den Mittelwert dreier Werte berechnet, die im Hauptprogramm festgelegt werden. Der Mittelwert soll hierbei nicht direkt im Hauptprogramm berechnet werden, sondern stattdessen durch eine Funktion float Mittel(float x, float y, float z) übergeben werden.

Auflösung Aufgabe 8 #include <stdio.h> #include <stdlib.h> float Mittel(float,float,float); int main () { float Wert1,Wert2,Wert3; float Mittelwert; Wert1 = 3.5; Wert2 = 7.5; Wert3 = 3; Mittelwert = Mittel(Wert1,Wert2,Wert3); printf("Der Mittelwert ist: %f\n",Mittelwert); system("pause"); return 0; } float Mittel(float x, float y, float z) return ((x+y+z)/3);

Ein weiteres Beispielprogramm: Wie lange hält sich die Schaumkrone eines Bieres? #include<stdio.h> #include<math.h> #include<stdlib.h> const float hweiss=60; const float hpils=75; const float hdunkel=90; int main() { const float h_ende=0.2; int sorte,wahl; float t_halb,t_ende,h_0; printf("Welche Biersorte trinken Sie?\n\n"); printf("1. Hefe-Weizenbier\n2. Pils\n3. Dunkelbier\n\n"); printf("0. Ich trinke kein Bier\n\n"); wahl=0; while(wahl!=1) scanf("%d",&sorte);

if(sorte==1) {t_halb=hweiss; wahl=1;} if(sorte==2) {t_halb=hpils; wahl=1;} if(sorte==3) {t_halb=hdunkel; wahl=1;} else {}; } printf("Wie hoch ist der Bierschaum in cm?\n"); scanf("%f",&h_0); t_ende=-t_halb*(log(h_ende)-log(h_0))/log(2); printf("Bis der Schaum nur noch eine Lage Blasen "); printf("hoch ist,\ndauert es %f Sekunden\n",t_ende); system("pause"); return 0;

Beispiel Wir möchten mit C nun Pseudo-Zufallszahlen aus dem Intervall [0,1) erzeugen. Dazu verwenden wir die Funktion rand(), die in C ganzzahlige Pseudo-Zufallszahlen zwischen 0 und einem hohen Wert RAND_MAX erzeugt. Wichtig! Sonst x=0, da als int interpretiert! #include<stdio.h> #include<stdlib.h> int main () { int i, max; float x; printf("Geben Sie die Anzahl der Zufallszahlen ein:"); scanf("%d",&max); for (i=0;i<max;i++) x=(double)rand()/(double)(RAND_MAX+1.0); printf("%f\n",x); } system("pause"); return 0;

Aufgabe 9 Die dir bereits bekannte Monte-Carlo Simulation zur Annäherung von p lässt sich natürlich auch gut mit C programmieren. Schreibe ein Programm zur Approximation von p.

Auflösung Aufgabe 9 #include<stdio.h> #include<stdlib.h> int main () { int i, max; float inkreis, x, y, z, pi; inkreis=0; printf("Geben Sie die Anzahl der Iterationen ein:"); scanf("%d",&max); for (i=0;i<max;i++) x=(double)rand()/(double)(RAND_MAX+1.0); y=(double)rand()/(double)(RAND_MAX+1.0); z=(x*x+y*y); if(z<=1) inkreis++; } pi=4*inkreis/max; printf("Das Ergebnis ist: pi=%f\n",pi); system("pause"); return 0;

Zeiger (pointers) int *X; ← Zeiger auf eine int- Variable Zeigervariablen weisen auf den Speicherort anderer Variablen hin. Zeiger werden durch ein * vor der Variablen dargestellt. int *X; ← Zeiger auf eine int- Variable float *Y; ← Zeiger auf eine float-

Definition des Zeigers i Ein Beispiel #include<stdio.h> #include<stdlib.h> int main() { char x[]="C macht Spass"; char *i; for (i=&x[0];*i;i++) printf("Speicheradresse %i enthaelt%c\n",i,*i); } system("pause"); return 0; Definition des Zeigers i i zeigt auf die Adressen des Strings „x“ (signalisiert durch das ‚&‘); *i entspricht „*i!=0“

Aufgabe 10 Schreibe mit Hilfe eines Zeigers ein Programm, das alle „a“ in einem einzulesenden Wort durch „b“ ersetzt!

Auflösung Aufgabe 10 #include<stdio.h> #include<stdlib.h> int main () { char txt[5]; printf("Eingabe:\n"); scanf("%s",txt); char *i; for (i=&txt[0];*i;i++) if (*i=='a') {*i='b';} printf("%c",*i); } system("pause"); return 0;