Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Цифровая грамотность. В 2 частях. Ч.2. Разработка консольных приложений на языке программирования C. Учебное пособие.pdf
X
- •ВВЕДЕНИЕ
- •РЕКОМЕНДАЦИИ К ВЫПОЛНЕНИЮ ЛАБОРАТОРНЫХ РАБОТ
- •ПОРЯДОК ВЫПОЛНЕНИЯ ЛАБОРАТОРНЫХ РАБОТ
- •Раздел 1. ОСНОВЫ ПРОГРАММИРОВАНИЯ В СРЕДЕ ЯЗЫКА C
- •Контрольные вопросы
- •Контрольные вопросы
- •Контрольные вопросы
- •Контрольные вопросы
- •Контрольные вопросы
- •Контрольные вопросы
- •Контрольные вопросы
- •Контрольные вопросы
- •Тема 1.4. Массивы. Обработка массивов
- •Раздел 2. ОСНОВЫ МОДУЛЬНОГО ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ С
- •Тема 2.1. Пользовательские функции
- •Контрольные вопросы
- •Контрольные вопросы
- •Контрольные вопросы
- •Контрольные вопросы
- •Тема 2.3. Файловый ввод/вывод
- •Контрольные вопросы
- •Контрольные вопросы
- •Контрольные вопросы
- •Задание 1.
- •Программный код:
- •Задание 2.
- •Программный код:
- •Задание 3.
- •Контрольные вопросы
- •ЗАКЛЮЧЕНИЕ
- •БИБЛИОГРАФИЧЕСКИЙ СПИСОК

Тип данных с плавающей запятой
Тип данных
Размер
Диапазон значений
Точность
float
4 байта
1.2E-38 to 3.4E+38
6
double
8 байтов
2.3E-308 to 1.7E+308
15
long double
10 байтов
3.4E-4932 to 1.1E+4932
19
Неявное преобразование типов
При явном преобразовании типа в скобках перед значением укажите
тип, к которому нужно привести данное значение.
В неявном преобразовании этого делать не нужно. Компилятор авто-
матически подберет необходимый тип данных.
Рассмотрим случаи, когда осуществляется неявное преобразование
типов:
Таблица 3
1. Перед передачей аргументов в функцию.
2. Выполнение арифметических операций с разными типами аргументов.
3. Перед выполнением присваивания.
Правила неявного преобразования типов
– Если выполняются арифметические операции с разными типами аргументов, оба аргумента приводятся к большему типу. Порядок типов: int < float < double.
– При присваивании: значение справа от оператора присваивания
приводится к типу переменной слева от оператора присваивания. При этом
если больший тип присваивается меньшему, то может произойти потеря
точности.
В программировании на С есть два типа функций:
1. Встроенные функции.
2. Пользовательские функции (см.: Тема 2.1).
Линейные вычисления с использованием математических операций
не ограничиваются лишь арифметическими действиями. Кроме них, мож-
11

но еще встретить корни, модули, логарифмы, тригонометрические функ-
double acos(double x);
Аркосинус. Аргумент должен быть в диапа-
double asin(double x);
Арксинус. Аргумент должен быть в диапа-
2−π
2
π
double atan(double x);
Арктангенс. Значение, возвращаемое функ-
2
−π
2π
double ceil(double x);
Округление путем отбрасывания дробной
double exp(double x);
Возвращает значение е в степени х
double fabs(double x);
Возвращает абсолютное значение числа
double sqrt(double x);
Квадратный корень из числа x
double sin(double x);
Синус числа x (х в радианах)
double cos(double x);
Косинус числа x (х в радианах)
double tan(double x);
Тангенс числа x (х в радианах)
double pow(double x, double y);
Вычисление x в степени y
ции и пр. Для того чтобы использовать математические функции, в про-
грамме нужно подключить заголовочный файл math.h: .
Для математических вычислений и преобразований используются
библиотечные математические функции языка C, прототипы которых
находятся в заголовочном файле math.h (табл. 4) и в заголовочном файле
stdlib.h (табл. 5).
Таблица 4
Библиотечные математические функции языка С (math.h)
Математическая функция Описание
зоне от –1 до 1. Значение, возвращаемое
функцией, лежит в диапазоне от 0 до π
зоне от –1 до 1. Значение, возвращаемое
функцией, лежит в диапазоне от
цией, лежит в диапазоне от
части
с плавающей точкой
до
до
12

