Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Практикум по основам программирования. Скалярные типы. Управляющие операторы. Учебное пособие
.pdf
Министерство науки и высшего образования Российской Федерации
НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Ю. В. ТРАКИМУС, В. П. ХИЦЕНКО
ПРАКТИКУМ ПО ОСНОВАМ
ПРОГРАММИРОВАНИЯ
СКАЛЯРНЫЕ ТИПЫ
УПРАВЛЯЮЩИЕ ОПЕРАТОРЫ
Утверждено Редакционно-издательским советом университета
в качестве учебного пособия
НОВОСИБИРСК
2021

УДК
004.42(075.8)
Т652
Рецензенты:
д-р техн. наук, профессор кафедры ПМт М. Э. Рояк
канд. техн. наук, доцент кафедры ТПИ Е. А. Хайленко
Работа подготовлена на кафедре прикладной математики НГТУ
Тракимус Ю. В.
Т652
Практикум по основам программирования. Скалярные
типы. Управляющие операторы: учебное пособие /
Ю. В. Тракимус, В. П. Хиценко. – Новосибирск: Изд-во
НГТУ, 2021. – 68 с.
ISBN 978-5-7782-4595-2
В настоящем учебном пособии излагаются основные сведения о скалярных типах и управляющих операторах стандартного языка программирования C. Пособие
содержит примеры решения задач, практические задания и может быть рекомендовано для подготовки к занятиям по основам программирования и при самостоятельном изучении курса. Предназначено для студентов I курса факультета прикладной
математики и информатики.
Тракимус Юрий Викторович, Хиценко Валентина Павловна
ПРАКТИКУМ ПО ОСНОВАМ ПРОГРАММИРОВАНИЯ
СКАЛЯРНЫЕ ТИПЫ. УПРАВЛЯЮЩИЕ ОПЕРАТОРЫ
Учебное пособие
В авторской редакции
Выпускающий редактор И. П. Брованова
Дизайн обложки А. В. Ладыжская
Компьютерная верстка Л. В. Веселовская
Налоговая льгота – Общероссийский классификатор продукции
Издание соответствует коду 95 3000 ОК 005-93 (ОКП)
Подписано в печать 27.12.2021. Формат 60 × 84 1/16. Бумага офсетная.
Тираж 50 экз. Уч.-изд. л. 3,95. Печ. л. 4,25. Изд. № 242. Заказ № 61. Цена договорная
Отпечатано в типографии
Новосибирского государственного технического университета
630073, г. Новосибирск, пр. К. Маркса, 20
УДК 004.42(075.8)
ISBN 978-5-7782-4595-2
Тракимус Ю. В., Хиценко В. П., 2021
Новосибирский государственный
технический университет, 2021

ОГЛАВЛЕНИЕ
ГЛАВА 1 ПРОСТЫЕ ТИПЫ. ЭЛЕМЕНТАРНЫЕ ОПЕРАТОРЫ .................... 4
Переменная .................................................................................. 4
Выражение .................................................................................. 5
Элементарные операторы .......................................................... 7
Примеры .................................................................................... 11
Задачи для самостоятельной работы ...................................... 13
О практических заданиях ......................................................... 16
ГЛАВА 2 ВЕТВЯЩИЕСЯ ВЫЧИСЛИТЕЛЬНЫЕ ПРОЦЕССЫ .................... 21
Понятие ветвящегося вычислительного процесса ................ 21
Управляющие структуры выбора ............................................ 21
Примеры .................................................................................... 27
ПРАКТИЧЕСКОЕ ЗАДАНИЕ «ВЕТВЛЕНИЯ» ................................. 32
Задачи для самостоятельной работы ...................................... 35
Контрольные вопросы .............................................................. 39
ГЛАВА 3 ЦИКЛИЧЕСКИЕ ВЫЧИСЛИТЕЛЬНЫЕ ПРОЦЕССЫ .................. 40
Понятие циклического вычислительного процесса ................. 40
Структура цикла ........................................................................ 41
Циклические управляющие конструкции .............................. 42
Итерационный цикл .................................................................. 46
Примеры .................................................................................... 48
ПРАКТИЧЕСКОЕ ЗАДАНИЕ «ЦИКЛЫ» ........................................ 53
Задачи для самостоятельной работы ...................................... 64
Контрольные вопросы .............................................................. 67
БИБЛИОГРАФИЧЕСКИЙ СПИСОК ............................................................. 68
3

