Поиск

Полнотекстовый поиск:
Где искать:
везде
только в названии
только в тексте
Выводить:
описание
слова в тексте
только заголовок

Рекомендуем ознакомиться

Информатика, программирование->Дипломная работа
Для досягнення мети роботи була досліджена наукова література по даній темі, за допомогою якої були розглянуті та охарактеризовані основні інформаційн...полностью>>
Информатика, программирование->Лабораторная работа
Откройте папку, куда будете сохранять данный файл. На белом поле окна щелкните правой кнопкой мыши один раз, в появившемся контекстном меню выберете «...полностью>>
Информатика, программирование->Дипломная работа
Цель разработки – создание компьютерной системы управления документооборотом (Document Management System). Компьютерная система позволяет: вести учет ...полностью>>
Информатика, программирование->Реферат
У наш час комп’ютерні технології дозволяють виконувати таку роботу, котру раніш потрібно було робити на величезних машинах, при цьому затрачаючи багат...полностью>>

Главная > Контрольная работа >Информатика, программирование

Сохрани ссылку в одной из сетей:

Двумерные массивы

Язык С позволяет использовать массивы любой размерности, но наиболее часто встречаются двумерные массивы. Двумерным называется массив, элементы которого являются сами массивами.

Двумерный массив можно представить как таблицу, имеющие столбцы и строки. Такой массив следует объявлять с двумя индексами, один из которых определяет количество строк, а второй количество столбцов таблицы. Например массив, объявленный как:

int table [3] [4] ;

можно представить в виде таблицы 1. Этот массив имеет три строки и четыре столбца. Для доступа к элементу массива следует указать два индекса. Первый индекс элемента двумерного массива представляет собой номер строки, а второй – номер столбца. Для массива table индекс номера строки принимает значения 0,1,2, а индекс номера столбца – значения 0,1,2,3.

Таблица 1. Массив table [3] [4].

table [0] [0]

table [0] [1]

table [0] [2]

table [0] [3]

table [1] [0]

table [1] [1]

table [1] [2]

table [1] [3]

table [2] [0]

table [2] [1]

table [2] [2]

table [2] [3]

количество байт памяти, которое необходимо для размещения массива, вычисляется по формуле:

Количество байт = размер типа данных * количество строк * количество столбцов.

Под массив table [3] [4] требуется 2*3*4 = 24 байта памяти.

В памяти двумерный массив занимает непрерывную область и располагается по строкам, как одномерный. Например массив table [3][4] располагается в памяти так, как показано на рис.1.