Математическая функция Описание
double pow10(int p);
Вычисляет 10 в степени p
double log(double x);
Натуральный логарифм числа x
double log10(double x);
Десятичный логарифм числа x
double floor(double x);
Округление до наибольшего целого числа,
double fmod(double x, double y);
Остаток от деления нацело x/y
double modf(double x, double *ptr)
Расчленение числа с плавающей точкой на
Математическая функция
Описание
int rand(void);
Генератор псевдослучайных чисел в диапазоне
int random(int num);
Генератор псевдослучайных чисел в диапазоне
void srand(unsigned Seed);
Инициализация генератора случайных чисел
не превышающего x
целую и дробную части. Дробная часть возвращается функцией. Целая часть записывается в область памяти, на которую указывает
ptr
Окончание табл. 4
Примечание.
1. Библиотечные математические функции (см. табл. 2) возвращают значение
типа double.
2. Список аргументов библиотечных математических функций – вещественные
числа (тип double), но можно передавать и целые числа. При этом произойдет неявное
преобразование типа. Компилятор из целого числа, например 5, сделает веществен-
ное 5.0.
Таблица 5
Библиотечные математические функции языка С (stdlib.h)
от 0 до 32767
от 0 до num-1
некоторым случайным числом
Примеры записи арифметических выражений на языке программиро-
вания С приведены в табл. 6.
13

