C-Programming - Teil 1 Hi Leute da es viel Personen gibt die behaupten in C zu programmieren wäre schwierig habe ich mich entschlossen mal eine Tutorialsammlung über das Programmieren zu schreiben um auch den letzten Kritikern davon zu überzeugen das C gar nicht so schwer ist man muss sich nur richtig und intensiv damit befassen. Bevor wir damit anfangen möchte ich allerdings an der Stelle anmerken das man wenn man ein wirklich gute Programmierer werden möchte es sich mit meinen tutorials nicht gedan hat. Es gibt mehrere gute Programmier- handbücher die man sich als Ergänzung auf jendenfall besorgen sollte. Ok um den allgemeinen Aufbau eines C-Programmes zu erklären schauen wir uns am bes- ten ein Programm an. main() { printf("Dies ist mein erstes Programm"); } Dieses Programm geben wir nun in einen Editor ein. Da es ja unter Unix eine menge Editoren gibt wird das wohl kein Problem darstellen. Ich selber benutze den vi und werde deshalb auch nur auf ihn eingehen. Kommados zu vi findet ihr am Ende des Tutorials. Wir geben das Progrmam nun in dem Editor ein und speichern es anschließend unter Datei.c (Anstelle von Datei könnt ihr auch jeden x-belibigen Namen vergeben) Danach müssen wir das Programm nur noch compilieren was wir durch die Eingabe von cc -o Datei Datei.c erreichen. (Für Datei setzt ihr natürlich euren Dateinamen ein). Nun müssen wir dem Programm nur noch die Ausführungsrechte geben oder ihm ein ./ voran stellen. Nun zur Erklärung: In der ersten Zeile finden wir die Funktion main() vor die in jedem Programm enthalten sein muss. Was eine Funktion ist wollen wir uns später genauer anschauen. In Zeile 2 und 4 sehen wir zwei geschweifte Klammern die den Anweisungsteil umschließen. In der 5. Zeile steht nun das eingentlich Programm. Es bewirkt lediglich die Ausgabe: Dies ist mein erstes Programm Der Anweisungsteil wird durch die Funktion printf() eingeleitet. Der Text der mit hilfe von printf() ausgegeben soll ist stehts in Anführungszeichen zu setzen. Das \n am Ende des Textes bedeutet so viel wie new line also neue Zeile. Es bewirkt das nach der Ausgabe des Textes in eine neue Zeile gesprungen wird. Ein Anweisungsteil muss stehts mit einem Semikolon abgeschlossen werden. sehen wir uns nun ein anderes Programm an. #include main() { printf("Dies ist mein zweites Programm\n"); /* Die Funktion bewirkt die Ausgabe eines Textes */ } Erklärung: In der ersten Zeile finden wir #include vor was soviel bedeutet das die sogenannte Headerdatei stdio.h (stdio = standart input output = Standart Ein- Ausgabe) in unser Programm eingebunden wird. Warum genau wir das machen müssen interessiert uns zur Zeit ersteinmal nicht. Das nächste was für uns neu ist steht hinter der Funktion printf(). Das /* */ stellt in C einen Kommentar dar. Alles was zwischen diesen beiden Zeichen steht wird vom compiler ignoriert. Bevor wir uns nun mit Variabeln beschäftigen, müssen wir ersteinmal klären was Variablen überhaupt sind. Variablen sind Bezeichner (Namen) für Speicherplätze. Damit der Compiler beim übersetzen weiß wieviel Speicherplatz für eine Variable benötigt wird, muss jede Variable einen bestimmten Typ haben. Variablen müssen deklariert werden. Deklarieren heißt nicht mehr als das man angeben muss vom welchen Datentyp die Variable ist. Näheres dazu in der Tabelle. #include main() { int a; a = 5; printf("\n\n"); printf("Die Variable a hat den Wert: "); printf("%d", a); printf("\n"); } Erklärung: In der Zeile 3 finden wir nun etwas neues nämlich int a; Bevor wir nemlich einer Variablen eine Wert zuweisen können, müssen wir sie erstmal deklarieren. Beim deklarieren gibt man an wieviel Platz im Speicher reserviert werden soll. Das speichern der Variablen geschieht also in sogenannten Speicherplätzen, die innerhalb des Speichers durchnummeriert sind. (Der Fachausdruck für Speicherplätze lautet: ADRESSEN) Sehen wir uns dazu eine Tabelle an: Typ Grösse in Byte Wertebereich unsigned short int 2 Byte 0 bis 65,535 short int 2 Byte -32,768 bis 32,767 unsigned long int 4 Byte 0 bis 4,294,967,295 long int 4 Byte -2,147,483,648 bis 2,147,483,647 char 1 Byte 256 Zeichenwerte float 4 Byte 1.2e-38 bis 3.4e38 double 8 Byte 2.2e-308 bis 1.8e308 Weiter mit der Erlärung: In Zeile 4 weisen wir der Variablen a nun den Wert 5 zu. Wir hätten natürlich auch gleich bei der Deklaration der Variablen den Wert zuweisen können (int a = 5;) doch für den Anfang ist es besser erst die Variable zu deklarieren und ihr dann eine Wert zuzuweisen da dies die verständlichkeit erhöht. In Zunkunft werde ich aber die zweite möglichkeit benutzen. In der 8. Zeile erfolgt nun die Ausgabe eines Textes und in Zeile 9 erfolgt die Ausgabe der Zahl 5. Das %d sagt dem Comiler das es sich hier um eine Ganzahl handelt also die Zahl keine Komma aufweist. Um dies zu überprüfen jetzt ein kleines Programm. #include main() { int a = 5,6; printf("\n\n"); printf("Die Variable a hat den Wert: "); printf("%d",a); printf("\n"); } Dieses Programm unterscheidet sich eigentlich nur davon das ihr anstatt 5 der Wert 5,6 zugewiesen wird. Wenn ihr das Programm aber compiliert habt und es anschließend gestartet habt, werden ihr keinen unterschied zwischen dem ersten und dem zweiten Ergebnis feststellen können da wiederum der Wert 5 ausgegeben wird. Der Grund dafür ist (int) int steht wie wir aus der obigen Tabelle entnehmen können für ganze Zahlen also keine Kommastellen. Als nächstes wollen wir uns in diesem Tut mit der Eingabe von Integer Zahlen beschäftigen. (Integer Zahlen bedeutet nur Ganze Zahlen also z.B. 3 ) Am besten lernt man doch immer dann wenn man sich dazu ein Programm anschaut. #include main() { int zahl; printf("\n\n"); printf("Geben Sie bitte eine zulaessige Integer-Zahl ein: "); scanf("%d",&zahl); printf("\nDie eingegebene Zahl lautet: "); printf("%d",zahl"); printf("\n"); } Erklärung: Bis auf die Zeile 9 dürfte uns eigentlich alles verständlich sein. Mit der Funktion scanf() geben wir an das jetzt eine Eingabe folgt. Im gegensatz zu printf() muss der Variablen jetzt ein & ohne Lehrzeichen vorangestell werden. Das & ist deshalb nötig da wir ja jetzt mit der Adresse und nicht mit dem Wert der Variablen arbeiten. (Fachausdruck für & lautet: Adressoperator) Ein nächstes Programm dazu: #include main() { int zahl1, zahl2, zahl3; printf("\n\n"); printf("Geben Sie eine Zahl ein: "); scanf("%d",&zahl1); printf("\nGeben Sie bitte noch eine Zahl ein: "); scanf("%d",&zahl2); zahl3 = zahl1 + zahl2; printf("\nDas Ergebnis aus %d und %d ist %d", zahl1, zahl2, zahl3); printf("\n\n"); } Erklärung: In der 5. Zeile werden 3 Variablen von Typ int deklariert. Ihr seht das man die einzelnen Variablen wenn sie vom gleichen Typ sein sollen gleich hintereinander schreiben kann. Man muss sie lediglich mit einem Komma voneinander trennen. Die nächsten Zeilen dürften euch bekannt sein. Wenn nicht lest es weiter oben noch einmal nach. In der 13. Zeile wird der Variablen zahl3 nun der Additionswert aus zahl1 und zahl2 zugewiesen. (Addiere den Wert der Variablen zahl1 mit dem Wert der Variablen zahl2 und weise diesen Wert zahl3 zu) In der 15. Zeile erfolgt nun z.B die Ausgabe des Textes mit den eingegebenen Zahlen bzw. berechneten Wert (zahl3) Als letztes in diesem Tut wollen wir uns mit den schon vorher angesprochenen Funktionen beschäftigen. Was sind nun Funktionen? Eigentlich kennen wir bereits Funktionen. Denkt nur an main(), printf() und scanf(). Eine Funktion kann man sich als Unterprogramm Vorstellen. Die Funktion main() stellt dabei das Hauptprogramm dar. Eine Funktion werden immer zwei runde Klammern nachgestellt. Schauen wir uns dazu jetzt ein Programm an: #include main() { Ausgabe2(); Ausgabe1(); } Ausgabe1() { printf("\nDie eingegebene Zahl lautet: ") printf("%d", zahl) } Ausgabe2() { printf("\nGeben Sie bitte eine zulaessinge Integer-Zahl ein: "); scanf("%d",&zahl); } Erklärung: In der 5. und 6. Zeile werdne nun die Funktionen Ausgabe2 und Ausgabe1 aufgerufen. In der Zeile 9 wird nun die Funktion Ausgabe1 definiert. Eine Fuktion kann man immer in einen Funktionskopf und in einen Funktionsrumpf einteilen. Der Funkionskopf wäre in unseren Programm zum Bsp.: Ausgabe1() Der Funkionsrumpf setzt sich immer aus einer geöffneten geschweiften Klammer, einer beliebigen Anzahl von Ausdrücken und einer schließenden geschweiften Klammer zusammen. Das interesante an diesem Programm ist sicherlich das es egal ist an welche stelle man welche Funktion im Programm definiert. Entscheident ist nur in welcher Reihenfolge man die Funktionen in der Hauptfunktion main() aufruft. Ok das wars auch schon von meinem ersten tut über das C-Programmieren. Weitere tuts werden aber folgen. Wie versprochen jetzt einige Dinge zum Editor vi! Beim Editor vi gibt es zwei Modi, den Befehlsmodus und den Texteingabemodus. In den Texteingabemodus gelangt ihr durch drücken der Taste i. Um von dem Texteingabemodus in den Befehlsmodus zu wechseln drückt ihr einfach die Tast Esc. Ich werde hier natürlich nicht den ganzen Editor beschreiben können das würde den Rahmen dieses Tuts wohl bei weitem sprengen. Ich werde nur auf die Dinge eingehen die für das Programmieren wichtig sind. Ihr galangt wie oben beschrieben mit hilfe von Esc in den Befehlsmodus. Euer Cursor wird dann im unteren drittel des Bildschirmes zu sehen sein. :r Eine Datei lesen bzw. einfügen :w Den Pufferinhalt in eine Datei zurückschreigen :wq Den Pufferinhalt in die Datei zurückschreiben und den "vi" beenden :q! Den "vi" ohne Abspeicherung des Puffers verlassen. :sh "vi" kurz verlassen (Shell-Ebene), Rückkehr mit "exit" Im Textmodus: h, j, k, l Cusor bewegen x Zeichen löschen D Löscht ab der Cusorposition den Rest der aktuellen Zeile dd Aktuelle Zeile löschen r Zeichen ersetzen J Zeile zusammenfügen w Wortweise den Cursor nach vorne bewegen b Wortweise den Cursor zurückbewegen G Sprung zum Textende 1G Sprung zum Textanfang Ok wär irgendwelche Fragen, Kritkiken oder Verbesserungsvorschläge bezüglich des Tuts hat der kann mir ja ne Mail schicken: nitro_ggg@gmx.de