Villkorliga satser i C: If, Else, Nested If med exempel

โšก Smart sammanfattning

Villkorliga satser i C styr flรถdet i ett program genom att endast exekvera kodblock nรคr ett testat villkor utvรคrderas till sant, vilket mรถjliggรถr beslutsfattande genom if-, if-else-, kapslade och else-if-stegekonstruktioner.

  • ๐Ÿ”ค Om-sats: Ett if-uttryck kรถr sitt block endast nรคr villkoret รคr ett sant vรคrde som inte รคr noll, medan noll betyder falskt.
  • ๐Ÿ”€ Om-annars: if-else-konstruktionen lรคgger till en falsk gren, som kรถr ett block nรคr villkoret รคr sant och ett annat nรคr det รคr falskt.
  • โš–๏ธ Relationsoperatรถrer: Sex operatorer (<, <=, >, >=, ==, !=) bygger de booleska uttryck som varje villkor testar.
  • ๐Ÿชœ Annars-om-stege: En kapslad else-if-stege kontrollerar flera uttryck uppifrรฅn och ner och kรถr den fรถrsta sanna grenen, eller en standard else.
  • โ“ Ternรคr operatรถr: Det villkorliga uttrycket ?: skriver ett kompakt if-else-vรคrde som returnerar ett av tvรฅ vรคrden pรฅ en enda rad.
  • ๐Ÿค– AI-hjรคlp: GitHub Copilot utarbetar och granskar if/else-logik, flaggar saknade klammerparenteser och fรถreslรฅr renare villkor.

C Villkorlig sats: IF, IF Else och Nested IF Else

Vad รคr ett villkorligt uttalande i C?

Villkorssatser i C-programmering anvรคnds fรถr att fatta beslut baserade pรฅ villkor. Villkorssatser exekveras sekventiellt nรคr det inte finns nรฅgot villkor runt satserna. Om du sรคtter ett villkor fรถr ett block av satser kan exekveringsflรถdet รคndras baserat pรฅ resultatet som utvรคrderas av villkoret. Denna process kallas beslutsfattande i 'C'.

Till skillnad frรฅn loopar i C som upprepar kod, villkorliga satser vรคljer en sรถkvรคg.

I 'C'-programmering รคr villkorliga uttalanden mรถjliga med hjรคlp av fรถljande tvรฅ konstruktioner:

  1. Om uttalande
  2. If-else-sats

Det kallas ocksรฅ fรถr fรถrgrening eftersom ett program bestรคmmer vilken sats som ska kรถras baserat pรฅ resultatet av det utvรคrderade villkoret.

Om uttalande

Det รคr ett av de kraftfulla villkorliga uttalandena. If-satsen รคr ansvarig fรถr att modifiera flรถdet av exekvering av ett program. If-satsen anvรคnds alltid med ett villkor. Villkoret utvรคrderas fรถrst innan nรฅgon sats kรถrs inuti Ifs brรถdtext. Syntaxen fรถr if-satsen รคr fรถljande:

 if (condition) 
     instruction;

Villkoret utvรคrderas till antingen sant eller falskt. True รคr alltid ett vรคrde som inte รคr noll, och false รคr ett vรคrde som innehรฅller noll. Instruktioner kan vara en enstaka instruktion eller ett kodblock som omges av hรคngslen { }.

Fรถljande program illustrerar anvรคndningen av if-konstruktion i 'C'-programmering:

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

Produktion:

num1 is smaller than num2

Ovanstรฅende program illustrerar anvรคndningen av if-konstruktion fรถr att kontrollera likheten mellan tvรฅ tal.

Flรถdesschema fรถr If-satser i C

  1. I programmet ovan har vi initierat tvรฅ variabler med num1, num2 med vรคrdet 1, 2 respektive.
  2. Sedan har vi anvรคnt if med ett testuttryck fรถr att kontrollera vilket nummer som รคr minst och vilket nummer som รคr stรถrst. Vi har anvรคnt ett relationsuttryck i if-konstruktion. Eftersom vรคrdet pรฅ num1 รคr mindre รคn num2 kommer villkoret att utvรคrderas till sant.
  3. Sรฅledes kommer det att skriva ut uttalandet inuti blocket av If. Dรคrefter kommer kontrollen att gรฅ utanfรถr blocket och programmet avslutas med ett framgรฅngsrikt resultat.

Relations Operatorer

C har sex relationsoperatorer som kan anvรคndas fรถr att formulera ett booleskt uttryck fรถr att fatta ett beslut och testa villkor, vilket returnerar sant eller falskt:

  • < โ€” mindre รคn
  • <= โ€” mindre รคn eller lika med
  • > โ€” stรถrre รคn
  • >= โ€” stรถrre รคn eller lika med
  • == โ€” lika med
  • != โ€” inte lika med

