Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГЛАВА 6 Массивы.doc
Скачиваний:
42
Добавлен:
29.02.2016
Размер:
145.92 Кб
Скачать

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

Инициализация массива означает присвоение начальных значений его элементам при объявлении.

Инициализация элементов массива осуществляется указанием его начальных значений в фигурных скобках:

int mas[5] = {1, -5, 10, 243, -58};

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

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

создаёт массив из 10 элементов целого типа, первые 5 из которых проинициализированы указанными значениями, а остальные – нулевыми. Этим можно воспользоваться для инициализации элементов массива нулевыми значениями:

int mas[20] = {0};

Однако если задать значений больше, чем указанный размер массива, компилятор генерирует сообщение об ошибке.

Во время инициализации можно не задавать количество элементов массива:

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

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

const int n = (sizeof(mas) / sizeof(mas[0])); где

sizeof(mas) – количество байтов, занимаемое массивом mas, а

sizeof(mas[0]) – количество байтов, занимаемое одним элементом.

При необходимости можно задать массив констант следующим образом:

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

Тогда ни один из элементов массива array изменить будет нельзя.

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

В С++ работать с массивами можно только поэлементно. Если mas является массивом размера n, то отдельный элемент обозначается с помощью имени массива, за которым следует индекс требуемого элемента, например, mas[i]. Значение индекса может изменяться от 0 до n-1. В качестве номера элемента массива могут использоваться:

  • константа – mas[3];

  • переменная – mas[i];

  • выражение – mas[3 * ( i+2 )];

Элементы массива называют индексированными переменными. Индексированные переменные можно использовать как обычные переменные, например, с ними можно производить следующие действия:

  • присваивать элементу массива значение

mas[1] = 5;

  • использовать элементы массивов в выражениях

i = 4; y = 2 * mas[i] * sin(mas[5]);

  • вводить и выводить элементы массивов

cin>>mas[5]; cout<<mas[k];

Для организации ввода/вывода массива следует использовать цикл, осуществляющий ввод/вывод каждого элемента массива (поскольку в С++ работать с массивами можно только поэлементно). Доступ к элементам одномерного массива удобнее всего осуществлять, пользуясь циклом for.

Например, ввод массива можно выполнить следующим образом:

const int n = 10; // именованная константа

float mas[n]; // объявлен массив из 10 элементов

for(int i = 0; i < n; i++){ // цикл для ввода массива

cin>>mas[i];

}

В приведенном выше примере поэлементно вводится массив mas типа float размера n. Параметр оператора цикла for переменная i изменяется от 0 до n-1.

Вывод массива выполняется аналогичным образом:

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

cout<<mas[i]<< ' ';

// Пример 6.1. Ввести одномерный массив. Найти сумму элементов.

#include <iostream>

using namespace std;

const int DIM = 50;

int main(){

int a[DIM], n;

cout<<"Vvedi razmer massiva: "; cin>>n;

cout<<"Vvedi massiv "<<endl;

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

cin>>a[i];

int sum = 0;

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

sum = sum + a[i];

cout<<"Summa all elements = "<<sum<<endl;

system("pause");

}

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

for(int i = 0; i < n; i++) mas[i] = i;

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

// Пример 6.2. Заполнение массива случайным образом и вывод

// его на экран. Использование функций rand(), srand(n).

#include <iostream>

#include <stdlib.h>

const int DIM = 50;

using namespace std;

int main(){

int a[DIM], n;

while(true){

system("cls");

cout<<"Vvedi n:"; cin >> n;

if(n > 1 && n < DIM) break;

cout<<"Nocorrect n\n";

}

srand(n); // для получения разных послед. чисел

cout<<"\n\t 1___Massiv a(n)\n";

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

a[i] = rand() % 6 + 1; // числа от 1 до 6

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

cout<<a[i] << ' ';

cout<<"\n\t 2___ Massiv a(n)\n";

for(int i = 1; i <= 25; i++){ // вывод по 5 элементов в строку

cout.width(3);

cout<<rand() % 6 + 1;

if(i % 5 == 0)cout<<endl;

}

cout<<"\n\t 3___Massiv a(n)\n";

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

a[i] = rand(); // числа от 0 до RAND_MAX

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

cout<<a[i]<< ' ';

cout<<endl;

system("pause");

}

// Пример 6.3. Ввести одномерный массив. Разбить массив на два

// массива: – массив чётных и массив нечетных чисел.

#include<iostream>

using namespace std;

const int DIM = 50;

int main(){

int a[DIM], b[DIM], c[DIM];

int n;

cout<<"Vvedite razmer massiva: "; cin>>n;

cout<<"Vvedi massiv"<<endl;

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

cin>>a[i];

int indB = 0, indC = 0;

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

if(a[i] % 2){ c[indC] = a[ i ]; indC++; }

else { b[indB] = a[ i ]; indB++; }

cout<<"Isxodni massiv mas\n";

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

cout<<a[i]<<' ';

cout<<"\nMassiv chetnix chisel b\n";

for(int i = 0; i < indB-1; i++)

cout<<b[i]<<' ';

cout<<"\nMassiv nechetnix chisel c\n";

for(int i = 0; i < indC-1; i++)

cout<<c[i]<< ' ';

cout<<endl;

system("pause");

}

// Пример 6.4. Одномерный целочисленный массив проинициализировать

// случайным образом. Найти и вывести на экран значения

// минимального и максимального элементов массива и их индексы.

// Обменять местами минимальный и максимальный элементы.

#include <iostream>

#include <stdlib.h>

using namespace std;

const int DIM = 50;

int main(){

double a[DIM]; int n;

while(true){

cout<<" Vvedi razmer massiva: (n): "; cin >> n;

if(n > 0 && n <= DIM) break;

cout<<"No Correct n!\n";

}

srand(n);

cout<<"\n\tIsxodni massiv \n";

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

a[i] = rand() % 15 - rand() % 10;

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

cout<<a[i]<<' ';

int max = a[0], min = a[0];

int imax = 0, imin = 0;

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

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

if(a[i] > max){max = a[i]; imax = i;}

}

cout<<"\n max = "<<max; cout<<"\t imax = "<<imax;

cout<<"\n min = "<<min; cout<<"\t imin ="<<imin;

a[imin] = max; a[imax] = min;

cout<<"\n\tRezult massiv\n";

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

cout<<a[i] << ' ';

cout<<endl;

system("pause");

}

// Пример 6.5. Дан одномерный целочисленный массив.

// Отсортировать массив по не убыванию методом "пузырька".

#include <iostream>

using namespace std;

const int DIM = 50;

int main(){

double a[DIM];

int n, x;

cout<<" Vvdite razmer massiva n: "; cin>>n;

cout<<"\nVvedite massiv:"<<endl;

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

cout<<"a["<<i <<"] = "; cin>>a[i];

}

cout<<"\nIsxodni massiv\n";

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

cout<<a[i]<< ' ';

cout<<endl;

for(int i = 1; i < n; i++) //Сортировка массива

for(int j = 0; j < n-i; j++)

if(a[j] > a[j+1]){x = a[j]; a[j] = a[j+1]; a[j+1] = x;}

cout<<"\nOtsortirovanni massiv\n";

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

cout<<a[i] << ' ';

cout<<endl;

system("pause");

}