Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Programmier- sprache C. Das einfachste Programm:

Ähnliche Präsentationen


Präsentation zum Thema: "Programmier- sprache C. Das einfachste Programm:"—  Präsentation transkript:

1 Programmier- sprache C

2 Das einfachste Programm:

3 #include "stdafx.h" #include int main(){ return 0; } Hauptprogramm Rückgabewert: int d.h. eine ganze Zahl Kopf Rumpf Begrenzer (Block) Anweisungen, hier nur eine. Diese muss mit Semikolon beendet werden. return 0 gibt die Zahl 0 zurück.

4 #include "stdafx.h" #include int main(){ return 0; } Kopiert den Inhalt der Dateien (Textdatein) stdafx.h und stdio.h an diese Stellen in diese Datei! 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. Was ist der Unterschied zwischen " " und ?

5 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., die zu der Entwicklungsumgebung von MS VC++ gehören und mit dem Programmpacket ausgeliefert wurden.

6 Eselsbrücke: Die Klammern kann man sich als der obere Teil bzw. untere Teil eines stilisierten S (wie Systemdateien) vorstellen:

7 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!

8 Wichtige Bemerkung:

9 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.

10 Weitere Bemerkungen:

11 int main(void){ return 0; } Keine Angst: Die Begriffe "Funktion", "return", usw. werden später noch genauer erklärt. (dies war nur eine kurze Vorabinformation) Der Microsoft Visual C Compiler arbeitet nicht 100% nach dieser ANSI-Norm. Um deutlich zu machen, dass in den Klammern kein sogenannter Parameter stehen soll, kann man dies durch das englische Wort void bewerkstelligen. Wenn aus Platzgründen nötig, wird in den folgenden Präsentationen die Anweisung return 0 weggelassen.

12 Ein reines Ausgabe - Programm: int main(){ printf("Guten \n Morgen"); return 0; } Reservierte Worte; sollen nicht vom Programmierer für Variablennamen vergeben werden Zeilenvorschub Der auf dem Bildschirm ausgegebene Text ist eine Zeichenkette. Diese steht immer zwischen Anführungszeichen. Auf dem Bildschirm erscheint also: Guten Morgen Anweisungen einrücken Semikolon am Ende einer jeden Anweisung

13 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.

14 \n führt Zeilenvorschub durch (new line) \t setzt Horizontaltabulator \v setzt Vertikaltabulator \b geht Mit dem Kursor ein Zeichen zurück (backspace) \r führt Wagenrücklauf durch (carriage return) \f führt Seitenvorschub durch (form feed) \a löst Klingelzeichen aus (Alarm) \' Hochkomma \" Anführungszeichen \\ umgekehrter Schrägstrich (backslash) \ddd ASCII-Zeichen in Oktalnotation (d ist eine Okalziffer) \xdd ASCII-Zeichen in Hexadezimalnotation (d ist eine Hexadezimalziffer)

15 Was bewirkt das folgende Programm ? Bitte ASCII-Tabelle benutzen ! (näheres zur ASCII-Tabelle später) #include "stdafx.h" #include int main(){ printf("\x41\x42\x43\a"); return 0; }

16 Es wird auf dem Bildschirm ABC ausgegeben und ein Alarm (Ton) auf dem Lautsprecher erzeugt.

17 Nochmals eine Bemerkung zu include

18 #include "stdafx.h" #include int main(){ printf("Guten \n Morgen"); return 0; } 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 eingefügt wird. Bitte den Inhalt dieser Datei anschauen bzw.dort nach printf suchen.

19 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 Anweisungsteil = Zubereitung Einzelne Anweisungen Datentyp Variablenname Semikolon am Ende einer Anweisung Variable Eingabe

20 Elemente des Rumpfs :

21 int main (){ int z; int a; int b,c,d;... } Variable Datentyp: int int ist Abkürzung für integer (bedeutet ganze Zahl) 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 ! mehrere Variablen können auch durch Kommata getrennt werden. Aber am Ende muss ein Semikolon kommen. Der Datentyp gibt an, welche Werte (z.B. ganze Zahlen) eine Variable annehmen kann.

22 int main (){ int z=123; int a; int b,c,d;... } z wird mit dem Wert 123 initialisiert. Eine Variable kann deklariert und gleichzeitig auch initialisiert (vorbelegt) werden

23 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. Variable sind Daten mit folgenden Eigenschaften:

24 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.

25 Bitte folgende Regel einhalten: Anfangsbuchstabe eines Variablennamens immer klein schreiben. Dies ist dem Compiler zwar egal, doch an diese Regel halten sich alle Programmierer.

26 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).

27 Die Anweisungen des letzten Ein/Ausgabeprogram ms hier nochmals kurz erklärt:

