【发布时间】:2016-02-11 13:01:49
【问题描述】:
我有一个矩阵(二维指针,(**a)),我想扫描元素螺旋状。(第一行然后最后一列,最后一行(反转),第一列,第二行,依此类推。 例如:
1 2 3
8 9 4
7 6 5
我在 C 中有以下代码,但我知道我在“其他”条件下是错误的。
#include <stdio.h>
#include <malloc.h>
int main(void)
{
int i, j, n, m, p, q, **a, s, c = 0;
printf("rows\n");
scanf("%d", &m);
printf("cols\n");
scanf("%d", &n);
a = (int**)malloc(m*sizeof(int));
for (i = 0; i < m; i++)
{
a[i] = (int*)malloc(n*sizeof(int));
}
printf("insert\n");
for (i = 0; i < m; i++)
{
if (i % 2 == 0)
{
for (j = 0; j < n; j++)
{
printf("a[%d][%d]=", i + 1, j + 1);
scanf("%d", &a[i][j]);
}
}
else
{
for (j = i+1; j < m-i;j++)
{
scanf("%d", a[j][m-c]);
}
c++;
}
}
printf("matrix\n\n");
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
printf("%d\t", a[i][j]);
}
printf("\n");
}
}
【问题讨论】:
-
C++ 不是 C 不是 C++!不要添加不真实的标签。并且不要将
malloc和朋友的结果投射到 C 中。 -
我没有遵循您的整个代码,但乍一看似乎您从未做过任何
j--。对于示例中的最后一行,您如何期望它打印5 6 7?