1.16k likes | 1.28k Views
Programmier-sprache C. Das einfachste Programm:. #include "stdafx.h" #include <stdio.h> int main(){ return 0; }. Rumpf. Kopf. Rückgabewert: int d.h. eine ganze Zahl. Hauptprogramm.
E N D
#include "stdafx.h" #include <stdio.h> int main(){ return 0; } Rumpf Kopf Rückgabewert: int d.h. eine ganze Zahl Hauptprogramm Anweisungen, hier nur eine. Diese muss mit Semikolon beendet werden. return 0 gibt die Zahl 0 zurück. Begrenzer (Block)
#include "stdafx.h" #include <stdio.h> int main(){ return 0; } Ein- und Ausgabefunktionen wie z.B. printf benötigen dies.Dies wird später noch genauer erklärt. Diese mit #include eingefügten Dateien werden aus Platzgründen oft in den Folien dieser Powerpoint-Präsentationen (aber nicht bei realen Programmen !!) weggelassen. Kopiert den Inhalt der Dateien (Textdatein) stdafx.h und stdio.h an diese Stellen in diese Datei! Was ist der Unterschied zwischen " " und < > ?
Wenn der Name in < > eingeschlossen wird, bedeutet das, daß der Compiler den sogenannten Standard-Include-Pfad benutzen soll, um die Datei zu finden. Dort stehen die sogenannten Standard-Header-Files (Systemdateien), wie z.B. <stdio.h>, die zu der Entwicklungsumgebung von MS VC++ gehören und mit dem Programmpacket ausgeliefert wurden.
Eselsbrücke:Die Klammern < >kann man sich als der obere Teil bzw. untere Teil eines stilisierten S (wie Systemdateien) vorstellen:
Wenn der Name in " " eingeschlossen wird, bedeutet das, dass der Compiler im aktuellen Verzeichnis (dort wo sich das Projekt befindet) suchen soll, um die Datei zu finden. Diese Datei wird "normalerweise" vom Programmierer selbst erstellt. Allerdings wird "stdafx.h" nicht vom Programmierer erstellt, sondern diese Datei wird beim Erstellen eines Programms (Projekt), für das jeweilige Projekt spezifisch vom MS VC++ Compiler erzeugt. Bitte nachprüfen: Suchen Sie diese Dateien auf der Festplatte!
Das obige Programm entspricht der sogenannten ANSI-Norm. Dies ist eine Norm, in der festgelegt wird, nach welchen Regeln ein C-Programm aufgebaut sein muss.
int main(void){ return 0; } Um deutlich zu machen, dass in den Klammern kein sogenannter Parameter stehen soll, kann man dies durch das englische Wort void bewerkstelligen. Der Microsoft Visual C++ 6.0 Compiler arbeitet nicht 100% nach dieser ANSI-Norm. Keine Angst:Die Begriffe "Funktion", "return", usw. werden später noch genauer erklärt. (dies war nur eine kurze Vorabinformation) Wenn aus Platzgründen nötig, wird in den folgenden Präsentationen die Anweisung return 0 weggelassen.
Ein reines Ausgabe - Programm: int main(){ printf("Guten \n Morgen"); return 0; } Reservierte Worte; sollen nicht vom Programmierer für Variablennamen vergeben werden Zeilenvorschub Anweisungen einrücken Semikolon am Ende einer jeden Anweisung Der auf dem Bildschirm ausgegebene Text ist eine Zeichenkette. Diese steht immer zwischen Anführungszeichen. Auf dem Bildschirm erscheint also:Guten Morgen
Ein reines Ausgabe - Programm: int main(){ printf("Guten \n Morgen"); return 0; } 2 Leerzeichen, also... ... auch hier 2 Leerzeichen Der auf dem Bildschirm ausgegebene Text ist eine Zeichenkette. Diese steht immer zwischen Anführungszeichen. Auf dem Bildschirm erscheint also:Guten Morgen
In einer Zeichenkette, die durch printf ausgegeben wird, können sich aber nicht nur sichtbare Zeichen befinden, sondern auch sogenannte Escape-Sequenzen, die bestimmte Aktionen bewirken. Escape-Sequenzen sind Zeichenfolgen, die mit einem Schrägstrich beginnen, auf den eine oder mehrere Zeichen folgen.
\nführt Zeilenvorschub durch (new line)\tsetzt Horizontaltabulator\vsetzt Vertikaltabulator\bgeht Mit dem Kursor ein Zeichen zurück (backspace)\rführt Wagenrücklauf durch (carriage return)\fführt Seitenvorschub durch (form feed)\alöst Klingelzeichen aus (Alarm)\'Hochkomma\" Anführungszeichen\\umgekehrter Schrägstrich (backslash)\dddASCII-Zeichen in Oktalnotation (d ist eine Okalziffer)\xddASCII-Zeichen in Hexadezimalnotation (d ist eine Hexadezimalziffer)
Was bewirkt das folgende Programm ?Bitte ASCII-Tabelle benutzen !(näheres zur ASCII-Tabelle später) #include "stdafx.h" #include <stdio.h> int main(){ printf("\x41\x42\x43\a"); return 0; }
Es wird auf dem Bildschirm ABC ausgegeben und ein Alarm (Ton) auf dem Lautsprecher erzeugt.
Die Funktion printf verlangt, daß sie vorher deklariert wird. In dieser Deklaration befinden sich Informationen wie z.B. der Name und die Anzahl der Parameter dieser Funktion. Diese Deklaration befindet sich in der Datei stdio.h, die mit #include <stdio.h> eingefügt wird. Bitte den Inhalt dieser Datei anschauen bzw.dort nach printf suchen. #include "stdafx.h"#include <stdio.h>int main(){ printf("Guten \n Morgen"); return 0; }
Ein Ein /Ausgabe - Programm: int main (){ int z; printf("Bitte ganze Zahl eingeben \n"); scanf("%d", &z); z = z * z; printf("Das Quadrat ist: %d", z); return 0; } Deklarationsteil = Zutaten Datentyp Variable Variablenname Anweisungsteil = Zubereitung Einzelne Anweisungen Eingabe Semikolon am Ende einer Anweisung
Elemente des Rumpfs:
Variable int main (){ int z; int a; int b,c,d; ... } Datentyp: int int ist Abkürzung für integer (bedeutet ganze Zahl) Der Datentyp gibt an, welche Werte (z.B. ganze Zahlen) eine Variable annehmen kann. mehrere Variablen können auch durch Kommata getrennt werden.Aber am Ende muss ein Semikolon kommen. Der Variablenname soll selbstsprechend bzw. selbsterklärend sein. Also sollte man z.B. eine Variable, die die Breite eines Rechtecks speichert auch breite nennen und NICHT wie hier (aus Platzgründen) nur mit einem Buchstaben benennen !
z wird mit dem Wert 123 initialisiert. int main (){ int z=123; int a; int b,c,d; ... } Eine Variable kann deklariert und gleichzeitig auch initialisiert (vorbelegt) werden
Variable sind Daten mit folgenden Eigenschaften: Eine Variable kann während des Programmlaufs unterschiedliche Werte annehmen. Eine Variable muss vor ihrer Verwendung im Deklarationsteil vereinbart werden. Eine Variable hat einen Namen und einen Datentyp.
Unter einer Variablen kann man sich einen Behälter vorstellen.In diesem Behälter wird ein Wert gespeichert (z.B. eine bestimmte Menge Flüssigkeit). Diese Menge bleibt solange konstant in diesem Behälter, solange sie nicht verändert wird. Diese Eigenschaft nennt man speichern. Es "verdunstet" deshalb auch nichts.
Bitte folgende Regel einhalten:Anfangsbuchstabe eines Variablennamens immer klein schreiben. Dies ist dem Compiler zwar egal, doch an diese Regel halten sich alle Programmierer.
Bitte folgende Regel einhalten:In einem Variablennamen darf kein Umlaut vorkommen! Also: Statt des Variablennamens zähler lieber zaehler verwenden. Dies ist dem Compiler nicht egal. (zähler ergibt eine Fehlermeldung).
Die Anweisungen des letzten Ein/Ausgabeprogramms hier nochmals kurz erklärt:
printf("Bitte ganze Zahl eingeben \n"); Platzhalter mit Formatanweisung: gibt an, in welcher Form (ganze Zahl, Fließkommazahl oder Zeichen) der eingegebene Wert abgespeichert wird, bzw. ausgegeben wird. scanf("%d", &z); Zuweisungsoperation (Näheres in der übernächsten Folie) Bevor der Text zwischen den Anführungszeichen ausgegeben wird, wird der Platzhalter %d durch den Wert der Variablen z ersetzt. z = z * z; printf("Das Quadrat ist: %d", z);
Frage:Was gibt die folgende Anweisung auf dem Bildschirm aus ? Das Quadrat ist: z Der Compiler erkennt das z nicht als eine Variable, sondern als einen “normalen“ Buchstaben ! printf("Das Quadrat ist: z");
printf("Bitte ganze Zahl eingeben \n"); scanf("%d", &z); z = z * z; printf("Das Quadrat ist: %d", z); Platzhalter mit Formatanweisung: gibt an, in welcher Form (ganze Zahl, Fließkommazahl oder Zeichen) der eingegebene Wert abgespeichert wird, bzw. ausgegeben wird. Formatieren heißt eine Form geben, so wie eine Backform einem Teig eine Form gibt. Merke:
Zuweisungsoperation: Der Variablen links des Gleichheitszeichens = wird der Wert rechts des Gleichheitszeichens zugewiesen. LEIDER benutzt der Entwickler der Programmiersprache C statt des Zeichens := das Gleichheitszeichen, obwohl es sich ...
um eine Zuweisung und nicht um eine Gleichheit handelt. Dem Entwickler der Programmiersprache C ist dies offensichtlich egal. Die Syntax gibt er vor und das Gleichheitszeichen hat bei ihm die Semantik von :=
y 12 10 10 10 12 ? 13 z 12 12 10 Dynamische Entwicklung der Inhalte der Variablen y und z: Beispiele: y=10; z=y; z=y+2; y=z; z=z+1;
Die Ausführung der Anweisungen des letzten Ein/Ausgabeprogramms detailliert erklärt:
Was bewirken die einzelnen Anweisungen des gerade vorgestellten Programms ? printf("Bitte ganze Zahl eingeben \n"); scanf("%d", &z); z = z * z; printf("Das Quadrat ist: %d", z);
Was bewirkt also: printf("Bitte ganze Zahl eingeben \n"); Es wird auf dem Bildschirm der Text "Bitte ganze Zahl eingeben" ausgegeben und dann ein Zeilenumbruch gemacht.
Was bewirkt also: scanf("%d", &z); Das Programm hält an und der Benutzer muss über Tastatur eine ganze Zahl eingeben und mit dem Drücken der Return-Taste diese Eingabe beenden (erst dann macht das Programm weiter). Die eingegebene Zahl wird in der Variablen z gespeichert.Wir nehmen hier an, dass der Benutzer die Zahl 5 eingegeben hat.
Was bewirkt also: z = z * z; Der Wert der Variablen z (hier also 5) wird mit sich selbst multipliziert (ergibt hier also 25) und wiederum in der Variablen z abgespeichert. Der Wert der Variablen z ist hier also vor der Ausführung der Anweisung 5 und nach der Ausführung 25.
Was bewirkt also: printf("Das Quadrat ist: %d", z); Es wird zuerst in dem Text "Das Quadrat ist: %d" der Platzhalter %d durch den Wert der Variablen z (hier also 25) ersetzt. Dann wird dieser ersetzte Text "Das Quadrat ist: 25" auf dem Bildschirm ausgegeben.
Aufgabe:Ein Schreiner will von einer rechteckigen Holzplatte den Flächeninhalt und den Umfang (für die Umleimer) bestimmen.Schreiben Sie dazu ein Programm.
int main (){ int l; // Länge int b; // Breite // Variable besser untereinander deklarieren int u,f; printf("Bitte Länge eingeben \n"); scanf("%d", &l); printf("Bitte Breite eingeben \n"); scanf("%d", &b); u = 2 * (l + b); f = l * b; printf("Fläche = %d Umfang = %d",f, u) ; return 0; } alles in der gleichen Zeile rechts von // wird als Kommentar aufgefasst und vom Compiler nicht berücksichtigt. %d wird durch den Wert von u ersetzt %d wird durch den Wert von f ersetzt
Frage:Was ist der Nachteil des Programms ? Antwort: Es können nur ganzzahlige Werte eingegeben werden.
1 Byte = 8 Bit
Wie viele Zustände kann man mit 1 Byte darstellen ? Zu schwierig ? Also beginnen wir mit einem Bit
Wie viele Zustände kann man mit 1 Bit darstellen ? 0 und 1 also, Anzahl der Zustände: 2 * 1 = 2