Глава 8. Матрицы. Многомерные массивы
В Си определены и многомерные массивы. Двумерный массив (матрицу) можно объявить так:
тип имя_переменной [ n ][ m ];
где n – количество строк в матрице(строки нумеруются от 0 до n -1), m – количество столбцов (столбцы нумеруются от 0 до m -1).
Например,
int h[10][15];
Описана матрица h, состоящая из 10 строк и 15 столбцов (строки нумеруются от 0 до 9, столбцы от 0 до 14).
Для обращения к элементу матрицы необходимо указать ее имя, и в квадратных скобках номер строки, а затем в квадратных скобках – номер столбца. Например, h[2][4] – элемент матрицы h, находящийся в третьей строке и пятом столбце.
В Си можно описать многомерные массивы, которые можно объявить с помощью оператора следующей структуры:
тип имя_переменной [ n 1][ n 2]…[ nk ];
Блок-схемы основных алгоритмов обработки матриц
Блок-схема ввода матрицы
Блок-схема вывода матрицы
Свойства матриц
Рассмотрим некоторые свойства матриц:
· если номер строки элемента совпадает с номером столбца (i = j), это означает что элемент лежит на главной диагонали матрицы;
· если номер строки превышает номер столбца (i > j), то элемент находится ниже главной диагонали;
· если номер столбца больше номера строки (i < j), то элемент находится выше главной диагонали.
· элемент лежит на побочной диагонали, если его индексы удовлетворяют равенству i + j 1 = n;
· неравенство i + j + 1 < n характерно для элемента находящегося выше побочной диагонали;
|
|
· соответственно, элементу лежащему ниже побочной диагонали соответствует выражение i + j + 1 > n.
Найти сумму элементов матрицы, лежащих выше главной диагонали
#include "stdafx.h"
#include <stdio.h>
void main(int argc, char* argv[])
{
float b,a[20][20],s;
int i,j,n,m;
printf("n=");scanf("%d",&n);
printf("m=");scanf("%d",&m);
printf("\n Vvedite A \n");
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
scanf("%g",&b);
a[i][j]=b;
}
printf("\n Matrica A\n");
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
printf("%g\t",a[i][j]);
printf("\n");
}
for(s=0, i=0;i<n;i++)
for(j=0;j<m;j++)
if (i<j) s+=a[i][j];
printf("\nS=%g\n",s);
}
Поиск максимального элемента и его индексов
Динамические матрицы
Й способ работы с динамическими матрицами.
При работе с динамическими матрицами следует помнить, что выделенный участок памяти под матрицу A(N,M) представляет собой участок памяти размером NxM элементов.
A=( тип *) calloc(n*m, sizeof( тип ))
или
A=( тип *) malloc(n*m*sizeof( тип ))
Поэтому для обращения к элементу Ai,j необходимо, но номеру строки i и номеру столбца j вычислить номер этого элемента k в динамическом массиве. Учитывая, то что в массиве элементы нумеруются с нуля k=i.M+j.
a[i][j] *(a+i*m+j)
ЗАДАЧА 1. Вычислить количество положительных элементов квадратной матрицы, расположенных по ее периметру и на диагоналях.
|
|
#include "stdafx.h"
#include <iostream.h>
#include <malloc.h>
int main(int argc, char* argv[])
{
float *a;
int i,j,n,k=0;
cout<<"n="; cin>>n;
cout<<"Vvod matrici"<<endl;
a=(float *)calloc(n*n,sizeof(float));
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>*(a+i*n+j);
cout<<"Matrica"<<endl;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
cout<<*(a+i*n+j)<<"\t";
cout<<endl;
}
for(i=0;i<n;i++)
{
if (*(a+i*n+i)>0) k++;
if( *(a+i*n+n-i-1)>0) k++;
}
cout<<"k="<<k<<endl;
for(i=1;i<n-1;i++)
{
if (*(a+0*n+i)>0 ) k++;
if (*(a+i*n+0)>0) k++;
if (*(a+(n-1)*n+i)>0) k++;
if (*(a+i*n+n-1)>0) k++;
}
cout<<"k="<<k<<endl;
if (n%2!=0 && *(a+(n-1)/2*n+(n-1)/2)>0) k--;
cout<<"k="<<k<<endl;
free(a);
return 0;
}
Дата добавления: 2019-09-13; просмотров: 718; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!