Uvjetne naredbe u C-u: If, Else, Nested If s primjerom

โšก Pametni saลพetak

Uvjetne naredbe u C-u kontroliraju tok programa izvrลกavanjem blokova koda samo kada se testirani uvjet isplati, omoguฤ‡ujuฤ‡i donoลกenje odluka putem if, if-else, ugnijeลพฤ‘enih i else-if ljestviฤastih konstrukcija.

  • ๐Ÿ”ค Ako izjava: Naredba if izvrลกava svoj blok samo kada je uvjet razliฤita od nule vrijednost true, dok nula znaฤi false.
  • ๐Ÿ”€ Ako-inaฤe: Konstrukcija if-else dodaje laลพnu granu, pokreฤ‡uฤ‡i jedan blok kada je uvjet istinit, a drugi kada je uvjet laลพan.
  • โš–๏ธ Relacijski operatori: ล est operatora (<, <=, >, >=, ==, !=) grade logiฤke izraze koje svaki uvjet provjerava.
  • ๐Ÿชœ Ljestvica "inaฤe-ako": Ugnijeลพฤ‘ena else-if ljestvica provjerava nekoliko izraza od vrha do dna i pokreฤ‡e prvu pravu granu ili zadani else.
  • โ“ Ternarni operator: Uvjetni izraz ?: zapisuje kompaktnu if-else naredbu koja vraฤ‡a jednu od dvije vrijednosti u jednom retku.
  • ๐Ÿค– AI pomoฤ‡: GitHub Copilot izraฤ‘uje i pregledava if-else logiku, oznaฤava nedostajuฤ‡e zagrade i predlaลพe ฤiลกฤ‡e uvjete.

C uvjetna naredba: IF, IF Else i ugnijeลพฤ‘ena IF Else

ล to je uvjetna izjava u C-u?

Uvjetne naredbe u C programiranju koriste se za donoลกenje odluka na temelju uvjeta. Uvjetne naredbe izvrลกavaju se sekvencijalno kada ne postoji uvjet oko naredbi. Ako postavite neki uvjet za blok naredbi, tok izvrลกavanja moลพe se promijeniti na temelju rezultata koji se procjenjuje uvjetom. Taj se proces u 'C' naziva donoลกenje odluka.

Za razliku od petlje u C-u koji ponavljaju kod, uvjetne naredbe biraju jedan put.

U 'C' programiranju uvjetni iskazi moguฤ‡i su uz pomoฤ‡ sljedeฤ‡e dvije konstrukcije:

  1. If izjava
  2. Ako-inaฤe naredba

Naziva se i grananjem jer program odluฤuje koju ฤ‡e naredbu izvrลกiti na temelju rezultata procijenjenog uvjeta.

If izjava

To je jedna od moฤ‡nih uvjetnih izjava. If naredba je odgovorna za modificiranje tijeka izvoฤ‘enja programa. Iskaz se uvijek koristi s uvjetom. Uvjet se prvo procjenjuje prije izvrลกavanja bilo koje naredbe unutar tijela If. Sintaksa if naredbe je sljedeฤ‡a:

 if (condition) 
     instruction;

Uvjet se procjenjuje kao istinit ili laลพan. True je uvijek vrijednost razliฤita od nule, a false je vrijednost koja sadrลพi nulu. Instrukcije mogu biti jedna instrukcija ili blok koda omeฤ‘en vitiฤastim zagradama { }.

Sljedeฤ‡i program ilustrira koriลกtenje if konstrukcije u 'C' programiranju:

#include<stdio.h>
int main()
{
	int num1=1;
	int num2=2;
	if(num1<num2)		//test-condition
	{
		printf("num1 is smaller than num2");
	}
	return 0;
}

Izlaz:

num1 is smaller than num2

Gornji program ilustrira upotrebu konstrukcije if za provjeru jednakosti dva broja.

