Стандартные математические функции

В языке Си для математических вычислений используются стандартные

математические функции.

double cos(double x); - косинус;

double sin(double x); - синус;

double tan(x) - тангенс;

double log(double x); - логарифм натуральный;

double sqrt(double x); - корень квадратный;

double floor(double x); - ближайшее меньшее целое;

double ceil(double x); - ближайшее большее целое;

int abc(int i); - модуль целого числа;

double acos(double x); - арккосинус;

double fabs(duble x); - модуль числа с плавающей точкой;

double asin(duble x); - арксинус;

double atan(duble x); - арктангенс;

srand (seed) int seed; - инициализация генератора случайных чисел (ГСЧ) rand( ) и

int rand( ); - ГСЧ;

long int time(p), longint p - время в секундах, отсчитываемое от 1.01.1970 г. (0.00 по Гринвичу).

delay(t); - задержка во времени на t микросекунд;

double pow (double x, double y) и

long double pow (long double x, long double y) - возвращает значение, равное ху.

double exp(double x) и

long double exp (long double x) – возвращает значение exp(x).

Стандартные библиотечные функции

Все стандартные функции имеют прототип в соответствующем заголовочном файле. В соответствии со стандартом языка ANSI в языке Си пятнадцать следующих заголовочных файлов присутствуют обязательно (табл.1.4):

Таблица 1.4

Типы заголовочных файлов

Заголовочный файл Назначение
assert.h ctype.h errno.h floaf.h limits.h locale.h Диагностика программы Преобразование и проверка символов Проверка ошибок Работа с числами с плавающей запятой Определение размеров целочисленных типов Поддержка интернациональной среды
  Продолжение табл.1.4  
Заголовочный файл Назначение
math.h sefjmp.h signal.h stdarg.h   stddef.h stdio.h stdlib.h string.h time.h dos.h Математические библиотеки Возможности нелокальных переходов Отработка сигналов Поддержка функций с неопределенным числом аргументов. Разное Библиотека стандартов ввода/вывода Библиотека общего назначения Функции работы со стройками символов Функции работы с датами и временем Подключение Dos

Наиболее часто встречающиеся функции языка Си приведены в табл.1.5

Таблица 1.5

Функции языка Си

Функция Перевод Назначение
printf ( ) Принтф Вывод на экран некоторой информации
cprintf ( ) Спринтф Форматированный вывод на экран
main ( ) Майн Определяет имя функции
scanf ( ) Сканф Ввод с клавиатуры
getch ( ) Гетч Ожидает, пока не будет введен с клавиатуры какой-либо символ
gets ( ) Гетс Читает символы с клавиатуры до тех пор, пока не будет нажата клавиша «Enter»
strcpy (S1,S2) Стрикопи Копирование содержимого строки S2 в строку S1
strcat (S1,S2)   Присоединяет строку S2 к строке S1 и помещает ее в массив строки S1. Строка S2 не меняется
strcmp (S1,S2)   Сравнивает строки S1 и S2. Результат равен 0, если S1=S2; положительное решение, если S1>S2; отрицательное значение, если S1<S2
strlen (S)   Возвращает длину строки S символ \О в конце не учитывается
puts ( ) Патс Выводит строку символов в stdout
putchar ( ) Патча Выводит символ в stdout
cputs   Выводит строку на экран
putch ( ) Патч Выводит символы на экран

Сводка операций языка Си

Все операции языка Си разбиты на категории (табл. 1.6). Каждая операция имеет свой приоритет, который убывает с ростом категории. Все операции одной категории имеют одинаковый приоритет. Унарные операции (категория 2), условная (категория 14) и присваивания (категория 15) ассоциируются (выполняются) справа налево. Все остальные операции ассоциируются слева направо.

Таблица 1.6

Сводка операций языка Си

Категория Операция Название или действие
1. Наивысшего приоритета ( ) [ ]   : :   Вызов функции Индексирование Косвенное обращение к члену класса Прямое обращение к члену класса
2. Унарные . ! ~ + - + + - - & * size of new delete Прямое обращение к члену класса Логическое отрицание Дополнение до единицы Унарный плюс Унарный минус Преинкремент или постинкремент Предекремент или постдекремент Адрес Обращение Размер Создание динамического объекта Удаление
3. Мультипликативные * / % Умножение Деление Деление по модулю
4. Косвенное обращение . *   -> * Прямое косвенное обращение через указатель Косвенное обращение через указатель
5. Аддитивные   + - Бинарный плюс Бинарный минус
6. Сдвига   << >> Сдвиг влево Сдвиг вправо
7. Отношения < <= > >= Меньше Меньше или равно Больше Больше или равно  
Продолжение табл. 1.6
8. Равенства = = != Равно Не равно
9. 10. 11. 12. 13. 14. & ^ | && || ? : Побитовое И Побитовое исключающее ИЛИ Побитовое включающее ИЛИ Логическое И Логическое ИЛИ Условия


Как видно из приведенных таблиц, язык Си богат на операции. Знак операции – это символ или комбинация символов, которые сообщают компилятору о необходимости произвести определенные арифметические, логические или другие действия.

