- •Н. А. Аленский основы программирования
- •§ 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
3.4. Особенности операции присваивания
1) В простейшем и часто используемом случае она похожа на присваивание языка Pascal. Только вместо двух символов (:=) используется один символ “=” и в общем виде выглядит следующим образом:
переменная=выражение;
В этом случае присваивание можно считать самостоятельным оператором. Слева всегда записывается только переменная, поэтому ни обращение к функции, ни константу записать нельзя. Справа как частный случай выражения допускается одна константа (x=0) или только обращение к функции (y=abs(x)).
2) Можно использовать так называемое многочисленное присваивание, когда значение одного и того же выражения присваивается нескольким переменным следующим образом:
Переменная1=Переменная2=…=ПеременнаяN=Выражение;
Например, оператор R=r=v=x+y; трём переменным присваивает одно и то же значение суммы двух чисел. Напомним, что R и r — это разные переменные.
3) Для более компактной записи присваивания разрешается использовать сокращённые операторы.
Например, MySum=MySum+Number1; можно кратко записать так: MySum += Number1; Такого вида сокращения можно использовать для арифметических и битовых бинарных операций (см. в 3.2 группу 14). В общем виде
переменная = переменная операция выражение;
где слева и справа от знака = одна и та же переменная, можно записать компактнее:
переменная операция= выражение;
Здесь идентификатор переменной записывается один раз, между операцией и символом “=” не должно быть пробела. В чём преимущество такой записи? Не надо дважды повторять имя одной и той же переменной.
Такая запись предпочтительнее, если используется длинный идентификатор для переменной. Поэтому в сокращённом операторе Y*=a+b особого смысла нет, можно для начинающих использовать обычную, более понятную форму: Y=Y*(a+b);
4) Для увеличения или уменьшения на единицу можно использовать операции инкремент (++) и декремент( - -). Эти операции могут стоять как перед операндом (префиксная), так и после него (постфиксная). Их можно использовать как самостоятельно, так и в выражении.
При самостоятельном использовании префиксная и постфиксная операции выполняются одинаково, то есть не важно, где стоит знак операции. Например, ++k; и k++; работают одинаково, и это равносильно более простой и понятной записи k=k+1; как принято в других языках. C помощью сокращённого присваивания это же можно записать и так: k+=1; Аналогично, number; и number ; равносильны number=number-1; или number-=1.
В выражениях префиксная и постфиксная операции различаются.
В случае префиксной операции сначала изменяется значение переменной, перед которой стоит операция, а затем используется новое изменённое значение. Например,
int X=2, Y=5, Result; Result= X*(++Y); или с учётом приоритета Result=X*++Y; выполняется следующим образом: сначала увеличивается значение Y, то есть Y=Y+1, и при умножении используется новое значение Y, равное 6. В результате получим 2*6=12, то есть Result примет значение 12.
В случае постфиксной операции сначала используется старое значение переменной, после которой стоит операция, а затем оно изменяется. Например, пусть int X=2, Y=5, Result; Result= X*Y++; Сначала вычисляется произведение со старым значением Y, то есть Result примет значение 2*5=10, а затем значение Y увеличится и станет равным 6.
Пусть int X=2, Y=5, Result; Интерес представляет следующая запись: Result=X+++Y; Какая здесь операция — постфиксная для X или префиксная для Y? Это равносильно Result=(X++)+Y; то есть сначала выполняется сложение 2+5, а затем увеличивается X. В результате получим значение Result, равное 7, X примет значение 3, а Y не изменится. Во избежание риска в таком случае рекомендуется использовать скобки, то есть вторая запись нагляднее и надёжнее.
Замечание. Начинающие могут не использовать эти возможности, а программировать в стиле Pascal. Например, вместо Result= X*Y++; можно написать: Result= X*Y; Y=Y+1;
5) Ещё одна важная особенность присваивания, не обязательная для начинающих, была описана в 2.5 и будет использоваться при изучении других операторов. Например, в компактной записи cout<<(R=a*10)<<endl; не надо дважды записывать один и тот же идентификатор R. Это равносильно R=a*10; cout<<R<<endl;
Запись R=(W=a)*b; равносильна двум операторам: W=a; R=W*b;