Программирование · 8 min read · Oct 12, 2025
Изучение C/C++ шаг за шагом - Страница 7
07. Шаг за шагом C/C++ — Программирование на C - Массивы
| 1. Введение в массивы | |
| 2. О массивах | |
| 3. Элементы массива | |
| 4. Передача массивов в функции |
| | 5. Типы массивов | | - Одномерные массивы 1. Добавить элемент
- Вставить элемент
- Удалить элемент
- Заменить элемент
- Найти элемент
- Удаление массива
- Сортировка массива - Многомерные массивы
Операции с матрицами с использованием многомерных массивов | |
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;i
}
int main()
{
int x[MAX], i;
for(i=0;i
display(x);
return 0;
} |
Возврат массива значений из функций также возможен, но мы должны быть ясны в концепции указателей. Пожалуйста, посмотрите темы указателей для получения дополнительной информации.
5. Классификация массивов
Массивы бывают двух типов.
| | 1. Одномерные массивы
- Многомерные массивы |
1. Одномерные массивы
Одномерный массив - это коллекция элементов в строковом или столбцовом формате.
Одномерный массив может принимать следующие операции.
| | 1. Добавить элемент
- Вставить элемент
- Удалить элемент
- Заменить элемент
- Найти элемент
- Удаление массива
- Сортировка массива |
Следующая программа может выполнять все описанные выше задачи.
| | / ФУНКЦИИ МАССИВА /
/ 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;i
return n;
} / Отображение элементов массива /
void display(int a[N],int n)
{
printf(“ Элементы массива… “);
for(i=0;i
} / Удаление элемента массива /
int delete_cell(int a[N],int n)
{
int pos;
char ch;
printf(“ Введите позицию элемента для удаления: “);
scanf(“%d”,&pos);
for(i=pos-1;i
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;i
{
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;i
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
printf(“ Отсортированные элементы в порядке возрастания… “);
} / Для нахождения наименьшего и наибольшего элемента существующего массива /
void small_big(int a[N],int n)
{
int temp;
for(i=0;i
{
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;i
{
printf(“ Найден на позиции %d”,i+1);
temp = 1;
}
if(temp == 0)
printf(“ Не найдено”);
} / Основная программа / / Для демонстрации простых операций с массивами /
#include
#include
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;i
} / Запись значений МАТРИЦЫ /
void disp_matrix(int A[M][M])
{
for(i=0;i
for(j=0;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;i
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;k
printf(“%5d”,C[i][j]);
}
printf(“ “);
}
} / Для ВЫЧИТАНИЯ двух МАТРИЦ ( возможно, только если они одного ПОРЯДКА ) /
void sub_matrix(int C[M][M],int A[M][M],int B[M][M])
{
for(i=0;i
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;
}
|
Get new posts in your inbox
No spam. Unsubscribe anytime.