
- •Конспект лекций по предмету
- •Раздел 1. Основы языка.
- •Тема 1. История создания языка Си. Достоинства языка. Использование языка Си.
- •Тема 2.
- •Структура простой программы.
- •Описание переменных.
- •3.Использование комментариев. Читаемость.
- •Зарезервированные слова.
- •Раздел.2 Элементы языка. Выражения.
- •Тема 3.
- •3. Выражения
- •Раздел 3. Операторы языка. Условный оператор if
- •Оператор switch
- •Операторы цикла
- •Цикл с параметром (for)
- •Операторы передачи управления
- •Оператор goto
- •Оператор break
- •Оператор continue
- •Оператор return
- •Раздел 4. Указатели и массивы Указатели
- •Инициализация указателей
- •Присваивание указателю адреса существующего объекта:
- •Присваивание указателю адреса области памяти в явном виде:
- •Присваивание пустого значения:
- •Выделение участка динамической памяти и присваивание её адреса указателю:
- •Внимание!
- •Объявляется массив из 10 указателей на функции без параметров, возвращающих указатели на int.
- •Раздел 5. Строки. Работа со строковыми данными
- •Функции работы со строками и символами
- •Символьные строки и строковые функции
- •Ввод-вывод строк средствами с.
- •1) Scanf, printf – вводит/выводит одно слово:
- •2) Ввести предложение:
- •3) Специальные средства ввода – вывода строк – gets и puts
- •Различия между массивом символов и указателем на строку
- •Массивы строк
- •Функции с для обработки строк
- •Strcat(), strncat(). Соеденение строк.
- •Другие функции для строк(краткое описание)
- •Раздел 6. Структуры. Структуры (struct)
- •Раздел 7. Функции (подпрограммы). Функции
- •Объявление и определение функций
- •Глобальные переменные
- •Возвращаемое значение
- •Параметры функции
- •Передача массивов в качестве параметров
- •Раздел 8. Файлы(потоки) Функции ввода/вывода
- •Открытие потока
- •Ввод/вывод в поток
- •Закрытие потока
- •Обработка ошибок
3. Выражения
Выражения состоят из операндов, знаков операций и скобок и используются для вычисления некоторого значения определённого типа. Каждый операнд является, в свою очередь, выражением или одним из его частных случаев – константой или переменной. Примеры выражений:
(a+0. 12) /6
x && y || !z
(t * sin(x)-1.05e4)/((2 * k + 2) * (2 * k + 3))
Операции выполняются в соответствии с приоритетами. Для изменения порядка выполнения операций используются круглые скобки. Если в одном выражении записано несколько операций одинакового приоритета, унарные операции, условная операция и операции присваивания выполняются справа налево, остальные – слева направо. Например, a = b = c означает a = (b = c), а a + b + c означает (a + b)+c. Порядок вычисления подвыражений внутри выражений не определён: например, нельзя считать, что в выражении (sin (x + 2) + cos (y +1)) обращение к синусу будет выполнена раньше, чем к косинусу, и что x+2 будет вычислено раньше, чем y+1. Результат вычисления выражения характеризуется значением и типом. Например, если a и b – переменные целого типа и описаны так:
Int a = 2, b = 5;
то выражение а + b имеет значение 7 и тип int, а выражение a = b имеет значение, равное помещённому в переменную a (в данном случае 5) и тип, совпадающий с типом этой переменной. Таким образом, в С++ допустимы выражения вида a = b = c: сначала вычисляется выражение b = c, а за тем его результат становится правым операндом для операций присваивания переменной а. В выражение могут входить операнды различных типов. Если операнды имеют одинаковый тип, то результат операции будет иметь тот же тип. Если операнды разного типа, перед вычислениями выполняются преобразования типов по определённым правилам, обеспечивающим преобразование более коротких типов в более длинные для сохранения значимости и точности.
Преобразования бывают двух типов:
Изменяющие внутреннее представление величин (с потерей точности или без потери точности );
Изменяющие только интерпретацию внутреннего представления.
К первому типу относятся, например, преобразование целого числа вещественное (без потери точности) и наоборот (возможно, с потерей точности), ко второму – преобразование знакового целого в без знаковое. В любом случае величины типов char, signed char, unsigned char, short int и unsigned short int преобразуются в тип int, если он может представить все значения, или в unsigned int в противном случае.
После этого операнды преобразуются к типу наиболее длинного из них, и он используется как тип результата.
Раздел 3. Операторы языка. Условный оператор if
Условный оператор if используется для разветвления процесса вычислений на два направления. Формат оператора:
if ( выражение ) оператор_1; [else оператор_2;]
Сначала вычисляется выражение, которое может иметь арифметический тип или тип указателя. Если оно не равно нулю (имеет значение true), выполняется первый оператор, иначе — второй. После этого управление передается па оператор, следующий за условным.
Одна из ветвей может отсутствовать, логичнее опускать вторую ветвь вместе с ключевым словом else. Если в какой-либо ветви требуется выполнить несколько операторов, их необходимо заключить в блок, иначе компилятор не сможет понять, где заканчивается ветвление. Блок может содержать любые операторы, в том числе описания и другие условные операторы (но не может состоять из одних описаний). Необходимо учитывать, что переменная, описанная в блоке, вне блока не существует.
Примеры:
// 1 // 2 // 3 // 4 // 5
if (а<0) b = 1;
if (a<b && (a>d || a==0)) b++; else {b *= ; a = 0;}
if (a<b) {if (a<c) m = a; else m = c;} else {if (b<c) m = b; else m = c;}
if (a++) b++;
if (b>a) max = b; else max = a;
В примере 1 отсутствует ветвь el se. Подобная конструкция называется «пропуск оператора», поскольку присваивание либо выполняется, либо пропускается в зависимости от выполнения условия.
Если требуется проверить несколько условий, их объединяют знаками логических операций. Например, выражение в примере 2 будет истинно в том случае, если выполнится одновременно условие а<Ь и одно из условий в скобках. Если опустить внутренние скобки, будет выполнено сначала логическое И, а потом -ИЛИ.
Оператор в примере 3 вычисляет наименьшее значение из трех переменных. Фигурные скобки в данном случае не обязательны, так как компилятор относит часть el se к ближайшему if.
Пример 4 напоминает о том, что хотя в качестве выражений в операторе i f чаще всего используются операции отношения, это не обязательно.
Конструкции, подобные оператору в примере 5, проще и нагляднее записывать в виде условной операции (в данном случае: max = (b > а) ? b : а;).
Если какая-либо переменная используется только внутри условного оператора, рекомендуется объявить ее внутри скобок, например:
If (int i = fun(t)) a -= i; else a += i:
Объявление переменной в тот момент, когда она требуется, то есть когда ей необходимо присвоить значение, является признаком хорошего стиля и позволяет избежать случайного использования переменной до ее инициализации. Объявлять внутри оператора i f можно только одну переменную. Область ее видимости начинается в точке объявления и включает обе ветви оператора.