Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 1 семестр.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.52 Mб
Скачать

Глава 6 Понятие массива. Одномерные и двумерные массивы

Массив – это пронумерованный набор однотипных элементов.

Массивы бывают статическими и динамическими. У статического массива количество элементов известно заранее и не может быть изменено. У динамического массива количество элементов заранее неизвестно и определяется в процессе выполнения программы.

Также массивы различаются по размерности: одномерные, двумерные, трехмерные и т.д. Примером одномерно массива может послужить вектор а{1, 4, 3.5}. Примером двумерно массива может послужить матрица. Примером трехмерного массива может послужить набор высот местности.

Массивы различают по типу элементов. Бывают целочисленные, вещественные (состоящие из дробных чисел), символьные массивы.

Примеры массивов:

1. вектор а{1, 4, 3.5} – одномерный вещественный массив из трех элементов;

2. матрица – двумерный целочисленный массив из шести элементов;

3. {‘x’, ‘3’, ‘%’} – одномерный символьный массив;

4. {‘x’, 3, ‘%’} – не является массивом, т.к. часть элементов символы, часть элементов числа.

Мы будем рассматривать только статические одномерные и двумерные численные массивы.

6.1 Одномерные массивы

Индекс – это номер элемента в массиве.

У одномерного массива один индекс, обычно он обозначается i.

Чтобы использовать одномерный массив в программе, необходимо:

1. объявить массив в функции main():

тип_данных имя_массива[количество элементов];

double a[3]; //статический массив а из трех дробных чисел

int b[7]; //статический массив b из семи целых чисел

2. проинициализировать массив, т.е. задать каждому элементу конкретное числовое значение;

3. провести вычисления, исследования.

Примечание. Индексация в массиве начинается с 0, т.е. индекс у самого первого элемента в массиве i=0. Индексация в массиве а(7)={-10; 0,2; 3; -4,7; 0,5; -8, 11} указана на рис. 6.1.

Рис. 6.1 Индексация одномерного массива

Способы инициализации одномерного массива:

1. инициализация числами:

double a[4]={0.5, -2,856, 1, 23};

2. с клавиатуры:

for (i=0; i<4; i=i+1){

cout<<”a[”<<i<<”]=”;

cin>>a[i];

}

3. по формуле:

например

for(i=0; i<4; i=i+1){

a[i]=pow(i, 2.0);

}

Пример 6.1. Даны четыре одномерных массива: а(8)={1,2,3,4,5,6,7,8}, b(8) вводится с клавиатуры, с(8) вычисляется по формуле , d(8) вычисляется по формуле . Построить таблицу значений массивов.

Решение. Сначала необходимо проинициализировать массивы согласно условию задачи.

Массив а задан числами (первый способ инициализации), поэтому он будет проинициализирован при объявлении.

В одном цикле по переменной i (0≤i<8) введем b с клавиатуры (второй способ инициализации), массивы c и d рассчитаем по формулам (третий способ инициализации).

Далее организуем еще один цикл по переменной i (0≤i<8), в котором выведем все проинициализированные массивы на экран.

Вывод таблицы на экран нельзя делать в первом цикле, т.к. в каждой итерации будет идти запрос очередного элемента b, тогда таблица со значениями массивов будет смешана с запросом элемента b.

Рис. 6.2. Блок-схема (с предусловием)

Код программы (Visual Studio) с оператором for (предусловие):

// proga27.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include <iostream>

#include <iomanip>

using namespace std;

int main()

{

double a[8]={1,2,3,4,5,6,7,8};

double b[8], c[8], d[8];

int i;

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

cout<<"b["<<i<<"]=";

cin>>b[i];

c[i]=2.0*i;

d[i]=a[i]+b[i]+c[i];

}

cout<<setw(2)<<"i"<<setw(5)<<"a"<<setw(5)<<"b"<<setw(5)<<"c"<<setw(5)<<"d"<<endl;

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

cout<<setw(2)<<i<<setw(5)<<a[i]<<setw(5)<<b[i]<<setw(5)<<c[i]<< setw(5)<<d[i]<<endl;

}

return 0;}

Результат выполнения программы:

Код программы (Borland C++) с оператором for (предусловие):

#include <iostream.h>

#include <iomanip.h>

int main()

{

double a[8]={1,2,3,4,5,6,7,8};

double b[8], c[8], d[8];

int i;

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

cout<<"b["<<i<<"]=";

cin>>b[i];

c[i]=2.0*i;

d[i]=a[i]+b[i]+c[i];

}

cout<<setw(2)<<"i"<<setw(5)<<"a"<<setw(5)<<"b"<<setw(5)<<"c"<<setw(5)<<"d"<<endl;

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

cout<<setw(2)<<i<<setw(5)<<a[i]<<setw(5)<<b[i]<<setw(5)<<c[i]<< setw(5)<<d[i]<<endl;

}

return 0;

}

Результат выполнения программы:

Пример 6.2. Массив а(10) задан формулой аi=3i-5. Вычислить сумму положительных элементов массива и поменять местами первый и последний элементы.

Решение.

Обозначим за S сумму положительных элементов массива. При расчете S требуется дополнительное условие: «ai>0». Первый элемент массива имеет индекс 0, последний элемент имеет индекс 9, поэтому будем менять местами а0 и а9. Из-за перемены мест элементов массив изменится, поэтому выведем его еще раз.

Рис. 6.3. Блок-схема для примера 6.2

Код программы (Visual Studio) с оператором for (предусловие):

// proga28.cpp: определяет точку входа для консольного приложения.

//

#include "stdafx.h"

#include <iostream>

#include <iomanip>

using namespace std;

int main(){

double S, tmp, a[10];

int i;

S=0;

for(i=0; i<10; i=i+1){

a[i]=3.0*i-5.0;

cout<<setw(3)<<a[i];

if(a[i]>0){

S=S+a[i];

}

}

cout<<endl;

cout<<"S="<<S<<endl;

tmp=a[0];

a[0]=a[9];

a[9]=tmp;

for(i=0; i<10; i=i+1){ cout<<setw(3)<<a[i]; }

cout<<endl;

return 0;}

Результат выполнения программы:

Код программы (Borland C++) с оператором for (предусловие):

#include <iostream.h>

#include <iomanip.h>

int main(){

double S, tmp, a[10];

int i;

S=0;

for(i=0; i<10; i=i+1){

a[i]=3.0*i-5.0;

cout<<setw(3)<<a[i];

if(a[i]>0){

S=S+a[i];

}

}

cout<<endl;

cout<<"S="<<S<<endl;

tmp=a[0];

a[0]=a[9];

a[9]=tmp;

for(i=0; i<10; i=i+1){ cout<<setw(3)<<a[i];}

cout<<endl;

return 0;}

Результат выполнения программы:

Проверка результатов в программе MathCad:

Ручной счет:

при i=0 a(0)=3i-5=3•0-5=-5;

при i=1 a(1)=3i-5=3•1-5=-2;

при i=2 a(2)=3i-5=3•2-5=1;

при i=3 a(3)=3i-5=3•3-5=4;

при i=4 a(4)=3i-5=3•4-5=7;

при i=5 a(5)=3i-5=3•5-5=10;

при i=6 a(6)=3i-5=3•6-5=13;

при i=7 a(7)=3i-5=3•7-5=16;

при i=8 a(8)=3i-5=3•8-5=19;

при i=9 a(9)=3i-5=3•9-5=22;

сумма положительных элементов S=1+4+7+10+13+16+19+22=92.