28 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. Bevor der Text zwischen den Anführungszeichen ausgegeben wird, wird der Platzhalter %d durch den Wert der Variablen z ersetzt. Zuweisungsoperation (Näheres in der übernächsten Folie)

29 printf("Das Quadrat ist: z"); Das Quadrat ist: z Frage: Was gibt die folgende Anweisung auf dem Bildschirm aus ? Der Compiler erkennt das z nicht als eine Variable, sondern als einen normalen Buchstaben !

30 printf("Bitte ganze Zahl eingeben \n"); scanf("%d", &z); z = z * z; printf("Das Quadrat ist: %d", z); %d %c %f ganze Zahl Zeichen Fließkommazahl d wie dezimal c wie char f wie Fließkomma Platzhalter mit Formatanweisung: gibt an, in welcher Form (ganze Zahl, Fließkommazahl oder Zeichen) der eingegebene Wert abgespeichert wird, bzw. ausgegeben wird. Merke: Formatieren heißt eine Form geben, so wie eine Backform einem Teig eine Form gibt.

31 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...

32 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 :=

33 Beispiele: y=10; z=y; z=y+2; y=z; z=z+1; Dynamische Entwicklung der Inhalte der Variablen y und z: 10?yz 12 13

34 Die Ausführung der Anweisungen des letzten Ein/Ausgabeprogram ms detailliert erklärt:

35 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);

36 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.

37 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.

38 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.

39 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.

40 Aufgabe: Ein Schreiner will von einer rechteckigen Holzplatte den Flächeninhalt und den Umfang (für die Umleimer) bestimmen. Schreiben Sie dazu ein Programm.

41 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; } %d wird durch den Wert von f ersetzt 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

42 Frage: Was ist der Nachteil des Programms ? Antwort: Es können nur ganzzahlige Werte eingegeben werden.

43 Wir machen deshalb einen kleinen Ausflug:

44 Was ist ein Bit ?

45 1 Bit ist die kleinste Maßeinheit für eine Datenmenge

46 1 Byte =8 Bit

47 Wie viele Zustände kann man mit 1 Byte darstellen ?

48 Zu schwierig ? Also beginnen wir mit einem Bit

49 Wie viele Zustände kann man mit 1 Bit darstellen ? 1 0 und also, Anzahl der Zustände:2 * 1 = 2

50 Wie viele Zustände kann man mit 2 Bit darstellen ? 0 0 und also, Anzahl der Zustände:2 * 2 = 4 Also insgesamt

51 Wie viele Zustände kann man mit 3 Bit darstellen ? 0 0 und 0 also, Anzahl der Zustände:2 * 4 = Möglichkeiten Möglichkeiten 2 * 2 * 2 = 8 Also insgesamt

52 Wie viele Zustände kann man mit 8 Bit darstellen ? 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 = 2 8 = 256

53 Wie viele Zustände kann man mit 2 Byte darstellen ? 2 16 = Byte = 16 Bit also:

54 Wie viele Zustände kann man mit 4 Byte darstellen ? 2 32 = Byte = 32 Bit also:

55 Wie kann man dies schnell näherungsweise ausrechnen ?

56 2 10 = = 10 3, also: = 2 10 · 2 = (2 10 ) 2 (10 3 ) 2 = 10 6 also: = 2 10 · 3 = (2 10 ) 3 (10 3 ) 3 = 10 9 also: = 2 10 · 4 = (2 10 ) 4 (10 3 ) 4 = also:

57 Weitere Maßeinheiten für (große) Datenmengen:

58 10 3 Byte = 1 Kilobyte = 1 KB 10 6 Byte = 1 Megabyte = 1 MB 10 9 Byte = 1 Gigabyte = 1 GB Byte = 1 Terabyte = 1 TB Byte = 1 Petabyte = 1 PB Byte = 1 Exabyte = 1 EB Byte = 1 Zettabyte = 1 ZB Byte = 1 Yottabyte = 1 YB

59 Wie kann man schnell näherungsweise ausrechnen, wie viele Zustände man mit 2 Byte bzw. 4 Byte darstellen kann, d.h. wie gross ist 2 16 und 2 32 ?

60 2 16 = = 2 6 · 2 10 = 64 · · 10 3 also: = = 2 2 · 2 30 = 4 · · 10 9 also:

61 Zurück zum Datentyp:

62 int main (){ int z;... } Datentyp

63 Der Datentyp einer Variablen legt fest, welche Werte eine Variable annehmen darf und in welchem Wertebereich sich diese Werte befinden dürfen. Dieser Wertebereich hängt von der Anzahl der Bytes ab, in denen die Variable gespeichert wird.

64 Ganze Zahlen Können dargestellt werden durch:

65 Datentyp int Länge: 2 oder 4 Byte Wertebereich: oder Formatierung: %d bzw Zahlen auf positiven und negativen Bereich aufgeteilt

