在一些问题中,问题往往会指定屏幕输出的格式,让我们以编程方式以固定格式输出某些模式或表格。 我们通过以下三个例子来说明格式化屏幕输出的方法。
问题1:请打印出以下图案。
当然,我们可以用最笨的方法,直接按照标题风格暴力输出:
printf(" *\n"); printf(" ***\n"); printf(" *****\n"); printf("*******\n"); printf(" *****\n"); printf(" ***\n"); printf(" *\n");
太无聊了,你受不了吗?
如果标题要求输出菱形的大小可以改变,那不应该发吗?
仔细想想,这个格式化输出的模式非常整齐,我们当然需要使用循环语句。
首先,两层for循环跑不掉。 最外层的for循环用于控制输出行数,内层的for循环用于控制空格和'*'。 一开始我们最好自己画一下,分析一下图案的构成。
我们发现前四行中'*'的个数是向下以奇数递增的,而后四行中'*'的个数是逐行减少的,所以我们只需要处理该模式即可前 4 行中,后 3 行稍作修改即可获得。
首先我们看一下空格和‘*’与行数的数量关系:
行数
空间
...
...
...
Nn(N为增量行总数)
2*n-1
显然,这个问题现在已经成为小学生的常规问题了,所以我们可以编写如下代码:
for (int n=1; n<=4; n++)//n为行数,4为总行数N { for (int i=1; i<=4-n; i++)//输出'*'前的空格 { printf(" "); } for (int i=1; i<=2*n-1; i++)//输出'*' { printf("*"); } printf("\n");//输出完一行后要换行 }
运行结果为:
说明我们的想法是对的! 那么剩下的3行(N-1行)只需要稍微修改上面的代码即可。 修改后我们可以得到:
for (int n=1; n<=4; n++)//n为行数,4为递增总行数N { for (int i=1; i<=4-n; i++)//输出'*'前的空格 { printf(" "); } for (int i=1; i<=2*n-1; i++)//输出'*' { printf("*"); } printf("\n");//输出完一行后要换行 } for (int n=1; n<=3; n++)//n为行数,3为递减总行数N-1 { for (int i=1; i<=n; i++)//输出'*'前的空格 { printf(" "); } for (int i=1; i<=7-2*n; i++)//输出'*',7为递增行中最后一行(第N行)的'*'的数量2*N-1 { printf("*"); } printf("\n");//输出完一行后要换行 }
运行结果为:
伟大的! 现在我们已经得到了我们想要的结果。 那么随着菱形大小的变化,我们只需要相应改变N的大小即可输出对应的图案。
题目2:根据以下三种形式,编程输出九十九乘法表。
同样,暴力的方法肯定可以做到,这里不再赘述。
首先,第一步,我们需要用暴力的方法输出九九乘法表的表头:
printf("1 2 3 4 5 6 7 8 9\n"); printf("- - - - - - - - -\n");
这三个表的第一个格式应该是比较简单的,因为他没有太多难以处理的空格。
其实我们只需要用两层循环,让九九乘法表的行头和列头遍历1~9,相乘就可以得到表中的每个值(行头是隐藏在这里)。 (行标题和列标题是指下表中的这些数字):
因此我们有:
for (int i=1; i<=9; i++)//行的表头递增 { for (int j=1; j<=9; j++)//列的表头递增 { printf("%3d", i * j); } printf("\n");//每输出完一行后要换行 }
这样我们就得到了第一个表:
我们看第二个表:第二个表是左下三角形,右上三角形没有输出(或者输出为空白)。
查找规则,不难发现,当列头小于等于行头(j=i)时,输出数字,当列头小于行的标题 (j
for (int i=1; i<=9; i++)//行的表头递增 { for (int j=1; j<=9; j++)//列的表头递增 { if (j>=i) { printf("%3d", i * j); } else { printf(" "); } } printf("\n");//每输出完一行后要换行 }
可以得到第三个表:
总结
以上就是本文的全部内容了,希望能够对您有所帮助,也希望您多多关注服务器之家的更多内容!
原文链接: