Вы находитесь на странице: 1из 7

Лабораторная работа № 2

Работа с массивами в языке программирования C

Цель и задача работы: изучение регулярных типов данных в языке Си –


одномерный массив и двумерный массив. Написать программу, обрабатывающую
массивы.

Теоретические положения

Массив – это совокупность переменных одного типа, к которым обращаются с


помощью общего имени. Доступ к отдельному элементу массива может
осуществляться с помощью индекса. Массивы могут иметь одну или несколько
размерностей. Стандартный вид объявления одномерного массива следующий:
тип имя_переменной [размер];
Здесь тип объявляет тип массива и является типом каждого элемента массива.
Параметр размер определяет, сколько элементов содержит массив. В одномерном
массиве полный размер массива в байтах определяется следующим образом:
Общее число байт = sizeof (тип)*число элементов,
где sizeof это оператор, возвращающий длину в байтах переменной или типа.
У всех массивов первый элемент имеет индекс 0. Поэтому, если написать
char p [10];
то будет объявлен массив символов из 10 элементов, причем эти элементы
адресуются индексами от 0 до 9. Следующая программа загружает целочисленный
массив числами от 0 до 9 и выводит его:
#include <stdio.h>

int main(void)
{
int x[10];
int t;

for (t=0; t<10; t++)


x[t]=t;
for (t=0; t<10; t++)
printf(“%d “, x[t]);

return 0;
}

По умолчанию компилятор не проверяет выход за границы массивов. Можно


выйти за границу массива и записать значение в какую-либо область памяти, не

1
относящуюся к массиву, или даже в код программы. Проверка выхода за границы
массива возлагается на программиста.
Двух или более мерные массивы называются многомерными. Рассмотрим
описание и использование 2-х мерного массива:
int i,j,k,n;
int name[10][20];
i=5;
j=3;
k=2;
n = name[i+j][1] + name[k][2];

Двухмерный массив в С хранится как строка, так что крайний правый индекс
меняется быстрее всего. Этот массив имеет 10 строк и 20 столбцов. Таким образом,
трехмерный массивы хранятся как последовательность таблиц (двухмерных
массивов), каждый из которых в свою очередь представляет собой строку.
Четырехмерные массивы хранятся как последовательность кубов (трехмерных
массивов), и т.д.
Рассмотрим более сложный пример, допустим мы хотим ввести, а затем
распечатать все элементы двухмерного массива, в котором количество строк равно
количеству столбцов. Попробуйте сделать это сами перед прочтением этого примера:
#include "stdio.h"
#include "conio.h"
int main(void)
{
const int MAXSIZE;
int counter_1,counter_2;
int size;
int mas[MAXSIZE][ MAXSIZE];

clrscr();
printf ("Please enter the number of rows and columns in your matrix
(the max is %d):", MAXSIZE);
scanf("%i",&size);

printf("\nYou have entered the number of raws and columns which is


equal to %i\n",size);
if (size> MAXSIZE | size<0 )
{
printf("\nYou have entered an illegal parameters");
return(0);
}
printf("\n");
for (counter_1=0;counter_1<size;counter_1++)
for (counter_2=0;counter_2<size;counter_2++)
{
printf("Please enter the element of the matrix in %i-th row and
in %i-th column:\n",counter_1+1,counter_2+1);
scanf("%i",&mas[counter_1][counter_2]);
}
printf("\n");
for (counter_1=0;counter_1<size;counter_1++)
{
for (counter_2=0;counter_2<size;counter_2++)
printf("%i ",mas[counter_1][counter_2]);
2
printf("\n");
}
return (0);
}
Задание

Написать программу, реализующую действия с одномерными и двумерными


массивами соответственно варианту. В вариантах для работы с двумерными
массивами задан двухмерный массив n  m , где n>1, m>1.

Варианты заданий по одномерным массивам

1) Задано N вещественных чисел. Вычислить разность между максимальным и


минимальным из них.
2) Задана последовательность из N чисел, упорядочить ее по возрастанию методом
сортировки выбором (см. Примечание).
3) Заданную последовательность из N чисел упорядочить по убыванию методом
сортировки вставками (см. Примечание).
4) Задана последовательность из N вещественных чисел. Определить сколько чисел
меньше K, равно K и больше K.
5) Дана последовательность из N положительных чисел, вычислить среднее
геометрическое этих чисел.
6) Для заданной последовательности из N чисел вычислить среднее арифметическое
положительных чисел.
7) Задана последовательность из N вещественных чисел. Определить порядковый
номер того из них, которое ближе всего к заданному числу.
8) Задана последовательность из N вещественных чисел. Определить сколько чисел
лежат в интервале [A,B] (A и B заданные числа) и запомнить их порядковые номера.
( X i − M )2
9) Задана последовательность X из N вещественных чисел. Вычислить ,
N −1
где M - среднее арифметическое данной последовательности.
10) Задана последовательность из N вещественных чисел. Вычислить порядковый
номер числа наиболее приближенного к среднему арифметическому максимального и
минимального чисел данной последовательности.
11) Задан массив (char A[N], элементы которого могут быть заполнены только
(’0’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’)). Определить входит ли в него последовательность
символов '123', если да, то с какой позиции (N>3).
12) Задан массив. Запомнить сколько чисел больше предыдущего и последующего
чисел и вывести их порядковые номера.
3
13) Задан массив. Определить сколько раз меняется знак в данной
последовательности чисел, запомнить номера позиций, в которых меняется знак.
14) Задано N натуральных чисел (N>10), найти наибольший общий делитель.
15) Задана последовательность из N вещественных чисел. Вычислить сумму чисел,
порядковые номера которых являются простыми числами.
16) Задана последовательность из N вещественных чисел. Вычислить сумму чисел,
порядковые номера которых являются числами Фибоначчи.
17) Задана последовательность X из n вещественных чисел. Вычислить значение
функции: n | x 1 × x 2 × ... × x n | .
18) Задан массив (char A[N], элементы которого могут быть заполнены только
(’0’,’1’,’2’,’3’,’4’,’5’,’6’,’7’,’8’,’9’)). Определить какой символ наиболее часто
встречается в данном массиве.
19) Задана последовательность из N целых чисел. Вычислить сумму элементов
массива, порядковые номера которых совпадают со значением этого элемента.
20) Задана последовательность из N целых чисел. Вычислить среднее
арифметическое четных элементов массива.
21) Задана последовательность из N целых чисел. Все отрицательные элементы
массива перенести в его начало, а все остальные в его конец.
22) Заданы два массива с N и M элементами, упорядоченными по убыванию,
объединить элементы этих массивов в один массив так, чтобы элементы снова
оказались упорядоченными по убыванию.
23) Задана последовательность из N вещественных чисел, упорядочить элементы
массива по возрастанию методом сортировки обменом (см. Примечание).
24) Задана последовательность из N вещественных чисел. Найти частное средних
арифметических значений элементов с нечетными и четными индексами.
25) Определить количество элементов последовательности натуральных чисел,
кратных числу M и заключенных в промежутке от L до N.
26) Переписать массив (элементы - вещественные числа) так, чтобы 1-й элемент стал
последним, 2-й - предпоследним и т. д.
27) Задана последовательность N вещественных чисел. Отсортировать
последовательность по убыванию методом выбора (см. Примечание).
28) Задано N натуральных чисел. Найти наименьшее общее кратное этих чисел.
29) Определить, сколько процентов от всего количества элементов
последовательности целых чисел составляют нечетные элементы.
30) Вывести информацию о наибольшем, наименьшем и наименее удаленном от
среднего арифметического членах последовательности вещественных чисел.

