next up previous contents
Nächste Seite: 11 Felder Aufwärts: C-Programmierung Vorherige Seite: 9 Zeichen sind auch   Inhalt

Unterabschnitte

10 Entscheidungsprogramme II: Die Mehrfachauswahl

10.1 Mehrfachauswahl - Beispiele mit if

10.2 Mehrfachauswahl mit switch

10.3 Vor- und Nachteile der switch-Anweisung:

+
Der Auswahlausdruck wird nur noch einmal abgefragt (anstatt mehrmals bei olympiade2.c). Somit kann ein Ausdruck wie getchar() zur Auswahl dienen.

+
Die switch-Anweisung ist optisch kürzer und übersichtlicher.

+
Die switch-Anweisung kann schnelleren Code erzeugen, da nur Auswahlausdruck nur einmal berechnet werden muss.

-
Die case-Marken müssen jeweils eine ganzzahlige Konstante enthalten; die if-Anweisung dagegen erlaubt auch Gleitkomma-Ergebnisse.

-
Mit der switch-Anweisung können keine Zeichenketten verglichen werden.

10.4 Aufgaben

  1. Schreiben Sie ein Programm, das zwei Zahlen einliest und anschließend - je nach Wunsch - diese Zahlen addiert, subtrahiert, dividiert oder multipliziert. Was zu tun ist, soll per Zahlencode eingegeben werden (1: addieren, 2: subtrahieren, 3: multiplizieren, 4: dividieren).
  2. Erweitern Sie dieses Programm so, dass es diese Operationen immer wieder ausführt, bis der Benutzer den Zahlencode 0 eingibt.
  3. Schreiben Sie ein Programm, das einen ASCII-Text so übersetzt, dass er mit einem HTML-Browser lesbar ist. Dabei muss erstens ein HTML-Dateikopf geschrieben werden; die Ausgabe muss zweitens mit einem HTML-Dateiende abgeschlossen werden; drittens müssen bestimmte Zeichen durch mehrere andere ersetzt werden:

    ASCII HTML ASCII HTML ASCII HTML
    ä ä ö ö ü ü
    Ä Ä Ö Ö Ü Ü
    ß &szlig; \n <br> " &quot;
    & &amp; < &lt; > &gt;

    Zum Test kann z.B. die folgende Datei test.txt mit einem Editor erstellt werden:

      1	>>Preiswert:<<
      2	
      3	Und dabei überzeugt dieser handliche Band nicht
      4	nur durch seinen niedrigen Preis. Nein, dank
      5	seines kompakten Formats läßt er sich auch in
      6	jeder Lebenslage produktiv einsetzen.
    
    Wenn das Programm mit der Zeile
    txt2htm < test.txt > test.htm
    aufgerufen wird, soll die Ausgabedatei test.htm so aussehen:
      1	<html>
      2	 <head>
      3	 </head>
      4	 <body>
      5	  <hr>
      6	  &gt;&gt;Preiswert:&lt;&lt;<br>
      7	  <br>
      8	  Und dabei &uuml;berzeugt dieser handliche Band nicht<br>
      9	  nur durch seinen niedrigen Preis. Nein, dank<br>
     10	  seines kompakten Formats l&auml;&szlig;t er sich auch in<br>
     11	  jeder Lebenslage produktiv einsetzen.<br>
     12	  <hr>
     13	 </body>
     14	</html>
    

