C算法编程题(三)画表格

程序要求

  程序描述:

  在中文Windows环境下,控制台窗口中也可以用特殊符号拼出漂亮的表格来。
    比如:        
        ┌─┬─┐
        │  │  │
        ├─┼─┤
        │  │  │
        └─┴─┘        
    其实,它是由如下的符号拼接的:
        左上 = ┌
        上 =  ┬
        右上 =  ┐
        左 =  ├
        中心 =  ┼
        右 =  ┤
        左下=  └
        下 =  ┴
        右下 =  ┘
        垂直 =  │
        水平 =   ─
    本题目要求编写一个程序,根据用户输入的行、列数画出相应的表格来。
    例如用户输入:
    3 2
    则程序输出:
    ┌─┬─┐
    │  │  │
    ├─┼─┤
    │  │  │
    ├─┼─┤
    │  │  │
    └─┴─┘
    用户输入:
    2 3
    则程序输出:
    ┌─┬─┬─┐
    │  │  │  │
    ├─┼─┼─┤
    │  │  │  │
    └─┴─┴─┘

程序实现

  看到这个题目,我们可能首先想到的是,这些符号用数组存储,我也是这样考虑的,就像上个正螺旋有四个方向一样,这个题目我们可以这样考虑,这个表格可以分为四个区域,上、中、下和中间空白区域,那我们可以用数组这样表示:

1     char *on[4] = { "", "", "", "" };
2     char *center[4] = { "", "", "", "" };
3     char *down[4] = { "", "", "", "" };
4     char *space[2] = { "", "  " };

  符号我们表示好了,这样我们就可以通过表格把区域分掉,来发现其中的规律。

  就会发现,其实输出的时候我们也可以分区域输出:顶部区域、中部区域和底部区域。顶部和底部区域是比较好输出的,我先贴下这两个区域的输出代码:

复制代码
 1     //输出顶部字符
 2     for (i = 0; i < 2 * lines + 1; i++)
 3     {
 4         if (i == 0)
 5             printf("%s",on[0]);
 6         else if (i == 2 * lines)
 7             printf("%s",on[3]);
 8         else
 9         {
10             if (i % 2 == 0)
11                 printf("%s",on[2]);
12             else
13                 printf("%s",on[1]);
14         }
15     }
16     printf("\n");
17     //输出底部字符
18     for (i = 0; i < 2 * lines + 1; i++)
19     {
20         if (i == 0)
21             printf("%s",down[0]);
22         else if (i == 2 * lines)
23             printf("%s",down[3]);
24         else
25         {
26             if (i % 2 == 0)
27                 printf("%s",down[2]);
28             else
29                 printf("%s",down[1]);
30         }
31     }
32     printf("\n");
复制代码

  rows和lines分别表示的是输出表格的行数和列数,顶部和底部区域输出的代码我就不多说了,大家结合表和代码就可以理解了,这里我说下中部区域。

  其实中部和上下区域差不多,只不过是中部和空白交替的,比如行数是3,那中部区域就是:空、中、空、中、空;如果行数是2,中部区域为:空、中、空;

  发现这个规律我们代码可以这样写;

复制代码
 1     //输出中间字符
 2     for (i = 0; i < 2 * rows - 1; i++)
 3     {
 4         if ((i + 1) % 2 == 0)
 5         {
 6             for (j = 0; j < 2 * lines + 1; j++)
 7             {
 8                 if (j == 0)
 9                     printf("%s",center[0]);
10                 else if (j == 2 * lines)
11                     printf("%s",center[3]);
12                 else
13                 {
14                     if (j % 2 == 0)
15                         printf("%s",center[2]);
16                     else
17                         printf("%s",center[1]);
18                 }
19             }
20         }
21         else
22         {
23             for (k = 0; k < 2 * lines + 1; k++)
24             {
25                 if ((k + 1) % 2 == 0)
26                     printf("%s",space[1]);
27                 else
28                     printf("%s",space[0]);
29             }
30         }
31         printf("\n");
32     }
复制代码

  中和空的输出逻辑和顶部和底部的输出逻辑是差不多的。

  这个题目如果你思路清晰的话,是很简单的。如果大家也有更好的实现方法,欢迎交流。。。

 

  完成程序代码:

  View Code

  运行结果:


本文转自田园里的蟋蟀博客园博客,原文链接:http://www.cnblogs.com/xishuai/p/3399917.html,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值