Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Практикум по основам программирования. Скалярные типы. Управляющие операторы. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
Министерство науки и высшего образования Российской Федерации
НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Ю. В. ТРАКИМУС, В. П. ХИЦЕНКО
ПРАКТИКУМ ПО ОСНОВАМ
ПРОГРАММИРОВАНИЯ
СКАЛЯРНЫЕ ТИПЫ
УПРАВЛЯЮЩИЕ ОПЕРАТОРЫ
в качестве учебного пособия
НОВОСИБИРСК
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, который должен быть подключен к программе директивой #in­clude <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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]