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

大家看看,这是我的错呢,还是计算机的错?

promising 发布于 2010-07-29 11:13, 562 次点击
程序代码:
#include<iostream.h>
void main()
{
    int num[6]={5,7,3,4,2,1};
    int i,j,k,temp;
    int ans[6][6];
   
    for(j=0;j<6;j++)
    {
        i=0;
        ans[i][j]=num[j];
        temp=num[j];
        for(k=1;k<=6;k++)
        {
            i++;
            j++;
            if(j>5)
            {
                j-=6;
            }
            ans[i][j]=temp;
//            cout<<"k="<<k<<endl;
        cout<<"j="<<j<<'\t';
        }
        cout<<endl;
//        cout<<"j="<<j<<endl;
    }
    for(i=0;i<6;i++)
    {
        for(j=0;j<6;j++)
            cout<<ans[i][j]<<'\t';
        cout<<endl;
    }
}
运行结果:
只有本站会员才能查看附件,请 登录

大家看看,这是我的错呢,还是计算机的错?
    注意运行结果中第三行中j的变化,我认为有问题~
5 回复
#2
mxs8102010-07-29 11:50
楼主先把你的程序思路列一下~~

程序有什么问题,说一下~~

[ 本帖最后由 mxs810 于 2010-7-29 11:53 编辑 ]
#3
promising2010-07-29 12:27
回复 2楼 mxs810
想要结果:
5 7 3 4 2 1
1 5 7 3 4 2
2 1 5 7 3 4
4 2 1 5 7 3
3 4 2 1 5 7
7 3 4 2 1 5
我是这样做的:从第一行的每个数开始,对整个矩阵保存完每个数字,在开始下一个;
              如先是ans[0][0]=5;然后保存ans[1][1]=5,直至ans[6][6]=5;
              再从第一行7开始,重复……;
                我感觉程序没什么错啊~
#4
mxs8102010-07-29 13:01
这个循环    for(j=0;j<6;j++)
里边j = 3的时候是无效的,你在循环里边修改了j的值,
正好跳过了j = 3这组循环,造成4没有赋给ans里边。

单步跟踪一下,你就发现了
#5
mxs8102010-07-29 13:22
问题我帮你找到了:
ans[i][j]=temp;这句存在溢出访问,
当i = 6的时候就出问题了
改为:
程序代码:
            if (i == 6)
            {
                i = 0;
            }
            ans[i][j]=temp;


#6
promising2010-07-29 15:29
回复 5楼 mxs810
Thanks~
1