Читайте также:
|
|
Основные возможности языка С реализованы посредством функций из различных библиотек. Понятие функции будет подробно рассмотрено в шестой главе, здесь же мы ограничимся представлением функции как именованного независимого фрагмента программы, который может быть вызван (запущен) из другой функции. Функция может иметь параметры - значения, которые необходимы для выполнения функции (передаются при вызове функции).
В языке С оператор вызова функций, в принципе, выделен условно (во многих книгах по языку 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.
Дата добавления: 2015-04-11; просмотров: 80 | Поможем написать вашу работу | Нарушение авторских прав |