Dijagram toka IF naredbe u C-u

  1. U gornjem programu, inicijalizirali smo dvije varijable s num1, num2 s vrijednoลกฤ‡u 1, odnosno 2.
  2. Zatim smo upotrijebili if s testnim izrazom da provjerimo koji je broj najmanji, a koji najveฤ‡i. Koristili smo relacijski izraz u konstrukciji if. Buduฤ‡i da je vrijednost num1 manja od num2, procjena uvjeta ฤ‡e biti istinita.
  3. Stoga ฤ‡e ispisati izjavu unutar bloka If. Nakon toga kontrola ฤ‡e izaฤ‡i izvan bloka i program ฤ‡e biti prekinut s uspjeลกnim rezultatom.

Relacijski Operaulagatelji

C ima ลกest relacijskih operatora koji se mogu koristiti za formuliranje Booleovog izraza za donoลกenje odluke i testiranje uvjeta, koji vraฤ‡a vrijednost true ili false:

  • < โ€” manje od
  • <= โ€” manje ili jednako
  • > โ€” veฤ‡i od
  • >= โ€” veฤ‡i ili jednak
  • == โ€” jednako
  • != โ€” nije jednako

Primijetite da se test jednakosti (==) razlikuje od operatora dodjele (=) jer je to jedan od najฤeลกฤ‡ih problema s kojima se programer suoฤava ako ih pomijeลกa.

Na primjer:

int x = 41;
x =x+ 1;
if (x == 42) {
   printf("You succeed!");}

Izlaz:

 You succeed

Imajte na umu da se uvjet koji daje vrijednost razliฤitu od nule smatra istinitim.

Na primjer:

int present = 1;
if (present)
  printf("There is someone present in the classroom \n");

Izlaz:

There is someone present in the classroom

Izjava If-Else

Dijagram toka C If-Else naredbe

Naredba if-else je proลกirena verzija naredbe If. Opฤ‡i oblik naredbe if-else je sljedeฤ‡i:

if (test-expression)
{
    True block of statements
}
Else
{
    False block of statements
}
Statements;

U ovoj vrsti konstrukcije, ako je vrijednost test-izraza istinita, tada ฤ‡e se izvrลกiti blok naredbi "true". Ako je vrijednost test-izraza "false", tada ฤ‡e se izvrลกiti blok naredbi "false". U svakom sluฤaju, nakon izvrลกenja, kontrola ฤ‡e se automatski prenijeti na naredbe koje se pojavljuju izvan bloka If.

Sljedeฤ‡i programi ilustriraju koriลกtenje konstrukcije if-else:

Inicijalizirat ฤ‡emo varijablu nekom vrijednoลกฤ‡u i napisati program koji ฤ‡e odrediti je li vrijednost manja od deset ili veฤ‡a od deset.

Poฤnimo.

#include<stdio.h>
int main()
{
	int num=19;
	if(num<10)
	{
		printf("The value is less than 10");
	}
	else
	{
		printf("The value is greater than 10");
	}
	return 0;
}

Izlaz:

The value is greater than 10

Primjer izlaza If-Else naredbe u C-u

  1. Inicijalizirali smo varijablu s vrijednoลกฤ‡u 19. Moramo saznati je li broj veฤ‡i ili manji od 10 koristeฤ‡i 'C' program. Da bismo to uฤinili, upotrijebili smo konstrukciju if-else.
  2. Ovdje smo dali uvjet num<10 jer naลกu vrijednost moramo usporediti s 10.
  3. Kao ลกto vidite, prvi blok je uvijek pravi blok, ลกto znaฤi da ฤ‡e, ako je vrijednost test-izraza istinita, prvi blok koji je If biti izvrลกen.
  4. Drugi blok je else blok. Ovaj blok sadrลพi naredbe koje ฤ‡e se izvrลกiti ako vrijednost testnog izraza postane laลพna. U naลกem programu, vrijednost num je veฤ‡a od deset, stoga test-uvjet postaje laลพan i blok else se izvrลกava. Stoga ฤ‡e naลก izlaz biti iz else bloka koji glasi "Vrijednost je veฤ‡a od 10". Nakon if-else, program ฤ‡e zavrลกiti s uspjeลกnim rezultatom.

