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

各位高手,看一下啦,哪里出错了????

小亮仔 发布于 2009-10-27 18:59, 477 次点击
输入一个矩阵(比如说4阶的),再从矩阵中选一个数(假如这个数是2行3列的),从原矩阵中取出一个新矩阵(比如说3行3列),把这个数当做新矩阵的第一个数;如果访问过界,则过界的数都为0。
假如一个4阶矩阵:
2 6 3 8
1 5 6 4
2 3 8 7
1 3 2 6
选的是3行3列的8,要取出一个3行4列的矩阵,那么,结果应该是
8 7 0 0
2 6 0 0
0 0 0 0
可是,偶写的这个运行到一半就出问题呀……

#include<stdio.h>
int main()
{
    int r,c,a,h,n;
    int s[][],i,j;
    int *b[4][4];
    int *p;
    printf("输入一个");
    scanf("%d",&n);
    printf("阶矩阵:\n");
   
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            scanf("%d",&s[i][j]);
    printf("\n输入所选数字的行、列:");
    scanf("%d %d",&r,&c);
    printf("\n输入长、宽:");
    scanf("%d %d",&a,&h);
    printf("\n");
    p=&s[r][c];
    for(i=1;i<=h;i++)
    {
        for(j=1;j<=a;j++)
        {
            if(c+a>n+1)
                if(c+j>n+1)
                    s[c+i][r+h-n-1]=0;
            
           
            b[i][j]=&(*p);

            printf("%d ",*b[i][j]);
            p++;
        

        }
        printf("\n");
        p=p+n-a;
    }
   
    return 0;
}


        


3 回复
#2
陈小草2009-10-27 20:48
看不下去
你这是C还是C++呢?
应该是C吧!!
但C语言中main函数无返回值
再看你开头的声明:
    int s[][]            你不能两维都空着吧?回去翻翻书。
    int *b[4][4];            我猜想你是想定义一个指向4行4列二维数组的的指针。但正确的写法应当是: int (*b)[4]=s    /*已经在前面定义一个二维数组s[4][4]*/
下面的我就没法看下去了。

#3
阿冲2009-10-27 21:00
楼上说的很对int s[][],你再怎么想省略,至少第二维你应该加个数啊,就算你不知道维数,那你可以创建一个动态空间啊。
而且最严重的问题!!!这个程序居然没有详细的注释!!!!
#4
小亮仔2009-10-29 15:23
回复 2楼 陈小草

谢谢
1