10.5 Lösungen

  1. Auswahl:
      1	/* auswahl1.c */
      2	
      3	#include <stdio.h>
      4	#include <stdlib.h>
      5	
      6	int main()
      7	{
      8	   int    opcode;
      9	   double zahl1;
     10	   double zahl2;
     11	   
     12	   printf("Dieses Programm rechnet mit zwei Zahlen.\n");
     13	
     14	   printf("Bitte geben Sie die Art\nder Rechenoperation an:\n");
     15	   printf(" 1 : +\n 2 : -\n 3 : *\n 4 : /\n");
     16	   printf("Rechenoperation...............: ");
     17	   scanf("%i", &opcode);
     18	
     19	   printf("Bitte die erste Zahl eingeben : ");
     20	   scanf("%lf", &zahl1);
     21	   printf("Bitte die zweite Zahl eingeben: ");
     22	   scanf("%lf", &zahl2);
     23	     
     24	   switch(opcode)
     25	   {
     26	      case 1:
     27	         printf("Ergebnis: %lf\n", zahl1+zahl2);
     28	         break;
     29	      case 2:
     30	         printf("Ergebnis: %lf\n", zahl1-zahl2);
     31	         break;
     32	      case 3:
     33	         printf("Ergebnis: %lf\n", zahl1*zahl2);
     34	         break;
     35	      case 4:
     36	         if(zahl2)
     37	         {
     38	            printf("Ergebnis: %lf\n", zahl1/zahl2);
     39	         }
     40	         else
     41	         {
     42	            printf("Division durch null: nicht erlaubt!\n");
     43	         }
     44	         break;
     45	      default:
     46	         printf("Falsche Eingabe!\n");
     47	   }
     48	
     49	   exit(0);
     50	}
     51
    
  2. Auswahl mit Wiederholung:
      1	/* auswahl2.c */
      2	
      3	#include <stdio.h>
      4	#include <stdlib.h>
      5	
      6	int main()
      7	{
      8	   int    opcode;
      9	   double zahl1;
     10	   double zahl2;
     11	   
     12	   printf("Dieses Programm rechnet mit zwei Zahlen.\n");
     13	
     14	   do
     15	   {
     16	      printf("Bitte geben Sie die Art\nder Rechenoperation an:\n");
     17	      printf(" 0 : Ende\n 1 : +\n 2 : -\n 3 : *\n 4 : /\n");
     18	      printf("Rechenoperation...............: ");
     19	      scanf("%i", &opcode);
     20	
     21	      if(opcode!=0)
     22	      {
     23	         printf("Bitte die erste Zahl eingeben : ");
     24	         scanf("%lf", &zahl1);
     25	         printf("Bitte die zweite Zahl eingeben: ");
     26	         scanf("%lf", &zahl2);
     27	      }
     28	
     29	      switch(opcode)
     30	      {
     31	         case 0: 
     32	            break;
     33	
     34	         case 1:
     35	            printf("Ergebnis: %lf\n", zahl1+zahl2);
     36	            break;
     37	
     38	         case 2:
     39	            printf("Ergebnis: %lf\n", zahl1-zahl2);
     40	            break;
     41	
     42	         case 3:
     43	            printf("Ergebnis: %lf\n", zahl1*zahl2);
     44	            break;
     45	
     46	         case 4:
     47	            if(zahl2)
     48	            {
     49	               printf("Ergebnis: %lf\n", zahl1/zahl2);
     50	            }
     51	            else
     52	            {
     53	               printf("Division durch null: nicht erlaubt!\n");
     54	            }
     55	            break;
     56	
     57	         default:
     58	            printf("Falsche Eingabe!\n");
     59	
     60	      }/* switch */
     61	
     62	   }while(opcode!=0);
     63	
     64	   exit(0);
     65	}/* main */
    
  3. ASCII nach HTML:
      1	/* txt2htm.c */
      2	
      3	#include <stdio.h>
      4	#include <stdlib.h>
      5	
      6	main()
      7	{
      8	   int zeichen;
      9					/* HTML-Kopf: */
     10	
     11	   printf("<html>\n <head>\n </head>\n ");
     12	   printf("<body>\n  <hr>\n  ");
     13	
     14	   zeichen = getchar();
     15	   while(zeichen!=EOF)
     16	   {
     17	      switch((char)zeichen)
     18	      {
     19	         case 'Ä':  printf("&Auml;");   break;
     20		 case 'Ö':  printf("&Ouml;");   break;
     21	         case 'Ü':  printf("&Uuml;");   break;
     22	         case 'ä':  printf("&auml;");   break;
     23		 case 'ö':  printf("&ouml;");   break;
     24	         case 'ü':  printf("&uuml;");   break;
     25	         case 'ß':  printf("&szlig;");  break;
     26		 case '\n': printf("<br>\n  "); break;
     27	         case '"':  printf("&quot;");   break;
     28	         case '&':  printf("&amp;");    break;
     29	         case '<':  printf("&lt;");     break;
     30	         case '>':  printf("&gt;");     break;         
     31	         default:   putchar(zeichen);
     32	      
     33	      }/* switch */
     34	
     35	      zeichen = getchar();
     36	
     37	   }/* while */
     38					/* HTML-Nachspann: */
     39	
     40	   printf("<hr>\n </body>\n</html>\n");
     41	   exit(0);
     42	
     43	}/* main */
    


next up previous contents
Nächste Seite: 11 Felder Aufwärts: C-Programmierung Vorherige Seite: 9 Zeichen sind auch   Inhalt
Joerg Kurrek 2004-04-02