Оператор условной передачи управления if

Для выбора одной из ветвей вычислений применяется оператор условного перехода:

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

elseоператор2;

вычисляется выражение, и если его значение не равно 0 (истинно), то выполняется оператор1, иначе – оператор2, например:

if(x>y) max = x;

else max = y;

Если операторы1, 2 содержат более одного оператора, то они заключаются в фигурные скобки { }, т.е. применяется блок.

Конструкция else… может отсутствовать и такую форму называют сокращенной, тогда в случае ложности условия управление передается на следующий за if оператор.

Если операторы 1, 2 в свою очередь являются операторами if, то такой оператор называют вложенным, при этом ключевое слово else принадлежит ближайшему предшествующему if.

Например, найти наибольшее значение из трех чисел x, y, z:

if (x>y)

if (x>z) max=x;

else max=z;

else if(y>z) max=y;

else max=z;

Операции сравнения: < (меньше), <= (меньше или равно), > (больше), >= (больше или равно), != (не равно), = = (равно). Пары символов разделять нельзя.

Операции сравнения бинарные, их общий вид:

Операнд 1знак операцииОперанд 2

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

Логические операции используются в качестве условий при составлении более сложных выражений. Приведем их перечень в порядке убывания приоритета:

! (отрицание или логическое НЕ – унарная операция), &&(конъюнкция или логическое И), || (дизъюнкция или логическое ИЛИ).

Например: (0<x)&&(x<=100)

