double arrow

Cоздание и использование пользовательских функций

ФУНКЦИИ

Стандартные алгоритмы работы с двумерными массивами

Инициализация многомерных массивов

1. Инициализируем как одномерный массив.

float rain[2][3]={10.2, 8.1, 6.8, 9.2, 7.8, 4.4};

2. Инициализируем каждую строку.

float rain[2][3]={{10.2, 8.1, 6.8},

{9.2, 7.8, 4.4}};

3. Можно инициализировать в строке не все элементы, а только первые указанные.

int array[2][3]={{2, 8},

{9}};

4. Можно не задавать количество строк. Оно будет определяться автоматически по заданным инициализаторам.

int mas[][3]={{10, 8},

{9, 7, 4}};

К стандартным алгоритмам работы с двумерными массивами (матрицами) относятся:

1. Сложение (вычитание) двух матриц;

2. Умножение матрицы на скаляр;

3. Умножение матрицы на вектор;

4. Умножение матрицы на матрицу;

5. Транспонирование матрицы;

6. Вставка (удаление) строк и столбцов матрицы;

7. Вычисление обратной матрицы.

8. Перестановка строк и столбцов.

Пример 1. Сложение двух матриц.

void main(void){

int i,j;

float mas1[3][4], mas2[3][4];

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

for (j=0; j<4; j++){

mas1[i][j]+=mas2[i][j];

printf(mas1[%d][%d]=%.2f\n”, i, j, mas1[i][j]);

}

}

Пример 2. Умножение матрицы на вектор

void main(void){

int i,j;

float mas1[3][4], vec[4], var, mas2[3];

for (i=0; i<3; i++) {

var = 0;

for (j=0; j<4; j++)

var += mas1[i][j] * vec[j];

mas2[i] = var;

printf(mas2[%d] = %.2f\n”, i, mas2[i]);

}

}

Пример 3. Умножение матрицы на матрицу

void main(void){

int i, j, k;

float mas1[3][4], var, mas2[4][5], mas3[3][5];

for (i=0; i<3; i++) {

for (j=0; j<5; j++) {

var = 0;

for (k=0; k<4; k++)

var += mas1[i][k] * mas2[k][j];

mas3[i][j] = var;

printf(mas3[%d][%d] = %.2f\n”, i, j, mas3[i][j]);

}

}

}

Пример 4. Вставить строку

void main(void){




int i, j;

float mas1[4][4], var=1, vec[4];

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

for (j=3; j<var; j--)

mas1[j][i] = mas1[j-1][i]; //сдвиг строк

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

mas1[var][i] = vec[i];

}

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

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

- они освобождают от повторного программирования, если конкретную задачу нужно решать в программе несколько раз.

- повышают уровень модульности программы, облегчают её чтение, внесение изменений, коррекцию ошибок. Например:

void main (void){

float list[50];

read list (list); // ввод набора чисел

sort list (list); // сортировка

average (list); // поиск среднего

bargaph (list); // печать графика

}

- cозданные функции можно использовать и в других программах.



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

Весь принцип программирования на Си основан на понятии функции. Выполнение программы начинается с команд, содержащихся в функции main(), затем из неё вызываются другие функции: printf, scanf(), getchar(), putchar(). Это библиотечные функции языка Си.

Как же создать свои функции?

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

Нужно знать как определить функцию и как к ней обратиться. Различают 3 момента работы с функцией:

1. Объявление функции или прототип функции.

2. Вызов функции.

3. Определение функции.

Задача. Напечатать титульный бланк организации.

#inсlude <stdio.h>

void starbar (void); //объявление функции

void main (void) {

starbar (); // вызов функции

printf ("ПГУ");

printf ("им.Т.Г.Шевченко");

printf ("25 октября, 200");

starbar(); - вызов функции

}

void starbar (void) { //определение функции

int count;

for (count=1; count<=65; count++)

putchar ('*');

putchar ('\n');

}

При написании функции starbar() используются те же правила, что и при создании main(): имя, фигурные скобки.

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

Определять функцию можно в любом месте программы. Единственное ограничение – нельзя определить функцию внутри определения другой функции.






Сейчас читают про: