程序要求
程序描述:
在中文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 }
中和空的输出逻辑和顶部和底部的输出逻辑是差不多的。
这个题目如果你思路清晰的话,是很简单的。如果大家也有更好的实现方法,欢迎交流。。。
完成程序代码:
运行结果:
本文转自田园里的蟋蟀博客园博客,原文链接:http://www.cnblogs.com/xishuai/p/3399917.html,如需转载请自行联系原作者