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



В языке С++ массив при объявлении можно инициализировать.

Общая форма инициализации массива:

тип имя_массива[размер1] * [размерN] = {список_значений};

В список_значений входят констант, разделенных запятыми. Типы констант должны быть совместимыми с типом массива.

Пример инициализации одномерного массива:

int A[5] = {1, 2, 3, 4, 5};

При этом A[0] = 1, A[1] = 2 и т.д.

В языке С возможна инициализация безразмерных массивов. Например, для одномерного массива:

int A[ ] = {1, 2, 3, 4, 5};

Практическая часть

Пример 1. Напишите программу заполнения одномерного массива случайными числами из интервала от 1 до 15 по случайному равномерному закону. Отсортировать массив случайных чисел по возрастанию.

Для решения поставленной задачи применим сортировку методом прямого выбора. Алгоритм сортировки заключается в следующем:

1. В исходной последовательности из N элементов отыскивается элемент с наименьшим ключом.

2. Он меняется местами с первым элементом.

3. В оставшейся последовательности из (N–1) элементов отыскивается минимальный элемент и меняется местами со вторым элементом и т.д., пока не останется один, самый большой элемент.

Программный код решения примера:

#include <stdio.h>#include <conio.h>#include <time.h>#include <stdlib.h>#define Left 1#define Right 15#define N 10 int main (void) {float R, r, min;float A[N]; int i, j, k; unsigned int some;long int L; L = (long) time(NULL); // Системное времяsome = (unsigned) L; // Приведение типовsrand(some); // Задание исходного случайного числа для rand()printf("\n\t The initial array of random numbers in the interval [%d, %2d]\n", Left, Right); for (i = 0; i < N; ++i){// Случайное число из интервала [0,1]r = (float) rand()/RAND_MAX;// Формирование случайного числа из заданного интервалаR = Left + (Right - Left) * r;// Заполнение массива случайными числамиA[i] = R; } // Печать элементов исходного массиваfor (i = 0; i < N; ++i)printf("\n\t %5d) %10.4f", i + 1, A[i]); // Сортировка методом выбораfor (i = 0; i < (N - 1); ++i) { min = A[i]; k = i;for (j = i + 1; j < N; ++j)if (A[j] < min) { k = j; min = A[k]; }A[k] = A[i]; A[i] = min;} // Печать отсортированного массива по возрастаниюprintf("\n\n\t Sort an array:\n");for (i = 0; i < N; ++i)printf("\n\t %5d) %10.4f", i + 1, A[i]); printf("\n\n Press any key: "); _getch(); return 0;}

Возможный результат выполнения программы показан на рис. 5.1.

 

Рис. 5.1. Сортировка одномерного массива по возрастанию

 

