JavaRush /Java-Blog /Random-DE /Zusätzliche Materialien für Vorlesungen CS50: Woche 1 (Vo...
Masha
Level 41

Zusätzliche Materialien für Vorlesungen CS50: Woche 1 (Vorlesungen 3 und 4)

Veröffentlicht in der Gruppe Random-DE
CS50 in russischen Zusatzmaterialien Aufgaben der Woche 1

Ziele für die erste Woche

  • Machen Sie sich mit grundlegenden Linux-Befehlen vertraut
  • Lernen Sie die grundlegende C-Syntax und lösen Sie einige Probleme
  • Fangen Sie an, klarer zu denken =)
IDE CS50
Zur Erledigung von Aufgaben bietet CS50 eine IDE (Integrated Development Environment) in der Cloud. Um es zu nutzen, erstellen Sie ein Konto auf der edX-Plattform und registrieren Sie sich für den Originalkurs . Danach:
1. Gehen Sie zu cs50.io, wählen Sie edX aus der Liste aus, geben Sie Ihren Benutzernamen und Ihr Passwort ein, klicken Sie auf „ Senden“ . 2. Geben Sie Ihre edX-Kontoinformationen ein und klicken Sie auf „ Zurück zu ID.CS50.NET“ . cs50.io 3. Wir warten: Ihr virtueller Raum entsteht. virtueller Raum CS50 4. Fertig! CS50-Idee
Befehlszeile und Starten der CS50-IDE
Unten im CS50-IDE-Fenster befindet sich auf der Registerkarte „Terminal“ ein Terminalfenster oder ein Befehlszeilenfeld. Hier können Sie String-Befehle eingeben: Sie können das Gleiche tun wie mit der Fensteroberfläche, z. B. Anwendungen starten, Dateien löschen und erstellen, Software installieren. Wenn Sie noch nie mit der Befehlszeile gearbeitet haben, erscheint Ihnen diese Methode wahrscheinlich umständlich: Sie müssen sich Befehle merken und sie eingeben, anstatt auf Symbole und Schaltflächen zu klicken. Bis zu einem gewissen Grad stimmt das, dann wurde die Fensterschnittstelle erfunden. Die Befehlszeile ist jedoch in allen Betriebssystemen verfügbar und wird von Administratoren geliebt. Und das alles, weil man manchmal nicht ohne leben kann. Im IDE-Fenster im Terminal sehen Sie eine mysteriöse Zeile: Benutzername:~/workspace $ Anstelle von „Benutzername“ wird ein automatisch generierter Name (basierend auf Ihren Registrierungsdaten) angezeigt. Klicken Sie auf das Terminalfenster und geben Sie Folgendes ein: update50 Drücken Sie die Eingabetaste. Der Befehl fordert das System zur Aktualisierung auf. Im Terminal werden Zeilen angezeigt, die den Installationsvorgang beschreiben. Schließen Sie die CS50-IDE erst, wenn die Meldung „Update abgeschlossen“ angezeigt wird! . Danach erscheint wieder die Standardzeile mit Ihrem Namen.
Arbeiten in der IDE
Lassen Sie uns einen Ordner erstellen, in dem Ihre Dateien gespeichert werden. Klicken Sie mit der rechten Maustaste auf ~/workspace (Ihr Stammverzeichnis) in der oberen linken Ecke der CS50-IDE und wählen Sie Neuer Ordner aus . Benennen Sie den Ordner pset1 um (wenn Sie den Namen falsch geschrieben haben, klicken Sie mit der rechten Maustaste auf Ihren Ordner und wählen Sie Umbenennen ). CS50-IDE-Ordner umbenennen Klicken Sie dann mit der rechten Maustaste auf den Ordner „pset1“ und wählen Sie „Neue Datei“ aus . Die Untilted-Datei wird angezeigt. Benennen wir sie in hello.txt um . CS50-Idee Doppelklicken Sie auf hello.txt. In der CS50-IDE sehen Sie eine neue Registerkarte und rechts ein Feld, in das Sie etwas eingeben können. Wenn Sie dies getan haben, achten Sie auf das Sternchen (*), das vor dem Dateinamen auf der Registerkarte erscheint – ein Hinweis darauf, dass Änderungen an der Datei vorgenommen, aber nicht gespeichert wurden. Zusätzliche Materialien für Vorlesungen CS50: Woche 1 (Vorlesungen 3 und 4) - 1 Speichern Sie die Datei, indem Sie zu *Datei > Speichern gehen oder Befehl + S (auf Apple-Computern) oder Strg + S (auf PCs) verwenden. Das Sternchen sollte verschwinden. Lassen Sie uns überprüfen, ob die Datei dort ist, wo sie sein sollte. Machen wir das über die Befehlszeile, es ist Zeit, sich daran zu gewöhnen :). Nach wie vor sieht die aktive Zeile im Terminal so aus: username:~/workspace $ Workspace – das aktuelle Arbeitsverzeichnis (das in der Arbeitsumgebung geöffnet ist). Die Tilde (~) gibt das Stammverzeichnis an (der Arbeitsbereich befindet sich darin). Beachten Sie, dass der Arbeitsbereich im Terminal mit dem ~/workspace-Symbol in der oberen linken Ecke der CS50-IDE identisch ist. Lass uns üben. Klicken Sie irgendwo im Terminal, geben Sie die Befehlszeile ein ls und drücken Sie die Eingabetaste. Diese beiden Kleinbuchstaben – kurz für „list“ – rufen eine Liste der Dateien und Ordner auf, die sich im aktuellen Arbeitsbereichsverzeichnis befinden. Unter anderem sehen Sie das von Ihnen erstellte pset1 ! Öffnen wir nun unseren Ordner mit dem Befehl. Wir geben cd pset1 oder etwas ausführlicher ein: cd ~/workspace/pset1 Der Befehl cd (change Directory) ändert das aktive Verzeichnis, in unserem Fall in „ ~/pset1 Die aktive Zeile hat sich geändert in“. username:~/workspace/pset1 $ Dies bestätigt, dass Sie sich jetzt im Verzeichnis befinden ~/workspace/pset1 (die Zeile steht für „Ich bin in pset1 innerhalb des Arbeitsbereichs“) Ordner, der sich im Stammordner befindet, gekennzeichnet durch ~"). Geben Sie nun Folgendes ein: ls Sie sehen die Datei hello.txt ! Wenn Sie im Terminal auf den Namen klicken, passiert nichts: Es handelt sich um Text und es wird kein Aktiv angezeigt Link, aber er bestätigt, dass hello.txt dort ist, wo es sein sollte. Geben Sie Folgendes ein: cd Wenn Sie nur den Befehl cd selbst schreiben, aber kein Argument angeben (d. h. den Namen des Ordners, in den er gehen soll), werden Sie zurückgegeben in das Standard-Stammverzeichnis, sodass Sie in der aktiven Zeile das folgende Bild sehen: username:~ $ Um zu einem Ordner pset1 zurückzukehren, wählen Sie cd workspace und drücken Sie die Eingabetaste. Dann cd pset1 geben Sie erneut ein. Sie können diese beiden Befehle auch durch einen authentischeren ersetzen: cd workspace/pset1
Hallo c!
Endlich ist dieser Moment gekommen! Beginnen wir mit der Programmierung. Erstellen Sie in unserem pset1-Ordner in der IDE eine Datei mit dem Namen hello.c (die Erweiterung ist erforderlich) und öffnen Sie sie in einem neuen Tab (wir glauben, dass Sie sich aus dem vorherigen Absatz daran erinnern, wie das geht). WICHTIG! Buchstaben müssen klein geschrieben werden, Linux unterscheidet zwischen Groß- und Kleinschreibung. Hello.c und hello.c sind unterschiedliche Dateien. Geben Sie auf der rechten Seite des CS50-IDE-Fensters genau den Text ein, den Sie unten sehen. Ja, Sie können es kopieren, aber es ist sinnvoller, es einzutippen. Die Buchstaben haben unterschiedliche Farben, da die CS50-IDE über Syntaxhervorhebung verfügt. Es hebt Textblöcke farblich hervor, um die Lesbarkeit zu verbessern. Die Farben werden nicht in der Datei selbst gespeichert, sie sind nur in der IDE sichtbar. Wenn sie vorhanden sind, versteht die IDE C und Sie haben angegeben, dass es sich um C in der Dateierweiterung (*.c) handelt. Wenn Sie dieselbe Datei hello.txt aufrufen würden, wäre der Text einfarbig. Stellen Sie sicher, dass Sie alles genau wie im Beispiel eingegeben haben, sonst fangen Sie den ersten Fehler ein =). Wir machen Sie noch einmal auf den Unterschied zwischen Klein- und Großbuchstaben aufmerksam. Das Zeichen \n bewegt den Cursor in die nächste Zeile und der als nächstes eingegebene Text bleibt nicht bei der Ausgabe des Programms hängen. Ach ja, und vergessen Sie nicht das Semikolon (;). Dies ist ein wichtiges Trennzeichen für Programmanweisungen, auf das C nicht verzichten möchte. Klicken Sie auf Datei > Speichern (oder Befehls- oder Strg-Taste). Ist Ihnen aufgefallen, dass das Sternchen vor dem Dateinamen verschwunden ist? Wenn ja, wurden die Änderungen gespeichert. Klicken Sie irgendwo im Terminalfenster unter Ihrem Code und stellen Sie sicher, dass Sie sich in ~/workspace/pset1 befinden (wenn nicht, klicken Sie bei gedrückter CD-Taste und drücken Sie die Eingabetaste, dann cd workspace/pset1 und erneut die Eingabetaste). Ihre aktive Zeile sollte so aussehen: Stellen Sie sicher, dass sich die Datei hello.c genau dort befindet, wo sie sein sollte. Geben Sie ein und drücken Sie die Eingabetaste. Siehst du hello.c auch? Wenn nicht, gehen Sie ein paar Schritte zurück und erstellen Sie die Datei erneut im gewünschten Verzeichnis. ... Jetzt kommt der feierliche Moment: Wir drücken die Daumen und ... wir tippen: und drücken mit gekreuzten Daumen die Eingabetaste. Genau hallo, nicht hallo.c. Wenn Sie nach dieser Aktion nur die zweite aktive Zeile vor sich sehen, die genauso aussieht wie die vorherige, dann funktioniert alles! Ihr Quellcode wurde in Maschinen- oder Objektcode übersetzt (d. h. in der Reihenfolge von Nullen und Einsen). Jetzt kann dieser Code ausgeführt werden (das heißt, das Programm kann ausgeführt werden!). Geben Sie dazu Folgendes in die Befehlszeile ein und drücken Sie die Eingabetaste. Wenn Sie den zwischen den „“s eingeschlossenen Text nicht geändert haben, sehen Sie Folgendes: Wenn Sie jetzt den Befehl eingeben und die Eingabetaste drücken, wird eine neue Hallo-Datei zusammen mit hello.c und hello.txt angezeigt. Beim ersten Hallo sollte nach dem Namen ein Sternchen stehen, das signalisiert, dass es sich um eine ausführbare Datei handelt, also um die Datei, mit der Sie das Programm starten. #include int main(void) { printf("hello, world\n"); } username:~/workspace/pset1 $lsmake hello./hellohello, worldls
Käfer?
Wenn Sie nach dem Make-Befehl Fehler sehen, ist es Zeit für das erste Debugging! Aufschriften wie „erwartete Erklärung“ bedeuten, dass Ihnen irgendwo ein Tippfehler unterlaufen ist. Überprüfen Sie den obigen Code noch einmal. Seien Sie jedoch sehr vorsichtig mit allen Details. Aufmerksamkeit! Fehlerbeschreibungen werden auf Englisch bereitgestellt. Wenn es nicht klar ist, verwenden Sie eine Suchmaschine, Google Translate oder stellen Sie eine Frage in den Kommentaren. Sobald Sie die Fehler behoben haben, vergessen Sie nicht, Ihren Code mit Datei > Speichern (oder Befehls- oder Strg-s) zu speichern, erneut auf die Innenseite des Terminalfensters zu klicken und make hello (Stellen Sie einfach sicher, dass Sie sich in ~ befinden) ein /workspace/pset1 zuerst). Wenn keine weiteren Fehler vorliegen, führen Sie das Programm aus, indem Sie den Befehl eingeben. ./hello Theoretisch sollte der geschätzte Satz vor Ihnen erscheinen, eingeschlossen in Anführungszeichen des printf-Operators, der „drucken“ befiehlt. Wenn Ihnen das Terminalfenster zu klein erscheint, klicken Sie auf das umkreiste Pluszeichen (+) neben hello.c.
Überprüfung auf Richtigkeit
Die check50-Anwendung ist in die CS50-IDE integriert. Es funktioniert über die Befehlszeile und überprüft einige Programme auf Fehler. Wenn Sie noch nicht dort sind, gehen Sie in das Verzeichnis ~/workspace/pset1, indem Sie den Befehl im Terminal ausführen: cd ~/workspace/pset1 Jetzt ausführen ls , Sie werden mindestens eine hello.c-Datei sehen. Stellen Sie sicher, dass der Dateiname so aussieht und nicht beispielsweise „Hello.c“ oder „hello.C“ lautet. Sie können eine Datei umbenennen, indem Sie den Befehl mv source destination Quelle – der aktuelle Dateiname, Ziel – den neuen Dateinamen ausführen. mv (aus dem Englischen move) ist ein Umbenennungsdienstprogramm. Wenn Sie die Datei versehentlich „Hello.c“ genannt haben, geben Sie die folgende Zeile ein: mv Hello.c hello.c Nachdem Sie sichergestellt haben, dass die Datei genau „hello.c“ heißt, rufen wir das Prüfprogramm check50 auf. Bitte beachten Sie, dass 2015.fall.pset1.hello eine eindeutige Kennung für das Problem „Hallo Welt“ ist. check50 2015.fall.pset1.hello hello.c Wenn das Programm korrekt ausgeführt wird, sehen Sie: Zusätzliche Materialien für die Vorlesungen CS50: Woche 1 (Vorlesungen 3 und 4) – 2 Grüne Smileys bedeuten, dass der Test bestanden wurde. Sie können die URL auch unten in der check50-Ausgabe sehen, sie ist jedoch nur für Mitarbeiter gedacht (wenn Sie jedoch interessiert sind, schauen Sie sich sie an!). check50 führt drei Tests durch: ob die Datei hello.c existiert, ob hello.c kompiliert wird und ob die Anwendung eine Zeile mit der Aufschrift „hello, world\n“ erzeugt. Wenn Sie traurige rote Emoticons sehen, bedeutet das, dass Sie einen Fehler haben. :( hello.c exists \ expected hello.c to exist :| hello.c compiles \ can't check until a frown turns upside down :| prints "hello, world\n" \ can't check until a frown turns upside down Hier hat check50 hello.c nicht gefunden und der rote Smiley zeigt an, dass Sie entweder einen Fehler beim Namen gemacht oder die Datei an der falschen Stelle hochgeladen haben. Gelbe „neutrale“ Emoticons bedeuten, dass die Tests nicht durchgeführt wurden. Und wo können sie anfangen, wenn das Programm die zu überprüfende Datei nicht findet? Hier ist eine weitere Option, die angezeigt wird, wenn Sie den Text geändert haben, den die Funktion printf() ausgeben soll: :) hello.c exists :) hello.c compiles :( prints "hello, world\n" \ expected output, but not "hello, world" check50 meldet, dass die Zeile hello, world\n erwartet wurde, aber etwas anderes angezeigt wurde. check50 zählt keine Punkte für den Abschluss des Kurses, sondern prüft, ob das Ergebnis der Aufgabe von den Erwartungen abweicht. Und es ermöglicht Ihnen, dies zu überprüfen, bevor Sie die Richtigkeit der Aufgabe im Kurs bestätigen (wir erklären Ihnen später, wie das geht).
C-Grundlagen: Vergleich mit Scratch
Hallo Welt in Scratch und C:
Zusätzliche Materialien für die Vorlesungen CS50: Woche 1 (Vorlesungen 3 und 4) - 3 #include int main(void) { printf("hello, world\n"); }
  • Zusätzliche Materialien für die Vorlesungen CS50: Woche 1 (Vorlesungen 3 und 4) – 4eine Funktion darstellt, die in Scratch die „Wörter“ eines Sprites in eine Comic-Blase druckt, gibt es in C eine printf-Funktion, die das Gleiche tut, nur ohne die Cartoons.
  • main – auf Englisch – „main“. Einstiegspunkt in das Programm. Gleich wie Zusätzliche Materialien für die Vorlesungen CS50: Woche 1 (Vorlesungen 3 und 4) – 5.
Endloser Kreislauf
Zusätzliche Materialien für die Vorlesungen CS50: Woche 1 (Vorlesungen 3 und 4) – 6 übersetzt in C: while (true) { printf("hello, world\n"); } while (true) macht dasselbe: Die Schleife setzt ihre Arbeit fort, solange (while) der Wert true ist (der boolesche Ausdruck „true“ oder „one“). Diese Schleife läuft endlos.
Eine Schleife, die eine Phrase zehnmal auf dem Bildschirm anzeigt
Scratch Zusätzliche Materialien für die Vorlesungen CS50: Woche 1 (Vorlesungen 3 und 4) – 7 C for (int i = 0; i < 10; i++) { printf("hello, world!\n"); } i ist eine Zählervariable; ihr Wert wird durch den Inkrementoperator i++ geändert und bei jeder Iteration der Schleife um 1 erhöht. Zunächst wird i mit dem Zuweisungsoperator = der Wert 0 zugewiesen. Aufmerksamkeit! Wie in Java wird Gleichheit in C mit == bezeichnet, der Zuweisungsoperator =. Das heißt, a = 5 bedeutet, dass der Variablen a der Wert 5 zugewiesen wurde, und (a= =5) bedeutet einen Boulogne-Ausdruck (wenn a gleich 5 ist, ist der Ausdruck wahr, wenn nicht gleich, dann falsch). . Die Schleife stoppt, wenn i auf 9 „wächst“. Es ist einfach zu berechnen, dass die Schleife 10 Mal ausgeführt wird. Wenn Sie also etwas eine bestimmte Anzahl von Malen wiederholen müssen, definieren Sie in C eine for-Schleife (int i = 0; i < 10; i++). Ein weiteres Beispiel: Zusätzliche Materialien für die Vorlesungen CS50: Woche 1 (Vorlesungen 3 und 4) – 8 Und das Gleiche in C übersetzt: int counter = 0; while (true) { printf("%i\n", counter); counter++; }
  • Der Zähler speichert den Wert in C und Scratch. In C setzen wir int counter = 0 statt Zusätzliche Materialien für die Vorlesungen CS50: Woche 1 (Vorlesungen 3 und 4) – 9.
  • Zur Verdeutlichung kennzeichnen wir den Typ der Variablen als int: i ist eine Ganzzahl (vom englischen Integer, ganz).
  • Das %i-Zeichen, das wir in printf in Zeile vier verwenden, ist ein Platzhalter, der uns anweist, die dezimale Ganzzahl auszugeben, genauso wie wir printf anweisen, den Platzhalter durch den Wert zu ersetzen, den die Zählervariable annimmt.
Boolesche Ausdrücke
Zusätzliche Materialien für die Vorlesungen CS50: Woche 1 (Vorlesungen 3 und 4) – 10 Es ist das Gleiche wie (x < y) ((x < y) && (y < z))
Bedingungen
Zusätzliche Materialien für die Vorlesungen CS50: Woche 1 (Vorlesungen 3 und 4) – 11 Und das „Scheiße“-Äquivalent: Zusätzliche Materialien für die Vorlesungen CS50: Woche 1 (Vorlesungen 3 und 4) – 12 Was ist mit der ersten unverständlichen Phrase? Mehr dazu später im Abschnitt „Bibliotheken“. #include
Bedingte Anweisungen
Diese Leute prüfen, ob eine Bedingung (ein logischer Ausdruck, eine Frage, die nur mit „Ja“ oder „Nein“ beantwortet werden kann) wahr ist, und wenn ja, führen sie einige mit dieser Bedingung verbundene Aktionen aus. Ein Beispiel aus dem Leben: Wenn es regnet (vorausgesetzt, es regnet) und ich draußen bin (ich bin draußen, wenn es regnet), öffne ich meinen Regenschirm. if (Zustand) { //исполнить, если Bedeutung истинно } Eine kompliziertere Option: Wenn die Bedingung erfüllt ist, ergreifen Sie eine Aktion; wenn nicht, ergreifen Sie eine andere Aktion. if (Zustand) { //выполнить действие } else { //выполнить другое действие, если Zustand ложно } Beispiel: Wenn Sie über 18 Jahre alt sind, genehmigen Sie den Zugriff. Liegt sie darunter, erfolgt keine Genehmigung. Zusätzliche Materialien für die Vorlesungen CS50: Woche 1 (Vorlesungen 3 und 4) – 12
Auswahloperator
switch (n) { case const1: // если n gleicht const1, выполнить break; // Zustand совершилось — выйти из выбора case const2: // если n gleicht const2, выполнить break; ... default: // если n не gleicht ни одной из констант, выполнить break; } Beispiel: Wenn n = 50, drucken Sie „CS50 ist Einführung in die Informatik I“, wenn n = 51, drucken Sie „CS51 ist Einführung in die Informatik II“, andernfalls drucken Sie „Leider kenne ich diesen Kurs nicht!“ switch (n) { case 50: printf("CS50 is Introduction to Computer Science I\n"); break; case 51: printf("CS51 is Introduction to Computer Science II\n"); break; default: printf("Sorry, I'm not familiar with that class!\n"); break; }
Fahrräder
while: Überprüft die Bedingung und führt dann die Aktion aus, während die Bedingung wahr ist. while (Zustand) { // выполнять, пока истина } do/while unterscheidet sich dadurch, dass die Aktion beim ersten Mal ohne Überprüfung der Bedingung ausgeführt wird und sie dann nur überprüft wird. Wenn die Bedingung wahr ist, wird die Aktion wiederholt, bis die Bedingung falsch wird. do { ) // выполнять, пока истина } while (Zustand); Die for-Schleife wiederholt eine Aktion eine bestimmte Anzahl von Malen. Zusätzliche Materialien für die Vorlesungen CS50: Woche 1 (Vorlesungen 3 und 4) – 13 Schleifen können ineinander verschachtelt werden. In diesem Fall wird bei jedem Schritt der äußeren Schleife die innere Schleife vollständig ausgeführt. Zusätzliche Materialien für die Vorlesungen CS50: Woche 1 (Vorlesungen 3 und 4) – 14
Grundlegende Datentypen in C
Grundlegende Datentypen in C
Bibliotheken C
Sie haben sich wahrscheinlich schon gefragt, was die erste Zeile eines C-Programms bedeutet: Welche Rolle spielt sie und kann man darauf verzichten? Die #include-Zeile erfüllt eine sehr wichtige Aufgabe: Sie fügt Bibliotheken mit bereits geschriebenem Code in Ihr Programm ein. Der Name der verbundenen Bibliothek steht in spitzen Klammern (<>) und hat die Erweiterung (.h). Wenn es keine Bibliotheken gäbe, müsste jede, selbst die grundlegendste Aktion, jedes Mal immer wieder beschrieben werden. Bibliothek, die wir verbunden haben#include enthält Ein-/Ausgabefunktionen. Dies ermöglicht es uns, die Funktion printf() zum Drucken auf dem Bildschirm zu verwenden. Das heißt, wenn wir die #include-Zeile nicht geschrieben hätten , ließ aber die Funktion printf() im Hauptteil des Programms; als wir versuchten, sie auszuführen, hätten wir eine Fehlermeldung erhalten! Denn ohne diese Bibliothek weiß der Compiler nicht, was printf() ist. Es gibt Standardbibliotheken, sie bilden den Wortschatz der Sprache. Die Funktion printf() ist nicht in den Computer integriert, sondern in der Standardbibliothek der C-Sprache enthalten. Das heißt, ein Programmierer hat sie zuvor geschrieben und in die Bibliothek aufgenommen. Jetzt können andere es nutzen, ohne das Rad neu erfinden zu müssen. Damit der Compiler es „versteht“, stellen wir eine Verbindung her . Im CS50-Prozess werden weitere Standardbibliotheken verwendet. Zum Beispiel eine String-Bibliothek, die Operationen mit Strings beschreibt (Längenbestimmung, Addition usw.). Im Vergleich zu anderen gängigen Programmiersprachen ist die Anzahl der Standard-C-Bibliotheken sehr gering. Aber es gibt selbst geschriebene, meist höher spezialisierte Bibliotheken. Ja, Bibliothek wurde speziell für CS50-Studenten entwickelt. Es ist an der Zeit, eine wichtige Anmerkung zu machen: Neben dem Schreiben von Programmen und dem Lösen von Problemen mit Ihrem eigenen Code verfügt ein guter Entwickler über eine weitere wichtige Fähigkeit: Kenntnisse über bereits geschriebene Tools und die Fähigkeit, diese (die Bibliotheken anderer Leute) so zu nutzen keine Zeit damit zu verschwenden, das „Rad“ neu zu erfinden. Wenn Sie also dabei sind, ein langwieriges oder komplexes Problem zu lösen, das recht häufig vorkommt, lernen Sie, sich die Frage zu stellen: „Hat jemand anderes die Lösung geschrieben?“ Die Chancen stehen gut, dass dies der Fall ist, und Sie können diese Funktion in einer vorhandenen Bibliothek finden. Technisch gesehen ist eine Bibliothek eine Binärdatei, die durch die Kombination einer Sammlung von Objektdateien mithilfe eines Linkers erstellt wird. Objektdateien sind Dateien mit der Erweiterung (*.o), die Sie beim Kompilieren von Anwendungen erhalten.
Struktur von C-Bibliotheken
Когда программист пишет библиотеку, Code распределяется по двум типам файлов — заголовочный файл (header, расширение *.h) и файл реализации (implementation, расширение *.c). Заголовочный файл содержит Code, описывающий ресурсы библиотеки, которые вы можете использовать. То есть описания переменных, функций, структур, типов и прочее. Если вам интересно, что содержит та oder иная библиотека, нужно заглянуть именно в заголовочный файл. В терминале CS50 IDE (и других средах Linux) вы можете вызвать приложение less для просмотра файлов и открыть с его помощью интересующую вас библиотеку: less /usr/include/stdio.h Файл откроется прямо в терминале. Правда, для новичков он будет очень трудночитаемым. Zusätzliche Materialien für Vorlesungen CS50: Woche 1 (Vorlesungen 3 und 4) – 15 Wasбы выйти из less, нажмите q на клавиатуре. Заголовочный файл не содержит Code функций, что служит примером очень важного понятия — сокрытия данных oder инкапсуляции. Пользователю системы незачем знать «внутренности» библиотек, ему достаточно, чтобы она работала. Если вы прошерстите stdio.h, то не найдете там реализации printf(), хотя Wie её использовать, вы уже знаете. Это сделано для того, чтобы защитить данные от вмешательства, которое порой может плохо отразиться на системе. Так, если кто-то изменит реализацию функции printf() в библиотеке, это отразится на всех тех программах, которые её используют. Любознательным будет интересно, где спрятана реализация. Согласно конвенции (соглашения, принятые в мире программирования) такой Code хранят в файле с расширением (*.c). После компиляции библиотеки на основе двух файлов с одинаковым именем, но разным расширением создается ein Objektный файл, который собран так, чтобы создать файл с двоичным Codeом библиотеки. Zusätzliche Materialien für die Vorlesungen CS50: Woche 1 (Vorlesungen 3 und 4) – 16 Autor библиотеки передает программисту, который хочет её использовать, два Datei — с двоичным Codeом, а также заголовочный файл. Таким образом, файл с исходным Codeом программисту не нужен. Точнее, он может быть нужен, если программист хочет что-то поменять в самой библиотеке и перекомпoderровать её под собственные нужды. Wasбы воспользоваться функциями библиотеки в своей программе нужно проделать следующее: 1. Включить заголовочный файл в программу с помощью строки #include В случае стандартных библиотек достаточно указать Name библиотеки в угловых скобках: #include <Name_библиотеки.h> Если библиотека, которую вы хотите подключить, лежит в той же папке, что и ваша программа, подключайте её следующим образом: #include “Name_библиотеки.h” 2.Присоединить бинарный файл для компиляции. Это очень важный шаг, поскольку, Wie мы говорoder выше, заголовочный файл не содержит реализации элементов библиотеки. Wasбы это сделать, нужно вызвать компилятор clang с флагом –l и идущим непосредственно за ним названием библиотеки. Например, компонуем библиотеку cs50: clang hello –lcs50 Clang — один из компиляторов. Для компиляции можно также использовать уже знакомую вам программу make. По сути, она вызывает clang с определенными аргументами командной строки.
И снова Hello C: разбор синтаксиса простейших программ
Директива #include подключает библиотеку ввода/вывода . Программы в C состоят из функций, а те — из операторов и переменных. Функция — это кусок Codeа, в котором уже есть oder подаются Wieие-то данные, а Wieие-то данные получают в результате её исполнения. Фигурные скобки { } ограничивают тело функции — описание того, что она должна делать. printf() из стандартной библиотеки stdio выводит любую строку на экран. Строки заключаются в двойные кавычки, а символ “\n” означает перевод курсора на новую строку. Пример: функция «посчитать квадрат целого числа». Передаем функции данные, в нашем случае — число, которое нужно возвести в квадрат. Затем в ней прописывается алгоритм умножения числа на самое себя, и результат этого умножения она выдает на выходе. int sqr(int a) { return a*a; } int sqr(int a) — название функции. В скобках — её аргумент a, это то, что подается на вход функции. Это Wie переменная в уравнении. То есть, если мы хотим узнать квадрат числа 5, то мы вызовем нашу функцию в виде sqr(5) и получим результат 25. int — тип данных (от англ. integer — целые числа). Наша функция написана так, что мы не можем вызвать её с аргументом a = 5.5. Такая попытка выдаст ошибку, поскольку 5.5 — число дробное, а наше число должно быть целым. int перед именем функции означает тип, который должна эта функция возвращать. Он не обязательно совпадает с типом аргумента. Пример: функция, которая отнимает от целого числа 0.5: double bit_less(int a) { double b; b = a – 0.5; return b; } int main (void) — название главной функции. В одной программе может быть много функций, но, чтобы начать её выполнять, нужна функция под названием main. Слово void в скобках означает, что у этой функции нет аргументов. Внимание! main всегда возвращает int, но return для неё не обязателен. Пример функции не возвращающей значения: void sayhello(void) { printf(“hello everyone!\n”); } При вызове функции в главной программе, она выведет приветствие. Давайте напишем одну программу, в которой будет несколько функций. Тех, что мы уже создали выше. Две созданные нами функции вызовем через главную функцию main(). В C, Wie и любом языке, есть такой элемент, Wie комментарий oder примечание в коле программы, предназначенное не для компьютера, а для понимания людей. Например, описание, что именно делает Code. Компилятор комментариев не видит. Комментирование программ — очень важный момент, поскольку порой разобраться в чужом (и даже своем) Codeе очень сложно. //пример однострочного комментария /** а это – многострочного **/ #include //функция возведения в квадрат числа a int sqr(int a) { return a*a; } //выводит приветствие void test(void) { printf ("hello everyone!\n"); } //главная функция int main(void) { test(); printf("%d\n", sqr(5)); } Почти всё, что есть в этой программе вы уже видели. Две функции — возведения в квадрат и приветствия и главная функция main, где мы последовательно вызываем эти две функции. В результате выполнения программы у нас сначала выведется приветствие, на следующей строке — квадрат 5. Обратите внимание, функция test() вызывается с пустыми скобками, потому что её аргументы определены Wie void.
Еще немного о вводе/выводе в C
Вы, наверное, уже успели заметить странные символы %d и %f в скобках оператора printf. Дело в том, что функция printf выводит данные в следующем обобщенном виде: рrintf ("управляющая строка", аргумент1, аргумент2,...); Управляющая строка содержит компоненты трех типов:
  • символы, которые выводятся на экран дисплея;
  • спецификаторы преобразования, которые вызывают вывод на экран очередного аргумента из последующего списка;
  • управляющие символьные константы.
Спецификатор преобразования начинается со знака % и заканчивается символом, задающим преобразование. Некоторые из таких символов:
  • с: Bedeutungм аргумента является символ;
  • d oder i: десятичное целое число;
  • f: десятичное число с плавающей точкой;
  • s: строка символов.
То есть, %d означает, что на экране появится целое десятичное, а %f — десятичное с плавающей запятой. Was если нам нужно, чтобы пользователь ввёл данные с клавиатуры? Для этого можно использовать функцию scanf( ), прототип которой также лежит в библиотеке stdio. Wasбы считать с экрана вещественное число, в программе нужно написать строку scanf("%d", &a); Давайте перепишем нашу программу так, чтобы пользователь сам вводил число, которое нужно возвести в квадрат. Zusätzliche Materialien für die Vorlesungen CS50: Woche 1 (Vorlesungen 3 und 4) – 17
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION