- •6. Функции в языке с
- •6.1 Описание функции
- •Void main()
- •6.2 Вызов функции
- •6.3 Варианты описания и использования функций
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •7. Работа со строками
- •7.1 Способы описания строк в программе
- •7.2 Ввод-вывод строк
- •7.3 Функции для работы со строками
- •8. Структуры и объединения в языке с
- •8.1 Описание структур
- •8.2 Инициализация структур
- •8.3 Работа с элементами структур
- •8.4 Структуры и указатели
- •8.5. Битовые поля в структурах
- •Работа с битовыми полями:
- •8.6. Объединения
- •Работа с полями объединения
- •8.7. Отличие объединения от структуры
- •8.8. Применение объединений
- •Void main()
- •9. Файлы в языке c. Функции работы с файлами
- •A) чтение данных из файла
- •Б) запись данных в файл
- •Дополнительные функции для работы с файлами
- •10. Программирование в графическом режиме
- •Функции библиотеки graphics
- •Управление графической системой Управление графическим режимом производится с помощью следующих функций:
- •Черчение и заполнение
- •Управление цветом
- •Обработка ошибок в графическом режиме
- •Функции запроса состояния
- •Void main()
- •11. Директивы препроцессора
- •11.1. Директива #include
- •11.2. Директива #define
- •11.3. Директива #undef
- •12. Побитовые (поразрядные) операции
- •Использование побитовых операций
Void main()
{
float f[8], g[12], h[15], sf, sg, sh;
int kf, kg, kh;
clrscr();
printf(“Массив F из 8 элементов\n”);
fmas(f, 8, 1.7, 2.5, &sf, &kf);
printf(“sf=%.3f kf=%d\n”,sf,kf);
printf(“Массив G из 12 элементов\n”);
fmas(g, 12, 2.9, 3.1, &sg, &kg);
printf(“sg=%.3f kg=%d\n”,sg,kg);
printf(“Массив H из 15 элементов\n”);
fmas(h, 15, 3.5, 5.4, &sh, &kh);
printf(“sh=%.3f kh=%d\n”,sh,kh);
}
4. Аргументом функции является двухмерный массив (матрица)
Описание функции. Такой аргумент можно описать 3-мя способами:
1) как массив с заданным количеством строк и столбцов
void fun(float c[5][10],…)
Внутри функции элементы массива обозначаются: c[i][j]
Недостаток этого способа – функция может работать только с матрицами 5*10
2) как массив с неопределенным количеством строк и заданным количеством столбцов
void fun(float c[][10], int m,…)
где m – количество строк
Внутри функции элементы массива обозначаются: c[i][j]
Достоинство – функция может работать с матрицами, имеющими разное количество строк: A[5][10], B[8][10], C[20][10].
Недостаток – длина строки (2-й параметр) фиксирована – 10.
3) как указатель на начало массива:
void fun(float *ptc, int m, int n,…)
где m – количество строк
n – количество столбцов
Элементы массива: *(ptc+i*n+j) c[i][j]
Этот способ является универсальным, так как функция может работать с массивами любых размеров.
Вызов функции. При вызове функции первым аргументом указывают имя массива для 1-3 способов, а далее – другие аргументы в зависимости от способа:
1) float d[5][10], v[5][10];
fun (d,…); fun(v,…);
2) float a[7][10], b[12][10];
fun(a, 7,…); fun(b, 12,…);
3) float s[4][6], u[9][7];
fun(s, 4, 6,…); fun(u, 9, 7,…);
Пример для 4-го варианта. Заданы три матрицы A[3,4], B[5,6], C[4,7], элементы которых вычисляются по формулам:
a[i,j]=1.9ij2-3.7i2j
b[k,l]=2.5kl2-4.1k2l
c[i,j]=5.3ij2+3.1i2j
Для каждой из матриц определить сумму элементов строки и произведение элементов столбца, на пересечении которых находится максимальный элемент.
Решение задачи. Необходимо использовать функцию, которая будет выполнять следующие действия:
1) формировать матрицу X[M,N] по формуле:
X[i,j]=fij2+gi2j
2) определять Хmax и его индексы imax, jmax
3) a) вычислять сумму элементов строки imax
б) вычислять произведение элементов столбца jmax
Программа примера для 4-го варианта:
#include<stdio.h>
#include<conio.h>
/* Описание функции fmatr */
void fmatr(float *ptx, int m, int n, float f, float g, float *pt_sx, float *pt_px, char name)
{
int i,j,imax,jmax;
float xmax,sx,px;
printf(“Матрица %c размером %dx%d\n”,name,m,n);
for(i=0;i<=m-1;i++)
{
for(j=0;j<=n-1;j++)
{
*(ptx+i*n+j)=f*i*j*j+g*i*i*j;
printf(“%.1f “, *(ptx+i*n+j));
}
printf(“\n”);
}
imax=jmax=0;
xmax=*ptx;
for(i=0;i<=m-1;i++)
for(j=0;j<=n-1;j++)
if(*(ptx+i*n+j)>xmax)
{
xmax=*(ptx+i*n+j);
imax=i;
jmax=j;
}
printf(“%cmax=%.1f imax=%d jmax=%d\m”, name, xmax, imax, jmax);
sx=0;
for(j=0;j<=n-1;j++)
sx+=*(ptx+imax*n+j);
px=1;
for(i=0;i<=m-1;i++)
p*=*(ptx+i*n+jmax);
*pt_sx=sx;
*pt_px=px;
}
/* Главная функция */
