以下是引用回首依依在2012-11-9 14:48:46的发言:
可以考虑考虑用“平面坐标系”实现。
写出一个菱形的数学表达式,对你来说,不会有那难度的。
可以考虑考虑用“平面坐标系”实现。
写出一个菱形的数学表达式,对你来说,不会有那难度的。
是不是这样实现的,如果不是,那是怎么实现?
#include<stdio.h>
#include<string.h>
#define CH_BACK ' '//背景填充符号
#define CH_LOZENGE '@'//菱形边框填充符号
#define MAX 100//存放菱形的二维数组(正方形)的边长,改变MAX可调整最大显示区域的大小
//最好不要大过199(最大菱形边长为99),因为没必要,显示屏太小,此程序中也不支持
//也不适宜过小
//若要使MAX>199,则需要对程序进行修改
int show_lozenge(char str[MAX][MAX],int side)
{
int i,j;
int m,n;
int high,wide;
for(m=0;m<MAX;m++)
for(n=0;n<MAX;n++)
{
if(m+n==side-1)
{
if(m==0&&n==side-1)
{
for(i=0;i<side;i++)
{
str[m+i][n+i]=CH_LOZENGE;//右上方直线
wide=n+i+1;//确定菱形宽度
}
}
if(m==side-1&&n==0)
{
for(i=0;i<side;i++)
{
str[m+i][n+i]=CH_LOZENGE;//左下方直线
high=m+i+1;//确定菱形高高度
}
}
str[m][n]=CH_LOZENGE;//左上方直线
str[m+(side-1)][n+(side-1)]=CH_LOZENGE;//右下方直线
}
}
for(i=0;i<high;i++)//根据高度和宽度打印菱形
{
for(j=0;j<wide;j++)
{
printf("%c",str[i][j]);
}
printf("\n");
}
return 0;
}
int main()
{
char str[MAX][MAX];
char side[3]="";
int i,j,len;
while(1)
{
memset(side,'\0',sizeof(side));
printf("请输入菱形的边长(1到%d的整数):",MAX/2);
//scanf("%s",side);//用scanf()函数,空格过滤不了
gets(side); //用gets()函数,gcc编译器会给出警告,可忽略,不影响执行
len=strlen(side);
//确定输入为1到9
if(len==1\
&&((MAX<20&&side[0]>'0'&&side[0]<=MAX/2+48)\
||(MAX>=20&&side[0]>'0'&&side[0]<='9')\
)
)
{
break;
}
else
//确定输入为10到99
if(len==2\
&&MAX>=20\
&&(((side[0]>'0'&&side[0]<MAX/2/10+48)&&(side[1]>='0'&&side[1]<='9'))\
||(side[0]==MAX/2/10+48&&(side[1]>='0'&&side[1]<=MAX/2%10+48))\
)
)
{
break;
}
}
for(i=0;i<MAX;i++)//初始化二维数组显示背景
{
for(j=0;j<MAX;j++)
{
str[i][j]=CH_BACK;
}
}
if(len==1)//打印边长小于10的菱形
{
show_lozenge(str,side[0]-48);
}
else
if(len==2)//打印边长大于等于10的菱形
{
show_lozenge(str,(side[0]-48)*10+(side[1]-48));
}
return 0;
}
执行结果如下:
请输入菱形的边长(1到50的整数):10
@
@ @
@ @
@ @
@ @
@ @
@ @
@ @
@ @
@ @
@ @
@ @
@ @
@ @
@ @
@ @
@ @
@ @
@
[ 本帖最后由 小小战士 于 2012-11-12 04:52 编辑 ]
小小战士,战士中的战斗机!