3.3 图形输出
这里的图形一般都是由若干字符组成的,所以弄清楚规则输出字符就行。做法一般有两种:
- 通过规律直接进行输出;
- 定义一个二维字符数组,通过规律填充之后输出整个二维字符数组。
题目描述:
美国总统奥巴马不仅呼吁所有人都学习编程,甚至亲自编写代码,称为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了一个简单的计算机程序——在屏幕上画一个正方形,现在你也跟他“一起”编程吧!
输入格式:
在一行中给出正方形边长N(3<=N<=20)和组成正方形边的某种字符C,间隔一个空格。
输出格式:
由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,所输出的行数实际上是列数的50%(四舍五入取整)。
样例输入:
10 a
样例输出:
aaaaaaaaaa
a a
a a
a a
aaaaaaaaaa
思路:
由于行数是列数的50%,而C语言的整数除法只会保留商,这里我们要注意调整一下。假设正方形边长为N,那么列数col=N,行数要根据col的奇偶进行调整,若col为奇数,行数row=col/2+1,若N为偶数,row=col/2。
此外,仔细观察样例输出我们可以知道,最后的输出其实主要分为两个部分。第一个部分包括第一行和最后一行,它们循环输出字符即可;第二个部分是除此之外的中间部分,它们只会在第一列和最后一列输出字符,中间则输出了(col-2)个空格。
参考代码:
#include <cstdio>
int main(){
// 读入正方形边长n和填充正方形的字符c
int n;
char c;
scanf("%d %c", &n, &c);
// 记录最终输出的正方形的行数row和列数col
int row, col;
// 列数col等于正方形的边长
col = n;
// 行数row等于列数的50%(四舍五入)
if(col % 2 == 1){
row = col / 2 + 1;
}else{
row = col / 2;
}
// 按行进行图形输出,主要分为两部分
for(int i=0; i<row; i++){
// 除去第一行和最后一行,中间所有行都是只
// 在第一列和最后一列输出字符,其他位置输出空格
if(i > 0 && i < row-1){
// 第一列的字符
printf("%c", c);
// 中间的空格
for(int j=1; j<col-1; j++){
printf(" ");
}
// 最后一列的字符
printf("%c", c);
}else{
// 第一行和最后一行循环输出字符
for(int j=0; j<col; j++){
printf("%c", c);
}
}
// 不要忘记每行输出完都要换行
printf("\n");
}
return 0;
}