Конструкция if–else if–else if–...–else

Лабораторная работа №4

Тема: Операторы. Принятие решений. Условные операторы в языке С.

Цель работы: Ознакомиться с логическими конструкциями  языка: if, if–else, if–else if–else, оператор условия ?, безусловный оператор перехода goto.

Теоретическая часть

Что такое оператор

Запись действий, которые должен выполнить компьютер, состоит из операторов. При выполнении программы операторы выполняются один за другим, если только оператор не является оператором управления, который может изменить последовательное выполнение программы.

Различают операторы объявления имен, операторы управления и операторы-выражения.

Операторы-выражения

Выражения мы рассматривали в предыдущей работе. Выражение, после которого стоит точка с запятой, – это оператор-выражение. Его смысл состоит в том, что компьютер должен выполнить все действия, записанные в данном выражении, иначе говоря, вычислить выражение. Чаще всего в операторе-выражении стоит операция присваивания или вызов функции. Операторы выполняются последовательно, и все изменения значений переменных, сделанные в предыдущем операторе, используются в последующих.

a = 1;b = 3;m = max(a, b);

Переменной a присваивается значение 1, переменной b – значение 3. Затем вызывается функция max с параметрами 1 и 3, и ее результат присваивается переменной m.

Как мы уже отмечали, присваивание – необязательная операция в операторе-выражении. Следующие операторы тоже вполне корректны:

x + y – 12; // сложить значения x и y и                 // затем вычесть 12func(d, 12, x); // вызвать функцию func с                 // заданными параметрами

Объявления имен

Эти операторы объявляют имена, т.е. делают их известными программе. Все идентификаторы или имена, используемые в программе на языке Си, должны быть объявлены.

Оператор объявления состоит из названия типа и объявляемого имени:

int x;    // объявить целую переменную xdouble f;  // объявить переменную f типа                 // doubleconst float pi = 3.1415;      // объявить константу pi типа float // со значением 3.1415

Оператор объявления заканчивается точкой с запятой.

Операторы управления

Операторы управления определяют, в какой последовательности выполняется программа. Если бы их не было, операторы программы всегда выполнялись бы последовательно, в том порядке, в котором они записаны.

В языке программирования С используются несколько конструкций для управления:

  • оператор if;
  • оператор switch;
  • условный оператор ? (оператор условия) [4.1].

Для прерывания программного цикла при некотором условии применяется утверждение (оператор) break, для продолжения итераций цикла при выполнении некоторых условий применяется утверждение (оператор) continue, для выхода из функции при выполнении некоторых условий применяется оператор return, для перехода к заданному месту программы применяется оператор goto, хотя считается, что в программировании не существует ситуаций, в которых нельзя обойтись без оператора goto [2; 3]. Утверждение break применяется также в теле оператора switch.

Условные операторы

Условные операторы позволяют выбрать один из вариантов выполнения действий в зависимости от каких-либо условий.

Оператор if

Общая форма записи оператора if:

if (выражение) оператор

В операторе if используется результат вычисления условия, заключенного в круглые скобки, на основе которого принимается решение. Результат вычисления условия выражение может быть арифметическим или логическим. Если результат выполнения условия выражение будет истинным, т.е. отличаться от 0, то возможно выполнить несколько утверждений типа оператор. Для этого следует использовать фигурные скобки (блок), например:

if (выражение){   оператор1   оператор2   ...}

Блок используется в тех случаях, когда по синтаксису (по правилам) управляюющей структуры должен выполняться один оператор, а по логике задачи – несколько. Т.е. блок может содержать множество операторов, а сам представляет собой единое целое – оператор.

Например, можно записать:

if (x < 0) x = -x;ab = x;

В данном примере оператор x = -x; выполняется только в том случае, если значение переменной x было отрицательным. Присваивание переменной ab выполняется в любом случае. Таким образом, приведенный фрагмент программы изменит значение переменной x на его абсолютное значение и присвоит переменной ab новое значение x.

Если в случае истинности условия необходимо выполнить несколько операторов, их можно заключить в фигурные скобки (поместить в блок):

