Программирование · 8 min read · Oct 12, 2025

Изучение C/C++ шаг за шагом - Страница 7

07. Шаг за шагом C/C++ — Программирование на C - Массивы

1. Введение в массивы
2. О массивах
3. Элементы массива
4. Передача массивов в функции

| | 5. Типы массивов | | - Одномерные массивы 1. Добавить элемент

  1. Вставить элемент
  2. Удалить элемент
  3. Заменить элемент
  4. Найти элемент
  5. Удаление массива
  6. Сортировка массива - Многомерные массивы
    Операции с матрицами с использованием многомерных массивов | |

1. Введение в массивы

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

Следующий пример демонстрирует область действия переменной.

| | int main()
{
int sno;
sno = 1001;
sno = 1008;
sno = 1005;
printf(“%d”, sno);
return 0;
} | | | Вывод:
1005 |

Программа выше может отобразить только 1005, но не все значения (т.е. 1001, 1008, 1005 ).

Можем ли мы заменить следующую программу на вышеуказанную программу.

| | int main()
{
int sno;
sno 0 = 1001;
sno 1 = 1008;
sno 2 = 1005;
printf(“%d”, sno);
return 0;
} | | | Вывод:
Ничего,
Программа выше отображает список ошибок, потому что подход неправильный. |

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

| | int main()
{
int sno[3];
sno[0] = 1001;
sno[1] = 1008;
sno[2] = 1005;
printf(“%d”, sno[2] );
return 0;
} | / 3 значения для вставки /
/ Первое место для вставки 1001 /
/ Следующее место для вставки 1008 /
/ и следующее место для вставки 1005 /
/ Печатает значение 2-го места / | | | | | Вывод:
Ничего | |

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

В зависимости от вышеуказанной программы, переменная sno может хранить более одного номера студента. Это легко, используя технику многоместного хранения, также известную как массивы.

2. О массивах

Массивы содержат множество элементов данных одного типа. Этот тип может быть простым типом данных, структурой или классом. Элементы в массиве называются элементами. Номер обращается к элементам; этот номер называется индексом. Элементы могут быть инициализированы конкретными значениями при определении массива.

Массивы могут иметь несколько измерений.

Двумерный массив - это массив массивов. Адрес массива может быть использован в качестве аргумента для функции; сам массив не копируется. Массивы могут использоваться как члены данных в классах. Необходимо проявлять осторожность, чтобы предотвратить размещение данных в памяти вне массива.

/ Следующая программа считывает возраст 4 человек и отображает его /

| | / 47_arrays.c /
#include
int main()
{
int age[4], i;
for( i=0; i<4; i++)
{
printf(“Введите возраст “); scanf(“%d”, &age[i]);
}

for(i=0; i<4; i++)
printf(“ Вы ввели %d”, age[i]);

return 0;
} |

| | |

Как и другие переменные в C, массив должен быть определен перед его использованием для хранения информации. И, как и другие определения, определение массива указывает тип переменной и имя.

Но оно включает в себя еще одну особенность: размер. Размер указывает, сколько элементов данных будет содержать массив. Он немедленно следует за именем и окружен квадратными скобками.

3. Элементы массива

Элементы в массиве называются элементами. Одномерный массив принимает значения либо по строкам, либо по столбцам. Он может хранить только один набор значений.
Первый элемент массива - 0, второй - 1 и так далее.

| | |

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

| | |

4. Передача массивов в функции

Массивы могут использоваться в качестве аргументов для функций.

В объявлении функции тип данных и размеры массива представляют аргументы массива.

void display(float [DISPLAY][MONTHS]);

Когда функция вызывается, используется только имя массива в качестве аргумента.

 display(sales); 

Программа для приема и печати массива из 10 элементов

