Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЗФ_ОАиП / Курс Лекций ОАиП.doc
Скачиваний:
65
Добавлен:
21.03.2016
Размер:
5.89 Mб
Скачать

6.3 Основные алгоритмы обработки одномерных массивов

6.3.1 Инициализация массива

Инициализация массива – это присваивание элементам массива начальных значений. Инициализацию массива можно выполнить на этапе описания массива. Но в том случае, когда начальные значения получают лишь некоторые элементы массива, а остальные вычисляются в процессе выполнения программы, в программе записывают операторы присваивания.

Например: a[0]= –1; a[1]=1.1;

Присваивание всем элементам массива одного и того же значения осуществляется в цикле. Например, чтобы всем элементам массива a присвоить значение 0, можно воспользоватся алгоритмом, изображенном на рис. 6.1.

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

a[i]=0;

// или с помощью цикла while

i=0;

while (i<n)

{

a[i]=0;

i=i+1;

}

Рис. 6.1 Алгоритм и фрагмент программы инициализации массива

В представленном алгоритме все элементы массива в цикле последовательно инициализируются значением – 0.

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

Для ввода n элементов одномерного массива, назовем его А, требуется организовать цикл, для ввода каждого i – го элемента, где i=0,1,2, …, n–1. Аналогичный цикл требуется организовать и для вывода элементов массива. На рис. 6.2 изображена графическая схема ввода и вывода элементов массива.

/* Ввод – вывод статического массива*/

#include <stdio.h>

#define n 50;

void main()

{

int n,i;

float A[n];

puts("Введите число элементов массива ");

scanf("%d",&n);

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

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

{ printf("Введите число A[%2d]=",i);

scanf("%f",&A[i]);

}

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

puts("Массив A");

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

printf("%6.3f ",A[i]);

printf("\n");

}

Рис. 6.2 Алгоритм и программа ввода – вывода статического массива

Ввод–вывод динамического массива осуществляется по тому же алгоритму. Из приведенного ниже примера программы ввода и вывода динамического массива видно, что отличие заключается лишь в описании массива.

/* Ввод – вывод динамического массива*/

#include <stdio.h>

void main()

{

int n,i;

puts("Введите число элементов массива a");

scanf("%d",&n);

float *a=new float[n]; // Описание динамического массива

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

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

{ printf("Введите число a[%2d]=",i);

scanf("%f",a+i); // или scanf("%f",&a[i]);

}

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

puts("Массив a");

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

printf("%.3f ",*(a+i)); // или printf("%.3f ",a[i]);

printf("\n");

delete[] a; // Освобождение памяти выделенной под массив

}

6.3.3 Перестановка двух элементов массива

Для перестановки двух элементов массива x[] с индексами k и m, необходимо использование дополнительной переменной (tmp), для хранения копии одного из элементов (рисунок 6.3 а), но можно обойтись и без использования дополнительной переменной tmp. В этом случаи алгоритм перестановки имеет следующий вид (рисунок 6.3 б).

В большинстве случаев предпочтительнее использовать первый способ, поскольку он не содержит дополнительных вычислений, что особенно важно при перестановке вещественных чисел.

tmp=x[k];

x[k]=x[m];

x[m]=tmp;

x[k]=x[k]+x[m];

x[m]=x[k]-x[m];

x[k]=x[k]-x[m];

(а)

(б)

Рис. 6.3 Алгоритм и фрагмент программы перестановки двух элементов массива c использованием дополнительной переменной (а) и без нее (б)