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

用dev c++打印出一个由*围成的空心三角形 求指教。。

WPH0116 发布于 2012-04-07 17:43, 3210 次点击
如题 小妹试了很久都打印不正确 求帮助指导~~~
结果要打印为;
   *
  * *
 *   *
*******
19 回复
#2
WPH01162012-04-07 18:08
# include <stdio.h>
int main()
{
    int i,j;
    char a='*';
    for(i=1;i<=4;i++)
    switch(i)
    {
    case1:printf("   %c   \n",a);
    case2:printf("  %c %c  \n",a);
    case3:printf(" %c   %c \n",a);
    case4:printf("%c%c%c%c%c%c%c\n",a);}
    getchar();
}
这个哪里错了啊???
#3
hanyudeye2012-04-07 18:15
这个是c,格式串好多格式符却只有一个变量呀
#4
WPH01162012-04-07 18:58
可以具体一点么
#5
WPH01162012-04-08 10:23

没人理啊 痛苦
#6
WPH01162012-04-08 16:45
#include <stdio.h>
int main()
{
    int i,j;
    char a='*';
    for(i=1;i<=4;i++)
    { for(j=1;j<=i;j++)
    printf("%c",a);printf("\n");}
    getchar();
}
     
#7
WPH01162012-04-08 16:45
求修改
#8
hanyudeye2012-04-09 07:07
程序先运行到第一个for循环,循环就是它包含的语句执行n次,这个n是一个计数器,也就是你上面的i.从i赋值1开始然后下面的循环你那里是4次,而下面的语句又是一个循环,你那是j.那么程序先执行上面的for,i是计数器,i先赋值1,比较1<=4成立,然后往下执行是for,计数器是j赋值1,1<=上面的i,然后执行printf,然后才是j加1,然后跳到比较的地方,这里j是2,2<=上面的i不成立,跳出里面的for接着外面的for的末尾i加1,然后从外面的for再开始比较.for跟while差不多,写的语句型式是那样,但里面都跳来跳去的。不像顺序结构。谢谢你帮了我,不来不会看汇编代码了。
#9
WPH01162012-04-09 10:56
什么
#10
BianChengNan2012-04-10 13:29
这个应该是没对齐吧,楼主的思路蛮新颖的
#11
WPH01162012-04-10 17:23
谁会用那个字符数组打印这个程序呢?
#12
WPH01162012-04-11 16:01
谁会用那个字符数组打印这个程序呢?
#13
WPH01162012-04-12 15:40
汗~~··
#14
WPH01162012-04-13 07:36
我晕····
#15
ZJQLOVELYY2012-04-13 11:27
LZ想法,,是挺新的,可如果要打印一个大的呢?是不是又要加?我的思路简单的是用外循环控制行数,里面放三个循环,一个控制的空格,一个控制中间空格,一个输出星,或用setw和setfill组合,具体实现待我上机,手机不好打
#16
钟离文扬2012-04-13 23:13
同意八楼、、、、、
#17
WPH01162012-04-20 23:22
我是没对正  当程序呢?
#18
ab10349827492012-04-21 01:03
#include<iostream>
using namespace std;
int main(void)
{
    int i,j,k;
    for(i=1;i<=3;i++)
    {
        for(j=1;j<9-2*i;j++)
            cout<<" ";
        cout<<"*";
        if(i!=1)
        {
            for(k=1;k<=4*i-5;k++)
                cout<<" ";
            cout<<"*";
        }
        cout<<"\n";
        
    }
    cout<<" ";
    for(k=0;k<=10;k++)
        cout<<"*";
    cout<<"\n";
    return 0;
}
#19
wxl2494248202012-04-23 00:15
程序代码:
//打印出一个由*围成的空心三角形
/*

我的思路:

4   *                  第一行 4个空格1个*
3  *1*                 第二行 3个空格1个* + 1个空格1个*
2 * 3 *                第三行 2个空格1个* + 3个空格1个*
1*  5  *               第四行 1个空格1个* + 5个空格1个*
*********              最后一行  三角形*个数= 行数X2-1   9个*

下面是我自己写的,我是新手,所以代码可能写得有点多,有点啰嗦,不会优化结构。请各位多多包涵。不过程序准确运行,呵呵
*/
#include <iostream>
using namespace std;
int main()
{
    int i,j=0,Lkg=0,Ckg,h=0;
    cout<<"请输入三角形*组成的行数:\n";
    cin>>h;
    Lkg=h-2;//第二行左边的空格个数
    Ckg=1;//第二行中间的空格个数
    for(i=0;i<h-1;i++) //按照三角形行数,绘出第一行* 号的位置
    {
        cout<<" ";
    }
    cout<<"*\n";
    for(i=0;i<h-2;i++)
    {     
        for(j=0;j<Lkg;j++)  //循环打出左边空格个数
        {
            cout<<" ";

        }
        Lkg--;
        cout<<"*";

        for(j=0;j<Ckg;j++)//循环打出中间空格个数
        {
            cout<<" ";
        }
        Ckg=Ckg+2; //中间的空格数后一行比前一行多2个。
        cout<<"*\n";
    }
    for(i=0;i<h*2-1;i++)//绘画出最后一行,也就是三角形的底边。
    {
        cout<<"*";
    }
    cout<<endl;
    system("pause");
    return 0;
}
用for循环嵌套写的,各位请多多指教,有什么可以改良的地方,望大家帮忙指正。
#20
天使梦魔2012-04-23 15:25
#include <iostream>
using namespace std;

int main()
{
    int t;//t用来输入打印多少行的三角形
    int o=1;//o用来记录三角形的空心空格,等于是因为从第二行开始计算
    cin>>t;//输入一个数
    t--;//输入后减少一次作业
    for(int s=t;s;s--){cout<<" ";}//第一行有点特殊,把它排除在外,s代表需要空几个格子来打印第一行
    cout<<"*"<<endl;
    while(t>=2)//t这种动作等于减少2次运行机会,它表示三角形头和尾巴都是很特殊的,我们只要运行中间的部分
    {
        for(int s=t-1;s;s--){cout<<" ";}//这是从第二行开始计算的,这个循环控制三角形左边距离
        cout<<"*";//打印三角形左边
        for(int s=o;s;s--){cout<<" ";}//纯粹打印三角形的中空
        o+=2;//三角形的中空是单数加的,公式等于o=o+2
        cout<<"*"<<endl;打印右边
        t--;
    }
    o+=2;//三角形的中间打好了,o现在代表最后一行的中间空格,只要两边再加上就是最后一行
    while(o){cout<<"*";o--;}//利用o打印最后一行
    cin.get();cin.get();//不用理会,只是让程序暂停
}





程序编译后输入一个数字,打印多少行的三角形
1