c - 打印列数和行数为奇数的数组的值

标签 c arrays printf scanf

我必须创建一个程序来打印一个数组,其中包含用户指定的行数和列数,并打印具有奇数索引(行号和列号)的值

这是我设法写的:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int r, c, i, j;
    printf("Number of rows: ");
    scanf("%d", &r);
    printf("Number of columns: ");
    scanf("%d", &c);
    int A[r][c];
    printf("Enter your numbers\n");

    for (i = 0; i < r; i++) {
        for (j = 0; j < c; j++)
            scanf("%d", &A[i][j]);
    }

    for (i = 0; i < r; i++) {
        printf("\n\t");
        for (j = 0; j < c; j++)
            printf("%d ", A[i][j]);
    }
}

如果用户指定他想要 4 行和 4 列,程序将打印如下内容:

X X X X
X X X X
X X X X 
X X X X

如何让程序打印:

X   X  // prints only for odd columns (1st and 3rd)
       //  prints nothing as the index of row is even(2nd)
X   X // same as 1st row
      // smae as 2nd row

最佳答案

从您的示例看来,您正在考虑第一行和第一列(索引 0s)到第一个奇数...如行和列 1 也许。

在这种情况下,在您的打印功能中,您可以简单地将递增字段更改为...

for (i = 0; i < r; i++) {
    printf("\n\t");

    if (i % 2 == 0) {
        for (j = 0; j < c; j += 2)
            printf("%d ", A[i][j]);
    }
}

...或者您可以使用 modulus (%) 运算符来检查 j 的值是偶数还是奇数...

for (i = 0; i < r; i++) {
    printf("\n\t");

    if (i % 2 == 0) {
        for (j = 0; j < c; j++) {
            if (j % 2 == 0) //will print columns at index 0, 2, 4, 6, ...
                printf("%d ", A[i][j]);
        }
    }
}

不过我更喜欢第一个......


编辑

如果你想在输出中保留行不是奇数的空格,请不要更改 i 的增量,这样它将打印 \n 每次都要维护那些空白。

关于c - 打印列数和行数为奇数的数组的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41902705/

相关文章:

scala - 在 Scala 中将 List[Short] 转换为 Array[Byte] 的最佳方法是什么?

arrays - Ruby:删除数组的第一个和最后一个元素 - 为什么解决方案以一种方式而不是另一种方式工作

c++ - C/C++ 函数定义

c - 使用 readdir 获取文件大小

c++ - 为什么 C/C+ +'s "#pragma once"不是 ISO 标准?

c - 通过引用传递并将值赋给结构指针的指针

c - 两次打印数组元素会导致段错误

c - 关于 fscanf 中指针的问题

POSIX 兼容 shell 中的数组

matlab - 显示来自 MATLAB 的信息而无需换行