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: