Заполнение матрицы случайными числами
Выполняется также в двойном цикле аналогично одномерным массивам. В примере показано заполнение целой матрицы случайными числами в интервале [a,b](для вещественных чисел формула изменится – см. одномерные массивы). В этой и последующих программах будем считать, что объявлена целая матрица Mна N, где Mи N— целые константы (объявленные через const), а также целые переменные i и j.
for ( i = 0; i < M; i ++ )
for ( j = 0; j < N; j ++ )
A[i][j] = random(b-a+1) + a;
Вывод элементов матрицы
Двумерные массивы необходимо выводить в привычном виде (по строкам), начиная вывод новой строки массива в новую строку экрана.
for ( i = 0; i < M; i ++ )
{ for ( j = 0; j < N; j ++ )
printf(“%d \t”, A[i][j]);
printf (“\n”);
Суммирование элементов матрицы
for (S=0, i=0; i<m; i++)
for (j=0; j<n; j++)
S=S+b[i][j];
Суммирование диагональных элементов матрицы (вычисление следа матрицы)
for (S=0, i=0; i<n; i++)
S=S+b[i][i];
Суммирование элементов заданной строки матрицы
Для двумерного массива b размером Mна N необходимо вычислить сумму элементов строки с номером k.
for (S=0, j=0; j<n; j++)
S=S+b[k][j];
Суммирование элементов строк матрицы
Необходимо вычислить сумму элементов каждой строки двумерного массива b размером Mна Nс выводомрезультатов на экран.
for (i=0; i<m; i++)
{ S=0; // обнуление суммы каждой строки
for (j=0; j<n; j++)
S=S+b[i][j];
printf (“Сумма элементов строки %d=%d \n “, i, S); }
Транспонирование матрицы
Необходимо заменить строки матрицы ее столбцами, а столбцы – строками.
int b[m][n], a[n][m], i, j;
….
for (i=0; i<n; i++)
for (j=0; j<m; j++)
a[i][j]=b[j][i];
Для квадратной матрицы размером Nна Nдля этого необходимо поменять местами каждый элемент верхнего треугольника с соответствующим элементом нижнего (диагональные элементы переставлять не нужно). При этом для каждой строки нужно выполнять перестановку элементов, расположенных правее главной диагонали, с элементами соответствующего столбца, расположенными ниже главной диагонали. При перестановке используем вспомогательную переменную P, помещая в нее для временного хранения один из переставляемых элементов, чтобы не потерять его значение.
int b[n][n], i, j, P;
….
for (i=0; i<n-1; i++)
for (j=i+1; j<n; j++)
{ P= b[i][j];
b[i][j]=b[j][i];
b[j][i]=P;
}
Умножение матрицы на вектор
int a[m][n], i, j, s, b[n], c[m];
….
for (i=0; i<m; i++)
{ s=0;
for (j=0; j<n; j++)
s=s+a[i][j]*b[j];
c[i]=s;
}
Удаление строки из матрицы
Требуется удалить строку с заданным номером k. Решение задачи аналогично удалению элемента из одномерного массива. Все строки, начиная с (k+1)-й, нужно переместить вверх. Число строк уменьшается на 1.
for (i=k; i<m; i++)
for (j=0; j<n; j++)
b[i][j]=b[i+1][j];
Удаление столбца осуществляется аналогично.
Перестановка строк матрицы
1-й способ.
С использованием вспомогательной переменной P (того же типа, что и элементы массива) перестановка осуществляется во всех столбцах двух строк.
for ( k=0; k<n; k++)
{ P=A[i][k]; A[i][k]=A[j][k]; A[j][k]=P; }
2-й способ
С использованием вспомогательного массива, в который целиком пересылается одна из строк для временного хранения.
for ( k=0; k<n; k++)
c[k]=a[i][k];
for ( k=0; k<n; k++)
a[i][k]= a[j][k];
for ( k=0; k<n; k++)
a[j][k]=c[k];
Примеры решения
1. Вычисление и вывод на экран таблицы умножения в форме матрицы Пифагора.
#include <stdio.h>
#include<conio.h>
void main()
{ const int n=10;
int a[n][n], i, j;
clrscr();
for (i=1; i<n; i++)
{ for ( j=1; j<n; j++)
{ a[i][j]=i*j;
printf ("%5d", a[i][j] );
}
printf ("\n");
}
getch();
}
По данной программе в двумерном массиве не будут заполнены нулевая строка и нулевой столбец.
2. Заполнение матрицы случайными числами в диапазоне от 0 до 99 и поиск в ней максимального значения.
#include <stdio.h>
#include<conio.h>
#include <stdlib.h>
#define n 5
void main()
{
int a[n][n], i, j, imax, jmax;
clrscr();
randomize();
for (i=0; i<n; i++)
{ for ( j=0; j<n; j++)
{ a[i][j]=rand() % 100;
printf (“%d\t”, a[i][j]);
}
printf (“\n”);
}
imax=jmax=0; // начало поиска
for (i=0; i<n; i++)
for ( j=0; j<n; j++)
if (a[i][j]>a[imax][jmax])
{ imax=i; jmax=j; }
printf (“max=a[%d][%d]=%d\n”, imax, jmax, a[imax][jmax]);
getch();
}
3. Дан двумерный массив различных вещественных чисел, содержащий 5 строк и 4 столбца. Строку, содержащую максимальный элемент массива, поменять местами со строкой, содержащей минимальный элемент:
#include <stdio.h>
void main()
{ float m1[5][4], max, min, m2[4];
int maxi, mini, i, j;
puts("Введите исходный массив: \n");
for(i=0;i<5;i++)
for(j=0;j<4;j++)
scanf("%f", &m1[i][j]);
max=m1[0][0];
min=m1[0][0];
for(i=0;i<5;i++)
for(j=0;j<4;j++)
if(max<=m1[i][j])
{max=m1[i][j];
maxi=i;}
for(i=0;i<5;i++)
for(j=0;j<4;j++)
if(min>=m1[i][j])
{min=m1[i][j];
mini=i;}
for(j=0;j<4;j++)
m2[j]=m1[maxi][j];
for(j=0;j<4;j++)
m1[maxi][j]=m1[mini][j];
for(j=0;j<4;j++)
m1[mini][j]=m2[j];
puts("Массив после перестановки строк:\n");
for(i=0;i<5;i++)
{for(j=0;j<4;j++)
printf("%f ", m1[i][j]);
printf("\n");}
}
Порядок выполнения работы
1. Изучить теоретические сведения.
2. Ответить на контрольные вопросы.
3. Выполнить задание.
Контрольные вопросы
1. Что такое двумерный массив?
2. Сколько индексов требуется для обращения к элементу двумерного массива и что определяет каждый из индексов?
3.Как хранятся в памяти ЭВМ двумерные массивы?
4.Какими способами может быть описан двумерный массив?
5.Как производится ввод элементов двумерного массива?
6.Как производится вывод элементов двумерного массива?
Задания для выполнения
Часть 1.
1. Ввести двумерный массив размером m на n. Вычислить среднее арифметическое значение элементов массива, имеющих четные отрицательные значения,или вывести сообщение об отсутствии в массиве таких значений.
2. Ввести двумерный массив размером m на n. Вычислить произведение и количество элементов, находящихся в интервале от AдоB,или вывести сообщение об отсутствии в массиве таких значений.
3. Ввести двумерный массив размером m на n. Вычислить среднее арифметическое значение элементов, являющихся нечётными числами, или вывести сообщение «Таких значений нет».
4. Ввести двумерный массив размером m на n. Вычислить произведение и количество элементов, кратных 3 и некратных 5, или вывести сообщение «Таких значений нет».
5. Ввести двумерный массив размером m на n. Найти и вывести те элементы, которые при делении на 7 дают остаток 2 или 5, или вывести сообщение «Таких значений нет».
6. Ввести двумерный массив размером m на n. Найти количество и сумму тех элементов, которые делятся на 5 и не делятся на 7, или вывести сообщение «Таких значений нет».
7. Ввести двумерный массив размером m на n. Вычислить произведение элементов, кратных заданному числу k(ввести с клавиатуры), или вывести сообщение «Таких значений нет».
8. Ввести двумерный массив размером m на n. Получить сумму и количество элементов, принадлежащих отрезку [3,17], или вывести сообщение «Таких значений нет».
9. Ввести двумерный массив размером m на n. Найти и вывести минимальное из А0, А2, А4, … и максимальное из А1, А3, А5, …
10. Ввести двумерный массив размером m на n. Получить сумму тех членов массива, которые нечётны и положительны, или вывести сообщение «Таких значений нет».
11. Ввести двумерный массив размером m на n. Вычислить среднее арифметическое значение элементов, кратных сумме их индексов (i+j), или вывести сообщение «Таких значений нет».
12. Ввести двумерный массив размером m на n. Вывести те значения, которые заканчиваются заданной цифрой (ввести с клавиатуры), или вывести сообщение «Таких значений нет».
13. Ввести двумерный массив размером m на n. Найти сумму тех из них, которые являются квадратами некоторого заданного числа k, или вывести сообщение «Таких значений нет».
14. Ввести двумерный массив размером m на n и некоторое число P. Вывести номера тех элементов, модуль значений которых больше этого числа, или вывести сообщение «Таких значений нет».
15. Ввести двумерный массив размером m на n, в котором есть по крайней мере два отрицательных числа. Вычислить произведение и количество элементов, находящихся между первым и последним отрицательным значениями.
Часть 2.
Написать программу по обработке двумерного массива.
1. Определить количество строк, не содержащих ни одного нулевого элемента.
2. Определить количество столбцов, не содержащих ни одного нулевого элемента.
3. Определить количество столбцов, содержащих хотя бы один нулевой элемент.
4. Определить произведение элементов в тех строках, которые не содержат отрицательных элементов.
5. Определить сумму элементов в тех столбцах, которые не содержат отрицательных элементов.
6. Определить сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент.
7. Найти сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент.
8. Найти сумму элементов в тех столбцах, которые содержат хотя бы один отрицательный элемент.
9. Найти сумму модулей элементов, расположенных ниже главной диагонали.
10. Найти сумму модулей элементов, расположенных выше главной диагонали.
11. Найти количество строк, среднее арифметическое элементов которых меньше введенной с клавиатуры величины.
12. Найти номер первой из строк, содержащих хотя бы один положительный элемент.
13. Определить номер первого из столбцов, содержащих хотя бы один нулевой элемент.
14. Найти номер первого из столбцов, не содержащих ни одного отрицательного элемента.
15. Найти номер первой из строк, не содержащих ни одного положительного элемента.
ЛАБОРАТОРНАЯ РАБОТА № 15
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|