Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
+ЭУМКД КИТ-ч1-Бутов.docx
Скачиваний:
9
Добавлен:
05.05.2019
Размер:
262.85 Кб
Скачать

Передача массивов в качестве параметров функции

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

Пример функции для подсчета суммы значений элементов массива:

#include <stdio.h>

int func(int *p, int size) //другой вариант заголовка: int func(int p[ ], int size)

{

int s = 0, i;

for(i = 0; i < size; i++)

s += *(p + i);

return s;

}

void main()

{

int mas[] = {1,3,5,7,9};

printf("%d", func(mas, 5));

}

Пример функции, подсчитывающей длину строки:

#include <stdio.h>

int strsize(char *s) //другой вариант заголовка: int strsize(char s[ ])

{

int n = 0;

while(*s != ‘\0’)

{

n++;

s++;

}

return n;

}

void main()

{

char str[] = "!!!2010!!!";

printf("%d", strsize(str));

}

Функция main, ее параметры

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

  1. Без параметров:

тип main( )

{ тело функции}

  1. С двумя параметрами:

тип main(int argc, char *argv[ ])

{ тело функции}

При запуске программы параметры разделяются пробелами. Имена параметров в программе могут быть любыми, но принято использовать argc и argv. Первый параметр (argc) определяет количество параметров, передаваемых функции, включая имя самой программы, второй параметр (argv) является указателем на массив указателей типа char *. Таким образом, каждый элемент массива содержит указатель на отдельный параметр командной строки, хранящийся в виде строки символов, оканчивающейся нуль-символом. Первый элемент массива (argv[0]) ссылается на полное имя запускаемого на выполнение файла, следующий (argv[1]) указывает на первый параметр, argv[2] – на второй параметр и т.д. Параметр argv[argc] должен быть равен 0.

Если функция main ничего не возвращает или возвращает нулевое значение, вызвавшая система получит значение, означающее успешное завершение. Ненулевое значение означает аварийное завершение. Оператор возврата из main можно опускать.

Пример функции main, которая выводит на экран значения своих параметров:

#include <stdio.h>

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

{

int i;

for(i = 0; i < argc; i++)

printf("%s\n", argv[i]);

return 0;

}

Пусть исполняемый файл программы имеет имя task.exe и вызывается из командной строки:

d:\work\task.exe one two three

На экран будет выведено:

d:\work\task.exe

one

two

three

Функции стандартной библиотеки

Любая программа на языке С содержит обращения к стандартной библиотеке, в которой находятся определения типов, констант функций и макросов. Чтобы использовать их в программе, требуется с помощью директивы препроцессора #include включить в исходный текст программы заголовочные файлы, в которых находятся соответствующие объявления. Сами библиотечные функции хранятся в скомпилированном виде и подключаются к программе на этапе компоновки.

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

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

printf(...) – выполняет форматный вывод данных на экран (возвращает количество напечатанных символов);

puts(s) – выводит на экран строку символов, задаваемую указателем s (возвращает s);

putchar(c) – выводит символ c на экран (возвращает c);

scanf(...) – выполняет форматный ввод данных с клавиатуры (возвращает число введенных элементов данных);

gets(s) – вводит на экран строку символов, задаваемую указателем s (возвращает s);

getchar() – возвращает следующий символ ввода или, если обнаружен конец файла, константу EOF;

fflush(stdin) – очистка буфера ввода stdin от лишних данных, если они есть;

fopen(...) – открывает файл с заданным именем и заданной операцией (возвращает указатель на файл);

fscanf(fp, ...) – выполняет форматный ввод данных из файла (возвращает число введенных элементов данных);

fprintf(fp,...) – выполняет форматный вывод данных в файл (возвращает количество выведенных символов);

fclose(fp) – закрывает файл, на который указывает fp (возвращает нуль или EOF в случае ошибки);

rewind(fp) – позиционирует указатель файла fp на начало файла (ничего не возвращает);

fgets(s,n,fp) – читает не более n-1 символов из файла по указателю fp в строку символов s (возвращает s);

fputs(s,fp) – записывает строку символов s в файл по указателю fp (возвращает s);

. . .

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

strcat(s,t) – добавляет t в конец s;

strncat(s,t,n) – добавляет n символов t в конец s;

strcmp(s,t) – возвращает отрицательное число, нуль или положительное число для s < t, s == t, s > t соответственно;

strncmp(s,t,n) – делает то же, что и strcmp, но количество сравниваемых символов не может превышать n;

strcpy(s,t) – копирует t в s;

strncpy(s,t,n) – копирует не более n символов t в s;

strlen(s) – возвращает длину s;

