snakech 发表于 2008-5-29 19:21

一个新人寻求帮助

为了实现输出
*
**
***
****
*****

写了如下代码
#include "stdafx.h"
#include <iostream>
using namespace std;
void main()
{
        int i,j,k;
        for (i=0;i<=5;i++)
        {
                j=0,j++;
                for (k=0;k<=j;k++)
                {
                        cout<<"*";
                }
               
                cout<<"\n";
        }
        getchar();
}
但是结果变成
**
**
**
**
**
哪个高手能够帮我修改下并且可以给我说明下原因
谢谢了
我是c++新人,在论坛也是新人,这是第一帖,希望大家支持
谢谢

p1s 发表于 2008-5-29 19:47

#include "stdafx.h"
#include <iostream>
using namespace std;
void main()
{
        int i,j,k;
        for (i=0;i<=5;i++)
        {
                j=0,j++;//每次做外循环的时候j都初始为0,然后++变为1
                for (k=0;k<=j;k++)//这里j恒等于1,是不是相当于做两次循环输出两个*啦?
                {
                        cout<<"*";
                }
               
                cout<<"\n";
        }
        getchar();
}
正解是,完全去掉变量j,k<=j改为k<i。

p1s 发表于 2008-5-29 19:49

还有外循环的次数不对,不是i<=5,应该是i<5。

xiaokuer 发表于 2008-5-30 09:13

我也是初学者。不过你可以用断点来查看变量的变化情况。对自己学习有帮助的

漫游者李李西 发表于 2008-5-30 14:33

用几何法分析可能算法更简单。

zzy840208 发表于 2008-5-30 23:12

我试试!

//---------------------------------------------------------------------
/* 解答:为了实现输出
        *
        **
        ***
        ****
        *****
                                                                                        ---zzy
                                                                                        2008.5.30
*/
//---------------------------------------------------------------------
#include <iostream>

int main()
{
        for(int i=0;i<5;++i)
        {
                for(int j=0;j<(i+1);++j)
                        std::cout<<"*";
                std::cout<<std::endl;
        }

        return 0;
}

wjcloudy 发表于 2008-5-31 10:17

用跟踪调试,很容易就能找到原因

页: [1]

编程论坛