用二维数组描述图形
首先要计算出整个输出的方框大小,从而判定相应关键循环点
#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,循环打印每一行