Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Цифровая грамотность. В 2 частях. Ч.2. Разработка консольных приложений на языке программирования C. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
Тип данных с плавающей запятой
Тип данных
Размер
Диапазон значений
Точность
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]