Для каждой операции определено количество операндов и определенный порядок выполнения:

- один операнд – унарная операция, например унарный минус (-х), изменяющая знак;

- два операнда - бинарная операция, например, операция сложения (x + y) или вычитания (x - y);

- три операнда – операция условия ?:, такая операция только одна.

Каждая операция может иметь только определенные типы операндов. Например, операция побитового сдвига определена только для целочисленных операндов. Более подробно об операциях будет дано в следующих разделах.

2. Базовые средства языка Си

2.1. Типы данных

Составление программы на языке Си предполагает выполнение следующих основных этапов (здесь предполагается, что задача поставлена, формализована и выбран алгоритм её решения):

1. Ввод и размещение в памяти ЭВМ исходных данных.

2. Задание последовательности операций над исходными данными в соответствии с выбранным алгоритмом решения задачи.

3. Вывод результатов решения задачи.

Ввод данных осуществляется с клавиатуры, с диска, либо с портов ввода /вывода.

Размещение в памяти ЭВМ требует указания типа переменных. По структуре данные разделяют на простые и составные (сложные).

Простые типы данных. Эти типы (табл.2.1) являются базовыми типами данных языка Си. На их основе формируются более сложные типы.

Таблица 2.1

Типы простых данных

Имя базового типа Спецификация Объём занимаемой памяти, байт
Целые signed char signed int signed short int signed long int unsigned char unsigned int unsigned short int unsigned long int Знаковый символьный Знаковый целый Знаковый короткий целый Знаковый длинный целый Беззнаковый символьный Беззнаковый целый Беззнаковый короткий целый Беззнаковый длинный целый      
Плаваю-щие Float Double long float long double Плавающий Плавающий 2-й точности Длинный плавающий Длинный плавающий 2-й точности  
Прочие Void Enum Пустой Перечислимый    

При задании типов данных, т. е. при описании данных, если спецификация не используется, то компилятор предполагает тип int. Если не используется спецификация signed или unsigned, то предполагается знаковый тип.

Тип переменной определяет максимально - возможное число, которое может быть помещено в памяти ЭВМ. Самое маленькое отрицательное число, которое можно записать в 8 - ми разрядной сетке – (-128), в 16 - разрядной сетке (-32768).

Поэтому, например, если вычислить n! при n=8 мы получили бы число 40320. Оно значительно превосходит максимально возможное положительное число (32767), которое можно записать в 16-м разрядной сетке, что привело бы к переполнению разрядной сетки ЭВМ. Поэтому надо осторожно подходить к выбору типа int или же брать тип float, которое записывается в форме Стандартные математические функции - student2.ru , где m-мантисса, E=10, Р - целочисленный порядок, в пределах от –39 до +38.

В табл. 2.2. приведены значения чисел, которые могут быть записаны в выше перечисленных типах.

Таблица 2.2

Числовые значения типов

Тип переменной Количество бит Диапазон чисел
shortint (знаковый) 8 бит (левый бит отведён под знак) -128 Стандартные математические функции - student2.ru a Стандартные математические функции - student2.ru 127
int (знаковый) -32768 Стандартные математические функции - student2.ru a Стандартные математические функции - student2.ru 32767
longint (знаковый) -2147483648 Стандартные математические функции - student2.ru a Стандартные математические функции - student2.ru -2147483647

Составные (сложные) типы данных. К составным типам данных относятся:

- массивы - данные регулярной структуры;

- структуры – логически связанные данные разных типов.

Данные типы будут рассмотрены позднее подробно.

Особое место занимают данные типа указатель. Значением указателя является адрес расположения в памяти (или адрес памяти) простой переменной, массива, структуры либо функции. В языке Си аппарат указателей используется наиболее интенсивно.

Пример записи данных в программе.

int a,b,c;

float x,y;

char ch;

double e;

unsigned u;

и т.д.

Операции над данными

Операции над данными задаются с помощью операторов:

- присвоения;

- передачи управления по условию;

- организации циклов.

Эти операторы являются средствами организации линейных, разветвляющихся и циклических алгоритмов. Любая программа, кроме самой простой, состоит из вышеперечисленных базовых структур алгоритмов, определяемых соответствующими операторами.

Знаки операций (арифметических, отношения, логических, битовых) используются для объединения констант и переменных в соответствующие выражения.

Операции над данными предполагают наличие объектов некоторого типа и использование знаков операций.

Наиболее распространенной является операция присваивания ``=``. Она предназначена для изменения значений переменных, в том числе и вычислений «по формуле»

Например,

x =362;

k = k + 2;

m = c = 1;

Базовая форма

<имя>=<выражение>

Разновидность операции присваивания

<имя>=<имя> <знак операции> <выражение>

В отличие от других языков программирования, в Си применяется также компактная форма операции присваивания. В компактной форме последнюю запись можно представить так:

Примеры:

A = a + b то же, что a + = b,

A = a*b то же, что a * = b,

A = a*(3*b +10) то же, что а*=3*b+10 ,

