【问题标题】:Compare two arrays in C比较C中的两个数组
【发布时间】:2021-09-07 10:14:40
【问题描述】:

我有两个数组

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);
        } 
    }
}

但它不能按我的意愿工作。 请告诉我我必须做什么? 非常感谢

【问题讨论】:

  • 我不明白这个问题。您是在问为什么 B 的代码无法编译?那是因为它是无效的 C... 你需要声明一个足够大的数组来包含所有元素。
  • 是否要将A 的每一行与B 的每一行进行比较?
  • B 的类型与其初始值设定项不一致
  • 为了更清楚,我刚刚重新修改了源代码和问题。
  • @palindrom 我只想比较 A 和 B 的每一行(第 2 列和第 3 列)的 2 个元素

标签: arrays c compare


【解决方案1】:

各种问题。


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++) {

【讨论】:

    【解决方案2】:

    您的程序中有多个编译问题:

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

    2. 在声明数组B 时,您错误地定义了大小: double B[2][4] -> double B[5][4]

    3. 您没有在函数中声明 i 和 k

    4. 您的范围不正确,k &lt; 4 应该是第二个循环中的条件

    5. 您的abs 方法将不起作用,因为返回值是整数,而不是双精度。请改用fabs

    当您修复所有这些时,程序将编译并运行。输出是:

    > ./main
    row 3
    

    【讨论】:

    • 但我需要两个:第 2 行和第 3 行
    • 我发现了我的错误 if (abs(A[i][3] - B[k][3]) if (abs(A[i][2] - B[k][2])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多