U 'C' programiranju moลพemo koristiti viลกestruke if-else konstrukte jedne unutar drugih koji se nazivaju gnijeลพฤ‘enje if-else naredbi.

Uvjetni izrazi

Drugi naฤin izraลพavanja if-else naredbe je uvoฤ‘enjem operatora ?:. U uvjetnom izrazu operator ?: ima samo jednu naredbu povezanu s if i else.

Na primjer:

#include <stdio.h>
int main() {
  int y;
  int x = 2;
   y = (x >= 6) ?  6 : x;/* This is equivalent to:  if (x >= 5)    y = 5;  else    y = x; */
   printf("y =%d ",y);
  return 0;}

Izlaz:

y =2

Ugnijeลพฤ‘ene If-else izjave

Kada je potreban niz odluka, koristi se ugnijeลพฤ‘eni if-else. Gnijeลพฤ‘enje znaฤi koriลกtenje jedne if-else konstrukcije unutar druge.

Napiลกimo program koji ฤ‡e ilustrirati koriลกtenje ugnijeลพฤ‘enog if-else.

#include<stdio.h>
int main()
{
	int num=1;
	if(num<10)
	{
		if(num==1)
		{
			printf("The value is:%d\n",num);
		}
		else
		{
			printf("The value is greater than 1");
		}
	}
	else
	{
		printf("The value is greater than 10");
	}
	return 0;
}

Izlaz:

The value is:1

Gornji program provjerava je li broj manji ili veฤ‡i od 10 i ispisuje rezultat pomoฤ‡u ugnijeลพฤ‘ene if-else konstrukcije.

Ugnijeลพฤ‘ena If-else naredba u C-u

  1. Prvo smo deklarirali varijablu num s vrijednoลกฤ‡u 1. Zatim smo upotrijebili if-else konstrukciju.
  2. U vanjskom if-else, zadani uvjet provjerava je li broj manji od 10. Ako je uvjet istinit, tada i samo tada ฤ‡e se izvrลกiti unutarnji blok. U ovom sluฤaju, uvjet je istinit, stoga se obraฤ‘uje unutarnji blok.
  3. U unutarnjem bloku ponovno imamo uvjet koji provjerava sadrลพi li naลกa varijabla vrijednost 1 ili ne. Kada je uvjet istinit, obradit ฤ‡e se If blok, inaฤe ฤ‡e se obraditi else blok. U ovom sluฤaju, uvjet je istinit, stoga se izvrลกava If blok i vrijednost se ispisuje na izlaznom zaslonu.
  4. Gornji program ฤ‡e ispisati vrijednost varijable i uspjeลกno se zavrลกiti.

Pokuลกajte promijeniti vrijednost varijabla vidjeti kako se program ponaลกa.

NAPOMENA: U ugnijeลพฤ‘enim if-else naredbama moramo biti oprezni s uvlaฤenjem jer je u ovaj proces ukljuฤeno viลกe if-else konstrukcija, pa je teลกko prepoznati pojedinaฤne konstrukcije. Pravilno uvlaฤenje olakลกava ฤitanje programa.

Ugnijeลพฤ‘ene Else-if izjave

Ugnijeลพฤ‘ena Else-if ljestvica u C-u

Ugnijeลพฤ‘eni else-if koristi se kada su potrebne viลกestazne odluke.

Opฤ‡a sintaksa kako se inaฤe-ako ljestvice konstruiraju u 'C' programiranju je sljedeฤ‡a:

 if (test - expression 1) {
    statement1;
} else if (test - expression 2) {
    Statement2;
} else if (test - expression 3) {
    Statement3;
} else if (test - expression n) {
    Statement n;
} else {
    default;
}
Statement x;

Ova vrsta strukture poznata je kao else-if ljestvica. Ovaj lanac opฤ‡enito izgleda kao ljestvica, stoga se naziva i else-if ljestvica. Testni izrazi se procjenjuju od vrha do dna. Kad god se pronaฤ‘e testni izraz koji je istinit, izvrลกava se naredba povezana s njim. Kada svih n testnih izraza postanu laลพni, izvrลกava se zadana else naredba.

