Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1.1.2 - Основные поняти. Типы данных.doc
Скачиваний:
12
Добавлен:
03.11.2018
Размер:
134.14 Кб
Скачать

Операторы вызова функций

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

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

имя_функции(параметры);

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

ПРИМЕЧАНИЕ: В языке С, если функция не имеет параметров, то пустые круглые скобки все равно должны присутствовать.

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

sqrt(pow(x,3.0));

В этом примере осуществляется вызов функции sqrt, вычисляющий квадратный корень, в качестве параметра которой осуществляется вызов функции pow, выполняющей возведение переменной x в куб. Параметрами функции pow являются число, которое необходимо возвести в степень (переменная x), и значение степени (вещественная константа 3.0). Константа 3.0 является вещественной, так как функция pow работает с вещественными параметрами. Функции sqrt и pow описаны в библиотеке математических функций языка С math.h. Следует обратить внимание на то, что точка с запятой ставится только в конце выражения.

Рассмотрим функции форматированного ввода и вывода языка С из библиотеки stdio.h: scanf и printf.

Функция scanf предназначена для форматного ввода данных и имеет следующий заголовок:

int scanf(const char * restrict format [,addresses,…]);

Первым параметром функции является строка формата ввода (строки в языке С заключаются в двойные кавычки). В данной строке содержится перечень спецификаторов типов данных, ввод которых ожидается, в определенном порядке. Далее указываются адреса, по которым будут располагаться вводимые данные. Функция возвращает фактическое число считанных и записанных значений или -1 - если достигнут конец потока ввода. Пример ввода двух переменных переменные целого типа и переменной вещественного типа:

int a,b;

double x;

scanf(“%d %d %lf”,&a,&b,&x);

В данном примере сначала вводятся два значения целого типа в переменные a и b, а затем вещественного типа в переменную x. %d указывает на то, что вводимые данные являются целыми числами, %lf - вещественным типа double. Перед именами переменных в параметрах функции scanf необходимо указывать символ ‘&’, который в языке С, в данном случае, обозначает операцию взятия адреса переменной.

Сочетание %d или любое другое называется спецификатором типа. В общем случае он имеет следующий формат:

% [*] [WIDTH] [hh|h|l|ll|L] символ_типа

* - указывает запрещенные (символы разделители) для ввода символы. Указанные здесь символы разделяют разные поля ввода, а сами игнорируются.

WIDTH - задает максимальную длину поля ввода.

L, ll, l, hh, h - преобразователи типа. Символы hh служат для преобразования целочисленных типов к типам char или unsigned char. Символ h служит для преобразования целочисленных типов к типам short int или unsigned short int. Символ l служит для преобразования к типу long int всех целочисленных типов и к типу double всех вещественных типов. Символы ll служат для преобразования целочисленных типов к типам long long int или unsigned long long int. Символ L служит для приведения к типу long double всех вещественных типов.

В таблице 2.2 приведен перечень типов и соответствующие им спецификаторы.

Таблица 2.2 - Спецификаторы типов функций форматированного ввода и вывода

Символ

Тип

d

Знаковое целое число в десятичной системе исчисления

o

Знаковое целое число в восьмеричной системе исчисления

x

Знаковое целое число в шестнадцатеричной системе исчисления

i

Знаковое целое число в любой из ранее перечисленных систем исчисления

u

Незнаковое целое число в десятичной системе исчисления

f, e или g

Вещественное число, бесконечность или не число (NAN)

a

Вещественное число в шестнадцатеричной системе исчисления

c

Символ

s

Строка

p

Указатель

n

Блокирование (пропуск) ввода

%

Ввод символа процента.

Функция printf предназначена для форматного вывода данных и имеет следующий заголовок:

int printf(const char * restrict format [,variables,…]);

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

int a,b;

double x;

printf(“%d %d %5.2lf”,a,b,x);

В данном примере сначала выводятся два значения целого типа (переменные a и b), а затем вещественного типа (переменная x).

Как и в функции scanf, сочетание %d или любое другое называется спецификатором типа. В общем случае он имеет следующий формат:

% [flag] [WIDTH][.PREC] [h|hh|l|ll|L] символ_типа

flag - для чисел указывает на необходимость вывода знака ‘+’ для положительных чисел, для строк управляет форматированием - по левому или по правому краю.

WIDTH - задает длину поля.

.PREC - задает количество символов после запятой для вещественных чисел и минимальное количество знаков для целых чисел.

h, hh, l, ll, L - аналогично функции scanf.

Пример: даны два целых числа, организовать их ввод в формате a*b= и вывести значение их произведения.

#include<stdio.h>

int main(int argc, char *argv[])

{

int a,b;

scanf(“%d*%d=”,&a,&b);

printf(“%d\n”,a*b);

return 0;

}

В таблице 2.3 приведены основные функции для математических вычислений из библиотеки math.h.