В программе использованы директивы препроцессора для задания левой границы (#define Left 1), правой границы (#define Right 15) и размера одномерного массива (#define N 10). Включены дополнительные библиотеки time.h – для обращения к функциям системного времени, stdlib.h – для обращения к функциям генерации псевдослучайных чисел.

Пример 2. Напишите программу поиска максимального элемента в заданном одномерном массиве. Элементы массива являются целыми числами.

Программный код решения примера:

#include <stdio.h>#include <conio.h> int main (void){ int i, size, max; int A[ ] = {3, 5, 2, 8, 12, 0, -7, -3, -21};size = sizeof(A)/sizeof(A[0]);printf("\n\t The dimention of the array A is equal to: %d\n", size); max = A[0]; // Предполагаемый максимум for (i = 0; i < size; ++i) if (A[i] > max) max = A[i]; printf("\n\t Maximum array element: %d\n", max); printf("\n\n Press any key: "); _getch(); return 0; }

 

В программе использована инициализация безразмерного массива и определения его размерности с помощью функции sizeof().

Результат выполнения программы показан на рис. 5.2.

Рис. 5.2. Определение максимального элемента массива

Пример 3. Напишите программу циклической перестановки чисел заданного массива так, чтобы i-e число стало (i+1)-м, а последнее число – первым. Выведите на дисплей исходный массив и преобразованный.

Программный код решения примера:

#include <stdio.h>#include <conio.h>#define N 55 int main (void) { int i, j, k; double D[ ] = {1.23, 2.34, 3.45, 4.56, 5.67, 6.78}; double B[N]; // Заведомо больший размер, чем у массива D // Обнуление массива и выделение памяти для него for (i = 0; i < N; ++i) B[i] = 0.0; k = sizeof(D)/sizeof(D[0]); B[0] = D[k-1];for (i = 0; i < (k - 1); ++i)B[i+1] = D[i]; printf("\n\t The original array:\n");for (i = 0; i < k; ++i)printf("%8.2f", D[i]); printf("\n\n\t The reconfigured array:\n");for (j = 0; j < k; ++j)printf("%8.2f", B[j]); printf("\n\n Press any key: "); _getch(); return 0; }

Результат выполнения программы показан на рис. 5.3.

 

Рис. 5.3. Пример циклической перестановки элементов числового массива

Пример 4. В данном одномерном массиве вещественных чисел поменяйте местами элементы, стоящие на нечетных местах, с элементами, стоящими на четных местах. Предусмотрите четность и нечетность размерности массива.

Для определения четности места в заданном массиве можно использовать операцию деления по модулю, т.е. %.

Программный код решения примера:

#include <stdio.h>#include <conio.h>// Размер массива#define n 7 int main (void) { int i, k;// Пример массиваfloat A[n] = {1.23F, 2.34F, 3.45F, 4.56F, 5.67F, 6.78F, 7.89F};float B[n];// Вспомогательный массив// Обнуление массива for (i = 0; i < n; ++i) B[i] = 0;// Распечатка заданного массиваprintf("\n\t\t The original array of dimention n = %d:\n", n); printf("\t"); for (i = 0; i < n; ++i) printf("%6.2f", A[i]);// Распечатка преобразованного массива printf("\n\n\t\t The reconfigured array:\n"); for (i = 0; i < n; ++i) { k = i % 2; // Для определения четности индекса массиваif (k == 0 && i < n - 1) B[i] = A[i + 1]; else if (k!= 0 && i > 0)B[i] = A[i-1];else if (k == 0 && i < n)B[i] = A[i]; } printf("\t"); for (i = 0; i < n; ++i) printf("%6.2f", B[i]); printf("\n\n Press any key: "); _getch(); return 0; }

 

При инициализации массива каждый его элемент снабжен суффиксом F.

Результат выполнения программы показан на рис. 5.4.

 

Рис. 5.4. Смена четных и нечетных мест чисел массива

Пример 5. Создать массив А(8), элементы которого ввести с клавиатуры, найти сумму четных положительных элементов и минимальный элемент массива.

Программный код решения примера:

// Пятая программа на языке Си++

// Автор Загребельный С.Л.

#include <stdio.h>

#include <conio.h>

#include <math.h>

//#include <stdlib.h>

int main (void) {

int A[8];

int i, sum,min;

printf("\n\t Vvedite massiv iz 8 chisel\n");

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

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

// Печать элементов исходного массива

printf("\n\t ishodniy massiv \n");

for (int i = 0; i < 8; i++)

printf("\n\t %5d element massiva %10d", i + 1, A[i]);

// Нахождение суммы четных положительных элементов

sum=0;min=A[0];

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

{ if((A[i]>0)&&(!(A[i]%2))) {sum=sum+A[i];}

if (A[i] < min) {min = A[i];}}

printf("\n\t Minimalniy elementmassiva %d\n", min);

// Печать найденной суммы

printf("\n\n\t Summa=:%10d\n",sum);

printf("\n\n Press any key: ");

_getch();

return 0;

}

 

Блок-схема программы

Рис. 5.5 Окно кода программы

 

Рис. 5.6. Окно обработки элементов массива


Дата добавления: 2015-12-20; просмотров: 18; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!