比较C中的两个数组

Compare two arrays in C

我有两个数组

double A[2][4] = {
    {9, 10, 11, 12.0},
    {13 14 15 16.3}
};

double B[2][4] = {
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12},
    {13, 14, 15, 16},
    {17, 18, 19, 20}
};

我想看看两个数组中的某些元素是否近似。 假设如果 A[:,2:4] ~ B[:,2:4],我希望程序打印行号。这是我的方法:

for (i = 0; i < 2; i++) {
    for (k = 0; k < 5; k++) {
        if (A[i][3] - B[k][3] < abs(0.5) && A[i][4] - B[k][4] < abs(0.5)) {  
            printf("row %d\n",k);
        } 
    }
}

但它并不如我所愿。 请告诉我我必须做什么? 非常感谢

您的程序存在多个编译问题:

  1. 声明数组时 A 你漏掉了一些逗号: {13 14 15 16.3} -> {13, 14, 15, 16.3}

  2. 声明数组时 B 您定义的大小不正确: double B[2][4] -> double B[5][4]

  3. 您没有在函数中声明 ik

  4. 你的范围不对,k < 4应该是第二个循环的条件

  5. 您的 abs 方法将不起作用,因为 return 值是整数,而不是双精度数。使用 fabs 代替

修复所有这些问题后,程序将编译并运行。输出为:

> ./main
row 3

各种问题。


int abs(int)

以下与abs()相同是一个int函数:

A[i][3] - B[k][3] < abs(0.5) 
A[i][3] - B[k][3] < 0 

OP 可能想以不同的方式使用浮点函数 fabs()

fabs(A[i][3] - B[k][3]) < 0.5

范围

k 超出范围。

// for (k = 0; k < 5; k++) {
for (k = 0; k < 4; k++) {