Лекция №3
Тема:
Базовые конструкции программирования в С/С++
ПЛАН
3 Лекция №3
3.1 Общие сведения
3.2 Операторы ветвления
3.3 Операторы цикла
3.4 Операторы передачи управления
Время:
4 ч.
Литература:
[4] с.59-86.
Общие сведения
Программу любой сложности можно составить, используя три базовые структуры программирования:
следование;
ветвление;
цикл;
Следование – последовательное выполнение двух и более операторов.
Ветвление задает выполнение того или иного оператора в зависимости от условия.
Цикл задает многократное выполнение оператора.
Базовые конструкции программирования могут вкладываться друг в друга произвольным образом, например, внутри цикла может быть ветвление.
Цель использования базовых конструкций – получить программу с простой и понятной структурой. Такие программы легко читать, отлаживать и вносить в них изменения.
В языке C/C++ реализованы следующие конструкции программирования:
Простые операторы.
Оператор-выражение – любое выражение, завершающееся точкой с запятой. Действие такого оператора заключается в вычислении выражения.
Примеры
x++;
a*=b;
Пустой оператор – оператор, состоящий только из символа точка с запятой. Используется там, где по синтаксису требуется оператор, но по логике программы он должен отсутствовать.
Составной оператор – группа операторов, заключенных в фигурные скобки. Примечание – Каждый оператор завершается символом ; после закрывающей фигурной скобки точку с запятой не ставят.
Блок – составной оператор, который содержит определения. Величины, определенные в блоке действуют только в пределах этого блока.
Далее рассмотрим операторы для организации нелинейных программ (разветвленных и циклических).
Операторы ветвления
К операторам ветвления в C/C++ относятся: условный оператор if и переключатель switch.
Условный оператор if.
Условный оператор if используется для разветвления вычислительного процесса на два направления.
Полная форма оператора:
if (условие) оператор1; else оператор2;
Действие: Вычисляется выражение условия, если оно истинно, то выполняется оператор1, в ином случае – оператор2;
Сокращенная форма оператора:
if (условие) оператор1;
Действие: Вычисляется выражение условия, если оно истинно, то выполняется оператор1, в ином случае управление передается следующему за if оператору.
В качестве условия можно использовать арифметическое выражение или указатель. Особенность условного выражения: условие считается истинным (true), если имеет ненулевое значение, ложным (false) – если равно нулю.
Примеры разветвленных программ:
Пример 1. Определить, является введенное число четным или нечетным (в качестве условия используем такой признак: число будет четным, если остаток от деления его на 2 равен 0).
#include <iostream.h>
void main()
{
int x;
cout << "Ввести x=";
cin >> x;
if (x%2!=0) cout << "Число нечетное\n";
else cout << "Число четное\n";
}
Примечание – Так как истинному значению соответствует ненулевой результат условия, а ложному – нулевой, то строку с оператором if можно записать так: if (x%2) cout << "Число нечетное\n";.
Пример 2. Программа для решения квадратного уравнения.
#include <iostream.h>
#include <math.h>
void main()
{
float a,b,c,d,x1,x2;
cout << "Коэффициенты=";
cin >> a >> b >> c;
d=b*b-4*a*c;
if (d<0)
{
cout << "Нет корней" << endl ;
}
else
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
cout << "x1=" << x1 << endl;
cout << "x2=" << x2 << endl;
}
}
Вариант программы решения квадратного уравнения (для ввода-вывода используются функции scanf и printf):
#include <stdio.h>
#include <math.h>
void main()
{
float a,b,c,d,x1,x2;
printf("Коэффициенты=");
scanf("%f%f%f",&a,&b,&c);
d=b*b-4*a*c;
if (d<0)
{
printf("Нет корней\n");
}
else
{
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("x1=%f\n",x1);
printf("x2=%f\n",x2);
}
}
Если нужно проверить несколько условий, то их объединяют логическими операциями (&& – И, || – ИЛИ).
Примеры сложных условий:
(0<x && 12<x)– истинно, если x соответствует неравенству 0<x<12
(a=b || b=c) – истинно, если истинно или условие a=b или условие b=c
Оператор-переключатель switch
Предназначен для разветвления вычислительного процесса на несколько направлений.
Формат оператора:
switch (выражение) {
case константа1: операторы1;
case константа2: операторы2;
. . .
case константаN: операторыN;
default: операторы
}
Действие: Вычисляется выражение, затем его значение последовательно сравнивается с константами, идущими за case. При первом же совпадении выполняются операторы, соответствующие данной константе. Далее выполняются операторы всех последующих вариантов, пока не появится оператор перехода или не закончится переключатель. Операторы в разделе default выполняются, если значение выражения не совпало ни с одной константой после case. Раздел default может отсутствовать, в этом случае при несовпадении значения выражения с константами, переключатель не выполняет никаких действий.
Таким образом, если значение выражение совпало с константой номер K, то выполняются: операторыK, операторыK+1, операторыK+2 … операторыN.
Примечания
1 Выражение и константы должны быть символьного или целочисленного типа.
2 В одном операторе switch не может быть двух одинаковых констант.
3 Чтобы оператор switch мог работать как альтернатива (аналогично оператору case в Паскале), необходимо, чтобы каждая группа операторов заканчивалась оператором break:
switch (выражение) {
case константа1: операторы1;break;
case константа2: операторы2;break;
. . .
case константаN: операторыN;break;
default: операторы
}
Пример:
Программа-калькулятор на 4 арифметических действия. С клавиатуры вводится первое число, через пробел – операция, затем через пробел – второе число. После нажатия на Enter выводится результат. Если введена недопустимая операция, то появится соответствующее сообщение.
#include <iostream.h>
#include <conio.h>
void main()
{
char op;
int a,b;
float x;
clrscr();
cout<<"Ввести 2 числа и операцию:";
cin >>a>>op>>b;
switch (op) {
case '+': x=a+b;break;
case '-': x=a-b;break;
case '*': x=a*b;break;
case '/': x=a/b;break;
default : cout<<"Недопустимая операция\n"; return;
}
cout <<"Результат="<<x;
}