Switch - case naredba

     

 

Jeste li riješili zadatak 5 u prethodnoj vježbi?

Pogledajmo njegovo rješenje:


#include<stdio.h>
#include<conio.h>

main()
{
 int x,y,rez,izbor;
 printf("Upisite dva cijela broja: ");
 scanf("%d %d",&x, &y);
 printf("Zelite li izracunati:\n1) zbroj\n2) razliku\n3) umnozak\n4) kvocijent\nunesenih brojeva?");
 printf("\nUpisite broj za izbor: ");
 scanf("%d",&izbor);
 if (izbor==1)
    rez=x+y;
 else if (izbor==2)
    rez=x-y;
 else if (izbor==3)
    rez=x*y;
 else if (izbor==4)
    rez=x/y;
 else printf("Kriva operacija!");
 if (izbor>0&&izbor<5) printf("Trazeni rezultat je %d",rez);
 getch ();
}

Ovakvi zadaci koji u sebi sadrže različite izbornike u praksi se ne rješavaju pomoću if-elseif naredbe. Postoji naredba prilagođena ovakvim problemima - switch-case naredba.

Njezina sintaksa izgleda ovako:

switch (izraz)
{
case konstanta_1: blok naredbi_1;
break;
case konstanta_2: blok naredbi_2;
break;
. . .
case konstanta_n-1: blok naredbi_n-1;
break;
default: blok naredbi_n;
break;
}

Naredba switch-case izvršava se na sljedeći način:

  1. Računa se vrijednost izraza unutar zagrade
  2. Dobivena vrijednost uspoređuje se sa nizom konstanti (konstanta_1 do konstanta_n-1).
  3. Ako je vrijednost jednaka jednoj od konstanti, izvršava se blok naredbi pridružen toj konstanti
  4. Ako dobivena vrijednost nije jednaka niti jednoj od navedenih konstanti, izvršit će se blok naredbi pridružen opciji default.

Izvršavanje bloka naredbi prekida se naredbom break. Ako se blok naredbi u case ne završi s break, nastavlja se izvršavati blok naredbi sljedećeg case.

Opcija default može se i izostaviti ukoliko za njom ne postoji potreba!

Primjer 1:

U zadatku s kojim smo započeli ovu lekciju zamijenimo if naredbe sa switch-case naredbom:


#include<stdio.h>
#include<conio.h>

main()
{
 int x,y,rez,izbor;
 printf("Upisite dva cijela broja: ");
 scanf("%d %d",&x, &y);
 printf("Zelite li izracunati:\n1) zbroj\n2) razliku\n3) umnozak\n4) kvocijent\nunesenih brojeva?");
 printf("\nUpisite broj za izbor: ");
 scanf("%d",&izbor);
 switch(izbor)
 {
     case 1: rez=x+y; break;
     case 2: rez=x-y; break;
     case 3: rez=x*y; break;
     case 4: rez=x/y; break;
     default: printf("Kriva operacija!");break;
 }
 if (izbor>0&&izbor<5) printf("Trazeni rezultat je %d",rez);
 getch ();
}

Podaci za testiranje:

ulaz

izlaz

a=2, b=7, op=1

9

a=2, b=7, op=2

-5

a=2, b=7, op=3

14

a=7, b=7, op=4

13

a=2, b=7, op=5

Kriva operacija!

Vježba 1:

Uklonite sada naredbu break u prvoj case naredbi. Testirajte program sa prvim test primjerom! Znate li što se dogodilo?

Svoja razmišljanja objavite u diskusiji u temi "Grananje"

Vježba 2:

Kopirajte sljedeći program na svoje računalo. Potom zamijenite if naredbe sa naredbom switch-case:


#include<stdio.h>
#include<conio.h>

main()
{
 int a,p,o,izbor;
 printf("Upisite duljinu stranice kvadrata: ");
 scanf("%d",&a);
 if (a>0)
 {
    printf("Zelite li izracunati:\n1) povrsinu\n2) opseg\ndanog kvadrata?");
    printf("\nUpisite broj za izbor: ");
    scanf("%d",&izbor);
    if (izbor==1)
    {
       p=a*a;
       printf("Povrsina kvadrata je %d", p);
    }
    else if (izbor==2)
    {
       o=4*a;
       printf("opseg kvadrata je %d", o);
    }
    else printf("Kriva operacija!");
 }
 else printf("duljina stranice kvadrata mora biti vecea od nule!");
 getch ();
}

Podaci za testiranje:

ulaz

izlaz

a=5
izbor=1

20

a=5
izbor=2

25

a=5
izbor=3

krivi izbor

a=-5
izbor=1

duljina stranice kvadrata mora biti veća od nule!

Vježba 3:

Kopirajte sljedeći program na svoje računalo. Potom zamijenite naredbu switch-case sa if naredbama:


#include<stdio.h>
#include<conio.h>

main()
{
 int a;
 printf("Upisite ocjenu: ");
 scanf("%d",&a);
 switch(a)
 {
    case 1: printf("nedovoljan");break;
    case 2: printf("dovoljan");break;
    case 3: printf("dobar");break;
    case 4: printf("vrlo dobar");break;
    case 5: printf("odlican");break;
    default: printf("Kriva ocjena!");break;
 }
 getch ();
}