((!x)&&(y>0)||((z==1)&&(k>0))

Выражения вычисляются слева направо, причем их вычисление прекращается, как только результат становится известен.

Тернарная (условная) операция ?:

Ее общая форма:

Операнд 1?Операнд 2:Операнд 3

Если значение операнда 1 истинно (не равно 0), то результатом операции является операнд 2, иначе – операнд 3.

Например, найти наибольшее из двух чисел: max = a>b ? a : b;

Оператор выбора switch

Общая форма оператора выбора (переключателя):

switch(выражение){

caseconst_1: операторы; break;

caseconst_N: операторы;break;

default:операторы;

}

Вычисляется выражение и проверяется, совпадает ли его результат со значением одной из констант. При совпадении выполняются операторы этого case. Значениями const_1,…, const_N могут быть только целые или символьные константы. Конструкция default выполняется, если результат выражения не совпал ни с одной из констант, и может отсутствовать. Оператор break выполняет досрочный выход из switch (после выполнения ветви case все остальные будут опущены). Если оператор break в case не записан, то будут выполняться операторы следующих ветвей case до появления оператора break, либо до завершения оператора switch.

Например:

switсh(i) {

case 1: f=pow(x,2); break;

case 2: f=fabs(x); break;

case 3: f=sqrt(x); break;

default: printf(“Ошибка!”); exit(1);

}

f=f+5;

Пример выполнения задания

Ввести значения исходных данных x, y и z. Вычислить значение функции

Оператор условной передачи управления if - student2.ru Оператор условной передачи управления if - student2.ru

Предусмотреть вывод сообщения, по какой ветви выполнялись вычисления.

Текст программы может иметь седующий вид (в комментариях указаны действия по вводу-выводу в потоках, набираемые вместо записанных):

#include <conio.h> // #include <iostream.h>

#include <stdio.h>

#include <math.h>

void main()

{

double x, y, z, u;

puts("Input x, y, z"); // cout << "Input x, y, z" << endl;

scanf("%lf%lf%lf",&x, &y, &z); // cin >> x >> y >> z;

if (x*y > z){

u = x*sin(y);

puts(" x*y > z"); // cout << " x*y > z" << endl;

}

else {

u = y*cos(x);

puts(" x*y <= z"); // cout << " x*y <= z" << endl;

}

printf("\n\t Rezult U = %8.6lf", u); // cout << "\n\t Rezult U = " << u;

puts("\nPress any key ... "); // cout <<"\nPress any key ... " << endl;

getch();

}

Результаты выполнения программы для различных исходных данных, вводимых в одной строке, разделяя их пробелами, могут иметь следующий вид:

1 вариант введенные значения соответсвуют первому условию:

Оператор условной передачи управления if - student2.ru

2 вариант введенные значения соответсвуют второму условию:

Оператор условной передачи управления if - student2.ru

Индивидуальные задания

Составить программу для вычисления значения rez в зависимости от поставленного условия.

Для получения результатов подобрать исходные данные так, чтобы выполнялись все возможные ветви алгоритма. Перед выводом полученного результата должно выводиться сообщение о ветви, при прохождении которой он получен. Обратите внимание, что возможен случай, при котором исходные данные не будут подходить ни для одного из предложенных условий.

1. rez = Оператор условной передачи управления if - student2.ru

2. rez = Оператор условной передачи управления if - student2.ru

3. rez = Оператор условной передачи управления if - student2.ru

4. rez = Оператор условной передачи управления if - student2.ru

5. rez = Оператор условной передачи управления if - student2.ru

6. rez = Оператор условной передачи управления if - student2.ru

7. rez = Оператор условной передачи управления if - student2.ru

8. rez = Оператор условной передачи управления if - student2.ru

9. rez = Оператор условной передачи управления if - student2.ru

10. rez = Оператор условной передачи управления if - student2.ru .

11. rez = Оператор условной передачи управления if - student2.ru Оператор условной передачи управления if - student2.ru

12. rez = Оператор условной передачи управления if - student2.ru

13. rez = Оператор условной передачи управления if - student2.ru

14. rez = Оператор условной передачи управления if - student2.ru

15. rez = Оператор условной передачи управления if - student2.ru

16. rez = Оператор условной передачи управления if - student2.ru

Задание №3. Реализация циклических алгоритмов

Цель работы: изучить циклические операторы while, do-while, for, научиться реализовывать циклические алгоритмы. Составить и отладить программу.

Теоретические сведения

Под циклом понимается многократное выполнение одних и тех же операторов при различных значениях промежуточных данных. Число повторений может быть задано в явной или неявной формах. Для организации повторений в языке C++ используются три различных оператора цикла.

1. Оператор цикла с предусловием

while (выражение)

код цикла

организует повторение операторов кода цикла до тех пор, пока выражение истинно (не равно 0), если выражение = 0 (ложно) при первом входе, то код цикла не выполнится ни разу. Если код цикла состоит более чем из одного оператора, то организуется блок.

2. Оператор цикла с постусловием

do

код цикла

while (выражение);

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

3. Оператор с предусловием и коррекцией

for (выражение 1;выражение 2;выражение 3)

код цикла

где выражение 1 – начальное значение параметра цикла; выражение2 – проверка условия на продолжение цикла; выражение3 – изменение (коррекция) параметра цикла.

Вначале вычисляется выражение 1, затем проверяется выражение 2, если оно – истинно, то выполня­ет­ся код цикла, затем производится коррекция в выражении 3, и так до тех пор, пока выражение 2 не примет значение «ложь».

Досрочный выход из операторов цикла выполняет оператор break, а оператор continue выполняет передачу управления в головной оператор цикла.

Пример выполнения задания

Написать и отладить программу вывода всех значений функции S(x) для аргумента х, изменяющегося в интервале от а до b c шагом h и заданном n.

Оператор условной передачи управления if - student2.ru .

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

#include <stdio.h> // include <iostream.h>

#include <conio.h>

void main()

{

double a, b, x, h, r, s;

int n, zn = -1, k;

puts("Input a,b,h,n"); // cout << "Input a,b,h,n" << endl;

scanf("%lf%lf%lf%d", &a, &b, &h, &n); // cin >> a >> b >> h >> n;

for(x = a; x<=b; x+=h) {

r = s = 1;

for(k = 1; k<=n; k++) {

r=zn*r*x/k;

s+=r;

}

printf("\n x= %8.2lf sum= %8.5lf", x,s);

// cout << "\n x= " << x << " sum= " << s;

}

puts("\nPress any key ... "); // cout << "\nPress any key ... " << endl;

getch();

}

Результат программы с введенными в одной строке значениями a=0.1, b=1.0, h=0.2 и n=10, будет иметь следующий вид:

Оператор условной передачи управления if - student2.ru

Индивидуальные задания

Для каждого x, изменяющегося от a до b с шагом h, найти значения функции Y(x), суммы S(x) и |Y(x)–S(x)| и вывести в виде таблицы. Значения a, b, h и n вводятся с клавиатуры. Так как значение S(x) является рядом разложения функции Y(x), при правильном решении значения S и Y для заданного аргумента x (для тестовых значений исходных данных) должны совпадать в целой части и в первых двух-четырех позициях после десятичной точки.

Работу программы проверить для a = 0,1; b = 1,0; h = 0,1; значение параметра n выбрать в зависимости от задания.

1. Оператор условной передачи управления if - student2.ru , Оператор условной передачи управления if - student2.ru .

2. Оператор условной передачи управления if - student2.ru Оператор условной передачи управления if - student2.ru.

3. Оператор условной передачи управления if - student2.ru Оператор условной передачи управления if - student2.ru .

4. Оператор условной передачи управления if - student2.ru Оператор условной передачи управления if - student2.ru .

5. Оператор условной передачи управления if - student2.ru Оператор условной передачи управления if - student2.ru .

6. Оператор условной передачи управления if - student2.ru Оператор условной передачи управления if - student2.ru .

7. Оператор условной передачи управления if - student2.ru , Оператор условной передачи управления if - student2.ru .

8. Оператор условной передачи управления if - student2.ru , Оператор условной передачи управления if - student2.ru .

9. Оператор условной передачи управления if - student2.ru , Оператор условной передачи управления if - student2.ru .

10. Оператор условной передачи управления if - student2.ru , Оператор условной передачи управления if - student2.ru .

11. Оператор условной передачи управления if - student2.ru , Оператор условной передачи управления if - student2.ru .

12. Оператор условной передачи управления if - student2.ru , Оператор условной передачи управления if - student2.ru .

13. Оператор условной передачи управления if - student2.ru , Оператор условной передачи управления if - student2.ru .

14. Оператор условной передачи управления if - student2.ru , Оператор условной передачи управления if - student2.ru .

15.Оператор условной передачи управления if - student2.ru, Оператор условной передачи управления if - student2.ru.

16. Оператор условной передачи управления if - student2.ru Оператор условной передачи управления if - student2.ru .

Задание №4. Обработка одномерных массивов

Цель работы: изучить составной тип данных – массив. Написать и отладить программу с использованием одномерных массивов.

Теоретические сведения

Массив – конечная последовательность данных одного типа. Массив – объект сложного типа, каждый элемент которого определяется именем (ID) и целочисленным значением индекса (номера), по которому к элементу массива производится доступ. Рассмотрим одномерные массивы.

Внимание! Индексы массивов в языке С/С++ начинаются с 0.

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

тип ID массива [размер];

где размер – указывает количество элементов в массиве. Размер массива может задаваться константой или константным выражением. Для использования массивов переменного размера существует отдельный механизм – динамическое выделение памяти.

Примеры декларации массивов:

int a[5];

double b[4] = {1.5, 2.5, 3.75};

в целочисленном массиве а первый элемент а[0], второй – а[1], …, пятый – а[4]. Для массива b, состоящего из действительных чисел, выполнена инициализация, причем элементы массива получат следующие значения: b[0]=1.5, b[1]=2.5, b[2]=3.75, b[3]=0.

В языке С/С++ не проверяется выход индекса за пределы массива. Корректность использования индексов элементов массива должен контролировать программист.

Примеры описания массивов:

const Nmax=10; – задание максимального значения;

typedef double mas1[Nmax*2]; – описание типа одномерного массива;

mas1 a; – декларация массива а типа mas1;

int ss[10]; – массив из десяти целых чисел.

Элементы массивов могут использоваться в выражениях так же, как и обычные переменные, например:

f = 2*a[3] + a[Ss[i] + 1]*3;

a[n] = 1 + sqrt(fabs(a[n–1]));

Пример выполнения задания

В статическом массиве А размером N (не более 20), состоящем из целых чисел найти количество четных чисел и их сумму. Размер массива и его элементы вводятся с клавиатуры.

Текст программы с использованием ввода-вывода в потоках может иметь следующий вид:

#include <iostream.h>

#include <conio.h>

void main()

{

int a[20], n, i, kol = 0, s = 0;

cout << "\t Input N (<=20) ";

cin >> n;

cout <<"\n\t Massiv A" << endl;

for(i = 0; i < n; i++) {

cout << "\t a[ " << i+1 << " ] = ";

cin >> a[i];

}

for(i=0; i<n;i++)

if(a[i] % 2 == 0){

kol++;

s += a[i];

}

cout << "\n Kol-vo = " << kol << "\t Summa = " << s << endl;

cout << "\n Press any key ... " << endl;

getch();

}

Результат выполнения программы может иметь следующий вид:

Оператор условной передачи управления if - student2.ru

Индивидуальные задания

В одномерном целочисленном массиве (размер массива (не больше 20) и значения его элементов вводить с клавиатуры) вычислить:

1. Произведение элементов массива, расположенных между максимальным и минимальным элементами.

2. Сумму элементов массива, расположенных между первым и последним нулевыми элементами.

3. Сумму элементов массива, расположенных до последнего положительного элемента.

4. Сумму элементов массива, расположенных между первым и последним положительными элементами.

5. Произведение элементов массива, расположенных между первым и вторым нулевыми элементами.

6. Сумму элементов массива, расположенных между первым и вторым отрицательными элементами.

7. Сумму элементов массива, расположенных до минимального элемента.

8. Сумму целых частей элементов массива, расположенных после последнего отрицательного элемента.

9. Сумму элементов массива, расположенных после последнего элемента, равного нулю.

10. Сумму модулей элементов массива, расположенных после минимального по модулю элемента.

11. Сумму элементов массива, расположенных после минимального элемента.

12. Сумму элементов массива, расположенных после первого положительного элемента.

13. Сумму модулей элементов массива, расположенных после первого отрицательного элемента.

14. Сумму модулей элементов массива, расположенных после первого элемента, рав­ного нулю.

15. Сумму положительных элементов массива, расположенных до максимального элемента.

16. Произведение элементов массива, расположенных между первым и последним отрицательными элементами.

Задание №5. Обработка двухмерных динамических массивов. Функции пользователя

Цель работы: изучить понятие «указатель», правила создания и приемы обработки динамических массивов на примере двухмерного массива. Познакомиться с механизмом составления и организации взаимодействия пользова­тельских функций, составить и отладить программу.

Теоретические сведения

Наши рекомендации