编写程序输出图案。输入一个数值,输出2n-1行的指定字符,组成菱形、梯形、三角形图案。其中菱形每行中间对齐,梯形后n-1行的每行内容相同,三角形后n-1行依次递减。图形符号以及中间的分割符都可以设置。比如图形符号为、#、$等;分割符为1个空格、2个空格、制表符等。
比如输入:2,*,空格
你这个题目说的不清楚,如果用制表符分割的话,是不好中间对齐的。
如有帮助,请帮忙采纳一下,谢谢。
代码如下:
代码
#include <iostream>
#include <string>
using namespace std;
int main()
{
int i,j,n,t;
char ss,ch,sp[10],buf[100];
cin >> n;
cin.get(); //过滤逗号
ch = cin.get();//接收显示符号
cin.get();//过滤逗号
cin.getline(sp,9); //接收分割符
//菱形
cout << "选择菱形输出:"<<endl;
int maxl = n+(n-1)*strlen(sp); //最大长度
for (i=0;i<2*n-1;i++)
{
memset(buf,0,100);
t = 0;
if(i<n)
{
for(j=0;j<=i;j++)
{
sprintf(buf+t,"%c",ch);
t+=1;
if(j<i)
{
sprintf(buf+t,"%s",sp);
t+=strlen(sp);
}
}
}else
{
for (j=0;j<2*n-1-i;j++)
{
sprintf(buf+t,"%c",ch);
t+=1;
if(j<2*n-2-i )
{
sprintf(buf+t,"%s",sp);
t+=strlen(sp);
}
}
}
for(j=0;j< (maxl-strlen(buf))/2;j++)
cout <<" ";
cout << buf;
for(j = 0;j< maxl-(maxl-strlen(buf))/2;j++)
cout <<" ";
cout << endl;
}
cout << "选择三角形输出:"<<endl;
for (i=0;i<2*n-1;i++)
{
if(i<n)
{
for(j=0;j<=i;j++)
{
if(j<i) cout << ch << sp;
else cout << ch << endl;
}
}else
{
for(j=0;j<2*n-1-i;j++)
{
if(j<2*n-2-i)
cout << ch <<sp;
else
cout << ch<<endl;
}
}
}
cout << "选择梯形输出:"<<endl;
for(i=0;i<2*n-1;i++)
{
if(i<n)
{
for(j=0;j<=i;j++)
{
if(j<i) cout << ch <<sp;
else cout << ch << endl;
}
}else
{
for(j=0;j<n;j++)
{
if(j<n-1) cout << ch << sp;
else cout << ch << endl;
}
}
}
return 0;
}
在后台指定好图案。输入数字的时候 直接输出。