SWITCH - Anweisung. Aufgabe: Zur Nummer eines Tages soll der Wochentag ausgegeben werden. Beispiel:...

Preview:

Citation preview

SWITCH - Anweisung

Aufgabe:Zur Nummer eines Tages

soll der Wochentag ausgegeben werden.

Beispiel:2 --> Dienstag

Schreiben Sie dazu ein C-Programm

Programmieren Sie den Eingabeteil.

int main(){ int i;

printf("\nEingabe der Nummer: "); scanf("%d", &i); fflush(stdin);  // Wie geht es weiter ?

Mit If – Else – If Kette

if (i==1) printf("Montag"); else if (i==2) printf("Dienstag"); else if (i==3) printf("Mittwoch"); else if (i==4) printf("Donnerstag"); else if (i==5) printf("Freitag"); else if (i==6) printf("Samstag"); else if (i==7) printf("Sonntag"); else printf("ungültige Eingabe");

Besser: printf(...) jeweils zwischen

geschweifte Klammern setzen, also ...

if (i==1){ printf("Montag"); } else if (i==2){ printf("Dienstag"); } else if (i==3){ printf("Mittwoch"); } else if (i==4){ printf("Donnerstag"); } else if (i==5){ printf("Freitag"); } // gleich geht es weiter

else if (i==6){ printf("Samstag"); } else if (i==7){ printf("Sonntag"); } else{ printf("ungültige Eingabe"); }

Dies kann auch durch eine sogenannte

SWITCH-Anweisung realisiert werden

switch (i){ case 1: printf("Montag\n"); break; //... case 7: printf("Sonntag\n"); break; default: printf("ungültig\n"); break;}

Ein switch ist ein Schalter, der

verschiedene Zustände (wie bei einer

Gangschaltung) haben kann.

Hier sind die Zustände 1, 2, 3, 4, 5, 6, 7

switch (i){ case 1: printf("Montag\n"); break; //... case 7: printf("Sonntag\n"); break; default: printf("ungültig\n"); break;}

ganzzahliger Ausdruck (char, int)

Konstante

Wenn kein Wert passt

Verlassen der switch-Anweisung

Unnötig, aber guter Programmierstil

C-Syntax fürSWITCH

switch (Ausdruck){ case Wert1: Anweisungen; break; //... case Wertn: Anweisungen; break; default: Anweisungen; break;} default ist optional

Was passiert, wenn dieses break fehlen würde ?

Antwort:trifft es zu, dass der Ausdruck gleich dem Wert einer Konstanten ist, dann

werden alle nachfolgenden Anweisungen bearbeitet (und zwar so lange, bis ein break kommt, oder das Ende der switch-Anweisung erreicht wird). Dies gilt auch dann, wenn vor diesen Anweisungen (so wie hier), wiederum "case Konstante" oder

default steht. Man sagt:case-Marken sind nicht abweisend

Mit case bezeichnete Stellen im Programm sind also keine Verzweiger sondern lediglich Einstiegsmarkierer und break ist der Ausstiegsmarkierer.

Beispiel

...scanf("%d", &i);switch (i){ case 1: printf("Montag\n"); //... case 7: printf("Sonntag\n"); default: printf("ungültig\n"); break;}

Was gibt das Programm aus, wenn 1 eingegeben wird?

MontagDienstagMittwochDonnerstagFreitagSamstagSonntagungültig

Hier beginnt der Einstieg und das break unten bringt den Ausstieg.

...scanf("%d", &i);switch (i){ case 1: printf("Montag\n"); //... case 7: printf("Sonntag\n"); default: printf("ungültig\n"); break;}

Was gibt das Programm aus, wenn 7 eingegeben wird?

Sonntagungültig

Hier beginnt der Einstieg und das break unten bringt den Ausstieg.

Beispiel

...scanf("%d", &i);switch (i){ case 1: printf("Montag\n"); //... default: printf("ungültig\n"); case 7: printf("Sonntag\n");}

Was gibt das Programm aus, wenn 1 eingegeben wird?

default muss nicht am Ende stehen. Aber: default am Ende ist der bessere Programmierstil !!!!!!

Wenn kein break vorhanden ist, ist der Ausstieg am Ende der switch-

Anweisung!

MontagDienstagMittwochDonnerstagFreitagSamstagungültigSonntag

...scanf("%d", &i);switch (i){ case 1: printf("Montag\n"); //... default: printf("ungültig\n"); case 7: printf("Sonntag\n");}

Was gibt das Programm aus, wenn 7 eingegeben wird?

Sonntag

...scanf("%d", &i);switch (i){ case 1: printf("Montag\n"); //... default: printf("ungültig\n"); case 7: printf("Sonntag\n");}

Was gibt das Programm aus, wenn 8 eingegeben wird?

ungültigSonntag

Beispiel

...scanf("%d", &i); switch (i){ case 6: case 7: printf("Wochenende"); break; default: printf("werktags"); break; }

break fehlt

case Marken sind nicht abweisend

Was macht dieses Programm

Wenn i den Wert 6 oder 7, Ausgabe: "Wochenende" sonst Ausgabe:"werktags"

SWITCH-Anweisung

als Struktogramm

Ausdruck

...

case Konst. 1

Anweis. 1

case Konst. 2 default

Anweis. 2 ... Anweis. n

Auf dem Bildschirm erscheint diese Maske:

Bei Eingabe einer Zahl 1, 2, 3, 4 wird der entsprechende Programmteil aufgerufen (z.B. Summe zweier Zahlen)Bei Eingabe einer anderen Zahl als 1, 2, 3, 4 wird das Programm beendet.

Aufgabe:

Geben Sie eine Zahl ein. 1: berechnet die Summe zweier Zahlen, 2: berechnet die Differenz zweier Zahlen, 3: berechnet das Produkt zweier Zahlen, 4: berechnet den Quotienten zweier Zahlen. sonst: Programmende

int main(){ int e; double a,b,erg; // Eingabe printf("1: Summe\n"); printf("2: Differenz\n"); printf("3: Produkt\n"); printf("4: Quotient\n"); printf("sonst: Programmende\n"); scanf("%d", &e); fflush(stdin);

if((e>=1)&&(e<=4)){ printf("1.Zahl eingeben\n"); scanf("%lf", &a); printf("2.Zahl eingeben\n"); scanf("%lf", &b); fflush(stdin); }

// Verarbeitung switch(e){ case 1: erg=a+b; break; case 2: erg=a-b; break; case 3: erg=a*b; break; case 4: erg=a/b; break; }

// Ausgabe switch(e){ case 1: case 2: case 3: case 4: printf("Ergebnis=%f\n",erg); break; default: printf("Programmende"); break; }}

Geben Sie ein Zeichen ein.Das Programm soll feststellen, welche Eigenschaft dieses Zeichen hat:

- Selbstlaut (Vokal)- Mitlaut (Konsonant)- Ziffer - sonst

Aufgabe:

int main(){ char z; printf("Zeichen eingeben\n"); scanf("%c", &z); fflush(stdin); switch(z){ case 'a': case 'A': case 'e': case 'E': case 'i': case 'I': case 'o': case 'O': case 'u': case 'U': printf("Selbstlaut\n"); break;

Was geschieht, wenn das break fehlt ?

Es wird an der zum nächsten case zugehörigen Anweisung weitergemacht.

case 'b': case 'B': case 'c': case 'C': case 'd': case 'D': case 'f': case 'F': case 'g': case 'G': case 'h': case 'H': case 'j': case 'J': case 'k': case 'K': case 'l': case 'L': case 'm':

case 'M': case 'n': case 'N': case 'p': case 'P': case 'q': case 'Q': case 'r': case 'R': case 's': case 'S': case 't': case 'T': case 'v': case 'V': case 'w': case 'W': case 'x': case 'X':

case 'y': case 'Y': case 'z': case 'Z': printf("Mitlaut\n"); break;

case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': printf("Ziffer\n"); break; default: printf("sonst\n"); break; } return 0;}

Was würde bei Eingabe des Zeichens 'a' auf dem Bildschirm ausgegeben, wenn überall das break fehlen würde ?

SelbstlautMitlautZiffersonst

Alternative Lösung:

#include "stdafx.h"#include "stdio.h"

int main(){ char c; int z; printf("Bitte ein Zeicheneingeben\n"); scanf("%c", &c); z = (int)c;

if(z==97||z==65||z==101||z==69|| z==105||z==73||z==111||z==79|| z==112||z==85||z==117){ printf("Dieses Zeichen ist ein Selbstlaut\n"); } else if(z>=65 && z<=90 || z>=97 && z<=122){ printf("Dieses Zeichen ist ein Mitlaut\n"); } else if(z>=48 && z<=57){ printf("Dieses Zeichen ist eine Ziffer\n"); }

else{ printf("Dies ist sonst irgend ein Zeichen\n"); } return 0;}

Recommended