Einführung in C Grundprinzipien
Agenda Sitzung 2 für den 21.10.2002 Programmaufbau Grundlegende Datentypen Arrays Statements Funktionen Einstieg in die Stringverarbeitung Programmierstil 21.10.2002 OpenGL Praktikum (S2)
1. Zusammensetzung eines C-Programms Header-Dateien Programm-Dateien Libraries 21.10.2002 OpenGL Praktikum (S2)
2. Struktur von Programm-Dateien Preprocessor Kommandos Kommentare /* dies ist ein Kommentar */ // dies ist eine einzelne Kommentarzeile (Globale) Variablen )mit möglicher Initialisierung Funktionen besondere Funktion main() 21.10.2002 OpenGL Praktikum (S2)
Beispiel #include <stdio.h> void hello() // a very simple function { printf (“Hello !\n”); } main() // all work starts here hello {}; 21.10.2002 OpenGL Praktikum (S2)
3. Preprocessor-Kommandos Includes #include <standard_header.h> #include “my_header.h” Macros #define PI 3.14 #define ARRAY_SIZE 100 #define SUM(x,y) (x+y) 21.10.2002 OpenGL Praktikum (S2)
4. Grundlegende Datentypen Leer void Integer int, unsigned int int i; long, unsigned long long l; unsigned long ul; short, unsigned short short s; unsigned short us; Character char, unsigned char char c; unsigned char uc; Enum enum color{red,green,blue}; enum color favorite; Floating point float float f; double double d; 21.10.2002 OpenGL Praktikum (S2)
5. Arrays Deklaration Zugriff n m k n[0] n[1] n[2] n[3] n[4] n[5] n[6] #define MAX_ELEMS 10 int n[MAX_ELEMS], *m, *k; double matrix[4][4]; Zugriff matrix[j][k] = (double) n[i]; m = n; k = &(n[5]); k 21.10.2002 OpenGL Praktikum (S2)
6. Initialisierungen int i=0; int n[] = {3,2,8,10,4,7}; double mat[][]= {{1.0,0.0,0.0,0.0}, {0.0,1.0,0.0,0.0}, {0.0,0.0,1.0,0.0}, {0.0,0.0,0.0,1.0}}; 21.10.2002 OpenGL Praktikum (S2)
7. Statements Vergleiche Logische Verknüpfungen größer >, kleiner <, gleich ==, ungleich !=, usw ... Logische Verknüpfungen und && oder || nicht ! (((i == j) && (m!=10)) || !(k >=50)) 21.10.2002 OpenGL Praktikum (S2)
7. Statements Zuweisungen Typkonversionen (casts) #define FALSE 0 i = 10; j = f(x); b = (exp(x)==FALSE) i++; i--; i+=3; i-=5; d*=PI; n/=2; Typkonversionen (casts) i = (int) d; d = (double) i; 21.10.2002 OpenGL Praktikum (S2)
7. Statements Bedingungen if (a==b) { ; // do this } else { ; // do that 21.10.2002 OpenGL Praktikum (S2)
7. Statements Switch statements char c = ‘b’; switch (c) { case ‘a’: ; // do something break; case ‘b’: ; // do something else case ‘c’: ; // do yet something else } 21.10.2002 OpenGL Praktikum (S2)
7. Statements For-Schleife Nested for (i=0; i<IMAX; i++) { ; // do something } for ( ; ; ) v++; // infinite loop Nested for (j=0; j<JMAX; j++) { 21.10.2002 OpenGL Praktikum (S2)
7. Statements While-Schleife Do-While-Schleife While (exp == TRUE) { ; // do something } Do-While-Schleife do while (cond == TRUE); 21.10.2002 OpenGL Praktikum (S2)
8. Funktionen Spezifikation Aufruf void myFunctionA (int i, double d, int vals[]) { ; // do something } int myFunctionB (int i, int j, char str[]) int val; return val; Aufruf myFunctionA (k,f,v); ival = myFunctionB(g,h,s); 21.10.2002 OpenGL Praktikum (S2)
9. Stringverarbeitung String-Deklaration Einfachste Manipulationen #define MAXCHARS 80 char str1[MAXCHARS], str2[MAXCHARS]; Einfachste Manipulationen for (i=0; i<MAXCHARS]; i++) { str1[i] = str2[i]; } 21.10.2002 OpenGL Praktikum (S2)
9. Stringverarbeitung Wichtige schon existierende Funktionen #include <string.h> int strlen (char *str); int strcmp (char *s1, char *s2); char *strcpy (char *dest, char *src); char *strcat (char *dest, char *src); 21.10.2002 OpenGL Praktikum (S2)
9. Stringverarbeitung Wichtige Konstante: ’\n’ Zeilenende ‘\0’ Stringende EOL End Of Line EOF End Of File 21.10.2002 OpenGL Praktikum (S2)
9. Stringverarbeitung Eingabe Ausgabe #include <stdio.h> sscanf (char *str, char *format, ...pointers to variables ); sscanf (str, “%d %d %d”, &v1, &v2, &v3); auch: fscanf (...), scanf (); Ausgabe sprintf (char *str, char *format, ...variables...); sprintf (str, “i = %d\n”, i); auch: fprintf (...), printf (...); 21.10.2002 OpenGL Praktikum (S2)
9. Stringverarbeitung Konversion #include <stdlib.h> double strtod (char *str, char **ptr); long strtol (char *str, char **ptr, int base); unsigned long strtoul (char *str, char **ptr, int base); double atof (char *str); int atoi (char *str); long atol (char *str); 21.10.2002 OpenGL Praktikum (S2)
10. Programmierstil Jeweils 4 Stellen einrücken. Block { ... } Funktion { ... } 21.10.2002 OpenGL Praktikum (S2)
10. Programmierstil Macros nur in großen Buchstaben. Variable und Funktionen beginnen mit kleinem Buchstaben, zusammengesetzte Wörter haben intern jeweils große Buchstaben. Kennzeichnende Vorsilbe bei Funktionen und globalen Variablen. 21.10.2002 OpenGL Praktikum (S2)