| | / 48_ ele10.c /
#define MAX 10
display(int a[MAX])
{
int i;
for(i = 0;iprintf(“ %d”,,a[i]);
}

int main()
{
int x[MAX], i;
for(i=0;iscanf(“%d”,&x[i]);

display(x);

return 0;
} |

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

5. Классификация массивов

Массивы бывают двух типов.

| | 1. Одномерные массивы

  1. Многомерные массивы |

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

Одномерный массив - это коллекция элементов в строковом или столбцовом формате.
Одномерный массив может принимать следующие операции.

| | 1. Добавить элемент

  1. Вставить элемент
  2. Удалить элемент
  3. Заменить элемент
  4. Найти элемент
  5. Удаление массива
  6. Сортировка массива |

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

| | / ФУНКЦИИ МАССИВА /
/ 49_sarray.c /
#define N 100
#define M 10
int i,j,r,c,r1,r2,c1,c2; / Чтение элементов массива /
int accept_values(int a[N])
{
int n;
printf(“ Сколько значений вы хотите ввести..? “);
scanf(“%d”,&n);
printf(“ Введите элементы данных.. “);
for(i=0;iscanf(“%d”,&a[i]);
return n;
} / Отображение элементов массива /
void display(int a[N],int n)
{
printf(“ Элементы массива… “);
for(i=0;iprintf(“ %d”,a[i]);
} / Удаление элемента массива /
int delete_cell(int a[N],int n)
{
int pos;
char ch;
printf(“ Введите позицию элемента для удаления: “);
scanf(“%d”,&pos);
for(i=pos-1;ia[i] = a[i+1];
n–;
printf(“ Вы хотите продолжить..(y/n)?”);
ch = getche();
if(ch == ‘y’) delete_cell(a,n);
return n;
} / Вставка элемента массива /
int insert_cell(int a[N],int n)
{
int pos, new;
char ch;
printf(“ Введите элемент для вставки: “); scanf(“%d”,&new);
printf(“ Введите позицию вставки: “); scanf(“%d”,&pos);
for(i=n;i>=pos;i–)
a[i] = a[i-1];
a[pos-1] = new;
n++;

printf(“ Вы хотите продолжить..(y/n)?”);
ch = getche();
if(ch==’y’) insert_cell(a,n);
return n;
} / Для добавления элемента в существующий массив /
int append_cell(int a[N],int n)
{
int pos, new;
char ch;
printf(“ Введите элемент для добавления: “);
scanf(“%d”,&new);
a[n] = new;
n++;
printf(“ Вы хотите продолжить..(y/n)?”);
ch = getche();
if(ch==’y’)append_cell(a,n);
return n;
} / Сортировка списка элементов массива в порядке убывания /
void sort_list_descend(int a[N],int n)
{
int temp;
for(i=0;ifor(j=i;jif(a[i] < a[j])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
printf(“ Отсортированные элементы в порядке убывания… “);
} / Сортировка списка элементов массива в порядке возрастания /
void sort_list_ascend(int a[N],int n)
{
int temp;
for(i=0;ifor(j=i;jif(a[i] > a[j])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
printf(“ Отсортированные элементы в порядке возрастания… “);
} / Для нахождения наименьшего и наибольшего элемента существующего массива /
void small_big(int a[N],int n)
{
int temp;
for(i=0;ifor(j=i;jif(a[i] < a[j])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
printf(“ Наименьший элемент: %d”,a[n-1]);
printf(“ Наибольший элемент: %d”,a[0]);
} / Поиск элемента в массиве /
void search(int a[N],int n)
{
int target, temp=0;
printf(“ Введите элемент для поиска: “);
scanf(“%d”,&target);
for(i=0;iif(a[i] == target)
{
printf(“ Найден на позиции %d”,i+1);
temp = 1;
}
if(temp == 0)
printf(“ Не найдено”);
} / Основная программа / / Для демонстрации простых операций с массивами /
#include
#include #define m 100
int main()
{
int a[m],n; char ch;
clrscr();
n = accept_values(a);
do
{
printf(“ 1 - append_cell”);
printf(“ 2 - delete_cell”);
printf(“ 3 - insert_cell”);
printf(“ 4 - sort_list_descend”);
printf(“ 5 - sort_list_ascend”);
printf(“ 6 - small_big”);
printf(“ 7 - search”);
printf(“ 8 - remove_list”);
printf(“ 9 - exit”);
printf(“ Введите ваш выбор: “);
ch = getche();
printf(“ “);
switch(ch)
{
case ‘1’: n = append_cell(a,n); break;
case ‘2’: n = delete_cell(a,n); break;
case ‘3’: n = insert_cell(a,n); break;
case ‘4’: sort_list_descend(a,n); break;
case ‘5’: sort_list_ascend(a,n); break;
case ‘6’: small_big(a,n); break;
case ‘7’: search(a,n); break;
case ‘8’: n = 0; break;
case ‘9’: printf(“ Это завершит вашу программу.”); break;
}
display(a,n);
printf(“ Вы хотите запустить снова..(y/n)?”);
ch = getche();
}
while(ch!=’9’);
return 0;
} |

2. Двумерные массивы

Двумерный массив - это коллекция элементов в строковом и столбцовом формате.
Многомерный массив может принимать следующие операции.

Многомерный массив обычно используется в области матриц для понимания целых задач самым простым способом.

ФУНКЦИИ МАТРИЦ

| | / 50_menumat.c /
#define N 100
#define M 10
int i, j, r, c, r1, r2, c1, c2; / Чтение значений для МАТРИЦЫ /
void read_matrix(int A[M][M])
{
printf(“ Сколько строк? “);
scanf(“%d”,&r);
printf(“ Сколько столбцов? “);
scanf(“%d”,&c);
for(i=0;ifor(j=0;jscanf(“%d”,&A[i][j]);
} / Запись значений МАТРИЦЫ /
void disp_matrix(int A[M][M])
{
for(i=0;i{
for(j=0;jprintf(“%5d”,A[i][j]);
printf(“ “);
}
} / Для нахождения ТРАНСПОНАТА МАТРИЦЫ ЛЮБОГО ПОРЯДКА /
void tra_matrix_1(int T[M][M],int A[M][M])
{
printf(“ Транспонат A “);
for(i=0;i{
for(j=0;j{
T[i][j] = A[j][i];
printf(“%5d”,T[i][j]);
}
printf(“ “);
}
} / Для СЛОЖЕНИЯ двух МАТРИЦ ( возможно, только если они одного ПОРЯДКА ) /
void add_matrix(int C[M][M],int A[M][M],int B[M][M])
{
for(i=0;ifor(j=0;jC[i][j] = A[i][j] + B[i][j];
printf(“ Сумма A и B “);
} / Для УМНОЖЕНИЯ МАТРИЦ ЛЮБОГО ПОРЯДКА ( при условии, что они следуют ПРАВИЛУ УМНОЖЕНИЯ МАТРИЦ ) /
void mul_matrix_1(int C[M][M],int A[M][M],int B[M][M])
{
int k;
printf(“ Произведение A и B.. “);
printf(“ Матрица C “);
for(i=0;i{
for(j=0;j{
C[i][j]=0;
for(k=0;kC[i][j] = C[i][j]+(A[i][k]B[k][j]);
printf(“%5d”,C[i][j]);
}
printf(“ “);
}
} /
Для ВЫЧИТАНИЯ двух МАТРИЦ ( возможно, только если они одного ПОРЯДКА ) /
void sub_matrix(int C[M][M],int A[M][M],int B[M][M])
{
for(i=0;ifor(j=0;jC[i][j] = A[i][j] - B[i][j];
printf(“ Разность A и B “);
} /
МЕНЮ управляемая программа для выполнения операций с МАТРИЦАМИ */
#include
#include
int main()
{
int A[M][M],B[M][M],C[M][M],T[M][M]; char ch;
clrscr( );
printf(“ Введите элементы матрицы A.. “); read_matrix(A); r1=r; c1=c;
printf(“ Матрица A “); disp_matrix(A);
printf(“ Введите элементы матрицы B.. “); read_matrix(B); r2=r; c2=c;
printf(“ Матрица B “);disp_matrix(B);
do {
printf(“ 1:Сложение”);
printf(“ 2:Вычитание”);
printf(“ 3:Умножение”);
printf(“ 4:Транспонат”);
printf(“ 5:Выход”);
printf(“ Введите ваш выбор..” ); ch = getche();
switch(ch)
{
case ‘1’:
if(r1==r2 && c1==c2)
{
add_matrix(C,A,B);printf(“ Матрица C “);
disp_matrix(C);
}
else
{
printf(“ Ваши введенные значения r1,r2 && c1,c2 не равны,”);
printf(“ поэтому я не могу выполнить это Сложение матриц.”);
printf(“ Пожалуйста, введите правильные матрицы.”);
} break;

case ‘2’:
if(r1==r2 && c1==c2)
{
sub_matrix(C,A,B);printf(“ Матрица C “);
disp_matrix(C);
}
else
{
printf(“ Ваши введенные значения r1,r2 && c1,c2 не равны,”);
printf(“ поэтому я не могу выполнить это Вычитание матриц.”);
printf(“ Пожалуйста, введите правильные матрицы.”);
} break;

case ‘3’:
if(c1==r2)
mul_matrix_1(C,A,B);
else
{
printf(“ Столбцы(c1) матрицы A НЕ РАВНЫ”);
printf(“ Строкам(r2) матрицы B.”);
printf(“ Поэтому я не могу выполнить это Умножение матриц.”);
printf(“ Пожалуйста, введите матрицы так, чтобы c1 == r2.”);
} break;

case ‘4’:
printf(“ Порядок матрицы A: %d x %d”,r1,c1);
tra_matrix_1(T,A);
printf(“ Порядок транспоната A: %d x %d”,c1,r1); break;

case ‘5’: printf(“ Это завершит вашу программу.”); break;
}
printf(“ Вы хотите запустить снова…[y/n]?” ); ch=getche();
}while(ch!=’5’);
return 0;
}
|

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.