snp-lab-code/build/html/P01_Erste_Schritte_mit_C/README.html

215 lines
14 KiB
HTML
Raw Normal View History

2022-02-17 14:51:10 +01:00
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>01 - Erste Schritte mit C &#8212; SNP Labs documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css" />
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="02: Funktionen, Datentyp “enum”" href="../P02_Funktionen_Datentyp_enum/README.html" />
<link rel="prev" title="SNP Laboratories" href="../index.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section class="tex2jax_ignore mathjax_ignore" id="erste-schritte-mit-c">
<h1>01 - Erste Schritte mit C<a class="headerlink" href="#erste-schritte-mit-c" title="Permalink to this headline"></a></h1>
<hr class="docutils" />
<section id="ubersicht">
<h2>1. Übersicht<a class="headerlink" href="#ubersicht" title="Permalink to this headline"></a></h2>
<p>In diesem Praktikum erstellen Sie mehrere kleine C-Programme, in denen Sie Input- und Output-Funktionen der C Standard Library verwenden.</p>
<p>Arbeiten Sie in Zweiergruppen und diskutieren Sie ihre Lösungsansätze miteinander, bevor Sie diese umsetzen.</p>
<p>Bevor Sie mit den Programmieraufgaben beginnen, setzen Sie eine virtuelle Maschine mit der vorbereiteten Praktikumsumgebung auf.</p>
</section>
<hr class="docutils" />
<section id="lernziele">
<h2>2. Lernziele<a class="headerlink" href="#lernziele" title="Permalink to this headline"></a></h2>
<p>In diesem Praktikum schreiben Sie selbst von Grund auf einige einfache C-Programme und wenden verschiedene Kontrollstrukturen an.</p>
<ul class="simple">
<li><p>Sie können mit <em>#include</em> Funktionen der C Standard Library einbinden</p></li>
<li><p>Sie können mit <em>#define</em> Macros definieren und diese anwenden</p></li>
<li><p>Sie wenden die <em>Input-</em> und <em>Output-Funktionen</em> von C an, um Tastatur-Input einzulesen und formatierte Ausgaben zu machen.</p></li>
<li><p>Sie verwenden die Kommandozeile, um ihren Sourcecode in ein ausführbares Programm umzuwandeln.</p></li>
<li><p>Sie wenden for-und while-Loops sowie if-then-else-Verzweigungen an.</p></li>
<li><p>Sie setzen eine Programmieraufgabe selbständig in ein funktionierendes Programm um.</p></li>
</ul>
</section>
<hr class="docutils" />
<section id="aufgabe-1-virtuelle-maschine">
<h2>3. Aufgabe 1: virtuelle Maschine<a class="headerlink" href="#aufgabe-1-virtuelle-maschine" title="Permalink to this headline"></a></h2>
<p>Im Moodle-Kurs “Systemnahe Programmierung” finden Sie unter “Praktika” eine Installationsanleitung für die virtuelle Maschine, die wir Ihnen zur Verfügung stellen. Die virtuelle Maschine enthält ein Ubuntu Linux-Betriebssystem und die für das Praktikum benötigten Frameworks.</p>
<p>Folgen sie der Anleitung, um die virtuelle Maschine auf ihrem Rechner zu installieren.</p>
</section>
<hr class="docutils" />
<section id="aufgabe-2-hello-world">
<h2>4. Aufgabe 2: Hello World<a class="headerlink" href="#aufgabe-2-hello-world" title="Permalink to this headline"></a></h2>
<p>Schreiben Sie ein C-Programm, das “Hello World” auf die Standardausgabe schreibt. Verwenden Sie die printf-Funktion aus der Standard Library. In den Vorlesungsfolien finden Sie bei Bedarf eine Vorlage.</p>
<p>Erstellen sie das Source-File mit einem beliebigen Editor, sie benötigen nicht unbedingt eine IDE. Speichern Sie das Source-File mit der Endung <code class="docutils literal notranslate"><span class="pre">.c</span></code>.</p>
<p>Um ihr Source-File zu kompilieren, verwenden Sie den GNU Compiler auf der Kommandozeile:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$&gt; gcc hello.c
</pre></div>
</div>
<p>Der Compiler übersetzt ihr Programm in eine ausführbare Datei <code class="docutils literal notranslate"><span class="pre">a.out</span></code>, die Sie mit</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$&gt; ./a.out
</pre></div>
</div>
<p>ausführen können. Sie können den Namen der ausführbaren Datei wählen, indem Sie die Option <code class="docutils literal notranslate"><span class="pre">-o</span></code> verwenden:</p>
<div class="highlight-sh notranslate"><div class="highlight"><pre><span></span>$&gt; gcc hello.c -o hello
</pre></div>
</div>
<p>erzeugt die ausführbare Datei <code class="docutils literal notranslate"><span class="pre">hello</span></code>.</p>
<p>Verwenden Sie die Option <code class="docutils literal notranslate"><span class="pre">-Wall</span></code>, um alle Warnungen des Compilers auszugeben. Dies weist Sie auf allfällige Programmierfehler hin.</p>
</section>
<hr class="docutils" />
<section id="aufgabe-3-tabellenausgabe">
<h2>5. Aufgabe 3: Tabellenausgabe<a class="headerlink" href="#aufgabe-3-tabellenausgabe" title="Permalink to this headline"></a></h2>
<p>Schreiben Sie ein Programm in C, das von <code class="docutils literal notranslate"><span class="pre">stdin</span></code> einen Umrechnungsfaktor zwischen CHF und Bitcoin einliest und danach eine Tabelle von Franken- und Bitcoin-Beträgen ausgibt. Die Tabelle soll sauber formatiert sein, z.B. so:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Enter</span> <span class="n">conversion</span> <span class="n">rate</span> <span class="p">(</span><span class="mf">1.00</span> <span class="n">BTC</span> <span class="o">-&gt;</span> <span class="n">CHF</span><span class="p">):</span> <span class="mf">43158.47</span>
<span class="mi">200</span> <span class="n">CHF</span> <span class="o">&lt;--&gt;</span> <span class="mf">0.00463</span> <span class="n">BTC</span>
<span class="mi">400</span> <span class="n">CHF</span> <span class="o">&lt;--&gt;</span> <span class="mf">0.00927</span> <span class="n">BTC</span>
<span class="mi">600</span> <span class="n">CHF</span> <span class="o">&lt;--&gt;</span> <span class="mf">0.01390</span> <span class="n">BTC</span>
<span class="mi">800</span> <span class="n">CHF</span> <span class="o">&lt;--&gt;</span> <span class="mf">0.01854</span> <span class="n">BTC</span>
<span class="mi">1000</span> <span class="n">CHF</span> <span class="o">&lt;--&gt;</span> <span class="mf">0.02317</span> <span class="n">BTC</span>
<span class="mi">1200</span> <span class="n">CHF</span> <span class="o">&lt;--&gt;</span> <span class="mf">0.02780</span> <span class="n">BTC</span>
<span class="mi">1400</span> <span class="n">CHF</span> <span class="o">&lt;--&gt;</span> <span class="mf">0.03244</span> <span class="n">BTC</span>
<span class="mi">1600</span> <span class="n">CHF</span> <span class="o">&lt;--&gt;</span> <span class="mf">0.03707</span> <span class="n">BTC</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Verwenden Sie eine Schleife und die <code class="docutils literal notranslate"><span class="pre">printf</span></code>-Funktion für die Tabellenausgabe</p></li>
<li><p>Definieren Sie ein Makro <code class="docutils literal notranslate"><span class="pre">NUM_ROWS</span></code>, um an zentraler Stelle im Source-Code zu definieren, wie viele Einträge die Tabelle in der Ausgabe haben soll.</p></li>
<li><p>Lesen Sie den Umrechnungsfaktor mit der <code class="docutils literal notranslate"><span class="pre">scanf</span></code>-Funktion als <code class="docutils literal notranslate"><span class="pre">double</span></code> von der Kommandozeile ein.</p></li>
</ul>
</section>
<hr class="docutils" />
<section id="aufgabe-4-zeichen-und-worter-zahlen">
<h2>6. Aufgabe 4: Zeichen und Wörter zählen<a class="headerlink" href="#aufgabe-4-zeichen-und-worter-zahlen" title="Permalink to this headline"></a></h2>
<p>Schreiben Sie ein C-Programm, welches die Zeichen und Wörter einer mit der Tastatur eingegebenen Zeile zählt. Wortzwischenräume sind entweder Leerzeichen ( ) oder Tabulatoren (\t). Die Eingabe der Zeile mit einem newline-character (\n) abgeschlossen. Danach soll ihr Programm die Anzahl Zeichen und die Anzahl Wörter ausgeben und terminieren.</p>
<ul class="simple">
<li><p>Verwenden Sie die <code class="docutils literal notranslate"><span class="pre">char</span> <span class="pre">getchar(void)</span></code> Funktion aus der <code class="docutils literal notranslate"><span class="pre">stdio.h</span></code> Library, um die Zeichen einzeln einzulesen. Die Funktion <code class="docutils literal notranslate"><span class="pre">getchar</span></code> kehrt nicht gleich bei Eingabe des ersten Zeichens zurück, sondern puffert die Daten, bis die Eingabe einer kompletten Zeile mit Return abgeschlossen wird. Dann wird das erste Zeichen aus dem Puffer zurückgegeben und mit weiteren Aufrufen von getchar können die nachfolgenden Zeichen aus dem Puffer gelesen werden. Gibt <code class="docutils literal notranslate"><span class="pre">getchar</span></code> das Zeichen <code class="docutils literal notranslate"><span class="pre">\n</span></code> zurück, ist die Zeile komplett zurückgegeben und der Puffer ist wieder leer.</p></li>
<li><p>Setzen Sie eine Schleife ein, die beim Zeichen \n terminiert.</p></li>
<li><p>Benutzen Sie if-then-else-Strukturen um die Wörter zu zählen.</p></li>
</ul>
</section>
<hr class="docutils" />
<section id="bewertung">
<h2>7. Bewertung<a class="headerlink" href="#bewertung" title="Permalink to this headline"></a></h2>
<p>Die gegebenenfalls gestellten Theorieaufgaben und der funktionierende Programmcode müssen der Praktikumsbetreuung gezeigt werden. Die Lösungen müssen mündlich erklärt werden.</p>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<p class="logo">
<a href="../index.html">
<img class="logo" src="../_static/logo.png" alt="Logo"/>
<h1 class="logo logo-name">SNP Labs</h1>
</a>
</p>
<h3>Navigation</h3>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">01 - Erste Schritte mit C</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#ubersicht">1. Übersicht</a></li>
<li class="toctree-l2"><a class="reference internal" href="#lernziele">2. Lernziele</a></li>
<li class="toctree-l2"><a class="reference internal" href="#aufgabe-1-virtuelle-maschine">3. Aufgabe 1: virtuelle Maschine</a></li>
<li class="toctree-l2"><a class="reference internal" href="#aufgabe-2-hello-world">4. Aufgabe 2: Hello World</a></li>
<li class="toctree-l2"><a class="reference internal" href="#aufgabe-3-tabellenausgabe">5. Aufgabe 3: Tabellenausgabe</a></li>
<li class="toctree-l2"><a class="reference internal" href="#aufgabe-4-zeichen-und-worter-zahlen">6. Aufgabe 4: Zeichen und Wörter zählen</a></li>
<li class="toctree-l2"><a class="reference internal" href="#bewertung">7. Bewertung</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../P02_Funktionen_Datentyp_enum/README.html">02: Funktionen, Datentyp “enum”</a></li>
<li class="toctree-l1"><a class="reference internal" href="../P03_Bit_Operation_struct_typedef/README.html">03 - Bit Operationen, Struct, Typedef</a></li>
<li class="toctree-l1"><a class="reference internal" href="../P04_Modularisieren_von_C_Code/new_P04/P04_Modularisieren_von_C_Code.html">04 - Modularisieren von C Code</a></li>
<li class="toctree-l1"><a class="reference internal" href="../P05_TicTacToe/README.html">05 - Arrays/Strings/TicTacToe</a></li>
<li class="toctree-l1"><a class="reference internal" href="../P06_Personen_Verwaltung_Linked_List/README.html">06 - Personen Verwaltung Linked List</a></li>
<li class="toctree-l1"><a class="reference internal" href="../P07_Prozesse_und_Threads/README.html">07 - Prozesse und Threads</a></li>
<li class="toctree-l1"><a class="reference internal" href="../P08_Sync/README.html">08 - Synchronisationsprobleme</a></li>
<li class="toctree-l1"><a class="reference internal" href="../P09_File_Operations/README.html">09 - File Operations</a></li>
<li class="toctree-l1"><a class="reference internal" href="../P10_IPC/README.html">10 - IPC</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li>Previous: <a href="../index.html" title="previous chapter">SNP Laboratories</a></li>
<li>Next: <a href="../P02_Funktionen_Datentyp_enum/README.html" title="next chapter">02: Funktionen, Datentyp “enum”</a></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2022, stsh.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.4.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="../_sources/P01_Erste_Schritte_mit_C/README.md.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>