Lรคgg mรคrke till att det lika testet (==) skiljer sig frรฅn uppdragsoperatรถren (=) eftersom det รคr ett av de vanligaste problemen som en programmerare mรถter genom att blanda ihop dem.

Till exempel:

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

Utgรฅng:

 You succeed

Tรคnk pรฅ att ett villkor som utvรคrderas till ett vรคrde som inte รคr noll anses vara sant.

Till exempel:

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

Produktion:

There is someone present in the classroom

If-Else uttalandet

C If-Ellers-satsens flรถdesschema

If-else-satsen รคr en utรถkad version av If. Den allmรคnna formen av if-else รคr fรถljande:

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

I den hรคr typen av konstruktion, om vรคrdet fรถr test-uttryck รคr sant, sรฅ kommer blocket med satser att exekveras. Om vรคrdet fรถr test-uttryck รคr falskt, sรฅ kommer blocket med satser att exekveras. I vilket fall som helst, efter exekveringen, kommer kontrollen automatiskt att รถverfรถras till de satser som visas utanfรถr blocket fรถr If.

Fรถljande program illustrerar anvรคndningen av if-else-konstruktionen:

Vi kommer att initialisera en variabel med nรฅgot vรคrde och skriva ett program fรถr att avgรถra om vรคrdet รคr mindre รคn tio eller stรถrre รคn tio.

Lรฅt oss bรถrja.

#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;
}

Produktion:

The value is greater than 10

Exempel pรฅ utdata fรถr If-Else-sats i C

  1. Vi har initierat en variabel med vรคrdet 19. Vi mรฅste ta reda pรฅ om talet รคr stรถrre eller mindre รคn 10 med hjรคlp av ett 'C'-program. Fรถr att gรถra detta har vi anvรคnt om-else-konstruktionen.
  2. Hรคr har vi angett ett villkor num<10 eftersom vi mรฅste jรคmfรถra vรฅrt vรคrde med 10.
  3. Som du kan se รคr det fรถrsta blocket alltid ett sant block, vilket betyder att om vรคrdet pรฅ testuttrycket รคr sant sรฅ kommer det fรถrsta blocket som รคr If att exekveras.
  4. Det andra blocket รคr ett annat block. Detta block innehรฅller de satser som kommer att exekveras om vรคrdet pรฅ testuttrycket blir falskt. I vรฅrt program รคr vรคrdet pรฅ num stรถrre รคn tio, sรฅ testvillkoret blir falskt och annars exekveras blocket. Sรฅledes kommer vรฅr utdata frรฅn ett annat block som รคr "Vรคrdet รคr stรถrre รคn 10". Efter if-else kommer programmet att avslutas med ett framgรฅngsrikt resultat.

I 'C'-programmering kan vi anvรคnda flera if-else-konstruktioner inom varandra som kallas kapsling av if-else-satser.

Villkorliga uttryck

Ett annat sรคtt att uttrycka en if-else-sats รคr genom att introducera ?:-operatorn. I ett villkorligt uttryck har ?:-operatorn bara en sats associerad med if- och else-satsen.

Till exempel:

#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;}

Produktion:

y =2

Kapslade If-else-uttalanden

Nรคr en serie beslut krรคvs anvรคnds kapslade if-else. Nesting innebรคr att anvรคnda en om-annas-konstruktion inom en annan.

Lรฅt oss skriva ett program fรถr att illustrera anvรคndningen av kapslade 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;
}

Produktion:

The value is:1

Ovanstรฅende program kontrollerar om ett tal รคr mindre eller stรถrre รคn 10 och skriver ut resultatet med en kapslad if-else-konstruktion.

Kapslad If-else-sats i C

  1. Fรถrst har vi deklarerat en variabel num med vรคrdet som 1. Sedan har vi anvรคnt if-else-konstruktionen.
  2. I det yttre if-else-lรคget kontrollerar det angivna villkoret om ett tal รคr mindre รคn 10. Om villkoret รคr sant, dรฅ och endast dรฅ, kommer det inre blocket att exekveras. I det hรคr fallet รคr villkoret sant, vilket innebรคr att det inre blocket bearbetas.
  3. I det inre blocket har vi รฅterigen ett villkor som kontrollerar om vรฅr variabel innehรฅller vรคrdet 1 eller inte. Nรคr ett villkor รคr sant, kommer den att bearbeta If-blocket, annars kommer den att bearbeta ett else-block. I det hรคr fallet รคr villkoret sant, vilket innebรคr att If-blocket kรถrs och vรคrdet skrivs ut pรฅ utdataskรคrmen.
  4. Programmet ovan skriver ut vรคrdet pรฅ en variabel och avslutas med framgรฅng.

