- •Н. А. Аленский основы программирования
- •§ 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
Правила использования и особенности оператора while
-
Значения всех переменных, входящих в выражение, должны быть определены до выполнения оператора while. Для этого их можно ввести (переменная to), задать в виде константы (RES), вычислить с помощью выражения, обращения к функции или задать другими способами. В противном случае переменная принимает случайное значение и результат непредсказуем. В нашем примере такая ошибка будет иметь место, если, например, забыть ввести переменную to или не записать RES=1.
-
Выражение вычисляется и анализируется в начале перед выполнением тела цикла. Поэтому тело цикла может ни разу не выполнится, если в самом начале на первом шаге выражение ложно. Например, это произойдёт в нашем примере, если ввести в качестве переменной to отрицательное число.
-
Одна или несколько переменных выражения должны меняться в операторах тела цикла. При этом изменение должно быть таким, чтобы на некотором шаге выражение стало ложным. В противном случае эта часть программы зациклится, то есть будет повторяться бесконечное количество раз. Прекратить выполнение программы (в том числе и в случае зацикливания) можно с помощью клавиш Ctrl+F2. Такая ситуация будет иметь место, например, если записать
RES=1;
while (RES< to)
R*=mult;
и ввести в качестве переменной to значение, большее 1. Здесь ни RES, ни to не меняются.
-
Как и в случае с if, в выражении после while можно использовать операцию присваивания. Эта особенность делает программу компактнее, “красивее”, но в то же время усложняет её. Поэтому для начинающих эту возможность можно не использовать и программировать в более простом стиле. Например:
int main()
{ cout<<" h SUM ";
// профессиональный стиль
float h=3, SUM=0;
while ((h –= 0.5)>0)
{ SUM+=h;
printf("\n %5.1f %6.2f",h,SUM);
}
// или более простой вариант в стиле Pascal
h=3; h –= 0.5; // или h=2.5
SUM=0;
cout<<"\n----Pascal---";
while (h>0)
{ SUM+=h;
printf("\n %5.1f %6.2f",h,SUM);
h –= 0.5;
}
getch(); return 0;
}
Второй, более простой, вариант помогает понять, как работает цикл, если используется присваивание в выражении для while.
-
В теле цикла может не быть никаких операторов. Например,
char ch; while ((ch=getchar()) != ‘.’);
вводит с клавиатуры символы, пока не введём символ “.” (точку). Внутренние скобки нужны, так как операция присваивания имеет меньший приоритет, чем сравнение.
П р и м е р. Ввести координаты последовательности точек плоскости, то есть последовательность пар чисел x, y, каждая из которых определяет точку плоскости. Ввод и обработка прекращается, если введём x=0 и y=0. Найти K1 — количество точек первой четверти и K2 — количество точек 3-й четверти.
1–й вариант программы:
float x,y; int K1=0, K3=0;
cin>>x>>y; // Ввод координат первой точки вне цикла
while (!(x==0 && y==0))
{ if (x>=0 && y>=0) K1++;
else if (x<=0 && y<=0) K3++;
cin>>x>>y; // Ввод координат точек внутри цикла
}
cout<<"K1="<<K1<<" K3="<<K3;
Во 2м варианте используется так называемый вечный цикл, выход из которого осуществляется с помощью оператора break.
K1=0, K3=0;
while (1)
{ cin>>x>>y;
if(x==0 && y==0)
break; // Выход из цикла,
// то есть управление передаётся на cout
if (x>=0 && y>=0) K1++;
else if (x<=0 && y<=0) K3++;
}
cout<<"K1="<<K1<<" K3="<<K3;