Control Statements in C, Part 1
Witamy w kolejnej odsłonie naszej serii, Fundamentals of C.
control statements pozwalają nam określić przepływ sterowania programem, tj. kolejność wykonania instrukcji w programie. Umożliwiają one podejmowanie decyzji, wielokrotne wykonywanie zadań lub przeskakiwanie z jednej sekcji kodu do drugiej.
w C istnieją cztery rodzaje instrukcji kontrolnych:
- deklaracje podejmowania decyzji
- deklaracje wyboru
- deklaracje iteracji
- deklaracje Skoku
Deklaracja podejmowania decyzji: Instrukcja if-else
Instrukcja if-else służy do przeprowadzenia testu logicznego, a następnie do wykonania jednej z dwóch możliwych czynności w zależności od na wynik testu (tj. czy wynik jest prawdziwy czy fałszywy).
:
if (condition){ statements} else{ statements}
jeśli warunek określony w instrukcji if jest obliczany na true, polecenia wewnątrz bloku if są wykonywane i wtedy kontrola jest przekazywana do instrukcji bezpośrednio po bloku if. Nawet jeśli warunek jest false i nie ma opcji else-block, control zostanie przeniesiona do instrukcji zaraz po if-block.
część else jest wymagana tylko wtedy, gdy musi zostać wykonana określona sekwencja instrukcji, jeśli warunek zostanie obliczony na false. Ważne jest, aby pamiętać, że warunek jest zawsze określony w nawiasach i że dobrą praktyką jest umieszczanie instrukcji w bloku if lub w bloku else-w nawiasach klamrowych, niezależnie od tego, czy jest to pojedyncze czy złożone oświadczenie.
poniższy program sprawdza czy wprowadzony numer jest dodatni czy ujemny.
#include<stdio.h>int main( ) { int a; printf("n Enter a number:"); scanf("%d", &a); if(a>0) { printf( "n The number %d is positive.",a); } else { printf("n The number %d is negative.",a); } return 0; }
poniższy program porównuje dwa ciągi znaków, aby sprawdzić, czy są one równe, czy nie.
#include <stdio.h>#include <string.h>int main( ) { char a , b; printf("n Enter the first string:"); scanf("%s",a); printf("n Enter the second string:"); scanf("%s",b); if((strcmp(a,b)==0)) { printf("nStrings are the same"); } else { printf("nStrings are different"); } return 0; }
powyższy program porównuje dwa ciągi znaków, aby sprawdzić, czy są one takie same, czy nie. Do tego celu służy funkcja strcmp
. Jest zadeklarowana w pliku string.h
jako:
int strcmp(const char *s1, const char *s2);
porównuje łańcuch wskazywany przez s1
do łańcucha wskazywanego przez s2
. Funkcja strcmp
Zwraca liczbę całkowitą większą, równą lub mniejszą od zera, w związku z tym, że łańcuch wskazywany przez s1
jest większy, równy lub mniejszy od łańcucha wskazywanego przez s2
.
dlatego w powyższym programie, jeśli dwa łańcuchy a
i b
są równe , funkcja strcmp
powinna zwrócić 0. Jeśli zwraca 0, łańcuchy są takie same, w przeciwnym razie są różne.
zagnieżdżone instrukcje if I if-else
możliwe jest również osadzenie lub zagnieżdżenie instrukcji if-else jeden w drugim. Zagnieżdżanie jest przydatne w sytuacjach, w których należy wybrać jeden z kilku różnych kierunków działania.
ogólny format zagnieżdżonej instrukcji if-else to:
if(condition1){// statement(s);}else if(condition2){//statement(s);}....else if (conditionN){//statement(s);}else{//statement(s);}
powyższe jest również nazywane drabiną if-else. Podczas wykonywania zagnieżdżonej instrukcji if-else, gdy tylko napotkany zostanie warunek, który zmieni wartość na true, zostaną wykonane instrukcje powiązane z tym konkretnym blokiem if -, a reszta zagnieżdżonych instrukcji if-else zostanie pominięta. Jeśli żaden z warunków nie jest spełniony, albo zostanie wykonany ostatni blok else-block, albo jeśli blok else-block jest nieobecny, kontrola zostanie przeniesiona do następnej instrukcji zaraz po drabinie else-if.
poniższy program korzysta z zagnieżdżonej instrukcji if-else, aby znaleźć największą z trzech liczb.
#include<stdio.h>int main( ) { int a, b,c; a=6,b= 5, c=10; if(a>b) { if(b>c) { printf("nGreatest is: " , a); } else if(c>a) { printf("nGreatest is: ", c); } } else if(b>c) //outermost if-else block { printf("nGreatest is: " , b); } else { printf( "nGreatest is: " , c); } return 0; }
powyższy program porównuje trzy liczby całkowite i wypisuje największą. Pierwsze polecenie if porównuje wartości a
i b
. Jeśli a>b
ma wartość true, kontrola programu zostaje przeniesiona do instrukcji if-else zagnieżdżonej wewnątrz bloku if, gdzie b
jest porównywana z c
. Jeśli b>c
jest również prawdą, drukowana jest wartość a
; w przeciwnym razie porównywane są wartości c
i a
, a jeśli c>a
jest prawdą, drukowana jest wartość c
. Następnie omija się resztę drabiny if-else.
jednak, jeśli pierwszy warunek a>b
jest false, kontrola zostanie bezpośrednio przeniesiona do najbardziej oddalonego bloku else-if, gdzie wartośćb
jest porównywana z c
(ponieważ a
nie jest największa). Jeśli wartość b>c
jest prawdziwa, drukowana jest wartość b
, w przeciwnym razie drukowana jest wartość c
. Zwróć uwagę na zagnieżdżenie, użycie szelek i wcięcia. Wszystko to jest wymagane, aby zachować jasność.
Oświadczenie O Wyborze: Instrukcja switch-case
Instrukcja switch jest używana do wyboru wielu sposobów, które będą rozgałęziać się na różne segmenty kodu na podstawie wartości zmiennej lub wyrażenia. To wyrażenie lub zmienna musi być typu danych integer.
:
switch (expression){ case value1: code segment1; break; case value2: code segment2; break;... case valueN: code segmentN; break; default: default code segment;}
wartość tego wyrażenia jest generowana podczas wykonywania programu lub odczytywana jako dane wejściowe użytkownika. Zostanie wybrany i wykonany przypadek, którego wartość jest taka sama jak wyrażenia. Opcjonalna Etykieta domyślna służy do określenia segmentu kodu, który ma być wykonany, gdy wartość wyrażenia nie jest zgodna z żadną z wartości wielkości liter.
break
oświadczenie jest obecne na końcu każdego przypadku. Gdyby tak nie było, wykonywanie kontynuowałoby się do segmentu kodu następnego przypadku, nawet nie sprawdzając wartości case. Na przykład, przypuśćmy, że polecenie switch
ma pięć przypadków, a wartość trzeciego przypadku odpowiada wartości wyrażenia. Jeśli na końcu trzeciego przypadku nie było Oświadczenia break, wszystkie przypadki po przypadku 3 również zostałyby wykonane wraz z przypadkiem 3. Jeśli break jest obecny, to jest wybierany i wykonywany tylko wymagany przypadek, po czym Kontrola zostaje przeniesiona do następnej instrukcji zaraz po instrukcji switch. Nie ma break
po default
, ponieważ po domyślnym przypadku kontrola zostanie przeniesiona do następnej instrukcji natychmiast po przełączniku.
przykład: program do drukowania dnia tygodnia.
#include<stdio.h>int main( ) { int day; printf("nEnter the number of the day:"); scanf("%d",&day); switch(day) { case 1: printf("Sunday"); break; case 2: printf("Monday"); break; case 3: printf("Tuesday"); break; case 4: printf("Wednesday"); break; case 5: printf("Thursday"); break; case 6: printf("Friday"); break; case 7: printf("Saturday"); break; default: printf("Invalid choice"); } return 0; }
jest to bardzo prosty program, który wyjaśnia działanie konstrukcji switch-case. W zależności od liczby wprowadzonej przez użytkownika, właściwy przypadek jest wybierany i wykonywany. Na przykład, jeżeli wejście użytkownika wynosi 5, wtedy zostanie wykonany przypadek 5. Instrukcja break
obecna w przypadku 5 wstrzyma wykonanie instrukcji switch po Przypadku 5, a sterowanie zostanie przeniesione do następnej instrukcji po switch, która jest:
return 0;
możliwe jest również osadzenie złożonych instrukcji wewnątrz przypadku instrukcji switch. Te złożone wyrażenia mogą zawierać struktury kontrolne. W ten sposób możliwe jest również zagnieżdżenie przełącznika poprzez osadzenie go w obudowie.
Wszystkie programy napisane za pomocą instrukcji switch-case mogą być również pisane za pomocą instrukcji if-else. Jednak dobrze jest używać instrukcji if, gdy trzeba podjąć pewne działania po sprawdzeniu jakiegoś prostego lub złożonego warunku, który może obejmować kombinację wyrażeń relacyjnych i logicznych (np. (if((a!=0)&&(b>5))
).
jeśli chcesz wybrać spośród dużej grupy wartości, Instrukcja switch będzie działać znacznie szybciej niż zestaw zagnieżdżonych jednostek if. Przełącznik różni się od if W tym przełączniku może sprawdzać tylko równość, podczas gdy if może obliczać dowolny typ wyrażenia logicznego.
Instrukcja switch musi być używana, gdy trzeba dokonać wyboru z danego zestawu wyborów. Instrukcja switch case jest zwykle używana w aplikacjach opartych na menu. Najczęściej używa się instrukcji switch-case w obsłudze danych lub przetwarzaniu plików. Większość obsługi plików obejmuje wspólne funkcje: tworzenie pliku, Dodawanie rekordów, usuwanie rekordów, aktualizowanie rekordów, drukowanie całego pliku lub niektórych rekordów selektywnych. Poniższy program daje wyobrażenie o tym, jak instrukcja switch case może być używana w obsłudze danych. Nie dotyczy to kodu do przetwarzania plików, ponieważ możemy dyskutować o obsłudze plików w C dopiero po opanowaniu zaawansowanych pojęć, takich jak wskaźniki, struktury i związki.
przykład: instrukcja switch case używana w przetwarzaniu plików danych.
#include<stdio.h>int main() { //create file &set file pointer . int choice; printf("n Please select from the following options:"); printf("n 1. Add a record at the end of the file."); printf("n 2. Add a record at the beginning of the file:"); printf("n 3. Add a record after a particular record:"; printf("nPlease enter your choice:(1/2/3)?"); scanf("%d",&choice); switch(choice) { case 1: //code to add record at the end of the file break; case 2: //code to add record at the beginning of the file break; case 3: //code to add record after a particular record break; default: printf("n Wrong Choice"); } return 0; }
powyższy przykład switch-case zazwyczaj obejmuje zagnieżdżenie konstrukcji switch-case wewnątrz konstrukcji iteracji, takiej jak do-while. W naszym poście nex omówimy te iteracje.
Leave a Reply