注册 登录
编程论坛 C++教室

劳驾各位给指点一下。。感谢

taojingwen 发布于 2007-08-14 15:17, 1378 次点击

预想编一个根据输入的行数确定一个菱形。。例如:输入3。。得到
*
* *这样的一个形状。。。
*

我在VC++6.0中总是得不到正确的结果。麻烦各位看看。。

#include<iostream.h>


char main()
{
int n,i,j;
char star[30][30];
cout<<"Input How many lines do you want?(MAX is 30,MIN is 3)"<<endl;
cin>>n;

if(n>=3&&n<=30)
{




if(i=0||n-1)
{


if (j=(n-1)/2)
{
star[i][j]='*';
}
else
{
star[i][j]=' ';
};

}

else if(i=(n-1)/2)
{
//for(j=0;j<n;j++)
if (j=0|(n-1))
{
star[i][j]='*';
}

else
star[i][j]=' ';

}


else{
while(i>=1&&i<(n-1)/2)
{if(j=(n-1)/2+i||(n-1)/2-i)
{
star[i][j]='*';
star[i][j]='*';
}
else
star[i][j]=' ';
};


while(i>(n-1)/2&&i<n-1)
{if(j=(n-1)/2+i||(n-1)/2-i)
{
star[i][j]='*';
star[i][j]='*';
}
else
star[i][j]=' ';

};

};


for(i=0;i<n;i++)
for(j=0;j<n;j++)
cout<<star[i][j]<<endl;

}
else
cout<<"ERROR!Input Again."<<endl;

};

[此贴子已经被作者于2007-8-14 15:22:21编辑过]

16 回复
#2
taojingwen2007-08-14 15:25

劳驾各位高手给我说说吧。。
迷惑中!

#3
不会编程2007-08-14 15:41
如果输入的是偶数,会怎么样?
#4
neverDie2007-08-14 16:55
输入3
*
* *
*

输入4
*
* *
* *
*

这样吗?
#5
野比2007-08-15 00:57

偶数无法形成菱形...只能象neverDie说的形成平行四边形

#6
taojingwen2007-08-15 23:12

是这样的,输入“3”,那么会出现的图形是:(输入的行数是:除中线之外上、下两部分的行数)

只有本站会员才能查看附件,请 登录


输入“4”的话,则上下各增加一行。如图:

只有本站会员才能查看附件,请 登录


以此类推。。

[此贴子已经被作者于2007-8-15 23:20:24编辑过]

#7
kisscjy2007-08-16 02:07

给你写了一个,自己参考一下吧~

[CODE]
#include<iostream>
using namespace std;

void main()
{
int i=0, j=0, k=0, line=0;
cout<<"请输入行数,以得到一个菱形!"<<endl;
cin>>line;

for( k=0; k<=line; ++k ) //打印上半部分
{
for( i=0; i<=2*(line-k); i++ ) //先打印出空格
{
cout<<" ";
}
cout<<"*"; //再打印出*

for( j=1; j<=4*(k-1)+3; j++ ) //又一次打印空格
{
cout<<" ";
}

if( k!=0 ) cout<<"*";
cout<<endl;
}

for( k=line-1; k>=0; k--) //打印下半部分
{
for( i=0; i<=2*(line-k); i++ )
{
cout<<" ";
}
cout<<"*";

for( j=1; j<=4*(k-1)+3; j++ )
{
cout<<" ";
}

if( k!=0 ) cout<<"*";
cout<<endl;
}
}

[/CODE]

#8
aipb20072007-08-16 10:43
似曾相识
#9
taojingwen2007-08-17 10:01

请问:7楼的同学。。你程序里的i,j代表什么意思呢?
还想问问,可以用二维数组做吗?

#10
taojingwen2007-08-17 10:11


大家来帮我看看。这段程序怎么运行不起来呢?编译通过了。





#include<iostream.h>


char main()
{
int n;
char star[15][15];
cout<<"Input How many lines do you want?(MAX is 14,MIN is1)"<<endl;
cin>>n;

if(n>=0&&n<=14)
{ int i,j;
for(i=0;i<15;i++)

{
{ while((i=0)||(i=n-1)) //在最上、下的顶点。
{
for(j=0;j<15;j++)
{
if(j!=7)
star[i][j]=' ';
else
star[i][j]='*';
}
}
while(i=(n-1)/2) //最左、右的顶点。
{for(j=0;j<15;j++)
if((j!=(7-n))&&(j!=(7+n)))
star[i][j]=' ';
else
star[i][j]='*';
}
while((i<(n-1)/2)&&(i>0)) //上半边的点。
{
for(j=0;j<=7;j++)
{
if((j>=0)&&(j<=7))
{ i=1,j=1;
star[i][7-j]='*';
star[i][7+j]='*';
i++;
j++;
}
else
star[i][j]=' ';
}
}
while((i<n-1)&&(i>(n-1)/2)) //下半边的点。
{for(j=0;j<=7;j++)
{
if((j>=0)&&(j<=7))
{ i=1,j=1;
star[i][7-j]='*';
star[i][7+j]='*';
i++;
j++;
}
else
star[i][j]=' ';
}
}

cout<<star[i][j]<<endl;
}
}
}
else
cout<<"ERROR!Input Again."<<endl;



return 0;

}

#11
taojingwen2007-08-18 09:32

恳请高手帮我分析一下上面的代码具体错在哪里了呢?
感谢!!!

#12
aipb20072007-08-18 15:49
回复:(taojingwen)恳请高手帮我分析一下上面的代码...
没看你写的,这个问题你就写这么多,即使对了也不值得。

#include <iostream>
#include <cmath>
using namespace std;

#define n 3
int main(){
for (int i = 0,ii;i <= 2*n;++i){
i > n ? ii = 2*n-i : ii = i;
for (int j = 0;j <= 2*n;++j)
cout << (ii == abs(n-j) ? "*" : " ");
cout << endl;
}
system("pause");
}
所以类似的画星号题目都用2个for语句,i是行,j是列,abs是绝对值函数。
多理解下。
#13
taojingwen2007-08-18 19:09
回复:(aipb2007)回复:(taojingwen)恳请高手帮我...

非常感谢。。。
原来程序可以这么短的。。

#14
kisscjy2007-08-18 19:21
佩服,~~这么短~~
#15
wingyip2007-08-19 07:27
god,佩服樓主啊
#16
wingyip2007-08-19 07:34
#include <iostream>
#include <cmath>
using namespace std;
#define n 3
int main()
{
for (int i = 0,ii;i <= 2*n;++i)
{
i > n ? ii = 2*n-i : ii = i;
for (int j = 0;j <= 2*n;cout << (ii == abs(n-j++) ? "*" : " "));//直接把程序寫循環里 cout << endl;
}
system("pause");
}

aipb2007你的程序還可以再短一點,哈哈。

#17
intotherain82007-08-30 18:02
厉害的人真是太可怕了~~~!!!
1