- •Лабораторная работа №4 Одномерные массивы данных. Работа с индексами.
- •Лабораторное задание
- •Теоретические сведения.
- •Доступ к элементам массива с использованием индекса.
- •Многомерные числовые массивы.
- •Примеры программирования.
- •Вопросы.
- •Варианты заданий. Общие требования.
- •Требования к оформлению ввода-вывода.
Многомерные числовые массивы.
Язык С позволяет работать с массивами любой размерности, устройство многомерного массива имеет некоторые особенности, которые мы рассмотрим на примере двумерного массива.
Для того, чтобы создать двумерный массив, необходимо использовать два набора квадратных скобок:
/* Двумерный массив элементов double */
double m[2][4];
Двумерный массив определяется как массив массивов, про такой массив говорят, что у него 2 элемента по 4 элемента в каждом, если же рассматривать такой массив как матрицу, то можно сказать, что она имеет 2 строки и 4 столбца. Оба индекса, как и в одномерных массивах, начинаются с нуля. То есть, в массиве m есть строки 0 и 1, каждая из которых состоит из элементов 0..3.
Многомерные массивы также можно явно инициализировать при создании, заключая списки значений для строк в дополнительный набор фигурных скобок:
double m[2][4] = { { 1, 2, 3, 4 },
{-1, 1, 0, 0 }
};
Как и в случае одномерных массивов, вы можете задавать не все значения, а только часть. Например, написав
double m[2][4] = { { 1, 2 } };
здесь инициализируются только первые два элемента нулевой строки матрицы.
Размерность многомерного массива также как и одномерного, можно вычислить автоматически. Но в отличие от одномерного массива, где можно не указывать размерность, в многомерных массивах можно не указывать только первую размерность, вторая же (и прочие, если их больше двух) должна быть указана. Например, такая запись
double m[][4] = { { 1, 2, 3, 4 }, {-1, 1, 0, 0 } };
приведет к созданию массива 2x4.
Работать с элементами многомерного массива можно, как с обычными переменными.
Пример: Фрагмент программы, суммирующий последний столбец матрицы.
…
double m[2][4];
int i, j,s=0;
for (i=0,j=3; i<2; i++)
s += m[i][j];
Примеры программирования.
Пример: Программа вводит с клавиатуры одномерный массив из 5 целых чисел, после чего выводит количество ненулевых элементов. Ввод каждого элемента оформлен «с приглашением» (выводится подсказка с номером элемента).
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#define SIZE 5 // размер массива
void main()
{
char msg[80];
int a[SIZE]; //массив
int n = 0; // кол-во ненулевых эл-тов
int i; // индекс
CharToOem("\nВведите массив целых чисел.\
\nПосле ввода каждого числа нажимайте <Enter>\n", msg);
printf(msg);
printf("===========================================\n");
for (i = 0; i < SIZE; i++)
{
printf("a[%i] ->",i+1);
scanf("%i", &a[i]);
if (a[i] != 0) n++;
}
printf("===============================\n");
CharToOem("В массиве %i ненулевых элемента.\n", msg);
printf(msg, n);
}
Пример: Программа проверяет, находится ли введенное с клавиатуры число в массиве. Массив также должен вводиться с клавиатуры.
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#define HB 5
void main()
{
int m[HB]; // массив целых
int obr; // образец для поиска
bool found; // признак совпадения с образцом
int i;
char msg[80];
CharToOem("Введите массив из %d целых элементов\n",msg);
printf(msg,HB);
printf("*************************************\n");
for (i=0; i<HB; i++)
{printf("%d->",i+1);
scanf("%d", &m[i]);
}
CharToOem("Введите образец для поиска ->",msg);
printf(msg);
scanf("%i", &obr);
// поиск простым перебором
found = false;
i = 0; // проверяем с первого элемента массива
do
{
if (m[i] == obr ) found = true; // совпадение с образцом
else i++; // переход к следующему элементу
}
while (!found && i<HB);
printf("_____________________________________\n");
if ( found )
{CharToOem("Совпадение с элементом номер %i\n",msg);
printf(msg,i+1);
}
else
{CharToOem("Совпадений с образцом нет\n",msg);
printf(msg);
}
}
Пример: Определить максимальное число в массиве. Массив задать с помощью датчика случайных чисел.
#include <stdio.h>
#include <time.h>
#include <windows.h>
#include <stdio.h>
void main()
{
int max,i;
const int N=40; // размер массива
int dig[N],col=7;
char msg[80]; //буферная строка для русификации
CharToOem("Поиск максимального элемента в массиве\n",msg);
printf(msg);
printf("_______________________________________\n\n");
srand (time(0)); // инициализировать генератор случайных чисел
for (i=0; i<N; i++)
dig[i]=rand()%100; //генерация 2-х значных чисел
// печать массива в col колонок
for (i=0; i<N; i++)
{
printf("%d",dig[i]);
if ((i+1)%col) printf("\t");
else printf("\n");
}
printf("\n_____________________________\n");
// поиск максимума
max=dig[0]; // начальное значение для максимума
for (i=0; i<N; i++)
if(dig[i] > max) max=dig[i];
printf("max=%d\n",max);
}