ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ

Цель работы

Исследование методов обработки массивов данных при помощи функций.

Методические указания

Передача массивов в качестве аргументов функции. Обычный метод передачи массива функции показывает пример 1:

#include

void print(int* massiv); /*Макет функции*/ void main(void) { intv[3],i; for (i=0; i<3; i++) v[i]=i;

print(v); /*Вызов функции и передача адреса массива*/ for (i ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ-0; i<3; i++) printf("%d ",v[i]);

} void print(int mass[3]

{ int i; for(i=0;i<3;i++) printf("%d ",mass[i]++); printf("\n");}

В итоге работы этой программки на дисплее увидим:

012 123.

До вызова функции print массив v содержал элементы 0, 1 и 2. Функция print приняла адресок массива v и присвоила этот адресок переменной ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ mass. После вы­вода каждое значение массива mass (1-ая строчка результатов) увеличивает­ся на единицу. Так как переменная mass показывает на массив v, на единицу возросли элементы массива v (2-ая строчка результатов). Другими сло­вами, массивы v и mass размещены в одной и той же области памяти, и из­менение ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ в mass значит изменение в v.

В этом примере размер массива, обрабатываемого функцией print, дол­жен быть известен до компиляции. Такая реализация необязательна: функции print нужен только исходный адресок массива, а количество частей можно передать еще одним аргументом, как в примере 2:

void print(int* massiv, int lines); /*Макет функции ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ*/

void main(void)

{ int v[3],i; for (i=0; i<3; i++) v[i]=i;

print(v,3); /*Передаем адресок массива и количество частей*/ for(i=0;i<3;i++)printf(“%d",v[i]);

}

void print(int mass[], int m)

{ int i; for (i = 0); i

Результаты, выводимые на ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ экран, не поменялись. Но сейчас, при изме­нении в функции main размера массива v нет необходимости что-либо поменять в функции print. Как и в примере 1, массивы v и mass размещены в одной и той же области памяти, и изменение в mass значит изменение в v.

Общее в примерах 1 и 2 в ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ том, что массив в функцию можно передать и как ссылку на его 1-ый элемент. К примеру, в примере 2 массив в функцию print можно передать так:

Пример 3.

void print(int* mass, int m)

{ int i; for (int i = 0; i

В случае ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ многомерных массивов почти все совпадает со случаем одномер­ного массива. Разглядим примеры с двумерным массивом:

Пример 4.

#include

void print(int matrix[2][3]); /*Макет функции*/

void main(void)

{ int v[2][3], i, j; for (i=0; i<2; i++) for (j=0; j<3; j++) v[i][j]=i+j;

print(v); /*Вызов функции и передача адреса массива*/

for (i ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ=0; i<2; i++)

{ for (j=0;j<3;j++) printf("%d",v[i] [j]); printf("\n");}

} void print(int mass[2][3])

{ inti.j;

for (i=0; i<2; i++) { for (J=0;j<3;j++) printf("%d ",mass[i][j]++); printf("\n");}

}

Функция print выводит на экран элементы массива mass (1-ые две строчки) и наращивает их значения на единицу (последние ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ две строчки).

В последующих примерах размеры двумерного массива в функции print определяют при помощи аргументов.

Можно поступить так: сказать компилятору, что 1-ый параметр -массив строк по 3 элемента, а 2-ой - количество строк.

Пример 5.

void print(int matrix[][3], int lines); /*Макет функции*/

void main(void)

{ int v[2][3], i, j; for (i ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ=0; i<2; i++) for (j=0; j<3; j++) v[i] [j] = i+j;

print(v,2); /*Передаем адресок массива и количество строк*/'

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

{ for (j=0; j<3; j++) printf("%d ",v[i][j]); printf("\n");}

}

void print(int mass[][3], int m) { int i, j;

for (i=0; i

for (j=0; j<3; j++) printf("%d ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ ",mass[i].

Результаты не поменялись. Но сейчас при изменении количества строк

матрицы v в функции main не надо изменять что-либо в функции print.

Этот пример можно развивать дальше. Если функция работает только с одной строчкой двумерного массива, то можно передать адресок этой строчки.

Пример 6. void print(int* massiv ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ, int columns);

void main(void) { int v[2][3], i, j; for (i=0; i<2; i++) for (j=0; j<3; j++) v[i][j]=i+j;

for (H); i<2; i++)

print(v[i],3); /"'Передаем адресок строчки и количество частей*/ for (i=0; i<2; i++) { for (j=0; j<3; j++) printf("%d ",v[i][j]); printf("\n");}}

void print(int* mass ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ, int n)

( int i; for (i-0; i

Результаты, выводимые на экран, не поменялись. Но сейчас, при изме­нении хоть какого размера матрицы v нет необходимости что-либо поменять в функ­ции print. При таком подходе мы накладываем ограничения на работу функ­ции print ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ: она работает только с одной строчкой матрицы.

В примере 7 функция print свободна от таких ограничений и в качестве аргументов воспринимает адресок первого элемента, количество строк и столбцов матрицы:

Пример 7. void print(int** matrix, int lines, int columns);

void main(void) { int v[2][3], i, j; for (i=0; i<2; i++) for 0=0; j<3; j++) v[i ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ](j]=i+J;

print ((int**)v, 2, 3);

for (i=0; i<2; i++) { for j=0;j<3;j++) printf(“%d",v[i][j]); printf("\n");}}

void print(int** mass, int m, int n)

{ int *p=(int*)mass, i, j;

for (i=0; i

Тут переменная р является указателем на 1-ый элемент двумерного

массива. Элементы двумерного массива в памяти размещены построчно и безпрерывно. Другими словами, исходя из убеждений размещения в памяти, двумерный массив представляет собой одномерный массив. Для доступа kj-му элементу i-ой строчки довольно вычислить относительный адресок i*n+j ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ и отсчитать его от первого элемента p[i*n+j].

Результаты, выводимые на экран, не поменялись. Но сейчас, при изме­нении хоть какого размера матрицы v нет необходимости что-либо поменять в функ­ции print, и эта функция свободна от прошлых ограничений.

Описание имени типа директивой typedef

Директива typedef ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ позволяет связать хоть какой основной либо производный тип с неким именованием, а потом использовать это имя типа. Такое описание употребляется для сотворения более маленьких либо осмысленных имен типов.

Синтаксис описания имени типа:

typedef [,...]:

typedef- это ключевое слово компилятора Си.

может быть именованием известного типа (даже из перечня [,...]) либо описанием типа. К примеру ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ:

typedef int MyInt;

typedef MyInt MyInt;

Имена [,...] становятся синтаксически эквивалентными главному слову и называют тип, обозначенный в . Они не мо­гут совпадать с именами переменных, формальных характеристик, перечисли­мых констант и функций. Имена могут быть переопределены снутри блоков программки. Имена для типов указателя, структуры либо совмещения могут ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ быть объявлены до того как эти типы будут описаны. Имена типов можно использовать в описаниях переменных и функций как ссылки на этот тип.

Примеры:

typedef int WHOLE;

typedef void DRAW(int, int);

typedef WHOLE MASSIV[10];

В первом примере объявляется WHOLE как синоним для int.

Во 2-м примере представлен тип DRAW ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ для функции не возвра­щающей значения и требующей два аргумента типа int. Это значит, напри­мер, что объявление DRAW box; эквивалентно объявлению void box(int, int);

В 3-ем примере описывается тип массива 10 целых частей с именованием MASSIV, которое можно использовать так:

MASSIV myList;

Указатели на функцию, их ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ внедрение в качестве параметра функции

Всякую функцию можно вызвать либо получить ее адресок. Имя "функции, возвращающей ...", всегда преобразуется в "указатель на функцию, возвраща­ющую ..." (т.е. имя функции это то же, что и указатель на функцию), если только оно не является аргументом вызова другой функции. Можно очевидно обрисовать «указатель на ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ функцию». Синтаксис описания таковой переменной сле­дующий:

(*)();

- это тип возвращаемого значения функций, на которые может потом указывать .

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

Пример.

int myfunc1( double*, int, int); /*1-ая функция*/

int myfunc2( double*, int, int); /*2-ая функция ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ*/

int (*myfunc)( double*, int, int); /*Указатель на такие функции*/

void main(void)

{ double x=2.3; int i=4, k=5;

myfunc=&myfunc1; /*Берем адресок вызываемой функции*/ i=(*myfunc)(&x, i, k); /*Вызываем эту функцию (myfunci)*/

}

Для вызова функции по указателю необходимо выполнить операцию оборотной ссылки *. Так как круглые скобки справа от имени имеют больший ценность ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ, чем звездочка слева, то операцию оборотной ссылки необходимо заключить в круглые скобки: (*). Правила передачи аргументов схожи для вызовов по имени функции и по указателю на функцию.

Комфортно обрисовать имя типа "указатель на функцию". К примеру,

typedef int (*MYFUNC)( double*, int, int);

Это имя типа можно использовать разным образом ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ. К примеру,

MYFUNC myfunc, myfuncs [] =

{ myfunc1, myfunc2, myfunc3, myfunc4 };

значит, что myfunc является указателем на функции, a myfuncs – массивом указателей на функции. Можно обрисовать и инициализировать указатели:

MYFUNC* funcs= myfuncs.

Переменная funcs необязательна для вызова функций. Для вызова можно воспользоваться и массивом myfuncs. Но комфортно сразу хранить ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ адресок вызываемой функции и адресок массива указателей на функции.

Вызов функции по индексу тогда смотрится таким макаром.

(*funcs[i]) (&x, i, k); /*Вызываем функцию myfunci*/

Указатель на функции может быть формальным параметром функции. К примеру,

int func( char* с, intsz, MYFUNC f)

{…

if((*f)(&x,i,k)>0)...}

void main ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ(void)

{ …

к=func("Вызов с первой функцией", 15, myfunc1);

}

Массив указателей на функции также может быть формальным пара­метром функции. К примеру,

typedef MYFUNC funcs[4];

int func( funcs);

функция func воспринимает массив из 4 указателей на функции и возвращает целое. Функции могут возвращать указатели на функции.

К примеру,

typedef int F(void);

F*g ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ(...) {/*..*/} либо MYFUNC fnctn(...);

Пример выполнения задания

Создать программку вычисления суммы и разности 2-ух чисел с по­мощью функций сложения и вычитания и указателей на эти функции. Решение может иметь последующий вид:

#include /*Макеты функций*/ double Add(double, double);

double Sub(double, double);

/"'Описание имени типа указателя на функции*/ typedef double ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ (*MYFUNC)(double, double);

/*Макет функции, которая вызывает обозначенную параметром функцию*/ void function(char*, double, double, MYFUNC f);

void main(void) { function("Сумма 4 и 2 равна:", 4., 2., Add);

function("Разность 4 и 2 равна:", 4., 2., Sub);

} double Add(doublex, double y) { return x+y;}

double Sub(doublex, double y) { return x-y;}

void function ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ(char* str, doublex, double y, MYFUNC f)

{ printf("%s %lf\n", str, (*f)(x,y));}

Результаты работы программки на дисплее отобразятся так:

Сумма 4 и 2 равна: 6 Разность 4 и 2 равна: 2.

Контрольные вопросы

1. Что передается функции, если единственный аргумент массив?

2. Как передать адресок строчки двумерного массива?

3. Каковы составляющие синтаксиса описания имени типа?

4. Каковы ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ правила описания указателя на функции?

5. Как обрисовать массив указателей на функцию?

6. Каким образом обрисовать функцию в роли формального параметра?

7.Каким образом обрисовать функцию в роли типа возврата?

Варианты заданий

1. Функция воспринимает массив знаков S1, читает с клавиатуры после­довательность знаков S2 и возвращает количество совпадений знаков в массивах S1 и ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ S2.

В вариантах 2-15 использовать указатели на функции.

2. Сделать три функции, которые вычисляют сумму, разность и произ­ведение 2-ух массивов.

3. Решить задачку 2., используя массив указателей на функции.

4. Отыскать корень уравнения x*x-cos(x)=0 способами Ньютона, итераций и половинного деления.

5. Решить задачку 4., используя массив указателей на функции.

6. При ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ помощи 2-ух разных функций отыскать малый и макси­мальный элементы массива.

7. Решить задачку 6., используя массив указателей на функции.

8. При помощи 2-ух разных функций упорядочить элементы массива по убыванию и возрастанию.

9. Решить задачку 8., используя массив указателей на функции.

10. Для выбора наибольшего элемента данного массива по указателю вызвать одну из функций ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ.

11. Решить задачку 10., используя массив указателей на функции.

12. Вычислить f(x)/g(x), где в качестве f(x) и g(x) могут быть четыре разные функции, возвращающие вещественные значения.

13. Решить задачку 12., используя массив указателей на функции,

14. В согласовании с номером избранного пт меню выполнить ту либо иную функцию.

15. Решить задачку 14., используя массив ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ указателей на функции. 16- Передать функции массив имен и приветствовать всех данных в массиве по имени (к примеру, «Здравствуйте, Вася!»).

17. Обрисовать функцию, которая воспринимает массив и транспонирует его.

18. При помощи функции, возвращающей указатель на двумерный мас­сив, с точностью до 3-х верных символов решить систему Ах == lх по формуле

– длина вектора ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ хi х0 = {1,0, ...,0},i= 0,1,2,...,

А – данная n*n матрица.

19. Найти массив номеров i наибольших коэффициентов c(i,n)=n!/(i!(n-i)!), 0

20. Вычислить значение полинома

Pn(x)=anxn+ an-1xn-1... +a2x2+a1x + а0 по схеме Горнера

Рn(х)=((an)x+an-1)x+an-2)x +ап-з)х +... +a ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ1x +a0 и значение функции

z(x)= Pn(x)/ Рm(х) при разных значениях х и массивах коэффициентов полиномов.

21. В данном массиве знаков S1 все знаки прирастить на величину axn2+bxn+c(п – позиция знака в строке, а, b, с - аргументы функции), из приобретенного массива знаков S2 вернуть начальный ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ массив другой функцией. Возвратить количество ошибок восстановления.

22. Вычислить массив коэффициентов c(i,n) при всех степенях полинома (1+х)". Использовать формулы

c(0,n)==c(n,n)=l; c(i,n)=c(i,n-l)+c(i-l,n-l): 0

23. Вычислить длину самой длинноватой строчки в массиве строк.

24. Вычислить количество слов ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ в массиве строк и возвратить массив, содержащий количество слов в каждой строке.

25. Конвертировать массив знаков в массив целых и возвратить его.

Лабораторная работа № 14

С Т Р У К Т У Р Ы

Цель работы

Исследование производных типов данных. Структуры и объединения.

Методические указания

1. Предназначение структур

Структура – это составной объект, в который входят элементы всех ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ типов, кроме функций. В отличие от массива, все элементы которого должны быть 1-го типа, структура соединяет воединыжды элементы различных типов. Структуру можно рассматривать как набор из одной либо нескольких переменных, которые для удобства работы с ними сгруппированы под одним именованием.

2. Описание структурных переменных

Для описания структурных переменных сначала ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ нужно указать тип структуры, который определяется так:

struct

{

} перечень переменных;

Элементы структуры могут иметь базисный тип, или быть массивом, указателем, объединением либо структурой. Элемент структуры не может быть структурой такого же типа, в какой он содержится. Но он может быть описан как указатель на тип структуры, в которую он ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ заходит. Это позволяет создавать связанные списки структур.

Пример:

struct

{

int k; /* перечень */

float l; /* описаний */

char m; /* частей */

} перечень переменных ;

Для описания структурных переменных есть несколько методов:

а) без имени структуры.

В данном случае структурные переменные описываются так:

,

где – это тип структуры для переменных, имена которых указаны в перечне. Ниже приведены ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ примеры описания структурных переменных.

Пример.

Конструкция

struct

{

int x;

float y;

} a, b, c ;

обрисовывает три структурные переменные a, b и c, любая из которых представляет собой структуру, состоящую из 2-ух частей x и y.

Пример.

Дата состоит из нескольких частей: денек, месяц, год. Для представления даты можно использовать структуру, которая будет ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ иметь элементы: day (денек), month (месяц), year (год).

Конструкция

struct

{

int day; /* денек */

int month; /* месяц */

int year; /* год */

} date1;

определяет структурную переменную date1.

б) через определение типа структуры.

При использовании этого метода поначалу в программке с типом структуры связывается некое имя при помощи ключевика typedef:

typedef struct

{

} ;

В предстоящем ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ это можно использовать в программке для определения структурных переменных. К примеру, для представления всеохватывающего числа можно использовать структуру:

typedef struct

{

float real; /* действит. часть */

float imag; /* надуманная часть */

}

COMPLEX;

Сейчас, чтоб найти в программке два всеохватывающих числа, довольно записать:

COMPLEX A1, A2;

в) через метку структуры.

В данном случае с ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ типом структуры связывается метка структуры:

struct

{

};

Сейчас, используя метку структуры, можно найти структурные переменные при помощи конструкции:

struct ;

К примеру, пусть дано описание

struct DATE /*DATE – это метка структуры */

{

int day; /* денек */

int month; /* месяц */

int year; /* год */

};

Тогда конструкция

struct DATE date2, date3, date4;

определяет три структурные переменные date2, date3, date ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ4.

Методы б) и в) использовать целесообразнее, если структура употребляется в разных функциях.

3. Воззвание к элементам структур

Воззвание к элементу структуры осуществляется при помощи составного имени, которое состоит из имени самой структуры и имени элемента, разбитых точкой:

.

Примеры:

date2. day = 1;

date3. month = 7;

date4. day = 3.

4. Инициализация структур, ввод–вывод

Если структура ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ является глобальной либо статической, то ее можно инициализировать конкретно в месте определения, поместив прямо за ее определением перечень инициализаторов для частей.

Перечень инициализаторов – это последовательность значений, разбитых запятыми. Перечень инициализаторов заключается в фигурные скобки. Каждый инициализатор в перечне представляет собой или постоянное выражение, или, в свою очередь, перечень инициализаторов. Ниже ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ приведен пример инициализации статической структуры.

struct A

{

int b;

char c;

};

static struct A a1 = {1, ‘R’};

Значения постоянных выражений из каждого перечня инициализаторов присваиваются элементам структуры в порядке их следования. Так, в приведенном выше примере элементу b структуры a1 присваивается значение 1, а элементу c – значение ‘R’.

Если в перечне инициализаторов меньше частей ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ, чем в структуре, то оставшиеся элементы структуры неявно инициализируются нулевыми значениями. Если же число инициализаторов больше, чем требуется, то выдается сообщение об ошибке.

Ниже приведен пример, иллюстрирующий инициализацию структуры и ввод–вывод частей структуры.

# include

struct person

{

char name [25]; /* фамилия */

int year; /* год рождения*/

};

struct person p = {“Иванов”, 1980};/*инициализация ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ частей структуры p*/

void main ( )

{

printf (“\n Фамилия: % s”, p. name);

printf (“\n Год рождения: %d”, p. year);

printf (“\n Введите фамилию: “);

scanf (“%s”, p.name);

printf (“\n Введите год рождения: “);

scanf (“%d”, & p.year);

printf (“\n\n Фамилия: %s”, p.name);

printf (“\n Год рождения: %d\n ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ”, p.year);

}

5. Массивы структур

Пусть, к примеру, ведомость, содержащая сведения о 100 служащих, состоит из последующих граф: фамилия, должность, год рождения. Эту ведомость можно обрисовать как массив структур:

struct person

{

char name [25]; /* фамилия */

сhar post [25]; /* должность */

int year; /* год рождения */

};

struct person Vedomost [100]; /* Vedomost – массив структур */

В этом примере определяется массив Vedomost, элементы которого ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ являются структурами. Массив состоит из 100 частей. Каждый элемент массива – это структура, состоящая из 3-х компонент с именами name, post, year.

Пример:

Vedomost [0]. year = 1950; /* присвоить значение 1950 */

/* компоненту year структуры, */

/* которая имеет индекс 0 */

6. Вложенные структуры

Допускается внедрение структуры в качестве элемента другой структуры.

Пример.

При помощи структуры можно обрисовать учетную карточку служащего ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ:

struct employee

{

char name [25]; /*фамилия */

struct DATE birthdate; /* дата рождения */

};

Структура employee содержит внутри себя структуру типа DATE (структурный тип DATE был описан выше).

Определим структурную переменную e1:

struct employee e1;

Тогда e1.birthdate.month будет ссылаться на месяц рождения служащего.

7. Указатели на структуры

Допускается внедрение указателя на ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ структуру.

К примеру, конструкция

struct DATE *pd, date5;

определяет указатель pd на структуру типа DATE и структурную переменную date5. Для использования указателя pd в программке, ему нужно поначалу присвоить значение, к примеру

pd = &date5; /* присвоить указателю pd адресок структурной переменной date5 */

8. Воззвание к элементам структур через указатели

Если p – указатель на структуру ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ, то при помощи записи вида

p – > элемент

можно обратиться к определенному элементу структуры.

Пример:

pd ® year

Доступ к элементу структуры через указатель можно выполнить и другим методом:

(*p). элемент

где p – указатель на структуру. Таким макаром, конструкции

pd ® year

и

(*pd). year

эквиваленты.

Примеры воззваний к элементам структуры через указатель:

pd ® month

(*pd).day

9. Внедрение структур в функциях

Если аргументом функции ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ является структура, то можно передавать характеристики одним из 3-х методов:

– передавать элементы структуры по отдельности;

– передавать всю структуру полностью;

– передавать указатель на структуру.

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

Пусть, к примеру, необходимо делать сложение и вычитание всеохватывающих чисел. Для ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ представления всеохватывающего числа будем использовать структуру, а для сложения и вычитания всеохватывающих чисел – функции add и sub. Аргументами этих функций являются указатели c1, c2, c3 на структуры (c1, c2 – это указатели на структуры, которые служат начальными данными для операций сложения и вычитания, c3 – это указатель на структуру, которая является ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ результатом выполнения этих операций).

#include

typedef struct

{ float real;

float imag;

} COMPLEX;

void assign_real(COMPLEX *c,float r) /* Присвоить значение r */

{ /* реальной части */

c->real=r; /* всеохватывающего числа */

}

void assign_imag(COMPLEX *c,float i) /* Присвоить значение i */

{ /* надуманной части */

c->imag=i; /* всеохватывающего числа */

}

void add(COMPLEX *c ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ1,COMPLEX *c2,COMPLEX *c3)

{

c3->real=c1->real+c2->real;

c3->imag=c1->imag+c2->imag;

}

void sub(COMPLEX *c1,COMPLEX *c2,COMPLEX *c3)

{

c3->real=c1->real-c2->real;

c3->imag=c1->imag-c2->imag;

}

void print_complex(COMPLEX *c)

{

printf("\n Действительная часть = % f, надуманная часть = % f ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ’’, с – > real,

c – > imag);

}

/* пример использования функций для работы с всеохватывающими числами */

void main()

{

COMPLEX a1,a2,a3; /* три всеохватывающих числа */

assign_real(&a1,5); /* пусть дейст. часть 1-го всеохватывающего числа равна 5 */

assign_imag(&a1,7); /* пусть надуманная часть 1-го всеохватывающего числа равна 7*/

assign_real(&a2,3); /* пусть действ. часть 2-го ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ всеохватывающего числа равна 3 */

assign_imag(&a2,4); /* пусть надуманная часть 2-го всеохватывающего числа равна 4*/

printf("\n 1-ое всеохватывающее число:”);

print_complex(&a1);

printf("\n 2-ое всеохватывающее число:");

print_complex(&a2);

add(&a1,&a2,&a3); /* Сложить всеохватывающие числа a1 и а2*/

printf("\n Итог сложения 2-ух всеохватывающих чисел:");

print ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ_complex(&a3);

sub(&a1,&a2,&a3); /* а1 – а2 */

printf("\n Итог вычитания всеохватывающих чисел :");

print_complex(&a3);

}

10. Объединения

Объединение позволяет в разные моменты времени хранить в одной и той же области памяти значения разных типов. Объединения описываются также, как и структуры, но заместо ключевика struct употребляется ключевое слово union.

Пример ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ.

union

{

int x;

float y;

double Z;

} A, B; /* определение 2-ух переменных типа объединение */

Пример.

union number

{

int x;

float y;

double Z;

};

union number F; /* определение переменной F типа объединение */

Все элементы объединения располагаются в одной и той же области памяти с 1-го и такого же адреса. В каждый момент времени в ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ переменной типа объединение хранится только одно значение. Контроль за тем, какого типа значение хранится на этот момент в объединении, возлагается на программера. Память, которая выделяется переменной типа объединение, определяется размером более длинноватого из частей объединения.

Воззвание к элементу объединения осуществляется так:

.

Пример.

F. x = 5; /* присвоить элементу x значение ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ 5 */

F.y = 3.2; /* присвоить элементу y значение 3.2 */

Контрольные вопросы

1. Что такое структура? В чем состоит предназначение структуры?

2. Чем отличается структура от массива?

3. Каким образом описывается структурная переменная?

4. Как осуществляется воззвание к элементу структуры?

5. Каким образом можно инициализировать структуру?

6. Что такое вложенная структура? Приведите пример.

7. Как присвоить значение указателю на структуру?

8. Каким образом ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ осуществляется воззвание к элементу структуры через указатель? Приведите пример.

9. Чем отличается объединение от структуры?

10. Как описывается объединение?

Варианты заданий

В каждом задании ввести и вывести элементы структур.

1. Обрисовать массив структур и поместить в него сведения (номер читательского билета, фамилия, имя, отчество, должность) о 3-х читателях библиотеки.

2. Обрисовать массив структур и ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ поместить в него сведения (создатель, заглавие, издательство, год издания, тираж, число страничек) о 4 книжках.

3. Массив структур содержит информацию о студентах: фамилия , номер группы, средний балл в сессию (каждый элемент массива содержит информацию об одном студенте). Заполнить массив данными для 5 студентов.

4. Обрисовать массив структур, содержащий сведения о 3-х журнальных ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ статьях: создатель, заглавие статьи, заглавие журнальчика, год издания, номер.

5. Обрисовать массив структур и поместить в него сведения (факультет, номер группы, шифр специальности, заглавие специальности) о 5 учебных группах.

6. Обрисовать массив структур, который содержит информацию о 4 деталях (наименование, масса, габариты (длина, высота, ширина), материал).

7. Обрисовать массив структур и поместить в него ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ сведения (заглавие кинофильма, страна, число серий, жанр) о 4 кинофильмах.

8. Обрисовать массив структур и поместить в него сведения (номер аудитории, вместимость, площадь) о 5 аудиториях.

9. Организовать массив структур и поместить в него информацию (заглавие кинозала, вместимость, число залов) о 5 кинозалах.

10, 11, 12. Найти структуру, содержащую сведения о товарах на складе (шифр продукта, наименование продукта, количество ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ единиц, цена единицы). Обрисовать массив структур и поместить в него сведения о 5 канцелярских товарах (задание №10), 5 продовольственных товарах (задание №11), 5 промышленных товарах (задание №12).

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

14. Сводка о выполнении плана содержит сведения ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ: наименование изделия, шифр, единица измерения, план выпуска, практически выпущено, отклонение от плана (перевыполнение, недовыполнение). Обрисовать массив структур и заполнить его данными для 5 позиций сводки.

15. Обрисовать и заполнить массив структур сведениями о выполнении плана выпуска продукции по последующей форме (для 3-х изделий):

№ п/п Наименование Единица измерения Шифр План выпуска ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ
Всего По кварталам
II III IIII IIV

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

17. Таблица содержит результаты спортивных соревнований: Ф.И.О., время на 100 м, время на 1 км ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ, прыжок в высоту, прыжок в длину. Обрисовать массив структур и заполнить его данными для 6 спортсменов.

18. Обрисовать массив структур, содержащий сведения о библиотечных книжках: создатель; заглавие книжки; год издания; шифр книжки; количество экземпляров, имеющихся в библиотеке.

Заполнить массив данными о 3-х книжках.

19. Обрисовать массив структур, содержащий сведения об учебных дисциплинах: заглавие дисциплины ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ, педагог, номер группы. Заполнить массив информацией о 5 дисциплинах.

20. Обрисовать массив структур, содержащий сведения о расписании экзаменов: дисциплина; дата консультации; время консультации; аудитория, в какой проводится консультация; дата экзамена; время экзамена; аудитория, в какой проводится экзамен. Заполнить массив информацией об экзаменах прошедшей сессии в Вашей группе.

21. Обрисовать массив структур, содержащий ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ сведения о библиотечных книжках, читаемых на этот момент: заглавие книжки, читатель, дата выдачи, срок возврата. Заполнить массив данными для 4 книжек.

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

23. Таблица содержит сведения о расписании ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ и состоит из последующих граф: номер группы, дисциплина, педагог, аудитория, неделя (числитель, знаменатель), денек недели, время. Обрисовать массив структур и заполнить его данными для 3-х строк таблицы.

24. Обрисовать массив структур, содержащий сведения о наличии фармацевтических средств в аптеке (лечущее средство, стоимость, единица измерения, количество, срок годности) и заполнить ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ его данными о 4 лекарствах.

25. Организовать массив структур и поместить в него сведения (номер группы, заглавие специальности, число студентов в группе, факультет, курс) о 3-х учебных группах.


Лабораторная работа № 15

ФАЙЛЫ

Цель работы

Исследование средств сотворения и обработки файлов поочередного и прямого доступа.

Методические указания

1. Понятие файла

Файл – это упорядоченная совокупа случайного числа компонент ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ, расположенная на наружном запоминающем устройстве и имеющая единое имя, называемое физическим названием файла. В программке на языке Си файлу соответствует внутреннее логическое название файла . Для юзера все файлы в языке Си рассматриваются как последовательности, потоки байтов.

Для файла определен маркер (указатель чтения/записи). Он показывает текущую позицию файла, к которой ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ осуществляется доступ.

С началом работы хоть какой программки автоматом открываются некие стандартные потоки, к примеру, стандартный ввод (stdin) и стандартный вывод (stdout). По дефлоту они связаны с клавиатурой и экраном терминала соответственно.

2. Объявление файла

Внутреннее логическое название файла должно быть объявлено в программке при помощи оператора FILE*;

Тип FILE – это структура ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ, определенная в stdio.h при помощи средства typedef и содержащая некую информацию о файле: к примеру, флаги состояния файла, размер буфера, указатель на буфер и др.

К примеру, после объявления

FILE *fp;

fp будет являться указателем на структуру типа FILE. С файлами можно создавать такие деяния, как создание и ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ открытие файла, чтение и запись, закрытие файла. Чтоб в программке использовать функции для работы с файлом, нужно директивой # include включить в программку файл stdio.h.

3. Открытие файла

Перед выполнением операций ввода–вывода данных файла нужно его открыть при помощи функции fopen:

= fopen (“”, “”);

Эта функция связывает внутреннее логическое название файла ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ , объявленное в программке как указатель на структуру типа FILE, с физическим названием файла, обозначенным параметром . При успешном открытии файла функция fopen возвращает указатель на структуру типа FILE. Этот указатель употребляется для следующих операций с файлом.

Параметр определяет, как должен употребляться файл:

“r” – файл раскрывается для чтения (файл должен существовать);

“w” – файл раскрывается ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ для записи;

“a” – файл раскрывается для записи в конец файла (прибавления).

К примеру, при помощи оператора

fp = fopen (“data.txt”, “r”);

раскрывается для чтения файл data.txt и связывается с указателем fp.

Можно задавать не только лишь название файла, да и путь к файлу.

Если для записи (“w”) либо прибавления ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ (“a”) раскрывается несуществующий файл, то он создается.

Внимание: если для записи (“w”) раскрывается имеющийся файл, то его содержимое пропадает.

Если при открытии файла произошла ошибка, то функция fopen возвращает значение NULL.

Пример:

# include

void main ()

{

FILE *p;

if ((p = fopen (“data2”, “r”))! = NULL) / *проверка – удачно ли ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ */

/*открыт файл */

{ …

/* работа с файлом */

}

else

printf (“\n Ошибка открытия файла data2”);

}

4. Закрытие файла

После окончания работы с файлом он непременно должен быть закрыт при помощи функции

fclose ().

Пример:

FILE *p;

fclose (p); /*закрыть файл */

Функция fclose возвращает значение 0, если файл закрыт удачно, и значение EOF – в неприятном случае.

Константа EOF, определенная в файле ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ stdio.h, обозначает признак конца файла. Пример использования константы EOF дан в п. 5.1.

5. Ввод–вывод данных файла

Функции, применяемые для ввода с клавиатуры и вывода на экран, имеют аналоги для ввода-вывода данных файла. Особенностью функций ввода–вывода данных файла будет то, что в их нужно использовать указатель типа FILE, определяющий ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ с каким файлом им следует работать. Разглядим функции, созданные для обмена данными разных типов с файлами.

5.1. Ввод–вывод знака

Обмен символьной информацией с файлом может быть осуществлен при помощи функций getc и putc.

Для вывода знака из файла служит функция getc. Функция getc возвращает значение типа int. Оператор вывода знака ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ из файла в общем виде записывается так:

= getc ().

Так, к примеру, оператор

ch = getc (in);

обеспечивает вывод знака из файла, на который ссылается указатель in типа FILE, и при всем этом знак запоминается в переменной ch.

Если находится ошибка либо достигается конец файла, то функция qetc возвращает значение EOF ФУНКЦИИ. ИСПОЛЬЗОВАНИЕ МАССИВОВ И ФУНКЦИЙ В КАЧЕСТВЕ ФОРМАЛЬНЫХ ПАРАМЕТРОВ.

Функция

putc (, );

обеспечивает запись знака в файл. К примеру, оператор putc (‘A’, out); обеспечивает запись знака ‘A’ в файл, на который ссылается указатель out типа FILE.

Ниже приведена программка, в кото


funkcii-mezhlichnostnoj-kommunikacii.html
funkcii-mishci-podimayushej-lopatku.html
funkcii-mozga-nejroni-i-ih-sinapsi.html