文章

【GESP】C++一级练习BCQM3006,多行输出

多行输出练习题,使用coutprintf函数输出多行内容。

BCQM3006

题目要求

描述

在windows的控制台环境中所有的字符都是等宽的,默认情况下窗口中每行有 80 个字符,每个屏幕有 25 行,组成了一个字符矩阵。利用控制台的这个特点,我们可以在控制台上绘制简单的图形。下面给出了一个 5×7 的图形的例子

1
2
3
4
5
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC

找出这个图形的特点,绘制一个 10×18 的图形。

输入

输出

输出与上图类似的一个10×18 的图形。

输入样例

输出样例

1
2
3
4
5
6
7
8
9
10
ABCDEFGHIJKLMNOPQR
BABCDEFGHIJKLMNOPQ
CBABCDEFGHIJKLMNOP
DCBABCDEFGHIJKLMNO
EDCBABCDEFGHIJKLMN
FEDCBABCDEFGHIJKLM
GFEDCBABCDEFGHIJKL
HGFEDCBABCDEFGHIJK
IHGFEDCBABCDEFGHIJ
JIHGFEDCBABCDEFGHI

题目分析

初学阶段题目的本意应该是目测规律,按照输出样例原样输出。练习点在练习使用coutprintf函数输出多行内容。printf函数需要使用\n换行,而cout则需要使用endl换行。这里练习了三种解法供参考。

代码参考

方法一:Cout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
int main() {
    cout << "ABCDEFGHIJKLMNOPQR" << endl;
    cout << "BABCDEFGHIJKLMNOPQ" << endl;
    cout << "CBABCDEFGHIJKLMNOP" << endl;
    cout << "DCBABCDEFGHIJKLMNO" << endl;
    cout << "EDCBABCDEFGHIJKLMN" << endl;
    cout << "FEDCBABCDEFGHIJKLM" << endl;
    cout << "GFEDCBABCDEFGHIJKL" << endl;
    cout << "HGFEDCBABCDEFGHIJK" << endl;
    cout << "IHGFEDCBABCDEFGHIJ" << endl;
    cout << "JIHGFEDCBABCDEFGHI" << endl;
    return 0;
}
方法二:多次Printf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <cstdio>
using namespace std;
int main() {
    printf("%s\n", "ABCDEFGHIJKLMNOPQR");
    printf("%s\n", "BABCDEFGHIJKLMNOPQ");
    printf("%s\n", "CBABCDEFGHIJKLMNOP");
    printf("%s\n", "DCBABCDEFGHIJKLMNO");
    printf("%s\n", "EDCBABCDEFGHIJKLMN");
    printf("%s\n", "FEDCBABCDEFGHIJKLM");
    printf("%s\n", "GFEDCBABCDEFGHIJKL");
    printf("%s\n", "HGFEDCBABCDEFGHIJK");
    printf("%s\n", "IHGFEDCBABCDEFGHIJ");
    printf("%s\n", "JIHGFEDCBABCDEFGHI");
    return 0;
}
方法三:Printf 格式化输出
1
2
3
4
5
6
7
8
9
#include <cstdio>
using namespace std;
int main() {
    printf("%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n", "ABCDEFGHIJKLMNOPQR",
           "BABCDEFGHIJKLMNOPQ", "CBABCDEFGHIJKLMNOP", "DCBABCDEFGHIJKLMNO",
           "EDCBABCDEFGHIJKLMN", "FEDCBABCDEFGHIJKLM", "GFEDCBABCDEFGHIJKL",
           "HGFEDCBABCDEFGHIJK", "IHGFEDCBABCDEFGHIJ", "JIHGFEDCBABCDEFGHI");
    return 0;
}

其实我在初看本题的时候,我以为是根据规律利用ASCII码输出,这样可以实现出任意 N * M 的图形的效果。但是觉得这个阶段对于一个初学者来说难度有点大。所以,我猜测出题者的本意就是我上面分析的意思。于是我让我的孩子实现了上述三种方法。如果你能力足够,建议可以按照N * M的方式练习一下。

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

本文由作者按照 CC BY 4.0 进行授权