我需要制作一个程序,说我必须填写" 1"在奇数行和" 0"在偶数的。我尝试并编写了这段代码,但它似乎只适用于一部分。 拜托,你能解释一下这个方法吗?
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
main()
{
int r, c;
do {
printf("Insert the number of the rows in the matrix: ");
scanf("%d", &r);
printf("Insert the number of the colums in the matrix: ");
scanf("%d", &c);
} while(r<=0||c<=0);
r--; c--;
int mat[r][c];
int a, b;
for(a=0; a<=r; a++)
{
for(b=0; b<=c; b++)
{
if(a%2==0)
{mat[a][b]=0;}
else {mat[a][b]=1;}
}
}
printf("\nOUTPUT:\n\n");
for(a=0; a<=r; a++){
for(b=0; b<=c; b++){
printf("%d", mat[a][b]);
}
printf("\n");
}
return 0;
}
INPUT:2,3
输出: 001 111
答案 0 :(得分:1)
您没有正确使用行数和列数。确实,在C中,具有N
条目的数组只能访问索引0到N - 1
,并且索引N
是超出数组范围的索引。但是你仍然需要用实际大小来定义数组:
// Don't adjust c and r here
int mat[r][c];
在for
循环中使用维度时,您可以使用mat[r][c]
代替<
作为条件,确保永远不会访问<=
:
for (a = 0; a < r; a++) {
for (b = 0; b < c; b++) {
if (a % 2 == 0) {
mat[a][b] = 0;
} else {
mat[a][b] = 1;
}
}
}
答案 1 :(得分:0)
你搞乱了矩阵的大小。您可能想要更改这两个的顺序并尝试一下:
r--; c--;
int mat[r][c];
将此更改为
int mat[r][c];
r--; c--;
并且代码应该按预期工作。