if (x < 0) { x = -x; printf("Изменить значение x на      противоположное по знаку/n";}ab = x;

Теперь если x отрицательно, то не только его значение изменится на противоположное, но и будет выведено соответствующее сообщение. Фактически, заключая несколько операторов в фигурные скобки, мы сделали из них один сложный оператор или блок. Прием заключения нескольких операторов в блок работает везде, где нужно поместить несколько операторов вместо одного.

Конструкция if–else

Общая форма записи конструкции if–else:

if (условие) оператор1 else оператор2

Оператор if выбирает один из двух вариантов последовательности вычислений.

Если условие истинно или отлично от 0, выполняется оператор1, если ложно, то выполняется оператор2.

Каждое из утверждений может быть множественным. В таком случае применяются фигурные скобки:

if (выражение){   оператор1   оператор2...}else{   оператор3   оператор4...}

 

if (x > y) a = x;else a = y;

В данном примере переменной a присваивается значение максимума из двух величин x и y.

Конструкция if–else if–else if–...–else

Форма записи конструкции if–else if–else if–...–else:

if (выражение1)оператор1   else if (выражение2)оператор2          else if (выражение3)оператор3                  else оператор4

Приведенная конструкция используется для выбора возможных ситуаций, когда проверяются условия выражение1, выражение2, выражени3,... . Соответственно будут выполняться действия оператор1, оператор2, оператор3 и т.д. В случае, когда ни одно из условий не выполняется, выполняются действия, прописанные после оператора else.

В случае выполнения множественных действий применяются фигурные скобки для каждого из утверждений:

if (выражени1){оператор1;...} else    if (выражение2)          {          оператор2          ...          }    else if (выражение3)                  {                  оператор3                  ...                  }          ...           else                  {                  оператор                  ...

}

Наприрмер:

if (x < 0) printf("Отрицательная величина\n");else if (x > 0) printf("Положительная величина\n");else printf ("Ноль\n");

 

Замечание: Конструкция else всегдапринадлежит ближайшему if.

Условный оператор ?

В отличие от других операторов языка С, которые могут быть унарными или бинарными, специфический оператор условия является тернарным оператором. Это означает, что у него может быть три операнда.

Общий формат записи оператора условия:

условие ? выражение_1 : выражение_2

Если в результате вычисления условия будет получено значение TRUE (истина, не нуль), то выполняется выражение_1, и результатом выполнения оператора условия будет значение, полученное при вычислении этого выражения. Если в результате вычисления условия будет получено значение FALSE (ложь, т.е. нуль), то выполняется выражение_2, и результатом выполнения оператора условия будет значение, полученное при вычислении выражение_2.

Оператор условия часто описывают как оператор ?. Тернарный оператор условия ? наиболее часто используется для присвоения переменной одного из двух значений в зависимости от некоторого условия.

Например:

x= a<b ? a : b

Переменной х будет присвоеное значение переменной а, если а меньше b и значение переменной b, если b меньше a.

Практическая часть

Пример 1. Напишите программу решения квадратного уравнения с проверкой на наличие вещественных (не комплексных) корней на основе только операторов if. Вид квадратного уравнения:

Как известно, квадратное уравнение будет иметь вещественные корни, если его дискриминант будет неотрицательным, т.е. когда

Программный код решения примера:

#include <stdio.h>#include <conio.h>#include <math.h> int main(void) {   float a, b, c;   float D, x1, x2, x;   printf("\n\t Equation a*x^2 + b*x + c = 0\n");   printf("\n\t Enter the coefficient a: ");   scanf_s("%f", &a);   printf("\t Enter the coefficient b: ");   scanf_s("%f", &b);   printf("\t Enter the coefficient c: ");   scanf_s("%f", &c);   D = b*b - 4*a*c;   if (D >= 0 && a != 0)           {             x1 = -b/(2*a) + (float)sqrt(D)/(2*a);             x2 = -b/(2*a) - (float)sqrt(D)/(2*a);              printf("\n\t The roots of the equation:\n\t x1 = %1.4f,                   x2 = %1.4f\n", x1, x2);      }   if (D < 0) printf("\n\t The roots of complex\n");    if (a == 0 && b != 0)           {                  x = -c/b;             printf("\n\t As a = %1.0f,\n\t the solution of the                   equation is: %1.4f\n", a, x);           }    printf("\n Press any key: ");   _getch();   return 0;}

Возможный результат выполнения программы показан на рис. 4.1.

Рис. 4.1. Результат решения квадратного уравнения

В программе последовательно проверяются условия с помощью операторов if. В последнем случае, когда коэффициент а = 0, квадратное уравнение вырождается и превращается в линейное уравнение. Решение в этом случае очевидно.

В программе применены функции scanf_s() вместо стандартной функции scanf() языка С. Это сделано для того, чтобы по этим функциям не было предупреждений (warning) в MS Visual Studio 2008.

Кроме того, в программу подключена библиотека math.h для действий с математическими функциями, например, sqrt().

В первом операторе if применено логическое условие И ( && ) для проверки того, что дискриминант не равен отрицательному значению и одновременно чтобы первый коэффициент квадратного уравнения не был равен нулю. Аналогичное условие прописано и для последнего оператора if.

Пример 2. Напишите программу решения квадратного уравнения с проверкой на наличие вещественных корней на основе конструкции if–else. Вид квадратного уравнения:

Программный код решения примера:

#include <stdio.h>#include <conio.h>#include <math.h> int main(void) {   float a, b, c;   float D, x1, x2, x;   printf("\n\t Equation a*x^2 + b*x + c = 0\n");   printf("\n\t Enter the coefficient a: ");   scanf_s("%f", &a);   printf("\t Enter the coefficient b: ");   scanf_s("%f", &b);   printf("\t Enter the coefficient c: ");   scanf_s("%f", &c);   D = b*b - 4*a*c;   if (D >= 0 && a != 0 && b != 0)           {             x1 = -b/(2*a) + (float)sqrt(D)/(2*a);             x2 = -b/(2*a) - (float)sqrt(D)/(2*a);              printf("\n\t The roots of the equation:\n\t x1 = %1.4f,                  x2 = %1.4f\n", x1, x2);      }   else           {                  if (a == 0 && b != 0)                           {                          x = -c/b;                               if (c != 0) printf("\n\t As a = %1.0f,\n\t the solution of the equation is: %1.4f\n", a, x);                                 else printf("\n\t As a = %1.0f and c = %1.0f,\n\t the solution of the equation is: %1.0f\n", a, -x);                           }                  if (D < 0) printf("\n\t The roots of complex\n");       }    printf("\n Press any key: ");   _getch();   return 0;}

В программе использованы вложенные операторы if.

Результат выполнения программы при исключительной ситуации показан на рис. 4.2.

Рис. 4.2. Выполнение программы с двумя нулевыми коэффициентами

Пример 3. Напишите программу классификации введенного с терминала символа на основе конструкции if–else if–else [4.1].

Символы (одиночные) будем считать как строчные и прописные буквы латинского алфавита, цифры от 0 до 9, и специальные символы.

Программный код решения примера:

#include <stdio.h>#include <conio.h> int main(void) { char c; // Ввод одиночного символа printf("\n\t Enter a single character: "); scanf_s("%c", &c); if ( c >= 'a' && c <= 'z' ) printf("\n\t This is a small letter\n"); else if ( c >= 'A' && c <= 'Z') printf("\n\t This is a capital letter\n");   else if ( c >= '0' && c <= '9') printf("\n\t This figure (digit)\n");         else printf("\n\t This is a special character\n"); printf("\n Press any key: "); _getch(); return 0;}

Результат выполнения программы показан на рис. 4.3.

Рис. 4.3. Результат классификации символа

Пример 4. Напишите программу вычисления двух целых случайных чисел и определения наибольшего из них. Определение наибольшего числа произведите с помощью оператора условия ?

Программный код решения примера:

#include <stdio.h>#include <conio.h>#include <stdlib.h> // Для функций случайных чисел#include <time.h> int main (void) { int a, b, maxab; unsigned int some; long int L; L = (long) time(NULL); some = (unsigned) L/2; srand(some); a = rand(); b = rand(); printf("\n\t Random numbers: a = %d; b = %d\n", a, b); // Оператор условия для определения максимального числа maxab = (a > b) ? a : b; printf("\n\t Maximum number: %d\n", maxab); printf("\n Press any key: "); _getch(); return 0; }

В программе использованы функции генерации псевдослучайных чисел rand() и задания исходного псевдослучайного числа srand(). Указанные функции входят в стандартную библиотечную функцию stdlib.h. Функция time() входит в библиотечную функцию time.h, которая поддерживает функции, обращающиеся к системному времени.

Для переменных L и some выполнено приведение типов.

При каждом обращении к функции rand() возвращается целое в интервале между нулем и значением RAND_MAX, которое в любой реализации должно быть не меньше числа 32 767

Возможный результат выполнения программы показан на рис. 4.4.

Рис. 4.4. Результат определения максимального числа

Задание.

Вариант 1.  

Задание 1.   

Задание 2. Написать программу, позволюющую определить, попадет ли точка с заданными координатами в заштрихованную область:

 

Задание 3.  

Задание 4.

Вариант 2.  

Задание 1.  

Задание 2.  Написать программу, позволюющую определить, попадет ли точка с заданными координатами в заштрихованную область:

Задание 3.

Задание 4.

Вариант 3.  

Задание 1.  

Задание 2.  Написать программу, позволюющую определить, попадет ли точка с заданными координатами в заштрихованную область:

Задание 3. Написать программу, позволяющую решить следующую задачу.

Задание 4.  

Вариант 4.  

Задание 1.  

Задание 2. Написать программу, позволюющую определить, попадет ли точка с заданными координатами в заштрихованную область:

 

Задание 3. Не используя оператор цикла, написать программу, позволяющую решить следующую задачу.

Задание 4.  

Вариант 5.  

Задание 1.   

Задание 2.  Написать программу, позволюющую определить, попадет ли точка с заданными координатами в заштрихованную область:

Задание 3.  

Задание 4.  

Вариант 6.  

Задание 1.  

Задание 2.  Написать программу, позволюющую определить, попадет ли точка с заданными координатами в заштрихованную область:

Задание 3.  

Задание 4.

Вариант 7.  

Задание 1.  

Задание 2.  Написать программу, позволюющую определить, попадет ли точка с заданными координатами в заштрихованную область:

Задание 3.  

Задание 4.  

Вариант 8.  

Задание 1.   

Задание 2.  Написать программу, позволюющую определить, попадет ли точка с заданными координатами в заштрихованную область:

Задание 3.  

Задание 4.  

Вариант 9.  

Задание 1.  

Задание 2.  Написать программу, позволюющую определить, попадет ли точка с заданными координатами в заштрихованную область:

Задание 3.  

Задание 4.  

Вариант 10.  

Задание 1.  

Задание 2.  Написать программу, позволюющую определить, попадет ли точка с заданными координатами в заштрихованную область:

Задание 3.

Задание 4.  

Вариант 11.  

Задание 1.  

Задание 2. Написать программу, позволюющую определить, попадет ли точка с заданными координатами в заштрихованную область:

 

Задание 3.   

Задание 4.  

Вариант 12.  

Задание 1.  

Задание 2. Написать программу, позволюющую определить, попадет ли точка с заданными координатами в заштрихованную область:

 

Задание 3.  

Задание 4.  

Вариант 13.  

Задание 1.  

 

Задание 2.   Написать программу, позволюющую определить, попадет ли точка с заданными координатами в заштрихованную область:

Задание 3.

Задание 4.  

Вариант 14.  

Задание 1.  

Задание 2. Написать программу, позволюющую определить, попадет ли точка с заданными координатами в заштрихованную область:

Задание 3.

Задание 4.  

Вариант 15.  

Задание 1.  

Задание 2.  Написать программу, позволюющую определить, попадет ли точка с заданными координатами в заштрихованную область:

 

Задание 3.

Задание 4.  

Вариант 16.  

Задание 1.  

 

Задание 2. Написать программу, позволюющую определить, попадет ли точка с заданными координатами в заштрихованную область:

Задание 3.  

Задание 4.

Вариант 17.  

Задание 1.  

Задание 2. Написать программу, позволюющую определить, попадет ли точка с заданными координатами в область I:

Задание 3.  

Задание 4.  

Вариант 18.  

Задание 1.  

Задание 2.  Написать программу, позволюющую определить, попадет ли точка с заданными координатами в область I:

Задание 3.

 

Задание 4.

Вариант 19.  

Задание 1.  

Задание 2. Написать программу, позволюющую определить, попадет ли точка с заданными координатами в одну из областей I или III:

Задание 3.

Задание 4.

Вариант 20.  

Задание 1.  

Задание 2.  

Задание 3.

Задание 4.

Вариант 21.  

Задание 1.  

Задание 2.  

Задание 3.

Задание 4.

Вариант 22.  

Задание 1.  

Задание 2.

Задание 3.

Задание 4.

Вариант 23.  

Задание 1.  

Задание 2.

Задание 3.  

Задание 4.

Вариант 24.  

Задание 1.  

 

Задание 2.  

Задание 3.   

Задание 4.

Вариант 25.  

Задание 1.  

Задание 2.

Задание 3.  

Задание 4.  


Дата добавления: 2020-12-12; просмотров: 127; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!