i=i+1 тоже, что и i++.

Арифметические операции.

Различают унарные и бинарные операции.

Бинарными операциями являются:

+ сложение;

- вычитание;

* умножение;

/ деление;

% деление по модулю.

Унарные операции:

- унарный минус;

операции единичного приращения:

++ положительного (увеличения на единицу - инкремент),

-- отрицательного (уменьшения на единицу – декремент).

Различают апостериорное приращение, например:

c=a+b++, что при пошаговом выполнении будет означать: c1=a+b; c2=a+(b+1); c3=a+(b+2); и т. д.,

и априорное приращение, например c=a+++b, что при пошаговом выполнении будет означать: c1=a+(b+1); c2=a+(b+2)…

i++ и --i – это полноправные выражения.

Старшинство арифметических операций следующее:

++, --

- (унарный минус)

*, /, %

+, –

Операции, одинаковые по старшинству, выполняются в порядке слева направо.

Чтобы изменить порядок операций используют круглые скобки.

Операции над битами (с двоичными разрядами).

Бинарные:

Сдвиг влево a=b<<c;

Cдвиг вправо a=b>>;

Операция “И” a=b&c;

Операция “ИЛИ” a=b|c;

Операция исключающее “ИЛИ” a=b^c;

Унарная

“НЕ” a=~b.

Помимо перечисленных операций, в языке Си используются операции отношения и логические операции. В языке Си нет данных логического типа. Поэтому принято соглашение, что если в результате логической операции получено значение не равное нулю (!=0), то результат трактуется как ”истина”. В противном случае – как “ложь”.

Примеры операций отношения:

a>b; a>=b; a<=b; a= =b; a != b,

где = = знак «равно»;

!= знак «не равно».

< меньше,

> больше,

>= больше или равно,

<= меньше или равно.

Примеры логических операций:

a&&b - операция логическое “И”,

a | | b - операция логическое “ИЛИ”,

! a - операция логическое “НЕ”.

Операции вывода данных

Ввод и вывод данных в языке Си осуществляется не с помощью встроенных операторов, как в других языках, а с помощью специальных программных модулей, называемых функциями, содержащимися в файлах -прототипах.

Вывод результатов счёта. Вывод результатов счёта осуществляется на стандартный терминал (stdout), на диск, на принтер, либо в порт ввода/вывода.

Следует сказать, что программа на языке Си состоит из функций, или как минимум из одной функции, называемой main(). Эта функция является главной функцией и любая программа начинает выполняться с её главного оператора.

Функции вывода данных. Основные функции вывода данных приведены в табл. 2.3

Таблица 2.3

Функции вывода данных

  Имя функции   Описание Файл, содержащий прототип
printf()   puts()   putchar() cprintf()   cputs() putch() Производит форматированный вывод данных в stdout Выводит строку символов в stdout Вводит символ в stdout Осуществляет форматированный вывод на экран Выводит строку на экран Выводит символ на экран   stdio.h   stdio.h stdio.h   conio.h conio.h conio.h

Функции из файла-заголовка сonio.h работают только на компьютере IBM PC. Их можно рассматривать, как дополнение к стандартным функциям. Их так же называют консольными.

Отличие стандартных функций от консольных заключается в том, что последние не преобразуют символы перевода строки \n в последовательность символов перевода строки \n и возврата каретки \r. Поэтому программист сам должен позаботиться об этом (см. ниже).

Обобщённая запись функции printf() следующая:

printf(“строка форматов”, обьект, обьект, …);

Пример:

int y; // объявление целочисленной переменной

int x=5; //объявление и инициализация переменной

y=x+20; // операция присваивания

printf(“получено число %d \n”, y); //вывод числа

printf(“получено число %d \n”, x+20); //вывод значения выражения

printf(“получено число %d %d \n”, x,y); //вывод двух объектов

Здесь %d – спецификация поля представления целого числа;

x, y – объекты вывода (сами числа);

x + 20 – выражение, значение которого выводится;

// - признак строки- комментария.

В качестве объекта вывода используются константы, переменные, выражения, указатели функций.

В функции printf() используются следующие спецификации полей представления данных (табл. 2.4)

Таблица 2.4

Спецификации полей данных

Формат (Спецификатор) Типы вводимой информации
%d Десятичное целое число
%i Десятичное целое число со знаком
%c Символ
%s Строка символов
%f Число с плавающей точкой
%u Десятичное целое число без знака
%ld Длинное целое
%p Целое указателя
%o Восьмеричное целое без знака
%x Шестнадцатеричное целое без знака

Первые шесть форматов используются наиболее часто. Размер поля вывода задается либо по умолчанию, либо явно цифрой между знаком % и соответствующей буквой, например:

%-10s; %6d; %8.3f; %ld.

Здесь, так называемые, модификаторы имеют следующий смысл:

- печать с крайней левой позиции поля;

10 - задает максимальное число печатаемых символов строки;

6 – задает максимальное число печатаемых цифр;

8.3 – задает общую ширину поля (8) и число символов (3) после десятичной точки.

Наши рекомендации