Опубликован: 14.12.2010 | Доступ: свободный | Студентов: 3137 / 738 | Оценка: 4.53 / 4.12 | Длительность: 26:28:00
Лекция 6:

Числовые массивы в языке программирования С

< Лекция 5 || Лекция 6: 1234 || Лекция 7 >

Пример 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.

Смена четных и нечетных мест чисел массива

Рис. 5.4. Смена четных и нечетных мест чисел массива

Задание 4

  1. Вывод на дисплей пользователя исходного массива и преобразованного выполните без дополнительного массива.
  2. В программу внесите изменения, чтобы не использовать целочисленную переменную для определения остатка от деления
  3. Проверьте программу для массива с четным количеством элементов.
  4. Напишите программу без использования операции определения остатка от деления, т.е. без использования операции i % 2.
  5. Напишите программу для двухмерного массива вещественных чисел. Смену мест элементов (четных с нечетными) предусмотрите в каждой строке матрицы. Размер матрицы примите равным n \times 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.5. Заполнение матрицы по спирали

Задание 5

  1. Дополните программу расчетом количества четных элементов выше главной диагонали матрицы и количества нечетных элементов ниже главной диагонали, не включая саму диагональ.
  2. Протестировать программу при изменении размера матрицы от 3 до 12. Результаты вставьте в отчет лабораторной работы.
  3. Напишите программу заполнения матрицы по спирали против часовой стрелки, начиная с верхнего левого угла (номер 1).
  4. Напишите программу с вводом направления заполнения матрицы. Например, если будет введено число 1, то заполнение выполните по часовой стрелке, если введено число –1, – против часовой стрелки.
  5. Напишите программу заполнения прямоугольной матрицы натуральными числами "змейкой" – построчно: слева – направо – справа – налево и т.д.
< Лекция 5 || Лекция 6: 1234 || Лекция 7 >
Мухаммадюсуф Курбонов
Мухаммадюсуф Курбонов