当前位置: 代码迷 >> C语言 >> 还是没想出来
  详细解决方案

还是没想出来

热度:111   发布时间:2006-07-15 00:49:50.0
还是没想出来

#include<stdio.h>
int a;
void fn()
{
int i,j,k;
for(i=0;i<a;i++)
{
for(j=10;j>=i;j--)
{
printf(" ");
}
for(k=1;k<=2*i+1;k++)
{
if(k%2!=0)
printf("*");
else
printf(" ");
}
printf("\n");
}
for(i=0;i<a+2;i++)
{
for(j=9;j>=i;j--)
{
printf(" ");
}
for(k=1;k<=2*i+3;k++)
{
if(k%2!=0)
printf("*");
else
printf(" ");
}
printf("\n");
}
for(i=0;i<a+3;i++)
{
for(j=8;j>=i;j--)
{
printf(" ");
}
for(k=1;k<=2*i+5;k++)
{
if(k%2!=0)
printf("*");
else
printf(" ");
}
printf("\n");
}
for(i=0;i<a+3;i++)
{
for(j=10;j>=0;j--)
{
printf(" ");
}
for(k=1;k<2;k++)
{
printf("*");
}
printf("\n");
}

}
void person()
{
printf("*****************************打印一个松树***************************\n");
}
void sn()
{
printf("请输入数值:");
while(scanf("%d",&a))
{
if(a>4&&a<8)
fn();
else
printf("输入错误\n");
printf("请输入:");
}
}
void main()
{
person();
sn();
}
有高手能帮我合并FOR循环吗?


----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽

2006-07-14 23:31:59
超级新手

等 级:论坛游民
帖 子:185
专家分:59
注 册:2006-2-9
  得分:0 
画得出图没有
----------------解决方案--------------------------------------------------------
以下是引用lianxin19在2006-7-15 0:49:50的发言:

#include<stdio.h>
int a;
void fn()
{
int i,j,k;
for(i=0;i<a;i++)
{
for(j=10;j>=i;j--)
{
printf(" ");
}
for(k=1;k<=2*i+1;k++)
{
if(k%2!=0)
printf("*");
else
printf(" ");
}
printf("\n");
}
for(i=0;i<a+2;i++)
{
for(j=9;j>=i;j--)
{
printf(" ");
}
for(k=1;k<=2*i+3;k++)
{
if(k%2!=0)
printf("*");
else
printf(" ");
}
printf("\n");
}
for(i=0;i<a+3;i++)
{
for(j=8;j>=i;j--)
{
printf(" ");
}
for(k=1;k<=2*i+5;k++)
{
if(k%2!=0)
printf("*");
else
printf(" ");
}
printf("\n");
}
for(i=0;i<a+3;i++)
{
for(j=10;j>=0;j--)
{
printf(" ");
}
for(k=1;k<2;k++)
{
printf("*");
}
printf("\n");
}

}
void person()
{
printf("*****************************打印一个松树***************************\n");
}
void sn()
{
printf("请输入数值:");
while(scanf("%d",&a))
{
if(a>4&&a<8)
fn();
else
printf("输入错误\n");
printf("请输入:");
}
}
void main()
{
person();
sn();
}
有高手能帮我合并FOR循环吗?


改成这样就可以了.
int i,j,k,t;
for(t=1;t<4;t++)
{
if(t==1)a=a-1;
for(i=0;i<a+t;i++)
{
for(j=11-t;j>=i;j--)
{
printf(" ");
}
for(k=1;k<=2*i+2*t-1;k++)
{
if(k%2!=0)
printf("*");
else
printf(" ");
}
printf("\n");
}
if(t==1)a++;
}


----------------解决方案--------------------------------------------------------
以下是引用穆扬在2006-7-15 7:31:59的发言:

程序写的太差
基本上没必要再改
建议重写
重写时把全局变量去掉

好严厉的批评,不过很有道理


----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽

2006-07-16 13:47:27
nuciewth

来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9791
专家分:183
注 册:2006-5-23
  得分:0 

改进缩短了一下,并且稍微修改了一下楼主的程序.
个人建议:)虽然提倡多用函数形式,但小的输入输出应该放在主函数里;尽量不要使用不必要的全局变量;一般找规则的事自己多去摸索.呵呵,自己再去改改吧!
#include<iostream.h>
#include<stdio.h>
#include<iomanip.h>
int a;
void fn()
{
int i,k,t;
for(t=1;t<4;t++)
{ if(t==1)a=a-1;
for(i=0;i<a+t;i++)
{
cout<<setfill(' ')<<setw(13-t-i)<<"*";
for(k=1;k<=2*i+2*t-1;k++)
{
if(k%2==0)
printf("*");
else
printf(" ");
}
printf("\n");
}
if(t==1)a++;
}
for(i=0;i<a+3;i++)
{
cout<<setfill(' ')<<setw(12)<<"*";
printf("\n");
}

}
void person()
{
printf("*****************************打印一个松树***************************\n");
}
void sn()
{
printf("请输入数值:");
while(scanf("%d",&a))
{
if(a==0)
break;
if(a>4&&a<8)
fn();
else
printf("输入错误\n");
printf("请输入:");
}
}
int main()
{
person();
sn();
return(0);
}


----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽

2006-07-16 13:53:32
nuciewth

来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9791
专家分:183
注 册:2006-5-23
  得分:0 
可是我按照他的程序输出结果,缩短程序语句
得到结果是一样的啊
是打印一个3层的树行*号。
程序写的的确费解。我也没怎么看,只是合并而已。
----------------解决方案--------------------------------------------------------
把具体的题目 说下。看下,我编的会不会比你更差
----------------解决方案--------------------------------------------------------
  相关解决方案