- •Н. А. Аленский основы программирования
- •§ 1. Структура простой программы. Ввод, вывод
- •1.1. Пример первой программы
- •1.2. Директива препроцессора #include
- •1.3. Структура программы
- •1.4. Комментарии
- •1.5. Ключевые слова и идентификаторы
- •1.6. Простой ввод, вывод
- •§ 2. Оператор if
- •2.1. Полная форма
- •2.2. Сокращённая форма
- •2.3. Особенности оператора
- •Задачи и упражнения
- •§ 3. Выражения
- •3.1. Константы
- •Непосредственно записать в выражении;
- •3.2. Операции и их приоритет
- •3.3. Операции отношения и логические операции
- •3.4. Особенности операции присваивания
- •3.5. Тернарная операция (?)
- •Задачи и упражнения
- •§ 4. Оператор выбора switch
- •Задачи и упражнения
- •§ 5. Операторы цикла
- •5.1. Оператор while c предусловием
- •Правила использования и особенности оператора while
- •5.2. Оператор цикла do … while c постусловием
- •5.3. Оператор for
- •5.4. Операторы continue и break
- •Задачи и упражнения
- •§ 6. Введение в одномерные массивы
- •6.1. Что такое массив. Объявление одномерного массива
- •6.2. Способы определения массивов
- •6.3. Вывод одномерного массива. Функции printf и сprintf
- •6.4. Некоторые типы простых задач при работе с массивами
- •Задачи и упражнения
- •§ 1. Функции без результатов. Передача параметров по значению
- •1.1. Примеры. Правила оформления и вызова функций
- •Void line2(int Len, y, char ch) // ошибка,
- •1.2. Формальные и фактические параметры
- •1.3. Передача параметров по значению
- •§ 2. Функции типа void с несколькими результатами
- •2.1. Пример
- •2.2. Что такое ссылочный тип
- •2.3. Возврат значений из функции с помощью ссылочного типа
- •Задачи и упражнения
- •§ 3. Функции с одним результатом. Оператор return
- •Задачи и упражнения
- •§ 4. Одномерные массивы в функциях. Сортировка массива
- •Задачи и упражнения.
- •§ 5. Область действия имён. Локальные и глобальные имена
- •§ 6. Дополнительные возможности функций
- •Встраиваемые функции (inlineфункции)
- •6.2. Параметры по умолчанию
- •6.3. Перегрузка функций
- •§ 1. Примеры
- •§ 2. Класс. Поля и методы класса
- •§ 3. Создание объектов. Конструктор
- •Задачи и упражнения.
- •Глава 4 простые типы данных § 1. Целый тип
- •1.1. Битовые операции
- •1.2. Использование битовых операций
- •1.3. Упаковка и распаковка информации
- •Задачи и упражнения.
- •§ 2. Логический тип
- •§ 3. Символьный тип
- •Глава 5 матрицы (двухмерные массивы) § 1. Объявление, способы определения
- •§ 2. Вывод матриц
- •§ 3. Типы алгоритмов на обработку матриц
- •3.1. Построчная обработка
- •3.2. Обработка матрицы по столбцам
- •3.3. Обработка всей матрицы
- •3.4. Обработка части матрицы
- •3.5. Преобразование матрицы
- •Упражнения.
- •3.6. Построение матриц
- •§ 4. Передача матрицы в качестве параметра функции
- •Задачи и упражнения.
- •Б. Обработка матрицы по столбцам.
- •Даны две матрицы a и b одинаковой размерности. Построить матрицу с, каждый элемент которой определяется по правилу:
- •Список рекомендуемой литературы
- •Сборники задач по программированию
- •Оглавление
- •Задачи и упражнения …….……………………………………...12
- •3.1. Константы ………………………………………………...…14
5.2. Оператор цикла do … while c постусловием
Ту же программу напишем с помощью другого оператора цикла:
RES=1;
do
RES*=mult; // или RES=RES*mult;
while (RES< to);
cout<<"\nResult= "<<RES;
Его общий вид такой:
do
{ оператор1;
оператор2;
…
операторN;
}
while (выражение);
Работает оператор следующим образом. Сначала выполняется тело цикла, а затем вычисляется и проверяется значение выражения. Если оно, как и в первом операторе, истинно (не равно нулю), то операторы повторяются. В противном случае цикл прекращается.
В отличие от while повторяющаяся часть обязательно выполнится хотя бы один раз. В нашем примере, даже если введём, например, отрицательное значение to, а mult=2, цикл выполнится один раз, то есть RES станет равным 2, и выйдем из цикла.
Вторая особенность в том, что значения переменных выражения не обязательно надо определять до цикла, это можно сделать внутри его.
5.3. Оператор for
Такой оператор есть практически во всех языках программирования, но в C++ он имеет больше возможностей. Например, рассмотрим следующий фрагмент программы для вывода квадратов и кубов чисел от a до b с шагом h:
float a,b,h,x; … x=a;
while (x<b)
{ printf ( “%4.1f %7.2f %10.3f \n”, x, x*x, x*x*x);
x+=h;
}
Его можно записать по–другому:
for (x=a; x<b; x+=h)
printf ( “%4.1f %7.2f %10.3f \n”, x, x*x, x*x*x);
Этот вариант работает аналогично предыдущему с оператором while.
Общий вид оператора цикла for следующий:
for (выражение1; выражение2; выражение3)
{ оператор1;
оператор2;
…
операторK;
}
В первом выражении записываются одна или несколько разделённых запятой операций присваивания для установки начальных значений некоторым переменным (в примере — переменной x). Эта часть выполняется один раз вне данного цикла, то есть в цикле не повторяется. Начальные значения можно определить до оператора for, и тогда выражение1 может отсутствовать, но символ “;” обязательно записывается. Наш цикл можно записать так:
x=a;
for ( ; x<b; x+=h )
…
Второе выражение, как правило, является логическим, но не обязательно, (2.4) и определяет условие, при истинности которого цикл продолжается. Если условий несколько, они соединяются логическими операциями &&, ||, !. Вычисление и проверка этого выражения, в отличие от первого, повторяется каждый раз перед выполнением тела цикла. Поэтому если в самом начале оно ложно, код цикла может вообще не выполняться. Это выражение также может отсутствовать. Cимвол “точка с запятой” в таком случае записывается обязательно. Тогда условие выхода из цикла можно записать внутри тела цикла, а выход осуществляется с помощью break. Для нашего примера это может выглядеть таким образом:
for (x=a; ; x+=h)
{ if (x>=b) break;
printf ( “%4.1f %7.2f %10.3f \n”, x, x*x, x*x*x);
}
С помощью третьего выражения заголовка цикла изменяется значение одной или нескольких переменных. Она, как и вторая часть, повторяется и может также отсутствовать. В последнем случае символ “;” сохраняется, а изменение переменных можно записать в теле цикла. Например:
for ( x=a; x<b; )
{ printf ( “%4.1f %7.2f %10.3f \n”, x, x*x, x*x*x);
x+=h;
}
Отметим другие особенности оператора for.
-
Могут отсутствовать все три выражения заголовка цикла. Например, ввод символов с клавиатуры до символа “.” (cм. 5.1) можно записать так:
for ( ; ; )
{ ch=getchar();
if (ch==’.’) break;
}
-
Наоборот, может отсутствовать тело цикла. И только в этом случае после заголовка оператора for записывается символ “;”. Это можно использовать, например, для создания задержки:
for (t=0; t<10000; t++);
Тело цикла можно записать в некоторых случаях в третьей части заголовка.
П р и м е р. Суммирование элементов одномерного массива можно выполнить одним из следующих способов:
int a[5]={1, 22, -3, -4, 5}; // объявление и инициализация массива.
/*1 */ int Sum=0; for ( int i=0; i<5; i++ )
Sum=Sum+a[i];
/*2 */ int i, Sum; for ( Sum=0,i=0; i<5; i++ )
Sum+=a[i];
/*3 Здесь отсутствует тело цикла, и только в этом случае в конце заголовка записывается “;”. Важен порядок операторов третьей части. Почему? */
int i, Sum; for ( Sum=0, i=0; i<5; Sum+=a[i] , i++);
/*4 */ int i, Sum; for ( Sum= i=0; i<5; Sum+=a[i++] );
// 5 Отсутствуют все три части заголовка оператора цикла
int Sum=0, i=0;
for (; ; ) { if ( i>=5) break;
Sum+=a[i];
i++;
}
Из приведенных вариантов наиболее простым для понимания и естественным, записанным в стиле языка Pascal, является 1й вариант, а компактным, профессиональным — вариант 4.
Замечание. Подробно о массивах см. в § 6.