ГЛАВА 1
ПРОСТЫЕ ТИПЫ. ЭЛЕМЕНТАРНЫЕ ОПЕРАТОРЫ
Переменная
Одним из основных понятий языка программирования является переменная. Переменная – это простейший объект программы, над которым можно выполнить некоторое действие. С каждой переменной связывается значение, которое она имеет в данный момент. Переменной
дается имя и задается ее тип. Имя используется для обращения к переменной, чтобы получить ее значение или изменить его. Тип определяет
совокупность информации:
– о множестве допустимых значений переменной данного типа;
– о множестве допустимых операций над значением данного типа;
– о размере оперативной памяти (ОП), выделенной для хранения
значения;
– о представлении значения в выделенной ему области памяти
(внутреннее представление значения);
– о структуре значения.
По структуре значения все типы принято делить на простые типы и
сложные. Значение простого типа является величиной, неделимой ни
на какие части. Операции выполняются над этим неделимым значением. Например, целое число – значение простого типа. Целое число может состоять из нескольких разрядов (сотен, десятков, единиц), но
действие можно выполнять над числом, а не над его отдельными разрядами. Если, например, требуется выполнить действие над разрядом
десятков целого числа, то его сначала надо выделить из числа. Значение сложного типа составляется из отдельных частей (элементов или
компонентов значения), операции выполняются над отдельными элементами сложного значения (иногда, как исключение из правила, в
язык программирования включаются операции над всем сложным значением в целом). Простые типы – это типы, которые позволяют представить в ОП компьютера наиболее распространенную и простую информацию: числа, символы, логические значения. Простые типы, полностью определенные в языке программирования, называют базовыми.
Базовым типам даются имена, которые используются при определении
4

переменной (а также константы). В языке C определены следующие
простые базовые скалярные типы:
1) для представления целых чисел: целый короткий – char, целый
полный – int, целый длинный – long; каждый из целочисленных типов
может быть определен либо как знаковый signed (по умолчанию), либо
как беззнаковый unsigned;
2) для представления действительных чисел: вещественный одинарной точности – float, вещественный двойной точности – double;
3) для представления символов используется целый тип, короткий
или полный;
4) для представления логических значений целый короткий.
При использовании в программе переменной ее нужно определить,
т. е. дать ей имя и указать тип. Определение переменной используется
транслятором для выделения ей памяти (величину, которой выделена
память, принято называть объектом), размер участка выделяемой памяти и интерпретация содержимого, а также допустимые операции зависят от указанного типа. Простейшая форма определения переменной:
тип имя_переменной;
или
тип список имен переменных;
Примеры определения переменных:
char c;
unsigned int number, a1, n;
int sign;
float x1, y1, x2, y24;
Выражение
Значение, задаваемое переменной, как правило, является результатом каких-то вычислений. Правило вычисления значения задается выражением. Выражение состоит из операций и операндов. Операции определяют действия (элементарные операции: арифметические, логические, отношения и т. д., а также операции, описанные в виде функций),
5

выполняемые над операндами. Операндом выражения может быть
константа, переменная, выражение. Выражение, входящее как операнд
в другое выражение может быть первичным выражением, таким как,
например, вызов функции или выражением, заключенным в круглые
скобки.
Результат вычисления значения выражения зависит от порядка выполнения операций (как правило, операции выполняются в порядке их
написания слева направо) и их приоритета. Для задания правильного
порядка вычислений используются скобки, они повышают приоритет
операции (но для операций, обладающих свойством коммутативности,
не гарантируют определенный порядок вычисления).
При выполнении операции, как правило, происходит преобразование типов ее операндов к общему типу. Основные правила преобразования по умолчанию:
– все операнды типа float преобразуются к типу double;
– если один операнд имеет тип long double, то второй операнд преобразуется к типу long double;
– если один операнд имеет тип double, то второй операнд преобразуется к типу double;
– если один операнд имеет тип unsigned long, то второй операнд преоб-
разуется к типу unsigned long;
– если один операнд имеет тип long, то второй операнд преобразуется к типу long;
– если один операнд имеет тип unsigned int, то второй операнд преобразуется к типу unsigned int;
– все операнды типа char преобразуются к типу int;
– все операнды типа unsigned char преобразуются к типу unsigned
int;
иначе оба операнда имеют тип int;
– если один операнд имеет тип float, а второй целый тип, то второй
операнд преобразуется к типу float.
Тип значения выражения имеет тип результата последней выполняемой операции в этом выражении.
6

Примеры записи выражений:
1) A + b 15.5 – x * sin (y) k / 3 *(a + b) i % 2
2) a – b > 0.75 (x1 + x2) * 3 == 17.5 a + b > c && c > b
В примерах 1 результатом выражения будет числовое значение, так
как последняя выполняемая операция – это арифметическая операция;
в примерах 2 результатом будет логическое значение, так как последняя выполняемая операция – это операция отношения (>, ==) или логическая операция (&&).
Элементарные операторы
Для управления последовательностью вычислений в программе
служат управляющие структуры или в терминах языка программирования операторы управления вычислениями (или кратко операторы).
Оператор – это единица действия (точка с запятой является признаком
конца оператора). Простейшие операторы:
1) Оператор – выражение
< выражение >;
Действие заключается в вычислении значения выражения.
Пример оператора-выражения: a++;
Выполнение этого оператора состоит в увеличении значения пере-
менной a на единицу.
2) Оператор присваивания
В простейшем случае общий вид оператора присваивания:
V = E;
Здесь V – имя переменной, а E – выражение. В операторе присваи-
вания используется операция присваивания = .
Пример оператора присваивания: c = a * b;
Действие такого оператора можно описать следующими словами:
"с присвоить а, умноженное на b". Значение, присваиваемое переменной с, равняется произведению текущих значений переменных а и b.
7

