用二維數組描述圖形
首先要計算出整個輸出的方框大小,從而判定相應關鍵循環點
#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,循環打印每一行