【发布时间】:2019-12-11 15:33:46
【问题描述】:
我正在尝试计算方阵(2D 数组)的每一列中的负数,并且我在两个数组上进行。我的问题是我的程序似乎读取的是行而不是列,并且它为第一个数组给出的结果是不正确的,即使第二个数组的结果很好。
这是我的代码:
#include <stdlib.h>
#include <stdio.h>
void function(int Z[20][20], int z)
{
int i, j;
int count[10];
for (i = 0; i < z; i++)
{
count[i] = 0;
for (j = 0; j < z; j++)
{
if(Z[i][j] < 0)
{
count[i]++;
}
}
}
for (i = 0; i < z; i++)
{
printf("\n Col %d = %d", i, count[i]);
}
}
int main()
{
int A[10][10], B[15][20];
int i, j, n = 3;
printf("\n Table A: ");
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
scanf("%d",&A[i][j]);
}
}
printf("\n Table B: ");
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++){
scanf("%d ",&B[i][j]);
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
printf("%d ",A[i][j]);
}
printf("\n");
}
printf("\n");
for (i = 0; i < n; i++)
{
for (j = 0; j < n; j++)
{
printf("%d ",B[i][j]);
}
printf("\n");
}
function(A,n);
function(B,n);
return 0;
}
我的矩阵是:
A: B:
3 -4 -5 3 -5 2
-2 1 3 -3 -1 6
5 -7 -4 8 -5 4
这是我得到的输出:
Table A:
3
-4
-5
-2
1
3
5
-7
-4
Table B: 3
-5
2
-3
-1
6
8
-5
4
3
3 -4 -5
-2 1 3
5 -7 -4
3 -5 2
-3 -1 6
8 -5 4
Col 0 = 2
Col 1 = 2
Col 2 = 0
Col 0 = 1
Col 1 = 2
Col 2 = 1
【问题讨论】:
-
您的代码格式错误。请一致地重新格式化它,因此每行只有一个语句。
-
您的
function需要一个 20x20 数组,但您传递给它的是一个 10x10 数组和一个 15x20 数组。编译器可能会输出一些关于不兼容指针类型的警告。 -
好的,所以也许我在这里“吹响自己的号角”,但是我几天前给出的答案可能会帮助您理解为什么需要一致 i> 使用您的数组尺寸,在
main和function之间;看这里:stackoverflow.com/a/59216754/10871073 -
void function(int Z[20][20], int z)、int A[10][10]和function(A,n);是令人不安的代码。启用所有编译器警告。