66 Datentyp unsigned int Länge: 2 oder 4 Byte Wertebereich: oder Formatierung: %d bzw Zahlen auf positiven Bereich aufgeteilt

67 Es gibt noch andere ganzzahlige Datentypen, wie z.B. long long braucht mehr (oder gleich viel) Speicher als int. Näheres ist dazu der Hilfe der Entwicklungsumgebung zu entnehmen.

68 Fließkommazahlen (oder auch Gleitkommazahlen genannt)

69 Wichtig: Da es unendlich viele Fließkommazahlen gibt, können nur endlich viele in einer bestimmten Menge Bytes abgespeichert werden. Das geht nur, indem z.B. die Nachkommastellen ab einer bestimmten Stelle abgeschnitten werden.

70 Für Fließkommazahlen gibt es folgende Datentypen:

71 Datentyp float Länge: 4 Byte Wertebereich: ca. -3.4*10 38 bis ca. 3.4*10 38 Genauigkeit: mindestens 6 Dezimalst. Formatierung: %f

72 Datentyp double Länge: 8 Byte Wertebereich: ca. -1.7* bis ca. 1.7* Genauigkeit: mindestens 15 Dezimalst. Formatierung: %f

73 Datentyp double Für die Formatierung gibt es bei Microsoft MS VC++ beim Datentyp double eine Besonderheit: bei scanf : %lf bei printf : %f bzw. bei neuen Versionen: %lf Näheres dazu in der Hilfe der jeweiligen Entwicklungsumgebung

74 C wurde von einem Amerikaner entwickelt. Im amerikanischen Sprachraum schreibt man in Kommazahlen statt des Kommas einen Punkt. Deshalb gilt für die Syntax...

75 Beispiele für Gleitkommazahlen:... double x; x = ; x = -4.67; x = 7.5e-23; x = E-45;... 7,5· , ,67

76 Funktioniert genauso für float:... float x; x = ; x = -4.67; x = -3.14e23; x = -E17;... -3,14· , ,67

77 Zeichen Ein Computer kann nur Zahlen speichern, keine Zeichen. Damit ein Zeichen gespeichert werden kann, wird ihm eine Zahl (ASCII- Wert) zugeordnet.

78 Diese Zuordnung ist im ASCII - Zeichensatz festgelegt. American Standard Code for Information Interchange

79 Datentyp char Länge: 1 Byte Wertebereich: Alle ASCII-Zeichen z.B: A 65 Bem: 7. Bit ist ein Vorzeichenbit Formatierung: %c

80 Datentyp unsigned char Länge: 1 Byte Wertebereich: Alle ASCII-Zeichen z.B: A 65 Bem: 7. Bit ist kein Vorzeichenbit Formatierung: %c

81 In Variablen der Datentypen char und unsigned char wird der ASCII-Wert des Zeichens gespeichert. Beim Datentyp char wird das 7. Bit als Vorzeichenbit benutzt, beim Datentyp unsigned char dagegen nicht.

82 Bei Variablen des Datentypen char werden deshalb Zeichen mit dem ASCII-Wert grösser oder gleich 128 als negative Zahlen abgespeichert. Bei unsigned char werden alle Zeichen als positive Zahlen abgespeichert.

83 Beispiele für Zeichen... char x; char y; x = 'c'; y = 'A';... Was würde der Compiler sagen, wenn die zwei Hochkommata fehlen würden? Er würde c als Variable auffassen. Da diese aber nicht deklariert (angemeldet) wurde, gibt er eine Fehlermeldung aus. Deshalb werden in C alle Zeichen zwischen 2 Hochkommata gesetzt.

84 Datentyp bool Länge: 1 Byte Wertebereich: true, false Formatierung: %c bool gibt es nicht in C, sondern nur in C++

85 Beispiele für boolsche Werte... bool b1; bool b2; b1 = true; b2 = false;...

86 Siehe auch in der Hilfe zu MS VC++ unter: data type ranges

87 Aufgabe Schreiben Sie ein Programm, das das zum Wert 65 zugehörige Zeichen auf dem Bildschirm ausgibt.

88 int main(){ int i; i = 65; printf("%d %c\n", i, i); return 0; } i wird als ganze Zahl dargestellt i wird als Zeichen dargestellt ergibt Bildschirmausgabe: Anschaulich: Der Teig i wird einmal in der Backform %d und das andere Mal in der Backform %c gebacken (formatiert). Formatieren heißt eine Form geben, so wie eine Backform einem Teig eine Form gibt.

89 int main(){ int i; i = 65; printf("%d %c\n", i, i); return 0; } i wird als ganze Zahl dargestellt i wird als Zeichen dargestellt ergibt Bildschirmausgabe: 65 A Leerzeichen, da sich zwischen %c und %d auch ein Leerzeichen befindet

