打印数字

时间:2015-09-11 14:09:25

标签: c loops printf

我正在编写一个程序,如下所示

when n=3
1 2 3
7 8 9
4 5 6

when n=5
1 2 3 4 5
11 12 13 14 15
21 22 23 24 25
16 17 18 19 20
6 7 8 9 10

我的节目是

#include<stdio.h>
#include<conio.h>
int main()
{
    int n=5,r=1,c=1,i=1,mid=0;
    if(n%2==0)
      mid=(n/2);
    else 
      mid=(n/2)+1;
      printf("mid = %d\n",mid);
    while(r<=n)
    {
      while(c<=n)
      {
        printf("%d ",i);
        c++;
        i++;
      }
      r++;
      if(r<=mid)
       i=i+n;
      else
       i=i-(2*n);
      printf("\n");
      c=1;
    }
    getch();
    return 0;
}

当我给n = 3时,我得到了我预期的输出。但当我给n = 5时,我得到如下

1 2 3 4 5
11 12 13 14 15
21 22 23 24 25
16 17 18 19 20
11 12 13 14 15

有人可以帮助您如何实现预期的输出。

1 个答案:

答案 0 :(得分:2)

使用您的代码解决方案是

#include<stdio.h>
#include<conio.h>
int main()
{
    int n=5,r=1,c=1,i=1,mid=0;
    int maxRow = n;
    if(n%2==0){
      mid=(n/2);
      maxRow--;
    }
    else 
      mid=(n/2)+1;
      printf("mid = %d\n",mid);
    while(r<=maxRow)
    {
      while(c<=n)
      {
        printf("%d ",i);
        c++;
        i++;
      }
      r++;
      if(r<=mid)
       i=i+n;
      else if (r >= n)
        i=n+1;
      else
        i=i-((1+(r-mid))*n);

      printf("\n");
      c=1;
    }
    getch();
    return 0;
}

如你所见:

  1. i=i-(2*n);已更改。你写的不是通用的,而是针对n=3案例。
  2. 我添加了else if (r >= n)
  3. 如果n是偶数,则必须减少因n而必须使用特定变量的外部因素。
  4. 一些提示:

    1. 为您的变量提供解释性名称
    2. 为了使代码更具可读性,每行声明变量1,如果你想初始化它们。
    3. 代码块之间存在空行。
    4. int main ()
      {
          int squareDim=5;
          int row=1;
          int col=1;
          int valueToPrint=1;
          int mid=0;
          int maxRow = squareDim;
      
          if(squareDim%2==0)
          {
              mid=(squareDim/2);
              maxRow--;
          }
          else
          {
              mid=(squareDim/2)+1;
          }
      
          printf("mid = %d\n",mid);
      
          while(row<=maxRow)
          {
              while(col<=squareDim)
              {
                  printf("%d ",valueToPrint);
                  col++;
                  valueToPrint++;
              }
      
              row++;
      
              if(row<=mid)
              {
                  valueToPrint=valueToPrint+squareDim;
              }
              else if (row >= squareDim)
              {
                  valueToPrint=squareDim+1;           
              }
              else
              {
                  valueToPrint=valueToPrint-((1+(row-mid))*squareDim);
              }
      
              printf("\n");
      
              col=1;
          }
          return 0;
      }