Version [22575]
Dies ist eine alte Version von ProzProg2Programmaufbau erstellt von RonnyGertler am 2013-03-27 15:38:10.
Prozedurale Programmierung - Kapitel 2 - Programmaufbau
Inhalte von Dr. E. Nadobnyh
2.1. Bestandteile eines Programms
Das erste Programm
Da formale Beschreibungen etwas trocken sind, wird traditionell mit dem einfachen Beispiel angefangen.
//Ziel dieses Programms ist es, die Textfolge
//"Hallo Welt" auf dem Bildschirm auszugeben.
#include <iostream>
using namespace std;
int main ( )
{ cout<<"Hallo Welt";
return 0;
}
//"Hallo Welt" auf dem Bildschirm auszugeben.
#include <iostream>
using namespace std;
int main ( )
{ cout<<"Hallo Welt";
return 0;
}
Drei Bestandteile des Quellcodes:
a) Kommentare beginnen mit oder abgegrenzt, z.B.:
/* . . . . .
. . . . . */
. . . . . */
Kommentare dürfen nicht verschachtelt werden.
Präprozessor
Ein Präprozessor ist ein Programm, welches Präprozessordirektiven verarbeitet und die Kommentare ausblendet.
Besonderheiten:
1. Er wird vor dem Compiler gestartet und sucht den Quelltext nach seinen Direktiven durch.
2. Direktiven beginnen mit einem # (Rautenzeichen) als ersten Zeichen einer Zeile.
3. Ein Präprozessor arbeitet auf Textebene, versteht (fast) nichts von C/C. Deshalb keinerlei Fehlerprüfung.
4. Wichtigste Direktiven sind #define und #include.
Mit der Direktive
#define text ersatztext
wird die beliebige Zeichenfolge text durch ersatztext überall im Programm ersetzt. Beispiel:
#define PI 3.1415
Eine Programmbibliothek ist eine Datei, die eine oder mehrere C/C -Funktionen beinhaltet.
Damit ein Programm von diesen Funktionen Bescheid weiß, müssen diese eingebunden werden. Das geschieht mit der #include- Direktive.
Beispiele für die wichtigen Header-Dateien, welche die Funktionsprototypen enthalten:
#include <iostream> für cout
#include <math.h> für sin
#include <iomanip> für setprecision
#include <stdio.h> für printf
main-Funktion
Ein Programm kann mehrere Funktionen enthalten. Jedes Programm muss die main-Funktion enthalten, die als Hauptprogramm bezeichnet wird. Bei der Programmausführung wird die main-Funktion vom Betriebssystem gestartet. Ser main-Körper ist durch die geschweiften Klammern abgegrenzt und enthält Definitionen und Anweisungen.
int main ( )
{
. . .
return 0;
}
{
. . .
return 0;
}
Variablendefinitionen und Anweisungen
Ein einfaches typisches Programm besteht aus mehreren Variablendefinitionen und Anweisungen:
1. Variablendefinitionen (Vereinbarungen) erklären dem Compiler die vom Programmierer eingefügten Variablennamen.
Durch die Variablendefinition erhält jede Variable einen Datentyp. Der Datentyp legt die erlaubten Wertebereiche und die zulässigen Operatoren fest. In folgendem Beispiel ist int ein Datentyp integer:
int a, b; int s;
2. Anweisungen sind ausführbare Sprachelemente, die den eigentlichen Algorithmus beinhalten, z.B.:
s = a + b;
Typische Programmmuster
Der Aufbau eines einfachen typischen Programms folgt in den meisten Fällen diesem Muster:
Die Eingabe, Verarbeitung und Ausgabe sind die Anweisungen im typischen EVA-Programm:
Typisches Programm. Beispiel
2.2. Syntax
Syntax und Semantik
Unter Syntax einer Sprache versteht man die Menge der
grammatikalischen Regeln, die bestimmen, wie die
Symbole einer Sprache korrekt zu benutzen sind.
Die Semantik beschreibt die Bedeutung der syntaktisch
korrekten Sätze, d.h. wie sie sich verhalten, wenn sie auf
Rechnern ausgeführt werden.
Syntax ist hierarchisch aufgebaut:
- Alphabet,
- Lexikalische Einheiten,
- Sprachelemente.
Syntaxhierarchie
Alphabet
Das gesamte Alphabet der Grundzeichen ist in Zeichen eingeteilt, die für die Syntaxregeln relevant sind:
- Kleinbuchstaben: a .. z
- Großbuchstaben: A .. Z
- Unterstreichungszeichen: _
- Ziffern: 0 .. 9
- Sonderzeichen:
! # $ % & * + , − . / : ; < >
? @ | \ ~ { } " ' ( ) [ ]
- Nichtdruckbare Zeichen:
- ’ ’ -Leerstelle, Leelzeichen,
- ’\n’ -neue Zeile, Zeilenwechsel Return, Enter,
- ’\t’ -Tabulator,
- ‘\0’ -Null-Zeichen ua.
Lexikalische Einheiten
Lexikalische Einheiten (Sinneinheiten, Token) sind bestimmte regelhaft gebildete Wörter (Zeichengruppen) eines Programms, die durch Trennzeichen voneinander abgetrennt sind.
1. Namen (Identifikator, Bezeichner)
- Namen sind Zeichenfolgen, die nur Buchstaben, Ziffern, oder das Unterstreichungszeichen “ _“ enthalten.
- Umlaute und “ß“ sind nicht erlaubt.
- Meist 31 Zeichen, strenge Unterscheidung zwischen groß und klein.
- Erstes Zeichen darf keine Ziffer sein.
- Unterstreichungszeichen als erstes Zeichen ist füt Dienstnamen reserviert.
- Standardfunktionen wie sin() oder fopen() sollen nicht umfunktioniert werden.
2.Schlüsselwörter (Wortsymbole, keyword)
- Bestimmte Wörter haben eine besondere Bedeutung, beispielsweise main, while und if.
- C hat eine geringe Anzahl von Schlüsselwörtern, etwa dreißig.
- Schlüsselwörter dürfen nicht als Namen verwendet werden.
3. Literale (Konstanten, constant, literal)
Es gibt Literale für Ganzzahlen, Gleitpunktzahlen, Zeichen, Zeichenketten, Wahrheitswerte.
4.Operatoren
Festgelegte Zeichen, z.B.: + oder Zeichengruppen, z.B.: <<.
5.Trennzeichen (separator)
z.B.: Zwischenraum (space), Zeilenwechsel, Operatoren.
Einige Schlüsselwörter in C
auto break case char const continue default do double else enum extern float for goto if int long register return
short signed sizeof static struct switch typedef union unsigned void volatile while
Klammern
Klammern dienen in der Schriftsprache als Satzzeichen zur Gliederung der syntaktischen Form.
Benennung | Zeichen | Verwendungsbeispiel |
Runde | ( ) | Berechnungsreihenfolge |
Eckige | [ ] | Index-Operator |
Geschweifte | { } | Blockgrenzen |
Spitze | < > | Header |
Einfache Hochkommas | ' ' | Zeichenliterale |
Anführungszeichen (Gänsefüßchen) | " " | Zeichenketten |
Sprachelemente
Sprachelemente (Sprachkonstrukte) sind Bestandteile eines Programms. Sie sind aus lexikalischen Einheiten gebaut und durch Syntaxregeln definiert. Es gibt zwei Arten von Sprachelementen: Datenbeschreibungen und Anweisungen.
1. Datenbeschreibungen repräsentieren Daten, welche in einem Rechner bearbeitet werden. Mit Daten sind folgende Begriffe verbunden: Wert, Variable, Konstante, Feld, Struktur, Datentyp, Operand, Verweis, Zeiger.
2. Anweisungen bestimmen, welche Aktionen ausgeführt werden, um Daten zu verarbeiten. Mit Anweisungen sind folgende Begriffe verbunden: Operatoren, Ausdrücke (Terme), Kontrollstrukturen, Aufrufe, Prozeduren, Funktionen, Blöcke.
Namen
Einige Sprachelemente werden durch Namen repräsentiert. Das sind hauptsächlich Variablen, Konstanten, Felder, Funktionen und Typen. Namen werden vom Programmierer festgelegt und mit einer Bedeutung versehen.
Einige Namenskonventionen:
1) Je mehr man von einem Namen auf seine Semantik assoziiert, desto lesbarer kann ein Programm sein.
- Ziffer 0 und Buchstabe O
- Ziffer 1 und Buchstaben l, I, J.
Kontexte
Namen können in drei verschiedenen Kontexten vorkommen:
1)Deklaration,
2)Definition und
3)Verwendung
Jeder Name muss unbedingt vor der Verwendung definiert oder mindestens deklariert werden.
Deklaration, Definition
1. Eine Deklaration führt einen Namen in ein Programm ein und gibt dem Namen eine Bedeutung, z.B. der Name sin wird für eine bestimmte Funktion reserviert.
In einem Programm können mehrere gleiche Deklarationen für einen Namen gegeben werden.
2. Eine Definition bereitet ein Sprachelement zur Verwendung vor:
- führt einen Namen ein (wie Deklaration),
- legt Speicherplatz für Daten oder Code an,
- beschreibt die innere Struktur eines Datentyps, aus der sich der benötigte Speicherplatz ergibt.
In einem Programm kann nur eine einzige Definition für einen Namen gegeben werden.
Beispiele für Sprachelemente
CategoryProzProg