题目要求如下:
打印如下图案
*
***
*****
*******
*****
***
*
TC中屏幕为25行,80列,将图形放于屏幕中间位置 。按键盘“w”键可以将图(数字,星号皆可)放大,直到最大。按键盘“s”可以把图缩小,直到最小。按“x”可以将图中*变为数字,再按“x“键又将数字变回星号,可以来回反复;数字图形要求:内层为外层数字的和,如354,则输出5;3278则输出8。最外层从1开始。
数字图形也如上可以放大或缩小。按键盘“q”退出。
上次没有写完,也就放下了,这次又拿起来想了想,现在算是完成了。
代码如下:
//显示星号:主要是通过对每行的控制来实现。
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<windows.h>
#define X 40
#define Y 12
int num[25][80];
char star[25][80];
int flag;
void initialize()
{
int x,y;
for(y=0;y<25;y++)
for(x=0;x<80;x++)
num[y][x]=0;
}
void printStar(int m)
{
int n;
int m1,m2;
int i,j;
int l,k;
n=(m-1)/2;
m1=(m+1)/2;
m2=m-m1;
for(j=0;j<m1;j++)
for(i=-j;i<j+1;i++)
num[Y-n+j][X+i]=1;
for(j=1;j<=m2;j++)
for(i=-(m2-j);i<(m2+1-j);i++)
num[Y+j][X+i]=1;
for(l=0;l<25;l++)
for(k=0;k<80;k++)
{
if(num[l][k]==1)
star[l][k]='*';
else
star[l][k]=' ';
}
for(l=0;l<25;l++)
for(k=0;k<80;k++)
printf("%c",star[l][k]);
initialize();
flag=0;
}
int maxNum(int a)
{
int max=0;
int m;
while(a>0)
{
m=a%10;
if(m>max)
max=m;
a=a/10;
}
return max;
}
void printNum(int m)
{
int n,n1;
int i,j;
int l,k;
int m1,m2;
int sum,sum1,sum2;
int num_=1;
while(m>=1)
{
sum1=sum2=0;
n=(m-1)/2;
m1=(m+1)/2;
m2=m-m1;
j=0;
for(i=0;i<m1;i++)
{
num[Y-n+i][X+i]=num_;
num[Y-n+i][X-i]=num_;
sum1=sum1+2*num_;
}
n1=m2-1;
for(j=1;j<=m2;j++)
{
num[Y+j][X+n1]=num_;
num[Y+j][X-n1]=num_;
sum2=sum2+2*num_;
n1--;
}
sum=sum1+sum2-2*num_;
num_=maxNum(sum);
m=m-2;
}
for(l=0;l<25;l++)
for(k=0;k<80;k++)
{
if(num[l][k]==0)
{
star[l][k]=' ';
printf("%c",star[l][k]);
}
else
printf("%d",num[l][k]);
}
initialize();
flag=1;
}
int main()
{
char c;
int s=5;
int l=0;
initialize();
printStar(s);
while(c!='q')
{
c=getche();
if(c=='w')
{
system("cls");
if(flag==0)
{
if(s<25)
{
s=s+2;
printStar(s);
}
else
printStar(25);
}
else
{
if(s<25)
{
s=s+2;
printNum(s);
}
else
printNum(25);
}
}
if(c=='s')
{
system("cls");
if(flag==0)
{
if(s>1)
{
s=s-2;
printStar(s);
}
else
printStar(1);
}
else
{
if(s>1)
{
s=s-2;
printNum(s);
}
else
printNum(1);
}
}
if(c=='x')
{
system("cls");
l++;
if(l%2!=0)
printNum(s);
else
printStar(s);
}
}
return 0;
}