Запись арифметических выражений на языке С
Математическая
запись
)(2 ba −
( )
2*a* b−
ab
bc
+
−
( )
(a + b)/ b c−
3
2
5,
2
−
+
+
d
c
bxax
( )
a*pow(x,2) + b*x + c /pow((d 2.5),(1/3))−
xex432
sin
−
+
pow(sin(pow(x,3)),2) + exp( 4*x)−
Запись на языке программирования С
Таблица 6
Область видимости переменных
Область действия в любом программировании – область программы,
в которой может существовать определенная переменная, и за пределами
этой переменной к ней нельзя получить доступ. Есть три места, где переменные могут быть объявлены на языке программирования C:
• Внутри функции или блока, которые называются локальными пе-
ременными.
• Вне всех функций, которые называются глобальными переменными.
• В определении параметров функции, которые называются фор-
мальными параметрами (см.: Тема 2.1).
Переменные, объявленные внутри функции или блока, называются
локальными переменными. Они могут использоваться только операторами, которые находятся внутри этой функции или блока кода. В следующем примере показано, как используются локальные переменные. Здесь
все переменные a, b и c являются локальными для функции main().
Программный код:
14

Глобальные переменные
Глобальные переменные определяются вне функции, обычно поверх
программы. Глобальные переменные сохраняют свои значения на протяжении всего жизненного цикла программы, и к ним можно получить доступ внутри любой из функций, определенных для программы. Доступ
к глобальной переменной может получить любая функция. То есть глобальная переменная доступна для использования во всей программе после
ее объявления. Следующий пример показывает, как глобальные переменные используются в программе.
Программный код:
Программа может иметь одно и то же имя для локальных и глобальных переменных, но предпочтение будет отдаваться значению локальной
переменной внутри функции.
Программный код:
15

Инициализация локальных и глобальных переменных
Когда локальная переменная определена, она не инициализируется
системой, вы должны инициализировать ее самостоятельно. Глобальные
переменные автоматически инициализируются системой. Хорошей практикой программирования является правильная инициализация пере-
менных, в противном случае программа может выдать неожиданные результаты, поскольку неинициализированные переменные будут принимать какое-то случайное значение, уже доступное в их ячейке памяти.
Форматированный ввод-вывод данных
Организуется функциями scanf() и printf() соответственно. Их прото-
типы содержатся в заголовочном файле stdio.h1.
Функция printf() переводит данные из машинного представления
в символьное, отображаемое на экране, а функция scanf() – в обратном
направлении. Для вызова функций printf() и scanf() приемлемы следую-
щие формы их операторной записи:
printf(“СтрокаФормата”, [Аргументы]);
scanf(“СтрокаФормата”, АдресаАргументов);
где
СтрокаФормата состоит из необязательных символов, приводимых
пользователем, и символов, определяющих собственно спецификацию(-ции)
формата(-ов) преобразования значений данных из машинного представления
в требуемый.
Аргументы, АдресаАргументов – одно или несколько имен соответственно объектов и ссылок на их адреса, перечисленных через запятую.
Адрес памяти, которой поставлен в соответствие простой объект, извлекается операцией взятия адреса &, т. е. описывается как &ИмяОбъекта.
1
Название заголовочного файла есть объединение аббревиатур: std – standard, i – input, o – output.
16

Спецификации форматированного вывода
Обобщенно спецификации формата вывода имеют в функции printf
следующий вид (в [] указаны необязательные элементы):
%[Флаги][Ширина][.Точность][Модификатор]Тип ,
где
Флаги – необязательная последовательность символов, указывающих
форму вывода (выравнивание вывода, знак числа, десятичная точка, конечные нули, восьмеричные и шестнадцатеричные префиксы);
Ширина – максимальное число выводимых символов с учетом до-
полнения нулями и пробелами;
Точность – максимальное число позиций, предоставляемых для вы-
вода значений данных;
Модификатор замещает размер аргумента, принятый по умолчанию,
например, L – long double;
Тип – символ типа преобразования данных.
Спецификатор звездочка (*) в позициях Ширина и/или Точность
означает, что число выводимых символов определяется текущим значением аргумента.
Существуют следующие часто используемые спецификации формата
вывода:
1. Целого числа со знаком:
%[-][+илиПробел][Ширина][l]d
У отрицательных чисел знак минус выводится автоматически, а у по-
ложительных – при задании признакам +. Если указан признак Пробел, то
в позиции выводится пробел. Суффикс l задает размер аргумента как
длинное целое (long); d (или i) – десятичное целое со знаком.
2. Числа с плавающей точкой:
%[-][+илиПробел][#][Ширина][.Точность]f|e|E|g|G
Здесь отрицательные числа автоматически выводятся со знаком ми-
нус, а положительные – при наличии флага +. При использовании # выво-
17

дятся завершающие нули, иначе они отсутствуют. Символ # обусловливает вывод десятичной точки даже при нулевой точности; | – означает ИЛИ.
Точность определяет количество цифр после десятичной точки для
форматов f, e и E, а также число значащих цифр для форматов g и G.
Округление ведется путем отбрасывания цифр дробной части. Допустимы
следующие форматы вывода чисел:
1) f – числа с фиксированной точкой;
2) e (или E) – числа в экспоненциальном формате;
3) g (или G) – выбирается наиболее короткий формат представления
из f или e (допустимо E).
Форматированный ввод
Для функции scanf() спецификация СтрокаФормата имеет синтаксис:
%[*][Ширина][.[Модификатор]Тип ,
где
* – вводимое значение не присваивать переменной;
Ширина – максимальное число выводимых символов;
Модификатор – один из символов h, l или L;
Тип – символ типа, в частности:
d – десятичное целое;
i – десятичное, восьмеричное или шестнадцатеричное целое;
s – строка символов;
c – символ;
g, G – число с плавающей точкой.
Например, для ввода последовательности значений объектов A и B
целого типа через пробел и запятую соответственно используются записи
scanf(“%d %d”, &A,&B) и scanf(“%d,%d”, &A,&B).
Контрольные вопросы
1. Назовите операторы ввода и вывода информации.
2. Что понимается под совместимостью типов?
18

3. Что такое тип данных и что он описывает?
Программный код:
Результат:
4. Какие типы данных описывают вещественные числа?
5. Как объявить константу? Как объявить переменную?
Лабораторная работа № 1
ФУНКЦИИ ВВОДА-ВЫВОДА. ЛИНЕЙНЫЕ ВЫЧИСЛЕНИЯ
Задание 1.
1. Выполните пример 1. Заданы два целых числа, a и b. Вычислите их
сумму, разность, произведение и частное.
Дополните вывод значениями переменной res в восьмеричной
и шестнадцатеричной системах счисления.
Сохраните программу в файле с именем Фамилия_1.с.
2. Замените операции присваивания исходных данных на функцию
ввода scanf с соответствующими текстовыми комментариями.
Сохраните программу в файле с именем Фамилия_2.с.
3. Создайте новую программу для ввода, сложения, умножения, деле-
ния и вывода вещественных чисел – тип данных double. Используйте для
вывода символы преобразования f, e, E, g, G, задание длины и точности.
Сохраните программу в файле с именем Фамилия_3.с.
19

Задание 2.
5
3*10 ab
z
ab
++
=
+
2.371,a =
1171.b
=
Программный код:
Начало
Ввод b
Вывод z
Конец
a = 2.371
Изучите ГСА (рис. 2) и выполните пример 2. Вычислите арифмети-
ческое выражение
Сохраните в файле Фамилия_4.с.
, где
Результат:
Рис. 2. ГСА для примера 2
Задание 3.
Составьте ГСА и на языке программирования Си программу вычисления значений для всех арифметических выражений z1, z2, z3, z4, z5
при x равном 5 (табл. 7). Предусмотрите ввод значения x с клавиатуры,
сопровождающийся соответствующим текстом.
20
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
