Ваш лог c немного запутался. Вы должны заполнить генератор случайных чисел, позвонив srand()
перед вызовом rand()
, например,
#include <time.h>
...
int main (void) {
int a[N][N], min = INT_MAX, i, j;
srand (time(NULL)); /* seed random number generator */
( примечание: как min
инициализируется INT_MAX
)
Вы можете заполнить и вывести исходный массив за один l oop. Обратите внимание, что % 10
приводит к 0
во всех квадрантах регулярно, используйте % 100
для большего диапазона значений, например
/* fill elements with random values 0-99, output array */
puts ("\nThe generated matrix has the form:\n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
a[i][j] = rand () % 100;
printf (" %2d", a[i][j]);
}
putchar ('\n');
}
( примечание: не используйте printf ("\n");
для вывода одного символа '\n'
, для этого putchar('\n');
- хотя хороший компилятор сделает эту оптимизацию за вас)
Вы можете сравнить значения в верхнем и нижнем треугольниках в один l oop, например:
for (i = 0; i < N - i; i++) { /* loop rows 0 - N-i-1 */
for (j = i; j < N - i; j++) { /* loop cols i - N-i-1 */
if (a[i][j] < min) /* test upper value */
min = a[i][j];
if (a[N-i-1][j] < min) /* test lower value */
min = a[N-i-1][j];
}
}
Вам нужен только один printf
, чтобы вывести результат, независимо от того, делаете ли вы это как:
printf ("\nMinimum element in the shaded area\n\n min_element = %d\n", min);
или как
printf ("\nMinimum element in the shaded area\n\n"
" min_element = %d\n", min);
Наконец, не используйте conio.h
и getch();
, чтобы держать окно терминала открытым. conio.h
- это архивный c заголовок DOS, который на 100% непереносим. Просто используйте getchar()
, что предусмотрено стандартом <stdio.h>
.
В целом, вы получите:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <time.h>
#define N 5
int main (void) {
int a[N][N], min = INT_MAX, i, j;
srand (time(NULL)); /* seed random number generator */
/* fill elements with random values 0-99, output array */
puts ("\nThe generated matrix has the form:\n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
a[i][j] = rand () % 100;
printf (" %2d", a[i][j]);
}
putchar ('\n');
}
for (i = 0; i < N - i; i++) { /* loop rows 0 - N-i-1 */
for (j = i; j < N - i; j++) { /* loop cols i - N-i-1 */
if (a[i][j] < min) /* test upper value */
min = a[i][j];
if (a[N-i-1][j] < min) /* test lower value */
min = a[N-i-1][j];
}
}
printf ("\nMinimum element in the shaded area\n\n min_element = %d\n", min);
}
Пример использования / Вывод
$ ./bin/array_upper_lower_triangle
The generated matrix has the form:
20 79 30 60 89
2 5 38 15 33
64 63 52 93 38
77 89 54 38 89
25 15 87 43 53
Minimum element in the shaded area
min_element = 5
Редактировать - Менять местами верхние / нижние треугольники
После просмотра вашего комментария также стало ясно, что вы хотите поменять местами минимальные элементы из верхнего и нижнего треугольников. , Для этого вам нужно сохранить отдельные минимумы, такие как min_upper
и min_lower
, а также индексы массива, где они встречаются, например iu, ju
(для i
& j
upper) и il
, jl
для понижения.
Затем, найдя минимумы в каждом, вы можете поменять их местами. Изменения будут следующими:
int a[N][N], min, min_upper=INT_MAX, min_lower=INT_MAX, i, j, iu, ju, il, jl;
...
for (i = 0; i < N - i; i++) { /* loop rows 0 - N-i */
for (j = i; j < N - i; j++) { /* loop cols i - N-i-1 */
if (a[i][j] < min_upper) { /* test upper value */
min_upper = a[i][j];
iu = i, ju = j;
}
if (a[N-i-1][j] < min_lower) { /* test lower value */
min_lower = a[N-i-1][j];
il = N-i-1, jl = j;
}
}
}
i = a[iu][ju]; /* swap uppwer/lower triangle minimum values */
a[iu][ju] = a[il][jl];
a[il][jl] = i;
( примечание: i
используется в качестве временной переменной в свопе, поскольку она доступна между циклами)
Завершено Пример со свопом:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <time.h>
#define N 5
int main (void) {
int a[N][N], min, min_upper=INT_MAX, min_lower=INT_MAX, i, j, iu, ju, il, jl;
srand (time(NULL)); /* seed random number generator */
/* fill elements with random values 0-99, output array */
puts ("\nThe generated matrix has the form:\n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
a[i][j] = rand () % 100;
printf (" %2d", a[i][j]);
}
putchar ('\n');
}
for (i = 0; i < N - i; i++) { /* loop rows 0 - N-i */
for (j = i; j < N - i; j++) { /* loop cols i - N-i-1 */
if (a[i][j] < min_upper) { /* test upper value */
min_upper = a[i][j];
iu = i, ju = j;
}
if (a[N-i-1][j] < min_lower) { /* test lower value */
min_lower = a[N-i-1][j];
il = N-i-1, jl = j;
}
}
}
i = a[iu][ju]; /* swap uppwer/lower triangle minimum values */
a[iu][ju] = a[il][jl];
a[il][jl] = i;
printf ("\nmin_upper : %d\nmin_lower : %d\n", min_upper, min_lower);
puts("\nSwapped min from upper/lower triangles:\n");
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++)
printf (" %2d", a[i][j]);
putchar ('\n');
}
min = min_upper < min_lower ? min_upper : min_lower;
printf ("\nMinimum element in the shaded area\n\n min_element = %d\n", min);
}
Пример использования / Вывод
$ ./bin/array_upper_lower_triangle_swap
The generated matrix has the form:
31 52 50 21 40
48 63 65 15 48
77 70 69 90 18
56 22 36 71 14
13 14 53 26 32
min_upper : 15
min_lower : 13
Swapped min from upper/lower triangles:
31 52 50 21 40
48 63 65 13 48
77 70 69 90 18
56 22 36 71 14
15 14 53 26 32
Minimum element in the shaded area
min_element = 13
Надеемся, что это соответствует всем вашим требованиям. Если вам нужна дополнительная помощь, просто спросите.