- •А.П. Новоселов программирование на языке Си
- •1.1. Порядок создания программы
- •1.2. Ввод и выполнение программы
- •1.3. Модификация программы
- •1.4. Пошаговое выполнение программы
- •1.5. Сообщения компилятора и компоновщика
- •1.6. Действия в случае ошибки выполнения
- •1.7. Ошибки в форматах ввода/вывода
- •1.8. Вычисления с вещественными числами
- •2.1. Лексемы
- •2.2. Идентификаторы
- •2.3. Ключевые слова
- •2.4. Константы
- •3.2. Арифметические операции
- •3.3. Операции отношения и логические операции
- •3.4. Операции присваивания
- •3.5. Поразрядные операции
- •3.6. Библиотека функций
- •1. Вычисление площади и периметра геометрической фигуры
- •2. Вычисления по формулам с вещественными числами
- •3. Арифметические операции для целочисленных данных
- •4. Циклы с заданным числом повторений
- •5. Алгоритмы с разветвлениями
- •6. Циклы с условием окончания
- •7. Последовательная обработка данных
- •8. Поразрядные операции
- •9. Обработка массивов
- •10. Обработка матриц
- •11. Сортировка массивов
- •12. Сортировка матриц
- •1.1. Математическая постановка
- •1.4.2. Содержание результатов работы программы на экране
- •Выполнил: Иванов и.П., гр. Ут – 11, вариант 13(2)
- •1.4.3. Текст программы
- •Выводы по работе
10. Обработка матриц
Цель работы: изучение приёмов обработки двумерных массивов данных, выработка умений алгоритмизации и программирования задач с двумерными массивами, отладки и тестирования программ с массивами.
/* Программа 10 меняет знак у "-"-ых элементов матрицы размером n х n ниже главной диагонали, n <= 10.
*/
#include <stdio.h>
#include <conio.h>
void in_matr(int x[ ][10], int n); // ввод матрицы размером n х n с консоли
void in_matr_rand(int x[ ][10], int n); // заполнение матрицы размером n х n
// случайными числами из интервала [-10, 10]
void out_matr(int x[ ][10], int n); // вывод матрицы размером n х n на экран
void processing(int x[ ][10], int n); // изменение знака у «-»-ых элементов
// матрицы ниже главной диагонали
Int main()
{ int n, x[10][10];
char ch;
// Вв/выв исходных данных:
// Не совмещайте ввод данных и их обработку !!! (Почему ?)
printf("Введите размер матрицы n <=10:”);
scanf("%d", &n);
printf("\n Ввод матрицы с консоли - 'c' или random() - 'r'? - ");
scanf("%c%c", &ch, &ch);
if((ch=='c') || (ch=='C')) in_matr( x, n);
else { randomize(); in_matr_rand( x, n); }
printf("\n Исходная матрица %d*%d \n", n, n);
out_matr( x, n );
processing(x, n);
printf("\n Обработанная матрица: \n");
out_matr( x, n );
getch();
return 0;
}
void in_matr(int x[ ][10], int n)
{ int I, j;
printf("\n Введите элементы матрицы n х n: \n");
scanf("%d", &n);
for ( i = 0; i < n; i++)
for ( j = 0; j < n; j++)
scanf("%d", &x[i][j]);
}
void out_matr(int x[ ][10], int n)
{ int i, j;
for ( i = 0; i < n; i++ )
{ for (j = 0; j < n; j++ )
printf("%d\t", x[i][j]);
printf("\n");
}
}
void processing(int x[ ][10], n) // Обработка матрицы:
{ int i, j;
for ( i = 1; i < n; i++)
for ( j = 0; j < i; j++)
if ( x[i][j] < 0 ) x[i][j] = -x[i][j];
}
void in_matr_rand(int x[][10], int n)
{ int i, j;
for ( i = 0; i < n; i++)
for ( j = 0; j < n; j++)
x[i][j]) = random(21) - 10;
}
Вопросы и упражнения
Как располагаются в памяти компьютера элементы двумерного массива?
Дополните программу 10 функцией out_matr_ptr( ) и протестируйте её.
void out_matr_ptr(int x[ ][10], int n)
{ int i, j, *pm;
pm=&x[0][0];
printf("\n Вывод матрицы по указателю: \n");
for ( i = 0; i < n*n; i++ )
{ printf("%5d", *pm++);
if((i+1)%n == 0) printf("\n");
}
}
Какое значение имеет объект программы имя двумерного массива?
Какое значение имеет объект программы x[k], если в программе объявлен массив int x[10][10]? Можно ли в программе использовать объект x[k]? Если «да», то в каких случаях?
Как обратиться по указателю к элементу матрицы matr [i] [j]?
Напишите операторы вывода элементов двумерного массива по заданному условию: а) элементов k-й строки, б) элементов k-го столбца, в) элементов правой и левой диагоналей, г) элементов выше правой диагонали, д) элементов ниже левой диагонали.
Напишите функции: а) поиск столбца с минимальной суммой элементов, б) поиск строки с наибольшим числом «+»-ых элементов.
Выполните упражнения 6-а и 6-б с указателями, не используя индексацию для выбора элементов матрицы.