Программы линейной структуры. Простейшие программы циклической структуры. Разветвления, циклы и разветвления. Простейшие алгоритмы обработки массивов, страница 17

Работа  4.   ПРОСТЕЙШИЕ  АЛГОРИТМЫ  ОБРАБОТКИ МАССИВОВ

Теоретическое введение.

 Перед выполнением заданий работы 4 необходимо ознакомиться с типом данных массив.

В работе рассматриваются простейшие алгоритмы работы с мас­сивами, особенности организации циклов при обработке одномерных массивов (векторов) и двумерных массивов (матриц), организация ввода/вывода массивов, а также общие вопросы организации про­грамм для обработки массивов.

Рассматриваемые в работе алгоритмы являются базовыми для реализации более сложных алгоритмов обработки массивов, рас­сматриваемых в последующих работах. Алгоритмы оформлены в виде фрагментов программ. При самостоятельном выполнении за­даний к работе может потребоваться корректировка приведенных программ. Все алгоритмы описаны в общем виде применительно к массивам произвольных размеров. Для обозначения границ изменения индексов исполь­зуются переменные. При реализации приведенных фрагментов программ на ЭВМ необходимо в начале программы описать все ис­пользуемые массивы и присвоить значения константам, обозначающим границы изменения индексов. Не забывайте, размеры массива объявляют всегда константой!

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

  1. Ввод массивов.

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

Ввод одномерного массива

// ввод массива

# include <stdio.h>

# include <conio.h>

# define N  5 // размер массива

void main()

{

  int a[N];      // массив

  int i;            // индекс

  printf (“ Введите массив целых чисел. \n”);

  printf (“После ввода каждого числа \n”);

  printf (“нажимайте <Enter>  \n”);  

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

   {

     printf (“a[%i]-> ” , i+1);

     scanf (“%i”, &a[i] );

    }

  printf (“\n Для завершения нажмите <Enter>”);

  getch();

}

      Особенностью выполнения этой программы является то, что ввод выполняется N раз и при каждом его выполнении вводится одно число (очередной элемент массива). Если массив содержит небольшое известное заранее число элементов (например, 4), то в списке ввода можно указать явно все элементы массива.

      При вводе двумерного массива необходимо организовать двойной цикл: внешний — по номеру строки, внутренний — по номеру столбца. Ввод   матрицы   по   строкам

int a[N][M];  // массив

 int i, j;         // индекс

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

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

   {

     printf ("a[%i][%i]-> " , i+1, j+1);

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

    }

N — число   строк,   М — число   столбцов   матрицы.

       Ввод в приведенной программе выполняется N*M раз и обеспечивает каждый раз ввод одного элемента массива. Порядок ввода элементов определяете порядком изменения индексов в программе и является следующим: a[0][0], a[0][1], … a[0][M-1], a[1][0], a[1][1], . . . a[1][M-1], … a[N-1][0], a[N-1][1], …a[N-1][M-1].

Но на экран выводиться номера индексов соответствующих началу отсчета с 1.

Ввод по строкам, реализованный в приведенной программе является наиболее естественным. В случае необходимости можно организовать заполнение массива по столбцам. Для этого внешний цикл должен быть организован по номеру столбца (j), а внутренний — по номеру строки (i) с соответствующими границами изменения индексов.

2. Вывод (печать) массивов. При выводе массивов необходимо обеспечить наглядность и удобство восприятия полученных результатов.

Вывод одномерного массива, как правило, целесообразно осу­ществлять в строку, сопровождая поясняющим текстом.

printf ("Массив a-> " );

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

    printf (" %i, " , a[i] );