Наредбе гранања

Наредбе гранања на основу вредности неког израза одређују да ли ће се, односно која ће се наредба или група наредби извршити.

Селекција IF-ELSE

if(izraz)
  naredba1
else
  naredba2

izraz представља логички услов што значи да његова вредност може бити логичка вредност true (тачно, истина, бројчано вредност различита од нуле) или логичка вредност false (нетачно, лаж, бројчано вредност нула). naredba1 и naredba2 су или појединачне наредбе (уколико се завршавају симболом ;) или блокови наредби (појединачне наредбе које се завршавају симболом ; записане између витичастих заграда {}). else naredba2 је опциони део селекције што значи да може да постоји само if(izraz) naredba1.


Пример 1: Напишите програм који учитава цео број и проверава и исписује да ли је унети број једнак нули.

#include <stdio.h>
main()
{
       int x;
       printf("Unesite x: ");
       scanf("%d", &x);
       if(x==0)
              printf("x je jednako nuli");
}

Ово би био најједноставнији облик if-else селекције. Уколико је вредност логичког услова тачно, односно true, исписаће се порука, а уколико је вредност нетачно, односно false, неће се десити ништа (јер нисмо навели else део селекције).


Пример 2: Напишите програм који учитава цео број и проверава и исписује да ли је унети број мањи од нуле или није мањи од нуле.

#include <stdio.h>
main()
{
       int x;
       printf("Unesite x: ");
       scanf("%d", &x);
       if(x<0)
              printf("x je manje od nule");
       else
              printf("x nije manje od nule");
}

Овде имамо комплетну конструкцију if-else селекције где се извршавају појединачне наредбе.


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

#include <stdio.h>
main()
{
       int x, y, z;
       printf("Unesite prvi broj: ");
       scanf("%d", &x);
       printf("Unesite drugi broj: ");
       scanf("%d", &y);
       if (x > 0)
       {
              z = x - y;
              printf("Razlika prvog i drugog broja je %d", z);
       }
       else
       {
              z = x + y;
              printf("Zbir prvog i drugog broja je %d", z);
       }
}

Овде имамо комплетну конструкцију if-else селекције где се извршавају блокови наредби.


Задаци за вежбу:

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

#include <stdio.h>
main() 
{
	int a, b, zbir;
	printf("Unesite prvi broj: ");
	scanf("%d", &a);
	printf("Unesite drugi broj: ");
	scanf("%d", &b);
	zbir = a + b;
	printf("Zbir brojeva %d i %d jednak je %d\n", a, b, zbir);
	if (zbir > 0)
		printf("Zbir unetih brojeva veci je od nule");
	else
		printf("Zbir unetih brojeva nije veci od nule");
}

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

#include <stdio.h>
main() 
{
	int a, b;
	printf("Unesite dva razlicita broja: \n");
	scanf("%d%d", &a, &b);
	if (a == b)
		printf("Greska! Uneli ste iste brojeve");
	else
		if (a > b)
			printf("Veci je prvi broj %d", a);
		else
			printf("Veci je drugi broj %d", b);
}

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

#include <stdio.h>
main() 
{
	int a;
	printf("Unesite ceo broj: ");
	scanf("%d", &a);
	if (a % 3 == 0)
		printf("Uneti broj %d deljiv je sa 3", a);
	else
		printf("Uneti broj %d nije deljiv sa 3", a);
}

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

#include <stdio.h>
main()
{
	int a;
	printf("Unesite ceo broj: ");
	scanf("%d", &a);
	if (a > 0)
		printf("Uneti broj %d je pozitivan broj", a);
	else
		if (a == 0)
			printf("Uneti broj %d je nula", a);
		else
			printf("Uneti broj %d je negativan broj", a);
}

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

#include <stdio.h>
main() 
{
	double a1, b1, a2, b2, p1, p2;
	printf("Unesite redom duzine kateta prvog trougla:\n");
	scanf("%lf%lf", &a1, &b1);
	printf("Unesite redom duzine kateta drugog trougla:\n");
	scanf("%lf%lf", &a2, &b2);
	p1 = a1 * b1 / 2;
	p2 = a2 * b2 / 2;
	if (p1 > p2) 
		printf("Veca je povrsina prvog trougla");
	else 
		if (p1 < p2) 
			printf("Veca je povrsina drugog trougla");
		else 
			printf("Povrsine prvog i drugog trougla su iste");
}

6. Напишите програм који учитава три цела броја и проналази и исписује највећи.

#include <stdio.h>
main() 
{
	int a, b, c, max;
	printf("Unesite redom tri RAZLICITA cela broja:\n");
	scanf("%d%d%d", &a, &b, &c);
	max = a;
	if (max < b)
		max = b;
	if (max < c)
		max = c;
	printf("Najveci broj od tri uneta broja je %d", max);
}

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

#include <stdio.h>
main() 
{
	int godina;
	printf("Unesite godinu: ");
	scanf("%d", &godina);
	if (godina % 400 == 0 || (godina % 4 == 0 && godina % 100 != 0)) 
		printf("Uneta godina %d je prestupna", godina);
	else 
		printf("Uneta godina %d nije prestupna", godina);
}