Fรถrsรถk att รคndra vรคrdet pรฅ variabel se hur programmet beter sig.

OBS: I kapslade if-else-konstruktioner mรฅste vi vara fรถrsiktiga med indenteringen eftersom flera if-else-konstruktioner รคr involverade i processen, sรฅ det blir svรฅrt att lista ut enskilda konstruktioner. Korrekt indentering gรถr det enkelt att lรคsa programmet.

Kapslade Else-if-pรฅstรฅenden

Kapslad Else-if-stege i C

Nested else-if anvรคnds nรคr flervรคgsbeslut krรคvs.

Den allmรคnna syntaxen fรถr hur else-if-stegar รคr konstruerade i "C"-programmering รคr fรถljande:

 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;

Denna typ av struktur kallas fรถr else-if-stege. Denna kedja ser generellt ut som en stege, dรคrfรถr kallas den รคven fรถr en else-if-stege. Testuttrycken utvรคrderas uppifrรฅn och ner. Nรคr ett sant testuttryck hittas, kรถrs en sats som รคr associerad med det. Nรคr alla n testuttryck blir falska, kรถrs standardsatsen else.

Lรฅt oss se sjรคlva arbetet med hjรคlp av ett program.

#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;
}

Produktion:

First class

Ovanstรฅende program skriver ut betyget enligt poรคngen i ett test. Vi har anvรคnt else-if ladder-konstruktionen i programmet ovan.

  1. Vi har initierat en variabel med markeringar. I else-if-stegestrukturen har vi tillhandahรฅllit olika villkor.
  2. Vรคrdet frรฅn de variabla markeringarna kommer att jรคmfรถras med det fรถrsta villkoret eftersom det รคr sant att pรฅstรฅendet som รคr associerat med det kommer att skrivas ut pรฅ utdataskรคrmen.
  3. Om det fรถrsta testvillkoret visar sig vara falskt jรคmfรถrs det med det andra villkoret.
  4. Denna process fortsรคtter tills alla uttryck har utvรคrderats, annars kommer kontrollen att lรคmna else-if-stegen och standardsatsen skrivs ut.

Fรถrsรถk att รคndra vรคrdet och mรคrk fรถrรคndringen i utdata.

Vanliga frรฅgor

Ett if-else-vรคrde testar alla booleskt uttryck, inklusive intervall och relationskontroller. switch fallet jรคmfรถr en variabel mot fasta konstanta vรคrden och kompilerar ofta till en snabbare hopptabell i mรฅnga fall.

Det hรคngande else-problemet รคr tvetydigheten kring vilka if-satser som hรถr till when-satser och รคr kapslade utan klammerparenteser. I C paras an else alltid ihop med nรคrmaste omatchade if-tecken. Att lรคgga till klammerparenteser eliminerar fรถrvirringen.

Ja. Logiska operatorer kopplar samman villkor: && krรคver att bรฅda sidor รคr sanna, || behรถver minst ett sant, och ! vรคnder pรฅ ett resultat. Till exempel, om (รฅlder > 18 && medborgare) testar tvรฅ villkor tillsammans i ett if.

Klammerparenteser รคr valfria nรคr brรถdtexten รคr en enda sats, sรฅ C kรถr bara nรคsta rad. Fรถr tvรฅ eller fler satser krรคvs klammerparenteser fรถr att gruppera dem. Att alltid anvรคnda klammerparenteser รคr en sรคker vana som fรถrhindrar logiska fel.

Kortslutningsutvรคrderingen avbryts sรฅ snart resultatet รคr kรคnt. Med && hoppar en falsk vรคnstersida รถver hรถgersidan. Med || hoppar en sann vรคnstersida รถver hรถgersidan. Detta undviker onรถdigt arbete och osรคkra operationer.

Ja. En else-if-stege utvรคrderas frรฅn topp till botten och stannar vid det fรถrsta sanna villkoret. Att placera breda villkor fรถre smala villkor kan dรถlja de smala fallen, sรฅ ordna testerna frรฅn mest specifika till mest generella.

Ja. AI-kodningsassistenter utarbetar villkorliga block frรฅn en kommentar, konverterar lรฅnga if/else-kedjor till renare strukturer och flaggar sannolika buggar som att anvรคnda = istรคllet fรถr ==. Testa alltid den genererade logiken innan du litar pรฅ den.

GitHub Copilot autokompletterar if-, else-if- och kapslade villkor frรฅn dina kommentarer eller omgivande kod. Den fรถreslรฅr relationella och logiska uttryck och kan lรคgga till saknade klammerparenteser, men du bรถr granska varje fรถrslag.

Sammanfatta detta inlรคgg med: