C/C++打印图案及变换位置方法
使控制台输出图案一般有两种方法,一是用二维数组固定输出,二是数学建模。
变换位置实现图案并排输出的方法也有两种,一是小图形用矩阵封装成函数,映射到大矩阵上;二是使用gotoxy函数改变光标位置,头文件为#include <windows.h>、#include <conio.h>
。
1. 二维数组
建立矩阵:
a.直接赋值的方式适合较复杂,难以用for循环判断位置规律的图案,比如星形。建立时可以用int型,从[0][0]开始依次赋值0或1,在main里用空格或*代替。也可以直接建char类型。
b.for循环建立注意,一行行的打印是控制相对位置,而数学建模for中要写绝对位置,因为假定了坐标轴。
例如:
void Diamond(int m)//空心菱形,设长对角线为m
{
int n=m/2,j;//把j挪到上面来,避免重复定义
for(int i=0;i<n;i++)//上半部分的三角,n行,0~n是相对位置,也可以是1~n+1,只要行数保证是n即可
{
for(j=1;j<n-i;j++)//算出由*组成的第一条边前的空格数
cout<<" ";
for(j=0;j<2*i+1;j++)//三角形的第二条*边
if(j==0||j==2*i)
cout<<"*";
else cout<<" ";//两条边之间的空格
cout<<endl;
}
for(i=0;i<n;i++)//下半部分的三角,n行
{
for(j=0;j<i+1;j++)
cout<<" ";
for(j=0;j<(n-i-1)*2-1;j++)
if(j==0||j==(n-i-1)*2-2)
cout<<"*";
else cout<<" ";//两条边之间的空格
cout<<endl;
}
}
代码不清楚可以自己用笔走一遍。
这种方法比较麻烦,具体算出的相对位置其实是数学建模方法的二次转换,不建议。
封装可以用矩阵。
2.数学建模
超级喜欢。方法跟做数学题一样,算出直线点x和y的关系就可以,很简单。
int i, j;//勾勒上半部分
for (i = 0; i < l / 2; i++){ //l为长对角线
for (j = 0; j <w; j++){ //w为短对角线