Рассмотрим принятие решений в Си и Си++, которые определяют направление потока выполнения программы, основные операторы.
Решения в программировании
В реальной жизни возникают ситуации, когда нам необходимо принять какие-то решения, и на основе этих решений мы решаем, что нам делать дальше.
Аналогичные ситуации возникают и в программировании, когда необходимо принять какие-то решения и на их основе выполнить следующий блок кода. Например, в C, если произойдет x, то выполните y, иначе выполните z.
Также может быть несколько условий, как в Си, если x, то выполните p, иначе, если y, то выполните q, иначе выполните r. Это условие C else...if является одним из многих способов ввода нескольких условий.
Ниже мы рассмотрим основные операторы для выполнения нужных блоков кода.
Оператор if в C/C ++
Условный оператор if - самый простой оператор для принятия решения. Он используется для определения того, будет ли выполняться определенный оператор или блок операторов, т.е. если определенное условие истинно, тогда блок оператора выполняется иначе нет.
Синтаксис:
if(условие)
{
// выполнение кода если
// условие истинно (true)
}
Здесь условие после проверки будет либо истинным, либо ложным. В C языке if
оператор принимает булевы значения - если значение истинно, то он выполнит блок операторов под ним, иначе - нет.
Если не задавать фигурные скобки '{' и '}' после if (условие)
, то по умолчанию оператор if
будет считать, что первый оператор, находящийся непосредственно под ним, находится внутри его блока.
Пример:
if (условие)
выражение1;
выражение2;
Выше, если условие истинно, if-блок будет рассматривать только выражение1
как находящееся внутри его блока.
Блок-схема:
В языке C:
// C program to illustrate If statement
#include <stdio.h>
int main() {
int i = 10;
if (i > 15)
{
printf("10 is less than 15");
}
printf("I am Not in if");
}
В языке C++:
// C++ program to illustrate If statement
#include<iostream>
using namespace std;
int main()
{
int i = 10;
if (i > 15)
{
cout<<"10 is less than 15";
}
cout<<"I am Not in if";
}
Вывод:
I am Not in if
Так как условие, присутствующее в операторе if
, ложно, то блок под оператором if
не выполняется.
if-else в C/C++
Одно только утверждение if
говорит нам, что если условие истинно, то выполняется блок выражений, а если условие ложно, то нет.
Но что, если мы хотим сделать что-то еще, если условие ложно. Для этого используется оператор else
в C. Оператор else
можно использовать с оператором if
для выполнения блока кода, если условие ложно.
Синтаксис:
if (условие)
{
// запустить этот блок если
// условие истинно (true)
}
else
{
// запустить этот блок если
// условие ложно (false)
}
Блок-схема:
В языке C:
// C program to illustrate If statement
#include <stdio.h>
int main() {
int i = 20;
if (i < 15)
printf("i is smaller than 15");
else
printf("i is greater than 15");
return 0;
}
В языке C++:
// C++ program to illustrate if-else statement
#include<iostream>
using namespace std;
int main()
{
int i = 20;
if (i < 15)
cout<<"i is smaller than 15";
else
cout<<"i is greater than 15";
return 0;
}
Вывод:
i is greater than 15
Блок кода, следующий за оператором else
, выполняется когда условие, присутствующее в операторе if
, ложно.
Вложенный if в C/C++
Вложенный if
в C является оператором if
, который является целью другого оператора if
. Вложенный оператор if
означает оператор if
внутри другого оператора if
.
Да, и C, и C++ позволяют нам вкладывать операторы if
в операторы if
, т.е. мы можем помещать оператор if
внутри другого оператора if
.
Синтаксис:
if (условие1)
{
// Выполняется, когда условие1 верно
if (условие2)
{
// Выполняется, когда условие2 истинно
}
}
Блок-схема:
В языке C:
// C program to illustrate nested-if statement
#include <stdio.h>
int main() {
int i = 10;
if (i == 10)
{
// First if statement
if (i < 15)
printf("i is smaller than 15\n");
// Nested - if statement
// Will only be executed if statement above
// is true
if (i < 12)
printf("i is smaller than 12 too\n");
else
printf("i is greater than 15");
}
return 0;
}
В языке C++:
// C++ program to illustrate nested-if statement
#include <iostream>
using namespace std;
int main()
{
int i = 10;
if (i == 10)
{
// First if statement
if (i < 15)
cout<<"i is smaller than 15\n";
// Nested - if statement
// Will only be executed if statement above
// is true
if (i < 12)
cout<<"i is smaller than 12 too\n";
else
cout<<"i is greater than 15";
}
return 0;
}
Вывод:
i is smaller than 15
i is smaller than 12 too
if else if в C/C++
Здесь пользователь работает с выбором одного из нескольких вариантов. Операторы C if
выполняются сверху вниз.
Как только одно из условий, управляющих условием if
, является истинным, выполняется оператор, связанный с этим условием if
, а остальная часть C else if
- обходится.
Если ни одно из условий не выполняется, то выполняется последний оператор else
.
Синтаксис:
if (условие)
выражение;
else if (условие)
выражение;
.
.
else
выражение;
Блок-схема:
В языке C:
// C program to illustrate nested-if statement
#include <stdio.h>
int main() {
int i = 20;
if (i == 10)
printf("i is 10");
else if (i == 15)
printf("i is 15");
else if (i == 20)
printf("i is 20");
else
printf("i is not present");
}
В языке C++:
// C++ program to illustrate if-else-if ladder
#include<iostream>
using namespace std;
int main()
{
int i = 20;
if (i == 10)
cout<<"i is 10";
else if (i == 15)
cout<<"i is 15";
else if (i == 20)
cout<<"i is 20";
else
cout<<"i is not present";
}
Вывод:
i is 20
Дополнительные операторы
Дополнительные операторы break
, continue
, goto
, return
используются в C или C++ для безусловного потока управления через функции в программе.
1. C break
Этот управляющий параметр цикла используется для завершения цикла. Как только оператор прерывания break
встретится внутри цикла, итерации цикла прекращаются, и управление возвращается из цикла сразу же к первому оператору после окончания цикла.
Синтаксис:
break;
В основном операторы break
используются в ситуациях, когда мы не уверены в фактическом количестве итераций цикла или хотим завершить цикл на основании некоторого условия.
В языке C:
// C program to illustrate
// Linear Search
#include <stdio.h>
void findElement(int arr[], int size, int key)
{
// loop to traverse array and search for key
for (int i = 0; i < size; i++) {
if (arr[i] == key) {
printf("Element found at position: %d", (i + 1));
break;
}
}
}
int main() {
int arr[] = { 1, 2, 3, 4, 5, 6 };
// no of elements
int n = 6;
// key to be searched
int key = 3;
// Calling function to find the key
findElement(arr, n, key);
return 0;
}
В языке C++:
// CPP program to illustrate
// Linear Search
#include <iostream>
using namespace std;
void findElement(int arr[], int size, int key)
{
// loop to traverse array and search for key
for (int i = 0; i < size; i++) {
if (arr[i] == key) {
cout << "Element found at position: " << (i + 1);
break;
}
}
}
// Driver program to test above function
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6 };
int n = 6; // no of elements
int key = 3; // key to be searched
// Calling function to find the key
findElement(arr, n, key);
return 0;
}
Вывод:
Element found at position: 3
2. C continue
Этот оператор управления циклом похож на оператор break. Оператор continue противоположен оператору break, вместо завершения цикла он заставляет выполнить следующую итерацию цикла.
Как следует из названия, оператор continue заставляет цикл продолжить или выполнить следующую итерацию. Когда оператор continue выполняется в цикле, код внутри цикла, следующий за оператором continue, будет пропущен, и начнется следующая итерация цикла.
Синтаксис:
continue;
В языке C:
// C program to explain the use
// of continue statement
#include <stdio.h>
int main() {
// loop from 1 to 10
for (int i = 1; i <= 10; i++) {
// If i is equals to 6,
// continue to next iteration
// without printing
if (i == 6)
continue;
else
// otherwise print the value of i
printf("%d ", i);
}
return 0;
}
В языке C++:
// C++ program to explain the use
// of continue statement
#include <iostream>
using namespace std;
int main()
{
// loop from 1 to 10
for (int i = 1; i <= 10; i++) {
// If i is equals to 6,
// continue to next iteration
// without printing
if (i == 6)
continue;
else
// otherwise print the value of i
cout << i << " ";
}
return 0;
}
Вывод:
1 2 3 4 5 7 8 9 10
3. C goto
Оператор goto в C/C++, также называемый оператором безусловного перехода, может использоваться для перехода из одной точки в другую внутри функции.
Синтаксис:
Syntax1 | Syntax2
----------------------------
goto label; | label:
. | .
. | .
. | .
label: | goto label;
В приведенном выше синтаксисе первая строка говорит компилятору перейти или перескочить к выражению, помеченному как label
. Здесь label
- это заданный пользователем идентификатор, который указывает на целевой оператор.
Оператор, следующий сразу за label:
- это оператор назначения. label:
также может появиться перед оператором goto label;
в приведенном выше синтаксисе.
Блок-схема:
Ниже приведены примеры использования оператора goto
.
В языке C:
// C program to print numbers
// from 1 to 10 using goto statement
#include <stdio.h>
// function to print numbers from 1 to 10
void printNumbers()
{
int n = 1;
label:
printf("%d ",n);
n++;
if (n <= 10)
goto label;
}
// Driver program to test above function
int main() {
printNumbers();
return 0;
}
В языке C++:
// C++ program to print numbers
// from 1 to 10 using goto statement
#include <iostream>
using namespace std;
// function to print numbers from 1 to 10
void printNumbers()
{
int n = 1;
label:
cout << n << " ";
n++;
if (n <= 10)
goto label;
}
// Driver program to test above function
int main()
{
printNumbers();
return 0;
}
Вывод:
1 2 3 4 5 6 7 8 9 10
4. C return
return
в C или C++ возвращает поток выполнения функции, из которой он вызывается. Это утверждение не обязательно требует каких-либо условных операторов.
Как только оператор выполняется, поток программы немедленно останавливается и возвращает элемент управления, откуда он был вызван.
Оператор return может возвращать или не возвращать что-либо для void
-функции, но для не-void
-функции необходимо вернуть возвращаемое значение.
Синтаксис:
return[expression];
В языке C:
// C code to illustrate return
// statement
#include <stdio.h>
// non-void return type
// function to calculate sum
int SUM(int a, int b)
{
int s1 = a + b;
return s1;
}
// returns void
// function to print
void Print(int s2)
{
printf("The sum is %d", s2);
return;
}
int main()
{
int num1 = 10;
int num2 = 10;
int sum_of = SUM(num1, num2);
Print(sum_of);
return 0;
}
В языке C++:
// C++ code to illustrate return
// statement
#include <iostream>
using namespace std;
// non-void return type
// function to calculate sum
int SUM(int a, int b)
{
int s1 = a + b;
return s1;
}
// returns void
// function to print
void Print(int s2)
{
cout << "The sum is "<< s2;
return;
}
int main()
{
int num1 = 10;
int num2 = 10;
int sum_of = SUM(num1, num2);
Print(sum_of);
return 0;
}
Вывод:
The sum is 20