90 Aufgabe Schreiben Sie ein Programm, das den zum Zeichen B zugehörigen ASCII-Wert auf dem Bildschirm ausgibt.

91 int main(){ char z; z = 'B'; printf("%c %d\n", z, z); return 0; } z wird als Zeichen dargestellt z wird als ganze Zahl dargestellt Also ist die Bildschirmausgabe: B 66 Leerzeichen, da sich zwischen %c und %d auch ein Leerzeichen befindet

92 Aufgabe: Schreiben Sie ein C-Programm, das für ein eingegebenes Zeichen den ASCII-Wert auf dem Bildschirm ausgibt.

93 int main(){ char z; printf("Bitte Zeichen eingeben\n"); scanf("%c",&z); printf("%d %c\n",z,z); return 0; }

94 Problem mit scanf:

95 int main (){ char g; char s; printf("Geschl. w/m eingeben"); scanf("%c", &g); printf("\nDu bist %c\n", g); printf("Stand v/l eingeben\n"); scanf("%c", &s); printf("Du bist %c\n", s); }

96 Warum wird der Familienstand nicht auf dem Bildschirm ausgegeben ?

97 Der Tastaturpuffer Eine Eingabefunktion wie scanf prüft zuerst ab, ob sich (vielleicht noch von eineren früheren Eingabe) noch Zeichen im sogenannten Tastaturpuffer befinden (dort werden über Tastatur eingegebene Zeichen zuerst gespeichert). Wenn dies der Fall ist, hält scanf nicht an, sondern liest Zeichen aus.

98 Befindet sich dagegen kein Zeichen mehr im Tastaturpuffer, hält scanf zuerst an und gibt dem Anwender die Möglichkeit, Zeichen einzugeben und die Eingabe mit ENTER zu beenden. Dann holt scanf diese Zeichen aus dem Tastaturpuffer.

99 Zurück zur Beantwortung der vorigen Frage:

100 Tastaturpuffer nach der 1. Eingabe des Anwenders w ENTER Welches Zeichen holt die 1. scanf Anweisung aus dem Tastaturpuffer und weist es der Variablen g zu ?

101 ENTER Wie sieht der Inhalt des Tastaturpuffers jetzt aus ? Welches Zeichen holt die 2. scanf Anweisung aus dem Tastaturpuffer und weist es der Variablen s zu ?

102 Frage: Was würde das Programm für das Geschlecht und den Stand ausgeben, wenn der Anwender bei der ersten Eingabeaufforderung (beim 1. scanf im Programm) nicht ein Zeichen, sondern die Zeichenkette weiblich eingegeben hätte ?

103 Antwort: Du bist w Du bist e

104 Lösung: Tastaturpuffer nach der Eingabe löschen mit: fflush(stdin)

105 int main (){ char g; printf("Geschl. w/m eingeben"); scanf("%c", &g); fflush(stdin);... }

106 Bemerkung: Aus Platzgründen ist es möglich, dass fflush(stdin); in dieser und den folgenden Präsentationen weggelassen wird !

107 Das EVA Prinzip

108 int main (){ int z; printf("Bitte ganze Zahl eingeben \n"); scanf("%d", &z); fflush(stdin); z = z * z; printf("Das Quadrat ist: %d", z); } Eingabe Verarbeitung Ausgabe

109 Aufgabe: Ersatzwiderstand von 2 parallel geschalteten Widerständen berechnen.

110 int main(){ double R1; double R2; double ersatz; printf("1. Widerstand eingeben\n"); scanf("%lf", &R1); fflush(stdin); printf("2. Widerstand eingeben\n"); scanf("%lf", &R2); fflush(stdin); ersatz = 1/(1/R1 + 1/R2); printf("Ersatzwiderstand=%f\n",ersatz); return 0; }

111 Weitere Lösung

112 int main(){ double R1; double R2; double ersatz; printf("1. Widerstand eingeben\n"); scanf("%lf", &R1); fflush(stdin); printf("2. Widerstand eingeben\n"); scanf("%lf", &R2); fflush(stdin); ersatz = 1/R1 + 1/R2; printf("Ersatzwiderstand=%f\n",ersatz); } ersatz = 1 / ersatz; Alles ist gleich (bis auf eine Anweisung) wie in der letzten Lösung. Was fehlt aber noch ?

113 Frage: Wäre folgende Anweisung auch korrekt ? 1/ersatz = 1/R1 + 1/R2 Nein ! Links des Gleichheitszeichens darf nur genau eine Variable stehen !

114 Weiter mit: Aufgaben aus dem Übungsblatt lösen.


Herunterladen ppt "Programmier- sprache C. Das einfachste Programm:"

Ähnliche Präsentationen


Google-Anzeigen