table [0][0] …table [0][3] table [1][0… table [1][3] table [2][0… table [2][3

первая строка вторая строка третья строка

Рис.1. Размещение двумерного массива table [3][4] в памяти.

Инициализация двумерных массивов.

Для инициализации двумерного массива следует при объявлении массива в фигурных скобках записать список констант, значения которых присваиваются элементам массива.

Например, массив table [3][4] может быть инициализирован так:

int table [3][4] = {

{5 ,8 ,9 ,7},

{3, 6, 4, 7},

{6, 2, 1, 0}

};

Массив table будет заполнен так:

5

8

9

7

3

6

4

7

6

2

1

0

Если констант в списке будет указано меньше, чем элементов массиве, то оставшиеся значения элементов массива не определены. Например, при инициализации массива table следующим образом:

int table [3][4] = {

{5 ,8 },

{3, 6, 4, 7},

{6, 1, 0}

};

Массив table будет заполнен так:

5

8

3

6

4

7

6

1

0

В пустых клеточках значения элементов массива не определены.

Пример 1. Пусть в маленькой гостинице имеется 10 комнат. Известны номера комнат: 102,107,109,112,115,116,123,125,127,130 и вместимость каждой комнаты соответственно: 12,43,23,12,20,15,16,23,12,15. Рассмотрим задачу поиска и вывода списка комнат, вместимость которых составляет не меньше значения, вводимого с клавиатуры.

#include

//объявление двумерного массива room. Значения элементов первой строки массива

//представляют собой номера комнат,

//а значения элементов второй строки – вместимость комнат

int room[2][10]= {

{102,107,109,112,115,116,123,125,127,130},

{12,43,23,12,20,15,16,23,12,15}

};

void main (void)

{

int i,j, flag=0,num;

//вывод вместимости всех комнат гостиницы

puts("Вместимость всех комнат гостиницы:");

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

printf("Комната #%d рассчитана на %d мест\n",room[0][j],room[1][j]);

puts("Введите минимальное необходимое количество мест");

scanf("%d",&num);

// поиск списка комнат с заданной вместимостью

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

if(room[1][j]>=num)

{flag=1;

printf("Комната #%d рассчитана на %d мест\n",room[0][j],room[1][j]);

}

if(flag==0)

puts("Комнат с таким количеством мест нет");

}

Пример 2. По введенным числу, месяцу и году определить порядковый номер дня в году. Например, если ввести 10 - это число, 4 – это месяц, 2001 – это год, то программа должна вывести:

В 2001 году это день имеет номер 100.

Для решения этой задачи используется двумерный массив, имеющий две строки и 13 элементов в каждой строке. В первую строку занесены значения количества дней в каждом месяце не високосного года, а во вторую - то же для високосного года. В строке 13 элементов, а на 12, т.к. месяцы года нумеруются, начиная с первого, а индексы элементов массива начинаются с нуля.

#include

#include

#include

void main(void)

{

clrscr();

int year,month,day,i,k;

//объявление и инициализация массива

int tab_days[2][13]={

{0,31,28,31,30,31,30,31,31,30,31,30,31},

{0,31,29,31,30,31,30,31,31,30,31,30,31}

};

puts("Введите число, месяц и год");

scanf("%d %d %d",&day,&month,&year);

// определим, високосный ли год

k=year%4==0 && year%100 !=0 || year%400 ==0;

if(k==1)

puts("Год високосный" );

else

puts("Год не високосный" );

// контроль правильности ввода месяца

if(month<1 || month >12)

{

puts("Неверно введен месяц");

exit(-1); //завершение работы программы при ошибке

}

// контроль правильности ввода числа

if(day <1 || day >tab_days[k][month])

{

puts("Неверно введен день");

exit(-1);

}

// цикл по номеру месяца

for(i=1; i

day+= tab_days[k][i];

printf("В %d году этот день имеет номер %d\n",year, day);

getch();

}

Присваивание значений элементам массива

Значения элементам массива могут быть присвоены в процессе работы программы. Для этого следует организовать вложенные циклы, управляющие переменные которых позволяют индексировать строки и столбцы двумерного массива.

Пример 3. Заполнение двумерного массива случайными числами

#include

#include

#include

#include

int main(void)

{

int i,j;

int num[3][4]; //выделена память под двумерный массив

clrscr();

randomize();

//внешний цикл индексирует строки

for(i=0; i<3; i++) //индекс строки изменяется от 0 до 2

// внутренний цикл индексирует столбцы

for(j=0; j<4; j++) // индекс столбцаи изменяется от 0 до 3

num[i][j] = rand(); //присваиваивание элементу матрицы случайного числа

printf("Полученная матрица\n\n");

// вывод матрицы по строкам

for(i=0; i<3; i++) {

for(j=0; j<4; j++)

printf("%6d ", num[i][j]);

printf("\n");

}

getch();

return 0;

}

Пример 4.

Если необходимо, чтобы при обявлении элементы массив были инициализированы нулевыми значениями, массив может быть объявлен как статический.

//Сформировать матрицу A(10,10) следующего вида:

// 1 0 0 ...0

// 2 1 0 ...0

// 3 2 1 ...0

// . . . . ..

// . . . . ..

// 10 9 8 ...1

//

#include

#include

#define N 10

void main(void)

{

static int a[N][N]; //Статический массив инициализируется нулями

int i,j;

clrscr();

for(i=0;i

for(j=0; j

if(i>=j)

a[i][j]=i-j+1; //условие попадания под гл. диагональ

//вывод полученного массива

for(i=0;i

{ for(j=0; j

printf("%3d",a[i][j]);

putchar('\n');

}

getch();

}

Ввод элементов двумерного массива в диалоговом режиме

Пример 5.

#include

#include

#include

#include

int main(void)

{

int i,j;

int num[3][4]; //выделена память под двумерный массив

clrscr();

randomize();

for(i=0; i<3; i++) //индекс строки изменяется от 0 до 2

for(j=0; j<4; j++) // индекс столбцаи изменяется от 0 до 3

{

printf("Введите элемент num[%d][%d]\n",i,j);

scanf("%d",&num[i][j]);

}

printf("Полученная матрица\n\n");

// вывод матрицы по строкам

for(i=0; i<3; i++)

{

for(j=0; j<4; j++)

printf("%6d ", num[i][j]);

printf("\n");

}

getch();

return 0;

}

МАССИВЫ СТРОК

Массив строк можно организовать так же, как массив данных любого типа. Массив строк будет являться массивом массивов символов. Определяя массив строк также, как и при определении массива другого типа, следует использовать два индекса. Например, определение

char name [10] [20];

задает 10 строковых переменных name длиной не более 19 символов в каждой.

Строки можно вводить и выводить, используя только один цикл, повторяющийся по одному разу на каждую строку массива, как показано в примере 1.

Пример 1. Ввод-вывод массива строк.

#include

void main (void

{

char name[10] [20];

int index;

// ввод строк

// цикл по индексу строки

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

{

printf(“Введите строку №%d “,index);

gets(name[index];

printf(“ \n”);

}

// вывод строк

// цикл по индексу строки

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

{

puts(name[index];

}

}

Если требуется задавать строки путем ввода значений отдельных символов, следует использовать вложенные циклы. Так, если необходимо ввести строки, составляющие массив char name[10][20], то следует организовать внешний цикл, который должен повторяться 10 раз, по одному на каждую строку и внутренний цикл, который должен иметь 19 повторов для ввода значений одной строки. В примере 1 показана программа, в которой вводятся 10 имен в массив, а затем все эти 10 строк с помощью цикла for выводятся на экран.

Пример 2.

#include

void main (void)

{

char name[10][20],letter;

int index1, index2;

//цикл по номеру строку

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

{

index2=0;

puts("Введите имя, для завершения нажмите Enter\n");

do

{

letter=getchar(); //символ вводится в переменную letter

//значение символа присваивается элементу двумерного массива

// name[index1][index2]

// первый индекс – номер строки внутри массива

// второй индекс – позиция символа внутри строки

name[index1][index2] = letter;

index2++;

}while (letter !='\n' && index2 <19);

name[index1][index2]='\0'; // дописываем нулевой байт в конец строки

putchar('\n');

}

// вывод строк массива на экран – цикл организован по индексам строк

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

//вывод строки целиком за один раз

puts( name[index1]);

putchar('\n');

}

Пример 3 Программа- простейший текстовый редактор. Позволяет вводить до 100 сирок, длина каждой строки – не более 254 символов. Ввод строк прекращается при вводе пустой строки, то есть при нажатии клавиши Enter.

#include

#define MAX 100

#define LEN 255

char text[MAX][LEN];

int main(void)

{

int t, i, j;

//ввод строки целиком за один раз

for(t=0; t

{

//вывод номера строки

printf("%d: ", t);

//ввод строки

gets(text[t]);

//ввод прекращается, если первым символом строки

//оказывется нулевой байт- признак конца строки

if(!text[t][0]) break;

}

/*посимвольный вывод массива строк на экран */

//внешнтй цикл по номеру строки

for(i=0; i

{

//внутренний цикл по номеру столбца

for(j=0; text[i][j]; j++)

printf("%c", text[i][j]);

printf("%c", '\n');

}

return 0;

}


Загрузить файл

Похожие страницы:

  1. Одномерные и двумерные массивы

    Лабораторная работа >> Информатика
    ... к элементу массива 1.4 Инициализация массивов 1.4.1 Одномерные массивы 1.4.2 Двумерные массивы 1.5 Тип имени массива 1.6 Передача одномерных массивов в функцию 1.7 Передача двумерных массивов в функцию ...
  2. Массивы и указатели

    Реферат >> Информатика
    ... с указателями Многомерные массивы Инициализация двумерного массива Указатели и многомерные массивы Функции и многомерные массивы Между массивами и указателями существует ...
  3. Работа с одномерными и двумерными массивами

    Лабораторная работа >> Информатика, программирование
    ... решения типовых задач с использованием одномерных и двумерных массивов. Порядок выполнения работ Запустить программу ... работы с одномерными и двумерными массивами - описание, ввод-вывод элементов массива, операции с элементами массива. Выполнить задания ...
  4. Массивы. Основные алгоритмы обработки массивов на примере языка программирования Pascal

    Реферат >> Информатика
    ... ячейки массива. 9 -7 0 -8 Шаг 1. 9 -7 0 -8 9 -7 0 -8 -7 -7 0 -8 Шаг 2. -7 -7 0 -8 -7 9 0 -8 Шаг 3. 3. Особенности обработки двумерных массивов Двумерный массив ... +1. 4.1 Определение диагоналей массива Рисунок 4. Диагонали двумерного массива Таким образом, в ...
  5. Массивы. И работа с ними в языке Pascal

    Лекция >> Информатика, программирование
    ... массива; Тип — тип элементов массива. Табл. .7 может быть представлена в виде двумерного массива ... of integer Количество элементов двумерного массива можно вычислить по формуле: ... ). Листинг 12. Обработка двумерного массива procedure TForml.ButtonlClick(Sender ...

Хочу больше похожих работ...

Generated in 0.0014078617095947