C Basis
- Hello Wold
- Kompilieren mit GCC
- Grundstruktur
- Kommentare
- #include
- return
- Datentypen
- Variablen
- Konstanten
- printf()
- 📋 Übung: printf
- sizeof()
- 📋 Übung: sizeof / Datentypen / Modifier
- Datentypen - Limits
- Operatoren
- 📋 Übung: Inkrement / Dekrement
- Typumwandlung (Casting)
- getchar()
- scanf()
- Übungen:
- 📋 Variablen
- 📋 Fläche und Umfang eines Rechtecks
- 📋 Fläche und Umfang eines Kreises
Hello Wold
#include<stdio.h>
int main() {
printf("Hello World\n");
return 0;
}
Kompilieren mit GCC
unter Windows:
gcc hello.c -o hello.exe
unter Linux:
gcc hello.c -o hello.out
Ohne -o Parameter wird Programm zu a.exe bzw. a.out kompiliert!
Ausführen unter Windows:
hello.exe
Ausführen unter Linux:
./hello.out
für Linux und Windows (CMD) auch beide Befehle mit && verknüpft, "auf einmal" nacheinander ausführen
gcc hello.c -o hello.exe && hello.exeGrundstruktur
include-Anweisungen, Funktionsdefinitionen, Variablen / Operatoren, Rückgabewert
jedes C-Programm beginnt mit der main-Funktion
Code wird in {}-Blöcken geschrieben.
Anweisungen enden mit einem Semikolon / Strichpunkt ;
#include <stdio.h>
int main() {
// programmcode ...
return 0;
}
Kommentare
Hilfe um wichtige oder komplizierte Programmabschnitte kurz und prägnant zu erklären
oder Programmcode "auszukommentieren" / temporär zu deaktivieren
// einzeiliger kommentar
/*
mehrzeiliger
kommentar
*/
int a = 1337; // wichtiger wert!
//int b = a + a;
/*
int zahl_a = 1;
int zahl_b = 222;
*/
#include
Headers-Dateien einbinden
für Benutzung von definierten Funktionen, Typen, Konstanten
z.B. stdio.h für Standard-Input/Output (printf, scanf, ...)
#include <stdio.h> // sucht header datei im konfigurierten standard ordner fuer library source code files
#include<stdio.h> // auch ohne leerzeichen .. und mehrfacheinbindung wird ignoriert
oder abhängig vom Programm/Projekt auch möglich:
#include "stdio.h" // als pfadangabe: sucht zuerst lokal, ansonsten im standard ordner fuer bibliotheken
return
Funktionsausgangswert Signal an Aufrufer, ob Erfolg oder Fehler
return 0; // 0 = erfolgreich
oder mit #include <stdlib.h> (Standard-Library) auch über Konstante
return EXIT_SUCCESS;
Fehler EXIT_FAILURE oder Werte ungleich 0
Datentypen
int für ganze Zahlen (z.B. 10, -5)
float für Gleitkommazahlen (z.B. 3,14)
double für Gleitkommazahl doppelter Präzision
char für einzelne Zeichen (z.B. 'A', 'b')
short
long
long long
long double
...
Variablen
Variablen sind Speicherplätze für Daten Variablen müssen vor Gebrauch deklariert werden (Datentyp + Name) Werte können sich ändern / neu zugewiesen werden
int alter = 12;
float pi = 3.14;
char buchstabe = 'A';
buchstabe = 'T'
float groesse = 1.75f;
Variablennamen
nur Buchstaben, Ziffern und Unterstrich _ erlaubt
das erste Zeichen muss ein Buchstabe oder der Unterstrich _ sein
Groß- und Kleinschreibung ist relevant (z.B. zahl und Zahl sind nicht dasselbe)
darf kein Schlüsselwort sein!
Konstanten
Konstanten sind Variablen mit fixen Werten
Konstanten werden mit const deklariert
Werte können sich während der Programmausführung nicht ändern / neu zugewiesen werden!
const int MAX_ZAHL = 100;
const float STEUERSATZ = 0.19;
oder außerhalb der main()-Funktion, global via Makro (Preprozessor)
#define PI 3.14159
als "guter Standard" werden Konstanten in Großbuchstaben geschrieben!
printf()
für Ausgabe von Text und Variablenwerte auf der Konsole
Format-Specifier - Platzhalter für Variablentypen:
%d für int (Ganzzahlen - dezimale Darstellung)
%f für float (Fließkommazahlen)
%c für char (einzelnes Zeichen)
%s für Zeichenketten (Strings)
...
%i für Ganzzahlen - dezimale, octale oder hexadezimale Darstellung
%u für Ganzzahlen im octalen Zahlensystem
%x für Ganzzahlen im hexadezimalen Zahlensystem (kleine Buchstaben)
%X für Ganzzahlen im hexadezimalen Zahlensystem (große Buchstaben)
%u für vorzeichenlose Ganzzahlen
...
mit "Begrenzung":
%.2f z.B. für float mit 2 Nachkommastellen
%3d z.B. für int mit mindestens 3 Stellen (fehlende Stellen werden mit Leerzeichen gefüllt)
#include <stdio.h>
int main() {
int score = 100;
float preis = 9.99;
char anfangsbuchstabe = 'P';
int a = 123, b = 321;
printf("Hallo Welt!\n");
printf("Dein Score ist: %d\n", score);
printf("Der Preis beträgt %.2f Euro.\n", preis);
printf("Der Anfangsbuchstabe ist %c.\n", anfangsbuchstabe);
printf("Variable 'a' = %d und 'b' = %d\n", a, b);
return 0;
}
%% zur Anzeige des Prozentzeichen (%)
Escape-Sequences - Steuerzeichen:
int main(){
/*
escape-sequenzen (steuerzeichen)
sonderzeichen in ascii-zeichenketten/strings, beginnend mit backslash \
\n zeilenumbruch / "new line"
\r wagenruecklauf / "carriage return"
\t tabulator (~4xleerzeichen)
\b backspace
\\ backslash-zeichen
\" doppeltes anfuehrungszeichen
\' einfaches anfuehrungszeichen / apostroph
\0 internes ende-kennzeichen in C
\a beep-Tonsignal
weitere: \0 \f \t \h \nn \0nn \xhh ..
*/
printf("Hallo Welt!\nHallo Welt!\nHallo Welt!\n");
// laengeren text ueber mehrere zeilen mit \ abtrennen .. achtung: leerzeichen/tabulatoren werden mitgezaehlt!
printf("Nocheinmal, \
Hallo Welt?!\n");
return 0;
printf("keine Ausgabe!"); // befehle nach return 0 werden nicht mehr ausgefuehrt
//printf("auskommentiert");
}
📋 Übung: printf
Teste die Programmbeispiele für "Escape-Sequenzen" und "Format-Specifier"
sizeof()
liefert Byte-Größe eines Typs oder einer Variable
printf("sizeof(int) = %d\n", sizeof(int));
int a = 3;
printf("sizeof(int) = %d\n", sizeof(a));
anstatt %d eventuell auch %zu
📋 Übung: sizeof / Datentypen / Modifier
#include <stdio.h>
int main() {
/*
datentypen -----------
char
int
short
long
float
double
...
modifier -------------
signed *
unsigned *
const *
static
extern
volatile
----------------------
*/
printf("sizeof(int) = %d\n", sizeof(int));
return 0;
}
-
Lass dir mit Hilfe des Befehls
sizeof()die jeweilige Größe der verschiedenen Datentypen ausgeben und sortiere die Ausgabe anhand der Größen. -
Suche im Internet kurz nach den angegebenen "modifier" in C und versuche einen groben Überblick über sie zu erhalten.
Datentypen - Limits
unterschiedliche Datentypen haben einen unterschiedliche / begrenzte Werte-Bereiche
Nutzung der Headers-Dateien limits.h und/oder float.h
#include <stdio.h>
#include <limits.h>
#include <float.h>
int main() {
// limits.h --------------------------------------
printf("char (min.): %d\n", SCHAR_MIN);
printf("char (max.): +%d\n", SCHAR_MAX);
printf("short (min.): %d\n", SHRT_MIN);
printf("short (max.): +%d\n", SHRT_MAX);
printf("int (min.): %d\n", INT_MIN);
printf("int (max.): +%d\n", INT_MAX);
printf("long (min.): %ld\n", LONG_MIN);
printf("long (max.): +%ld\n", LONG_MAX);
printf("long long (min.): %lld\n", LLONG_MIN);
printf("long long (max.): +%lld\n", LLONG_MAX);
// float.h ---------------------------------------
printf("float (min.): %e\n", FLT_MIN); // %e = exponential format
printf("float (max.): +%e\n", FLT_MAX);
printf("double (min.): %g\n", DBL_MIN); // %g = normal or exponential notation .. je nach region
printf("double (max.): +%g\n", DBL_MAX);
printf("long double (min.): %Lf\n", LDBL_MIN);
printf("long double (max.): +%Lf\n", LDBL_MAX);
// genauigkeit in dezimalziffern
printf("float: %d\n", FLT_DIG);
printf("double: %d\n", DBL_DIG);
printf("long double: %d\n", LDBL_DIG);
return 0;
}
Operatoren
Zuweisung eines Wertes mit =
int a = 123;
Arithmetische Operatoren:
+ Addition
- Subtraktion
* Multiplikation
\ Division (Division durch 0 ist nicht erlaubt!)
% Modulo (Rest einer Division ... nur bei Datentypen für Ganzzahlen!)
erweiterte Darstellung (kürzere Schreibweise):
+= a += b gleichwertig mit: a = a + b
-= a -= b gleichwertig mit: a = a - b
*= a *= b gleichwertig mit: a = a * b
/= a /= b gleichwertig mit: a = a / b
%= a %= b gleichwertig mit: a = a % b
Inkrement / Dekrement - Operatoren
Wert einer Variable um 1 erhöhen oder reduzieren
++ erhöht um 1
-- reduziert um 1
📋 Übung: Inkrement / Dekrement
Teste das Beispielprogramm und versuche die Funktionalität / Ausgaben nachzuvollziehen.
#include <stdio.h>
int main(){
int val = 1;
printf("1. val : %d\n", val);
val++;
printf("2. val : %d\n", val);
printf("3. val : %d\n", val++);
printf("4. val : %d\n", val);
printf("5. val : %d\n", ++val);
printf("6. val : %d\n", val);
printf("7. val : %d\n", (val + --val));
printf("8. val : %d\n", val);
int abc = val + val++;
printf(">> abc : %d\n", abc);
printf("9. val : %d\n", val);
return 0;
}
🡲 zwei Schreibweisen:
postfix (var++ / var--) verändert den Wert, gibt aber noch den alten Wert an den aktuellen Ausdruck weiter
präfix (++var / --var) verändert den Wert und gibt diesen sofort an den aktuellen Ausdruck weiter
Bit - Operatoren
&
|
^
<<
>>
später ...
Typumwandlung (Casting)
implizit, einfache Zuweisung, überlässt dem Compiler die Aufgabe der automatischen Umwandlung
explizit, manuelle Steuerung (für gewünschtes Verhalten bzgl. Endergebnis) mit besserer Sichtbarkeit 🡲 sog. TypeCast, Cast oder Casting
int i;
int c = 'A';
i = (int)c;
printf("char c nach int i: %d\n", i);
i = 67;
c = (char)i;
printf("int i nach char c: %c\n", i);
float f = 2.345;
i = (int)f;
printf("float f nach int i: %d\n", i);
getchar()
einzelnes Zeichen über Tastatur einlesen
Programm wird angehalten bis Benutzer Taste drückt
char c = getchar();
printf("eingegebenes Zeichen: '%c'\n", c);
scanf()
Tastatur-Eingabe lesen (Basis, für einfache Werte)
int alter;
scanf("%d", &alter);
printf("Sie sind %d Jahre alt.\n", alter);
Platzhalter definiert genaues Format der Eingabe das eingehalten werden muss!
int tag, monat, jahr;
printf("Bitte Datum (im Format: tag.monat.jahr, z.B. 16.9.2025) eingeben: ");
scanf("%d.%d.%d", &tag, &monat, &jahr);
printf("Datum: %d/%d/%d\n", jahr, monat, jahr);
Sicherheit beachten! (Puffer-Größe, Fehlerrückmeldungen)
Übungen:
📋 Variablen
Überprüfe die Ausgabe einer Variable, der noch kein Wert zugewiesen wurde: z.B: int a;
Welchen Wert bekommt sie? Was passiert bei zwei verschiedenen Variablen ohne zugewiesenen Wert?
📋 Fläche und Umfang eines Rechtecks
Schreibe ein Programm zur Berechnug der Fläche und des Umfangs eines Rechtecks. Verwende zu Beginn fixe Werten für die Länge und Breite und ändere anschließend das Programm so um, damit der Benutzer den Wert für die Länge und Breite eingeben kann.
📋 Fläche und Umfang eines Kreises
Der Benutzer sollte wiederum die Werte für die benötigten Variablen eingeben können. Die Variable PI sollte als Konstante angelegt werden. Versuche das Programm in zwei Varianten zu Lösen: Eingabe des Werte als Integer und als Float/Double und passe dem entsprechend die Berechnung und Ausgabe an.