Sitzung: Jeden Freitag in der Vorlesungszeit ab 16 Uhr c. t. im MAR 0.005. In der vorlesungsfreien Zeit unregelmäßig (Jemensch da?). Macht mit!

C-Kurs/Taschenrechner/Musterlösung: Unterschied zwischen den Versionen

K (hat „Ckurs2009/Taschenrechner/Musterlösung“ nach „Ckurs/Taschenrechner/Musterlösung“ verschoben: Auch Musterlösungen sind übergreifend...)
 
(kein Unterschied)

Aktuelle Version vom 5. März 2013, 17:37 Uhr

Musterlösung

Diese Aufgabe konnte mittels printf und scanf gelöst werden. Es wurde die switch/case Anweisung zur Unterscheidung für die einzelnen Operationen benutzt. Dabei wurde beachtet, dass nur ganzzahlige Werte für Operationen übergeben werden dürfen. Zum Glück sind char-Typen auch ganzzahlige Werte.

Was noch zu tun wäre, um diesen Code zu verbessern: Einbauen von Überprüfungen, ob die Eingabe überhaupt was sinnvolles enthielt. Sonst ist es möglich, dass ein Benutzer evtl. Beliebiegen Code ausführen kann und so euren Computer übernehmen kann. Bitte frage den Tutor neben dir, um weitere Informationen zu erhalten.

/**
 * Übungsaufgabe für den C-Kurs der Freitagsrunde
 *
 * Aufgabe: Schreibe einen einfachen Taschenrechner
 *
 * Kompilieren mit "gcc -o Taschenrechner Taschenrechner.c"
 */
// benutze printf/scanf
#include <stdio.h>
// Startpunkt der Anwendung
int main(int argc, char** argv)
{
  // Erzeuge Variablen für die Ein- und Ausgabe
  int ersteZahl = 0.0;
  char operation = 0;
  int zweiteZahl = 0.0;
  int ergebnis = 0.0;
 
  // Frage nach den Zahlen
  printf("Wie lautet die erste Zahl?        ");
  scanf("%d\n",&ersteZahl);
  
  printf("Welche Operation wird gewünscht?  ");
  scanf("%c",&operation);
  
  printf("Wie lautet die andere Zahl?       ");
  scanf("%d",&zweiteZahl);
  
  // berechne das Ergebnis (suche passende operation)
  switch( operation )
  {
  case '+':
    ergebnis=ersteZahl+zweiteZahl;
    break;
  case '-':
    ergebnis=ersteZahl-zweiteZahl;
    break;
  case '*':
    ergebnis=ersteZahl*zweiteZahl;
    break;
  case '/':
    ergebnis=ersteZahl/zweiteZahl;
    break;
  case '%':
    ergebnis=ersteZahl%zweiteZahl;
    break;
  case '|':
    ergebnis=ersteZahl|zweiteZahl;
    break;
  case '&':
    ergebnis=ersteZahl&zweiteZahl;
    break;
  case '^':
    ergebnis=ersteZahl^zweiteZahl;
    break;
  default:
    fprintf(stderr, "Konnte Operation (\'%c\') nicht auswerten...\n");
    return -1;
  }
  
  printf("----------------------------------------\n");
  printf("Ergebnis für %d%c%d                  %d\n", ersteZahl, operation, zweiteZahl, ergebnis);
  
  
  return 0;
}


Kommentare

Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest, ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf "bearbeiten" und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;)