![](/user_photo/2706_HbeT2.jpg)
- •Основы программирования
- •Содержание
- •Лабораторная работа №1 Линейные и разветвляющиеся вычислительные процессы
- •Краткие теоретические сведения
- •Классификация данных
- •Декларирование объектов
- •Структура программы
- •Константы
- •Операции Операции выражения
- •Арифметические операции
- •Операция присваивания
- •Сокращенная запись операции присваивания
- •X##; - постфиксную.
- •Преобразование типов операндов арифметических операций
- •Операция приведения типа
- •Операции сравнения
- •Логические операции
- •Побитовые логические операции, операции над битами
- •Операция «,» (запятая)
- •Функции вывода информации
- •Функции ввода информации
- •Ввод - вывод потоками
- •Стандартные математические функции
- •Синтаксис операторов языка Си
- •Операция присваивания
- •Условные операторы
- •If (условие ) оператор1;
- •If (условие1) оператор1;
- •Условная операция "? :"
- •Оператор выбора switch
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Циклические операторы while и do–while
- •Вложенные циклы
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Строки, как одномерные массивы символов
- •Указатели и операции над адресами
- •Операции над указателями (адресная арифметика)
- •Связь указателей и массивов
- •Пример 1: Упорядочить по алфавиту массив строк (не более 20) длиной не более 10 символов в каждой:
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Лабораторная работа №4 Многомерные массивы, динамическое распределение памяти
- •Краткие теоретические сведения
- •Массивы указателей
- •Указатели на указатели
- •Динамическое размещение данных
- •Проверить, является ли введенная строка полиндромом (справа-налево читается также как и слева-направо).
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Вызов функции.
- •Изменение значений параметров.
- •Область действия переменных
- •Классы памяти.
- •Рекурсивные функции.
- •Операция typedef
- •Указатели на функции
- •Примеры работы с функциями
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Декларация структурного типа данных
- •Создание структурных переменных
- •Обращение к полям структур
- •Вложенные структуры
- •Использование typedef
- •Массивы структур
- •Размещение структурных переменных в памяти
- •Пример на использование структур
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Лабораторная работа № 7 Файлы в языке с
- •Краткие теоретические сведения
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Лабораторная работа № 8 Графический режим работы
- •Kраткие теоретические сведения
- •Варианты индивидуальных заданий
- •Контрольные вопросы
- •Команды вставки и удаления (под блоком понимается выделенное подсветкой подмножество символов)
- •Команды работы с блоками
- •Набор текста программы
- •Компиляция, редактирование связей, запуск программы на выполнение
- •Многофайловая компиляция
- •Отладка программы
- •Использование глобальных переменных, объявленных вне файла
- •Литература
X##; - постфиксную.
Если эти операции используются в чистом виде, то различий между постфиксной и префиксной формами нет. Если же они используются в выражении, то в префиксной форме (##x) сначала значение x изменится на 1, а затем будет использовано в выражении; в постфиксной форме (x##) сначала значение используется в выражении, а затем изменяется на 1. Операции над указателями рассмотрим позже.
Пример 1: Пример 2:
int i,j,k; Смысл записи int n,a,b,c,d; Значения
floatx,y;n= 2;a=b=c= 0;
... a= ++n;n=3,a=3
x* = y; x = x*y; a+ = 2; a=5
i+ = 2; i = i+2; b = n++; b=3, n=4
x/ = y+15; x = x/(y+15); b- = 2; b=1
--k k = k-1; c = --n; n=3, c=3
--kk=k-1;c* = 2;c=6
j = i++; j = i; i = i+1; d = n--; d=3, n=2
j= ++i;i=i+1;j=i;d% = 2;d=1
Преобразование типов операндов арифметических операций
В операциях могут участвовать операнды различных типов, в этом случае они преобразуются к общему типу в порядке увеличения их "размера памяти", т.е. объема памяти, необходимого для хранения их значений. Поэтому неявные преобразования всегда идут от "меньших" объектов к "большим". Схема выполнения преобразований операндов арифметических операций:
short, char → int → unsigned → long → double
float →double
Стрелки отмечают преобразования даже однотипных операндов перед выполнением операции, т.е. действуют следующие правила:
- значения типов char иshort всегда преобразуются вint;
- если любой из операндов (a илиb) имеет типdouble, то второй преобразуется вdouble;
- если один из операндов long, то другой преобразуется вlong.
Результатом 1/3 будет «0», чтобы избежать такого рода ошибок необходимо явно изменять тип хотя бы одного операнда, т.е. записывать, например: 1. / 3.
Типы char иint могут свободно смешиваться в арифметических выражениях. Каждая переменная типаchar автоматически преобразуется вint, что обеспечивает значительную гибкость при проведении определенных преобразований символов.
При присваивании значение правой части преобразуется к типу левой, который и является типом результата. И здесь необходимо быть внимательным, т.к. при некорректном использовании операций присваивания могут возникнуть неконтролируемые ошибки. Так, при преобразовании int вchar старший байт просто отбрасывается.
Пусть имеются значения:
float x; int i;
тогда
x=i; и i=x;
приводят к преобразованиям, причем float преобразуется вintс отбрасыванием дробной части. Типdouble преобразуется воfloat округлением. Длинное целое преобразуется в более короткое целое иchar посредством отбрасывания лишних бит более высокого порядка.
При передаче данных функциям также происходит преобразование типов: в частности, char становитсяint, аfloat -double.
Операция приведения типа
В любом выражении преобразование типов может быть u1086 осуществлено явно, для этого достаточно перед выражением поставить в скобках идентификатор соответствующего типа.
Вид записи операции:
(тип) выражение;
ее результат - значение выражения, преобразованное к заданному типу.
Операция приведения типа вынуждает компилятор выполнить указанное преобразование, но ответственность за последствия возлагается на программиста. Рекомендуется использовать эту операцию в исключительных случаях, например:
float x;
int n=6,k=4;
x=(n+k)/3; →x=3, т.к. дробная часть будет отброшена;
x=(float)(n+k)/3; → x=3.333333 - использование операции приведения типа позволяет избежать округления результата деления целочисленных операндов.