繁体   English   中英

如何在C语言上交换数组元素并将其集成到代码中?

[英]How to swap array elements on C language and integrate it to code?

我在更改数组并将它们集成到我的代码中时遇到问题,任务是

”给定一个n阶实方矩阵,找出位于矩阵阴影部分的元素的值中的最小值并交换它们。

在此处输入图片说明

我弄清楚了代码的前半部分,但我无法用第二部分弄清楚,那就是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>

#define N 5

int main ()
{
    int a[N][N], min, i, j;
    for (i = 0; i < N; i++) {
        for (j = 0; j < N; j++)
            a[i][j] = rand () % 10;
    }
    printf ("n\n The generated matrix has the form");
    for (i = 0; i < N; i++) {
        for (j = 0; j < N; j++)
            printf ("%d  ", a[i][j]);
        printf ("\n");
    }
    min = a[0][N - 1];
    for (i = 0; i < N; i++) {
        for (j = N / 2; j < N; j++)
            if ((j + i) > N && (i <= j) && (min > a[i][j]))
                min = a[i][j];
    }
    printf ("n\n Minimum element in the shaded area");
    printf ("\n\n min_element=%d ", min);
    getch ();
}

你的逻辑有点混乱。 您必须在调用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.hgetch(); 保持终端窗口打开。 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_uppermin_lower以及它们出现的数组索引,例如iu, ju (用于i & j upper)和il , jl用于lower。

然后在每个中找到最小值后,您可以交换它们。 变化将是:

    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

希望这能满足您的所有要求。 如果您需要更多帮助,请直接询问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM