Селекција (switch-case)

switch-case нам помаже у контроли комплексних услова и гранања и чини наш програмски код прегледнијим и сажетијим. Значи, када испитујемо израз који има вишеструке вредности најједноставније је да користимо наредбу switch која има следећу синтаксу:

switch(izraz)
{
	case konstanta1 : blok naredbi 1
	case konstanta2 : blok naredbi 2
	...
	case konstantan : blok naredbi n
	default: blok naredbi
}

где израз мора бити неког целобројног типа, а константе у case гранама истог типа као израз. Не могу постојати две case гране са истом константом. Прво се израчуна вредност израза и проналази се грана чија је вредност константе једнака вредности израчунатог израза. Уколико се пронађе таква грана извршавају се сви блокови наредби у свим гранама почевши од оне гране чија се константа поклапа са изразом, па до краја switch наредбе. Уколико се вредност израза не поклапа ни са једном граном, извршава се блок означен са default, уколико постоји. Најчешће нам је потребно да се изврши само једна грана и тада користимо наредбу break. Уколико се наредба break наведе на крају блока наредби у грани, прескаче се извршавање свих осталих грана до краја switch наредбе.


Редни број дана у недељи

Напишите програм који учитава редни број дана у недељи и исписује који је то дан, тако да понедељак буде први дан, уторак други, среда трећи итд.

#include<stdio.h>
main()
{
	int dan;
	printf("Unesite redni broj dana u nedelji: ");
	scanf("%d", &dan);
	switch (dan)
	{
	case 1: printf("Ponedeljak"); break;
	case 2: printf("Utorak"); break;
	case 3: printf("Sreda"); break;
	case 4: printf("Cetvrtak"); break;
	case 5: printf("Petak"); break;
	case 6: printf("Subota"); break;
	case 7: printf("Nedelja"); break;
	default: printf("POGRESAN UNOS!!!");
	}
}

Уколико нам је потребно да за више различитих константи наведемо исту наредбу или блок наредби, онда case гране можемо груписати, као у следећем примеру:


Радни дан или викенд?

Напишите програм који учитава редни број дана у недељи и исписује да ли је дан радни дан или је викенд, тако да понедељак буде први дан, уторак други, среда трећи итд.

#include<stdio.h>
main()
{
	int dan;
	printf("Unesite redni broj dana u nedelji: ");
	scanf("%d", &dan);
	switch (dan)
	{
	case 1: case 2: case 3: case 4: case 5: printf("Radni dan"); break;
	case 6: case 7: printf("Vikend"); break;
	default: printf("POGRESAN UNOS!!!");
	}
}

Број дана у месецу

Напишите програм који учитава редни број месеца у години и годину, па потом исписује колико тај месец има дана у тој години. Обратити пажњу да је година преступна када је дељива са 400 или када је дељива са 4 а није дељива са 100.

#include<stdio.h>
main()
{
	int m, g;
	printf("Unesite redni broj meseca: ");
	scanf("%d", &m);
	printf("Unesite godinu: ");
	scanf("%d", &g);
	switch (m) 
	{
	case 1: case 3:	case 5:	case 7:	case 8:	case 10: case 12: 
		printf("%d. mesec %d. godine ima 31 dan", m, g); break;
	case 4:	case 6:	case 9:	case 11: 
		printf("%d. mesec %d. godine ima 30 dana", m, g); break;
	case 2: 
		if (g % 400 == 0 || (g % 4 == 0 && g % 100 != 0))
			printf("%d. mesec %d. godine ima 29 dana", m, g);
		else
			printf("%d. mesec %d. godine ima 28 dana", m, g);
		break;
	}
}

Мини калкулатор

Напишите програм који ће имати функцију мини калкулатора за операције сабирање, одузимање, множење и дељење. Програм на улазу учитава математички израз, а на излазу исписује резултат. На пример, ако корисник унесе израз
2.2/0.75
програм треба да испише
2.2 / 0.75 = 2.93333.

#include<stdio.h>
main()
{
	char operator;
	double a, b;
	printf("MINI KALKULATOR\n");
	printf("Unesite izraz: ");
	scanf("%lf%c%lf", &a, &operator, &b);
	switch (operator)
	{
	case '+': printf("%g + %g = %g", a, b, a + b); break;
	case '-': printf("%g - %g = %g", a, b, a - b); break;
	case '*': printf("%g * %g = %g", a, b, a * b); break;
	case '/': printf("%g / %g = %g", a, b, a / b); break;
	default: printf("POGRESAN UNOS!");
	}
}

 

Advertisements