Числовые массивы в языке программирования С
Пример 4. В данном одномерном массиве вещественных чисел поменяйте местами элементы, стоящие на нечетных местах, с элементами, стоящими на четных местах. Предусмотрите четность и нечетность размерности массива.
Для определения четности места в заданном массиве можно использовать операцию деления по модулю, т.е. %.
Программный код решения примера:
#include <stdio.h>
#include <conio.h>
// Размер массива
#define n 7
int main (void) {
int i, k;
// Пример массива
float A[n] = {1.23F, 2.34F, 3.45F, 4.56F, 5.67F, 6.78F, 7.89F};
float B[n];// Вспомогательный массив
// Обнуление массива
for (i = 0; i < n; ++i)
B[i] = 0;
// Распечатка заданного массива
printf("\n\t\t The original array of dimention n = %d:\n", n);
printf("\t");
for (i = 0; i < n; ++i)
printf("%6.2f", A[i]);
// Распечатка преобразованного массива
printf("\n\n\t\t The reconfigured array:\n");
for (i = 0; i < n; ++i) {
k = i % 2; // Для определения четности индекса массива
if (k == 0 && i < n - 1 )
B[i] = A[i + 1];
else if (k != 0 && i > 0 )
B[i] = A[i-1];
else if (k == 0 && i < n)
B[i] = A[i]; } printf("\t");
for (i = 0; i < n; ++i)
printf("%6.2f", B[i]);
printf("\n\n Press any key: ");
_getch();
return 0; }При инициализации массива каждый его элемент снабжен суффиксом F.
Результат выполнения программы показан на рис. 5.4.
Задание 4
- Вывод на дисплей пользователя исходного массива и преобразованного выполните без дополнительного массива.
- В программу внесите изменения, чтобы не использовать целочисленную переменную для определения остатка от деления
- Проверьте программу для массива с четным количеством элементов.
- Напишите программу без использования операции определения остатка от деления, т.е. без использования операции i % 2.
- Напишите программу для двухмерного массива вещественных чисел. Смену мест элементов (четных с нечетными) предусмотрите в каждой строке матрицы. Размер матрицы примите равным n
m, где n = 2*X
Указание: Можно предусмотреть определение остатка от деления, как индекса строки, так и индекса столбца и суммы индексов строки и столбца.
Пример 5. Напишите программу заполнения квадратной матрицы (заданного размера n > 2) по спирали натуральными числами начиная с левого верхнего угла (принимая его за номер 1) и двигаясь по часовой стрелке.
Образец заполнения:
Программный код решения примера:
#include <stdio.h>
#include <conio.h>
#define n 13
int main(void) {
int i = 1, j, k;
int p = n/2;
int A[n][n];
// Обнуление матрицы
for (j = 0; j < n; ++j)
for (k = 0; k < n; ++k)
A[j][k] = 0;
printf("\n\t Spiral matrix of dimention (%d x %d):\n", n, n);
for (k = 1; k <= p; k++) // Число спиралей
{
// Верхний горизонтальный столбец
for (j = (k-1); j < (n-k+1); j++)
A[(k-1)][j] = i++;
// Правый верхний столбец
for (j = k; j < (n-k+1); j++)
A[j][n-k] = i++;
// Нижний горизонтальный столбец
for (j = (n-k-1); j >= (k-1); --j)
A[n-k][j] = i++;
// Левый верхний столбец
for (j = (n-k-1); j >= k; j--)
A[j][(k-1)] = i++;
}
if ( n % 2 )
A[p][p] = n*n;
// Распечатка матрицы
for (i = 0; i < n; ++i)
for (j = 0; j < n; ++j)
{
printf("%5d", A[i][j]);
if (j == (n-1))
printf("\n");
}
printf("\n Press any key: ");
_getch();
return 0;
}Результат выполнения программы показан на рис. 5.5.
Задание 5
- Дополните программу расчетом количества четных элементов выше главной диагонали матрицы и количества нечетных элементов ниже главной диагонали, не включая саму диагональ.
- Протестировать программу при изменении размера матрицы от 3 до 12. Результаты вставьте в отчет лабораторной работы.
- Напишите программу заполнения матрицы по спирали против часовой стрелки, начиная с верхнего левого угла (номер 1).
- Напишите программу с вводом направления заполнения матрицы. Например, если будет введено число 1, то заполнение выполните по часовой стрелке, если введено число –1, – против часовой стрелки.
- Напишите программу заполнения прямоугольной матрицы натуральными числами "змейкой" – построчно: слева – направо – справа – налево и т.д.