При присваивании значение выражения из правой части оператора
присваивания преобразуется к типу переменной из левой части. Приведение целочисленного значения (правой части оператора присваивания) в вещественное (левой части оператора присваивания) осуществляется с точностью предусмотренной аппаратной реализацией. Если
некоторое целочисленное значение не может быть точно представлено
как вещественное, то младшие значащие разряды теряются, т. е. происходит потеря точности. Приведение вещественного значения к целому типу выполняется путем отбрасывания дробной части, т. е. также
происходит потеря точности.
3) Оператор ввода
Ввод и вывод осуществляется посредством использования функций
ввода/вывода, входящих в состав стандартной библиотеки языка C.
Необходимые функции (точнее их прототипы) содержатся в файле
stdio.h, который должен быть подключен к программе директивой #include <stdio.h>. Для любой программы на языке C всегда доступны три
стандартных файла (потока): stdin – файл ввода, stdout – файл вывода,
stderr – файл сообщений об ошибках. По умолчанию они связываются
с пользовательским терминалом. Эти файлы открываются при входе в
программу и закрываются при выходе из нее.
Для задания значений переменным (в которые записываются исходные данные решаемой задачи) используется оператор (функция)
форматного ввода scanf:
scanf(управляющая строка[, список аргументов]);
Функция scanf читает данные из стандартного потока stdin в пере-
менные, адреса которых задаются в списке аргументов. Аргументы в
списке перечисляются через запятую. Управляющая строка задается
как строковая константа. В простом случае управляющая строка состоит из одной или более спецификаций преобразования (формата).
Спецификация преобразования в простом случае имеет вид: %C , где C
– символ преобразования, % – признак спецификации формата. Спецификация формата определяет форму представления в файле вводимого значения и должна соответствовать типу переменной, которой
будет присвоено это вводимое значение.
8

Каждому вводимому значению в управляющей строке функции
scanf должна соответствовать спецификация. В списке аргументов перед именами переменных необходимо ставить символ &. Этот символ
означает операцию "взять адрес" переменной. При вводе управляющая
строка рассматривается слева направо и, когда встречается первая спецификация формата, значение первого входного поля файла преобразуется согласно этой спецификации во внутреннее представление и записывается по адресу первой переменной списка аргументов. По второй спецификации значение второго входного поля преобразуется и
помещается по адресу второй переменной и так далее до конца управляющей строки. В файле ввода числовые значения переменных должны быть разделены пробелом.
Пример оператора форматного ввода:
scanf(" %d %d %d ", &x, &y, &z);
Первое значение из входного потока рассматривается как целое
число и преобразуется в соответствии с %d к типу int, затем помещается в ОП по адресу переменной x, аналогично преобразуются следующие два значения и помещаются в ОП по адресам переменных y и z соответственно.
4) Оператор вывода
Для вывода результатов работы программы используется оператор
(функция) форматного вывода printf:
printf(управляющая строка[, список аргументов]);
Управляющая строка может содержать символы, которые нужно
вывести, управляющие символы и спецификации формата. Аргументы
в списке перечисляются через запятую. Аргумент задается константой,
переменной или выражением. Общий вид спецификации преобразования:
%[-][dd][. pp]C . где
C – символ или пара символов, определяющих преобразование вы-
водимого значения;
9

S1
S2
Sn
…
символ ′-′ означает, что выводимое значение должно быть в поле
вывода выровнено по левому краю. По умолчанию оно выравнивается
по правому краю;
dd – десятичное целое число, задающее минимальный размер поля,
т. е. число позиций, занимаемых выводимым значением. Если размер
поля недостаточен для значения, оно, тем не менее, будет выведено
полностью; если размер поля больше, в избыточных позициях по
умолчанию будут пробелы;
pp – десятичное целое число, указывающее для вещественных типов количество цифр после десятичной точки.
Пример оператора форматного вывода:
printf("\nВозраст Ивана: %d. Его доход: $ %.2f", age, income);
Предполагается, что целой переменной age (возраст) и вещественной переменной income (доход) присвоены какие-то значения.
Управляющий символ ′\n′ переводит курсор на новую строку в вы-
ходном файле. Последовательность символов "Возраст
Ивана -" будет выведена с начала новой строки. Символы
%d – это спецификация для целой переменной age, в со-
ответствии с которой значение переменной будет преобразовано в десятичное число и выведено после символов
"Возраст Ивана: ". Следующая часть управляющей стро-
ки ". Его доход: $ % .2f" – это выводимый текст и специ-
фикация (символ преобразования) формата для вещественного значения переменной income. А также указание
формата для вывода только двух цифр после десятичной
точки. Например, будет выведено:
Возраст Ивана: 27. Его доход: $ 2345.50
5) Составной оператор (или последовательность)
Структурная схема последовательности:
Здесь Si – любой оператор.
10
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
