1
4. МАСИВИ. УКАЗАТЕЛИ
4.1. МАСИВИ
Масивът е структура от данни, състояща се от множество
последователно наредени елементи от един и същи тип, достъпът до
които се осъществява чрез индекси. Масивите могат да бъдат
едномерни или многомерни (двумерни, тримерни и т.н.), в зависимост от
броя индекси, чрез които се адресират елементите
.
4.1.1. Дефиниране и използване на масиви
Общият вид на дефиницията на едномерен масив е следният:
Тип на елементите Име_на_масива [Брой на елементите];
Дефиницията на един масив определя името на масива, типа на
елементите му и неговия размер (брой на елементите). Памет за
масивите се заделя по време на компилация, поради което техните
размери трябва да се задават чрез константи или константни изрази.
Дефиницията на едномерен масив с име х, състоящ се от 10
елемента от тип int има вида:
int x[10];
Отделните елементи се указват чрез името на масива и индекс,
поставен в квадратни скоби, например х[0], х[1], х[2] са
съответно нулевия, първия и втория елемент на масива. Ако броят на
елементите на масива е 10, то индексите на елементите му могат да
бъдат от
0 до 9.
Общият вид на дефиницията на двумерен масив е следният:
Тип Име_на_масива [Брой на редовете][Брой на стълбовете];
Дефиницията на двумерен масив с име y, представляващ таблица
от 5 реда и 10 стълба с елементи от тип int има вида:
int y[5][10];
Този масив може да има елементи с един и с два индекса.
Например y[0],y[1],y[2] са нулевия, първия и втория редове на
двумерния масив, т.е. всеки елемент е един едномерен
масив. Докато
y[0][0],y[0][1],y[0][2] са нулевия, първия и втория елементи от
нулевия ред.
Дефиницията на тримерен масив с име z, представляващ 3 таблици
с по 5 реда и 10 стълба и с елементи от тип float има вида:
float z[3][5][10];
Този масив може да има елементи с един, два и три индекса.
Например z[0], z[1], z[2] са
нулевата, първата и втората
таблици на тримерния масив z, т.е. всеки елемент е един едномерен
масив. Докато z[0][0],z[0][1],z[0][2] са нулевия, първия и втория
ред от нулевата таблица, а z[0][1][0],z[0][1][1], z[0][1][2]
2
са нулевия, първия и втория елементи от първия ред на нулевата
таблица.
Елементите на масивите могат да участват във всички операции,
разрешени за техния тип.
Използуването на масиви се илюстрира от следните програми:
Програма 4.1. Намира сумата на елементите на едномерен масив
#include <stdio.h>
void main()
{
int n, a[20];
printf("Задайте броя на елементите: ");
scanf("%d",&n);
//Въвеждане елементите
на масива
printf("Въведете елементите на масива.n");
for (int i=0;i<n;i++){
printf("%d-и елемент: ",i);scanf("%d",&a[i]);
}
//Намиране сумата на елементите на масива
int s=0;
for (i=0; i<n; i++) s+=a[i];
printf("Сумата на елементите на масива a е %dn",s);
}
Програма 4.2. Намира индекса на най-големия елемент в едномерен
масив
#include <stdio.h>
void main()
{
int n, a[20];
printf("Задайте броя на елементите: ");
scanf("%d",&n);
//Въвеждане елементите на масива
printf("Въведете елементите на масива.n");
for (int i=0;i<n;i++){
printf("%d-и
елемент: ",i);scanf("%d",&a[i]);
}
//Намиране индекса на най-големия елемент
int ind_max=0;
for (i=1; i<n; i++)
if (a[i]>a[ind_max]) ind_max=i;
printf("Индексът на max ел. в масива е %dn",ind_max);
}
3
Програма 4.3. Извежда индексите на елементите в едномерен масив с
най-голяма стойност. Предполага се, че те са няколко
#include <stdio.h>
void main()
{
int n, a[20];
printf("Задайте броя на елементите: ");
scanf("%d",&n);
//Въвеждане елементите на масива
printf("Въведете елементите на масива.n");
for (int i=0;i<n;i++){
printf("%d-и елемент: ",i);scanf("%d",&a[i]);
}
//Намиране индекса на първия от елементите
int ind_max=0;
for (i=1; i<n; i++) if (a[i]>a[ind_max]) ind_max=i;
/*Извеждане индексите на елементите с
най-голяма стойност*/
printf("Най-голяма стойност %d ", a[ind_max]);
printf("имат елементите със следните индекси:n");
for (i=ind_max; i<n; i++)
if (a[i]==a[ind_max]) printf("%d ",i);
printf("n");
}
Програма 4.4. Запомня и извежда индексите на елементите в
едномерен масив с най-голяма стойност. Предполага се, че те са
няколко.
#include <stdio.h>
void main()
{
int n, a[20];
printf("Задайте броя на елементите: ");
scanf("%d",&n);
printf("Въведете елементите на масива.n");
for (int i=0;i<n;i++){
printf("%d-и елемент: ",i);scanf("%d",&a[i]);
}
int ind_max=0;
for (i=1; i<n; i++) if (a[i]>a[ind_max]) ind_max=i;
//Запомняне индексите
на елементите с най-голяма ст-ст.
int mas_ind[20],
//Масив, в който се запомнят индексите
j=0; //Индекс на елементите на масива mas_ind
for (i=ind_max; i<n; i++)
if (a[i]==a[ind_max]) mas_ind[j++]=i;