你的逻辑有点混乱。您必须在调用rand() 之前调用srand() 为随机数生成器播种,例如
#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)
您可以在一个循环中填充和输出原始数组。请注意,% 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'); 的用途——尽管好的编译器会为您进行优化)
您可以在一个循环中比较上下三角形中的值,例如:
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 是一个 100% 不可移植的古老 DOS 标头。只需使用标准<stdio.h> 提供的getchar()。
总而言之,您将拥有:
#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 上)和 il,@ 987654350@ 为更低。
然后在找到每个中的最小值后,您可以交换它们。更改将是:
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
希望能满足您的所有要求。如果您需要更多帮助,尽管问。