用二维数组描述图形
首先要计算出整个输出的方框大小,从而判定相应关键循环点
#include <cstdio>
char arr[1000][3000];
int main() {
int h;
//初始化,全部内部填空格
while(scanf("%d",&h) != EOF){
for (int i = 0; i < h; ++i) {
for (int j = 0; j < 3*h-2; ++j) {
arr[i][j] = ' ';
}
}
//填充梯形,从最后一行开始往上填,每次少填两个
for (int i = h-1, begin = 0; i >= 0; --i) {
for (int j = begin; j < 3*h-2; ++j) {
arr[i][j]='*';
}
begin += 2;
}
for (int i = 0; i < h; ++i) {
for (int j = 0; j < 3*h-2; ++j) {
printf("%c",arr[i][j]);
}
printf("\n");
}
}
return 0;
}
使用字符串输出
一般的输入输出示例:
输入示例
输入一个十进制整数
scanf("%d",&n);
输入一个字符串
char str[10];
scanf("%s",str);//注意,字符和数组可以省略&
输出示例
输出一个十进制整数
printf("%d",n);
输出一个字符串
printf("%s",str);//注意,字符和数组可以省略&
使用字符串输出简化上述代码
每一行需要视作一个字符串,需要将相应字符串的末尾加上结束符’\0’
#include <cstdio>
char arr[1000][3000];
int main() {
int h;
//初始化,全部内部填空格
while(scanf("%d",&h) != EOF){
for (int i = 0; i < h; ++i) {
for (int j = 0; j < 3*h-2; ++j) {
arr[i][j] = ' ';
}
arr[i][3*h-2] = '\0';/注意这里的改动,\0用来指示每一行的结束
}
//填充梯形,从最后一行开始往上填,每次少填两个
for (int i = h-1, begin = 0; i >= 0; --i) {
for (int j = begin; j < 3*h-2; ++j) {
arr[i][j]='*';
}
begin += 2;
}
for (int i = 0; i < h; ++i) {
printf("%s\n",arr[i]);/注意这里的改动,直接输出字符串
}
}
return 0;
}
图案打印问题的一般思路
- 申请二维数组,(一般要是固定大小的,放在全局变量的位置);
- 根据条件从任意方向开始设置二维数组;
- 把图案每一行当作字符串,边界后一个位置附‘\0’,表示字符串结尾(也可以在申请完二维数组后,将数组全部初始化为’\0’)
- 使用printf、%s,循环打印每一行