Pogledajmo stvarni rad uz pomoฤ‡ programa.

#include<stdio.h>
int main()
{
	int marks=83;
	if(marks>75){
		printf("First class");
	}
	else if(marks>65){
		printf("Second class");
	}
	else if(marks>55){
		printf("Third class");
	}
	else{
		printf("Fourth class");
	}
	return 0;
}

Izlaz:

First class

Gornji program ispisuje ocjenu prema ocjenama postignutim na testu. Koristili smo konstrukciju else-if ljestvice u gornjem programu.

  1. Inicijalizirali smo varijablu s oznakama. U strukturi ljestvice else-if osigurali smo razliฤite uvjete.
  2. Vrijednost iz oznaka varijable usporeฤ‘ivat ฤ‡e se s prvim uvjetom buduฤ‡i da je istinita i izjava povezana s njom bit ฤ‡e ispisana na izlaznom ekranu.
  3. Ako se prvi testni uvjet pokaลพe laลพnim, tada se usporeฤ‘uje s drugim uvjetom.
  4. Ovaj proces ฤ‡e se nastaviti sve dok se ne izvrลกe svi izrazi, inaฤe ฤ‡e kontrola izaฤ‡i iz else-if ljestvice i ispisati ฤ‡e se zadana naredba.

Pokuลกajte promijeniti vrijednost i primijetite promjenu u izlazu.

Pitanja i odgovori

Naredba if-else provjerava bilo koji logiฤki izraz, ukljuฤujuฤ‡i raspone i relacijske provjere. prekidaฤโ€ฆkutije usporeฤ‘uje jednu varijablu s fiksnim konstantnim vrijednostima i ฤesto se kompajlira u brลพu tablicu skokova u mnogim sluฤajevima.

Problem viseฤ‡eg else naredbe je dvosmislenost oko toga kojem if naredbi pripada kada su if naredbe ugnijeลพฤ‘ene bez zagrada. U C-u, else se uvijek uparuje s najbliลพim neusklaฤ‘enim if naredbom. Dodavanje vitiฤastih zagrada uklanja zbrku.

Da. Logiฤki operatori spajaju uvjete: && zahtijeva da obje strane budu istinite, || zahtijeva barem jednu istinitu vrijednost, a ! poniลกtava rezultat. Na primjer, ako (dob > 18 && graฤ‘anin) testira dva uvjeta zajedno u jednom if.

Zagrade su opcionalne kada je tijelo jedna naredba, pa C izvrลกava samo sljedeฤ‡i redak. Za dvije ili viลกe naredbi, zagrade su potrebne za njihovo grupiranje. Koriลกtenje zagrada je sigurna navika koja sprjeฤava logiฤke pogreลกke.

Evaluacija kratkog spoja se zaustavlja ฤim je rezultat poznat. S &&, laลพna lijeva strana preskaฤe desnu stranu. S ||, istinita lijeva strana preskaฤe desnu stranu. Time se izbjegava nepotreban rad i nesigurne operacije.

Da. Ljestvica "inaฤe-ako" se procjenjuje od vrha do dna i zaustavlja se na prvom istinitom uvjetu. Postavljanje ลกirokih uvjeta prije uskih moลพe sakriti uske sluฤajeve, stoga testove poredajte od najspecifiฤnijih do najopฤ‡enitijih.

Da. AI kodirajuฤ‡i asistenti izraฤ‘uju uvjetne blokove iz komentara, pretvaraju duge if-else lance u ฤiลกฤ‡e strukture i oznaฤavaju vjerojatne greลกke poput koriลกtenja = umjesto ==. Uvijek testirajte generiranu logiku prije nego ลกto joj vjerujete.

GitHub kopilot automatski dovrลกava uvjete if, else-if i ugnijeลพฤ‘ene uvjete iz vaลกih komentara ili okolnog koda. Predlaลพe relacijske i logiฤke izraze te moลพe dodati nedostajuฤ‡e zagrade, iako biste trebali pregledati svaki prijedlog.

Saลพmite ovu objavu uz: