乘法表 - C.

时间:2017-10-28 18:13:19

标签: c nested-loops

我想显示乘法表,如下所示:

#include <stdio.h>

int main()
{
    int n, i;
    scanf("%d", &n);
    int row,col;

       if(n<1 || n>9)
    {
        printf("input error");
        return 0;
    }

    for (row=0; row<=n;row++){
        if(row==0)
        {
            for(i=1; i<=n; i++)
            {
                printf("\t%d", i);
            }
        }

        for(col=0; col<=row;col++)
        {
            if(col==0 && row>0)
            printf("%d\t", row);
            if(row>=1 && col!=0)
            printf("%dx%d=%d\t", col, row, col*row);
        }
        if(row!=n)
        printf("\n");
    }
    return 0;
}

到目前为止,我有这样的事情:

S1 <- c(1,2,1,1,3,1)
S2 <- c(2,1,3,2,1,1)
S3 <- c(1,2,2,1,3,1)
S4 <- c(3,3,4,2,3,1)
S5 <- c(3,2,5,3,2,2)
count <- c(10,5,3,1,1,1)
df <- data.frame(count,S1,S2,S3,S4,S5)

我认为它正确地显示了表格,但代码看起来很草率,我确信它可以以更清洁的方式完成。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

我将展开第一遍通过显示行和放大器的每个循环。列标题:

#include <stdio.h>

int main()
{
    int n, i;
    scanf("%d", &n);
    int row,col;

    if(n<1 || n>9)
    {
        printf("input error");
        return 0;
    }


    for(i=1; i<=n; i++)
    {
        printf("\t%d", i);
    }
    printf ("\n");

    for (row=1; row<=n;row++){

        printf("%d\t", row);
        for(col=1; col<=row;col++)
        {
            printf("%dx%d=%d\t", col, row, col*row);
        }

        if (row!=n)
            printf("\n");
    }

    return 0;
}

答案 1 :(得分:0)

大多数使你的代码看起来很草率的东西都是糟糕的风格。以下是一些基于通常被认为是好的风格和最佳实践的技巧:

  • 每当您的程序从用户那里获得输入时打印提示
  • 将所有变量声明放在主函数
  • 的顶部
  • 使用括号使操作顺序清晰,尤其是在使用&&||运算符时
  • 清除错误消息
  • 返回负值以指示错误
  • 在二元运算符的两边放置一个空格(即&#34; n < 1&#34;而不是&#34; n<1&#34;)
  • 在声明多个变量时用逗号括起来
  • 在循环条件下的分号后放置一个空格
  • 以下通常被认为是一种好的for循环:

    for (condition) {
       ...
    }
    
  • 以下通常被认为是一种好的if陈述

    if (condition) {
        ...
    }
    
  • 使用注释来解释您的代码并提高可读性
  • 使用缩进显示代码分组

除了所有这些之外,由于最后的if语句,你的程序也不会在最后一行(行n)之后打印换行符。这会导致用户的命令行提示符与程序打印的最后一行显示在同一行,这可能是不可取的。

将所有这些内容应用到您的代码中会得到以下结果:

#include <stdio.h>

int main()
{
    // all variables declared together, at the top of main
    int n, i;
    int row, col; // space after comma

    printf("Enter multiplication table size: "); // prompt
    scanf("%d", &n);

    // better-style if statement
    if ((n < 1) || (n > 9)) { // parenthesis make the order of operations clearer
        // clearer error message, with a newline at the end
        printf("Error: table size must be at least 1 and not greater than 9\n");

        return -1; // return a negative value to indicate an error
    }

    // better-style for loop
    for (row = 0; row <= n; row++) { // spaces around binary operators, space after semi-colons
        // better-style if, indented also
        if (row == 0) {
            // better-style for, indented
            for (i = 1; i <= n; i++) { // spacing
                printf("\t%d", i); // indented
            }
        }

        // better-style for
        for (col = 0; col <= row; col++) { // spacing, indentation
            if ((col == 0) && (row>0)) // parenthesis, spacing, indentation
                printf("%d\t", row); // indentation
            if ((row >= 1) && (col != 0)) // parenthesis, spacing, indentation
                printf("%dx%d=%d\t", col, row, col * row); // indentation, spacing
        }

        // surrounding if statement removed, so a newline is printed after every row, including the last one
        printf("\n");
    }

    return 0;
}

请注意,我主要使用注释来解释我对代码所做的更改,而您希望使用它们来解释功能。

相关问题