Operatoren und Ausdrücke
Lege für die folgenden Übungen ein neues Verzeichnis namens operators-expressions an:
mkdir operators-expressions
Wechsle das aktuelle Arbeitsverzeichnis in den soeben erstellten Ordner:
cd operators-expressions
Lege in diesem Ordner ein Git-Repository an:
git init
Sichere nach jeder Aufgabe deine Lösung (z.B. some-exercise.c):
git add some-exercise.c
git commit -m "worked through some exercise"
Bearbeite so die folgenden Aufgaben. Verwende dabei nur Sprachkonstrukte, die wir bereits angeschaut haben, oder die in der Aufgabenstellung empfohlen werden.
Aufgabe 0: Grundgerüst
In dieser Aufgabe erstellst du das Grundgerüst für die folgenden Aufgaben. Du kannst dieses einfach für jede weitere Aufgabe kopieren.
Schreibe ein C-Programm basic.c mit folgendem Inhalt:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
    int x = atoi(argv[1]);
    printf("x=%d\n", x);
    return 0;
}Hinweise:
stdlib.henthält verschiedene Funktionen, u.a.atoi.- Die Funktion 
atoi(“Array to Integer”) konvertiert ein textuelles Argument in eine Ganzzahl und gibt diese zurück. - Mit der Notation 
argv[1]erhältst du Zugriff auf das erste Kommandozeilenargument. 
Kompiliere es mithilfe von make:
make basicFühre es aus, wobei du eine Zahl mitgeben musst:
./basic 34Du solltest die folgende Ausgabe erhalten:
x=34Aufgabe 1: Hypotenuse berechnen
Die Hypothenuse ist die längste Seite eines rechtwinkligen Dreiecks. Sie wird anhand der beiden Katheten (die kürzeren Dreieck-Seiten) mithilfe des Satzes vom Pythagoras berechnet.
Erstelle ein Programm namens hypot.c. Dieses nimmt zwei Fliesskommazahlen a und b entgegen und berechnet daraus die Hypothenuse c nach folgender Formel:
Das Programm soll folgendermassen funktionieren:
$ ./hypot 3 4
c=5.00Tipps:
- Kopiere das Programm vom Grundgerüst: 
cp basic.c hypot.c - Verwende zusätzlich die Bibliothek 
math.h. Diese stellt die Funktionsqrt(“square root”) für die Wurzelberechnung zur Verfügung. - Verwende die Funktion 
atofanstelle vonatoi. Diese konvertiert die Kommandozeilenargumente in eine Zahl vom Typdouble. - Kompiliere das Programm mit 
cc hypot.c -o hypot -lm. (Mit-lmwird die Mathematik-Library eingebunden.) - Das Quadrat einer Zahl 
xkannst du mit der Formelx * xoder mithilfe der Funktionpow(x, 2)berechnen. 
Aufgabe 2: Rabatt berechnen
Ein Rabatt wird in Prozenten vom Gesamtpreis angegeben.
Erstelle ein Programm namens discount.c. Dieses nimmt zwei Fliesskommazahlen price_full $p_f$ und discount_rate $d_r$ entgegen und berechnet damit den vergünstigten Preis price_discounted $p_d$ nach folgender Formel:
Das Programm soll folgendermassen funktionieren:
$ ./discount 99.95 10
p=89.95Aufgabe 3: Division mit Rest
Schreibe ein Programm namens int-div.c, welches sowohl das Ergebnis einer Ganzzahl-Division als auch deren Rest berechnet.
Das Programm soll folgendermassen funktionieren:
$ ./int-div 10 3
3R1Aufgabe 4: Kreisberechnung
Schreibe ein Programm namens circle.c, welches für einen gegebenen Radius (Fliesskommazahl) den Umfang $U$ und die Fläche $A$ eines Kreises berechnet. Verwende dazu die folgenden Formeln.
Umfang:
$$ U = 2 \pi r $$Fläche:
$$ A = \pi r^2 $$Das Programm soll folgendermassen funktionieren:
$ ./circle 3.5
U=18.85, A=28.27Tipps:
- Verwende die Konstante 
M_PIausmath.h. - Das Quadrat einer Zahl 
xkannst du mit der Formelx * xoder mithilfe der Funktionpow(x, 2)berechnen. 
Aufgabe 5: Tage pro Jahr
Ein Schaltjahr hat 366 Tage. Alle anderen Jahre haben 365 Tage.
Schreibe ein Programm days-in-year.c, welches eine Jahreszahl entgegennimmt und ausgibt, wie viele Tage dieses Jahr hat.
Das Programm soll folgendermassen funktionieren:
$ ./days-in-year 2025
365
$ ./days-in-year 2024
366Tipps:
- Unter Schaltjahr Berechnen findest du die genauen Regeln.
 - Der 
_Bool-Werttruehat denint-Wert1. - Verwende die Header-Datei 
stdbool.hfür den Datentyp_Boolmit den beiden Wertentrueundfalse. 
Aufgabe 6: Tage pro Monat
Die Monate haben unterschiedliche Anzahl von Tagen:
- Januar, März, Mai, Juli, August, Oktober und Dezember: 31 Tage
 - April, Juni, September, November: 30 Tage
 - Februar 28 oder 29 Tage
 
Schreibe ein Programm days-in-month.c, welches eine Jahres- und eine Monatszahl entgegennimmt und ausgibt, wie viele Tage dieser Monat hat.
Das Programm soll folgendermassen funktionieren:
$ ./days-in-month 2025 2
29
$ ./days-in-month 2024 2
28
$ ./days-in-month 2025 8
31
$ ./days-in-month 2025 9
30Tipps:
- Du kannst den Code der Aufgabe Tage pro Jahr wiederverwenden.
 - Anhand der Monatszahl kannst du eine 
_Bool-Variable berechnen, die sich zu einer Zahl konvertieren lässt. - Verwende 
_Bool-Hilfsvariablen wie z.B.is_long_month,is_short_month,is_february. 
Aufgabe 7: Zeitangaben in Stunden
Schreibe ein Programm hours.c welches drei Ganzzahl-Argumente entgegennimmt: Stunden, Minuten und Sekunden. Das Programm soll daraus die Anzahl Stunden als Fliesskommazahl berechnen.
Das Programm soll folgendermassen funktionieren:
./hours 8 30 0
8.50
./hours 2 0 30
2.01
./hours 1 59 59
2.00Aufgabe 8: Sekunden in Zeitangabe
Schreibe ein Programm hms.c welches eine Anzahl Sekunden als Ganzzahl entgegennimmt und daraus die Anzahl Stunden, Minuten und Sekunden berechnet.
Das Programm soll folgendermassen funktionieren:
./hms 3600
1h0m0s
./hms 3598
0h59m58sAufgabe 9: Notenberechnung
Schreibe ein Programm grade.c welches eine erreichte $P_{e}$ und eine maximale Punktzahl $P_{m}$ entgegennimmt und daraus die Schulnote $N$ nach folgender Formel berechnet:
Das Programm soll folgendermassen funktionieren:
./grade 99 100
5.95
./grade 42.75 55.5
4.85