4
Примечание: методы сортировки (например, по возрастанию)

а) Выбором: отыскивается максимальный элемент и переносится в конец


массива, затем этот метод применяется ко всем элементам массива кроме последнего,
т.к. он уже на своем месте и т.д.
б) Обменом (метод пузырька): последовательно сравниваются пары соседних
элементов X[I] и X[I+1] (I от 0 до N-2), если X[I]>X[I+1], то они меняются местами,
делается шаг назад (т.е. уменьшается значение индекса текущего элемента I), иначе
проверяются следующие элементы, тем самым наибольший элемент окажется в конце
массива, этот метод применяется ко всем элементам кроме последнего и т.д.
в) Вставками: пусть первые K элементов массива уже упорядочены по
возрастанию, берется (K+1)-й элемент и размещается среди первых K элементов так,
чтобы упорядоченными оказались уже (K+1) первых элементов, этот метод
применяется при K от 1 до N-1.

Варианты заданий по двумерным массивам

1) Вычеркнуть из матрицы i-е строки и j-е столбцы, удовлетворяющие условию: ij =


z (где z задаваемый параметр от n до большего из n и m).
2) Умножить две матрицы ( n  m , m  n ).
3) Сложить две матрицы ( n  m ).
4) Умножить j-й столбец в матрице на k.
5) Транспонировать матрицу.
6) Умножить матрицу на x.
7) Четные строки матрицы заменить на x.
8) В матрице поменять местами i-ю строку и j-й столбец.
9) В матрице поменять местами i-ю и j-ю строки.
10) Переставляя строки и столбцы матрицы, добиться, что бы в левом верхнем углу
оказался наибольший элемент матрицы (один из них)
11) Упорядочить матрицу построчно по возрастанию.
12) Вычислить сумму элементов матрицы, выделенных на рисунке символом х

5
13) Вычислить сумму элементов матрицы вдоль ее диагоналей.
14) Вычислить сумму элементов матрицы (m - нечетное), расположенных внутри
меньшего из квадратов.

15) Определить, является ли заданная квадратная матрица симметричной


относительно главной диагонали.
16) Осуществить поворот матрицы против часовой стрелки на 90 градусов.
17) Вычислить сумму элементов квадратной матрицы, помеченных символом х.

18) Упорядочить матрицу по убыванию по столбцам.


19) Определить, является ли заданная матрица ортонормированной, т.е. скалярное
произведение каждой пары различных строк (столбцов) равно нулю.
20) Определить, является ли заданная матрица магическим квадратом, т.е. суммы
элементов всех строк и столбцов одинаковы.
21) Определить один из седловых элементов матрицы (наибольший в строке и
наименьший в столбце).
22) Найти скалярное произведение строки матрицы с наименьшим элементом на
столбец матрицы с наибольшим элементом.
23) Получить треугольник Паскаля (биноминальные коэффициенты)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
24) Осуществить поворот смежных с элементом матрицы [i, j] элементов на 90
градусов против часовой стрелки (1 < i < n, 1 < j < m).
25) Определить минимальный вектор-строку и максимальный вектор-столбец
(минимальным вектором из векторов (1,5,3,4) и (1,5,4,4) будет вектор (1,5,3,4), Т.к. 3-я
координата первого вектора меньше 3-ей координаты второго вектора).
26) Вычислить сумму элементов, лежащих на диагоналях матрицы n x n (обратить
внимание на четность-нечетность числа n).
6
27) Найти сумму последних элементов каждой строки и каждого столбца.
28) Определить среднее арифметическое элементов, лежащих на пересечении строк,
номера которых кратны трем и столбцов, номера которых кратны двум.
29) Определить номера строк матрицы, в которых знаки элементов чередуются.
30) Найти разность сумм элементов, расположенных над главной и под неглавной
диагональю матрицы.