如何使用数组生成表?

时间:2016-11-13 20:02:29

标签: c arrays loops

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

int main()
{
    system("color f0");
    int k,i,j,n;

    printf("Generate tables upto:");
    scanf("%d",&n);
    int tables[n][10];
    printf("Table\t");
    for(k=1;k<=10;k++)
    {
        printf("%dx\t",k);
    }
    printf("\n");
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=10;j++)
        {
            tables[i][j]=i*j;
            printf("%d\t",tables[i][j]);
        }
    }
    return 0;
}

这是我正在处理的代码,但不幸的是我无法按照我想要的方式生成它。 所需的输出应该看起来像this

2 个答案:

答案 0 :(得分:1)

数组索引从0开始,最多为n-1。所以你访问的界限是undefined behaviour

所以你需要将循环重写为:

for(i=0; i < n; i++) {
   for(j=0; j < 10; j++) {
      tables[i][j] = (i+1)*(j+1);
      printf("%d\t", tables[i][j]);
   }
}

答案 1 :(得分:1)

您的代码的提案修复

  • C阵列从0
  • 开始
  • 您在适当的位置缺少标签和换行符

代码:

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

int main()
{
    system("color f0");
    int k,i,j,n;

    printf("Generate tables upto:");
    scanf("%d",&n);
    int tables[n][10];
    printf("Table\t");
    for(k=1;k<=10;k++)
    {
        printf("%dx\t",k);
    }
    printf("\n");
    for(i=2;i<=n;i++)
    {
        printf("%d\t",i);
        for(j=1;j<=10;j++)
        {
            tables[i-1][j-1]=i*j;
            printf("%d\t",tables[i-1][j-1]);
        }
       printf("\n");
    }
    return 0;
}

n=4

显示
Generate tables upto:4
Table   1x      2x      3x      4x      5x      6x      7x      8x      9x      10x
2       2       4       6       8       10      12      14      16      18      20
3       3       6       9       12      15      18      21      24      27      30
4       4       8       12      16      20      24      28      32      36      40