strchr(s,c) – возвращает указатель на первое появление символа c в s или, если c нет в s, константу NULL;

strrchr(s,c) – возвращает указатель на последнее появление символа c в s или, если c нет в s, константу NULL;

strstr(s,t) – возвращает указатель на первое появление подстроки t в s или константу NULL в противном случае;

. . .

В заголовочном файле ctype.h содержатся описания следующих стандартных функций для проверки символов. Они возвращают ненулевое значение (истина), когда аргумент c типа char удовлетворяет описанному условию или принадлежит указанному классу символов, и нуль (ложь) в противном случае.

isdigit(c) – десятичная цифра;

isxdigit(c) – шестнадцатиричная цифра;

isalpha(c) – буква;

isupper(c) – буква верхнего регистра;

islower(c) – буква нижнего регистра;

isalnum(c) – буква или десятичная цифра;

isspace(c) – пробел, табуляция, новая строка, новая страница;

isgraph(c) – печатаемый символ кроме пробела;

isprint(c) – печатаемый символ включая пробел;

ispunct(c) – печатаемый символ кроме пробела, буквы или цифры;

iscntrl(c) – управляющий символ.

Помимо перечисленных есть две функции, приводящие буквы к одному из регистров:

tolower(c) – возвращает букву на нижнем регистре;

toupper(c) – возвращает букву на верхнем регистре.

В заголовочном файле math.h содержатся в частности описания следующих стандартных математических функций (аргумент х и возвращаемое значение имеют тип double):

sin(x) – возвращает синус х;

cos(x) – возвращает косинус х;

tan(x) – возвращает тангенс х;

asin(x) – возвращает арксинус х;

acos(x) – возвращает арккосинус х;

atan(x) – возвращает арктангенс х;

sinh(x) – возвращает гиперболический синус х;

cosh(x) – возвращает гиперболический косинус х;

tanh(x) – возвращает гиперболический тангенс х;

exp(x) – возвращает е в степени х (экспоненциальная функция);

log(x) – возвращает натуральный логарифм х;

log10(x) – возвращает десятичный логарифм х;

pow(x,y) – возвращает х в степени у;

sqrt(x) – возвращает корень квадратный из х;

ceil(x) – возвращает наименьшее целое, больше или равное x;

floor(x) – возвращает набольшее целое, меньше или равное x;

fabs(x) – возвращает абсолютное значение х;

. . .

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

atof(s) – переводит стринг в число типа double;

atoi(s) – переводит стринг в число типа int;

atol(s) – переводит стринг в число типа long;

rand() – выдает псевдослучайное число в диапазоне от 0 до RAND_MAX = 32767;

srand(seed) – устанавливает seed в качестве начального значения (затравки) последовательности псевдослучайных чисел (вначале seed = 1);

malloc(size) – возвращает указатель на место в памяти для объекта размера size или, при невозможности, константу NULL;

free(p) – освобождает область памяти, на которую указывает указатель р;

exit(status) – вызывает завершение программы: для нормального завершения переменной status нужно присвоить значение EXIT_SUCCESS, в случае ошибки – EXIT_FAILURE;

system(s) – передает стринг s операционной среде для выполнения;

. . .

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

Стандартные типы данных:

time_t – имеет тот же диапазон, что и базовый тип long и предназначен для хранения календарного времени в форме, возврвщаемой функцией time(tp);

struct tm {

tm_sec //секунды от начала минуты (0, 59)

tm_min //минуты от начала часа (0, 59)

tm_hour //часы от полуночи (0, 23)

tm_mday //число месяца (1, 31)

tm_mon //месяцы после января (0, 11)

tm_year //годы после 1900

tm_wday //дни после воскресенья (0, 6)

tm_yday //дни после 1 января (0, 365)

tm_isdst //флаг светлого времени

};

Стандартные функции:

clock() – возвращает время в миллисекундах, фиксируемое процессором от начала счета программы. Для перевода в секунды нужно применить формулу: clock()/CLOCKS_PER_SEC;

time(tp) – возвращает текущее календарное время. Если указатель tp (на переменную типа time_t) не NULL, то возвращаемое значение записывается и в *tp;

ctime(tp) – преобразует календарное время в строку;

difftime(t1,t2) – возвращает разницу времен t1 и t2;

localtime(tp) – возвращает указатель на структуру tm, инициализированную на основе календарного времени;

. . .

В заголовочном файле graphics.h содержатся описания стандартных функций, связанных с отображением на экране графической информации: точек, линий, прямоугольников, дуг, эллипсов и др. (более 50 функций, которые здесь не приводятся).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]