Числовые массивы в языке программирования С
Пример 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, – против часовой стрелки.
- Напишите программу заполнения прямоугольной матрицы натуральными числами "змейкой" – построчно: слева – направо – справа – налево и т.д.