程序就不动了,点啥都没反应。

img


编译没有问题

img


现在就已经不动了

img


这是预期数列

第18行的while循环中,j--,j小于0后仍然会继续执行,因为你的while条件只有j<n-1,死循环了,应该在while条件中加上 j>=0
while中的条件,把j>=0 && j<n-1 放在前面,否则可能会导致数组越界。
22行的i同样的问题。
下面的代码是之前写过的一个,供参考:

img

#include <stdio.h>
#include <stdlib.h>

//螺旋数
void luoxuanshu(int n,int start,int** p,int indexx = 0,int indexy = 0)
{
    int i,j;
    if(n==0)
        return;
    else if(n == 1)
        p[indexx][indexy] = start;
    else
    {
        //上一层
        for(i=0;i<n;i++)
        {
            p[indexx][indexy+i] = start;
            start++;
        }
        //右边
        for (i=1;i<n;i++)
        {
            p[indexx+i][indexy+n-1] = start;
            start++;
        }
        //底边
        for (i=n-2;i>=0;i--)
        {
            p[indexx+n-1][indexx+i] = start;
            start++;
        }
        //左边
        for (i = n-2;i>=1;i--)
        {
            p[indexx+i][indexy] = start;
            start++;
        }
        indexx++;
        indexy++;
        luoxuanshu(n-2,start,p,indexx,indexy);
    }
}

//矩阵旋转,向右侧旋转90°
void rotate(int n,int** p)
{
    int i,j;
    int t,index=0;
    //向左旋转90°
    for (i=0;i<n;i++)
    {
        for (j=i;j<n;j++)
        {
            t = p[j][index];
            p[j][index] = p[index][j];
            p[index][j]=t;
        }
        index++;
    }
    //左右列互换
    for(i=0;i<n/2;i++)
    {
        for(j=0;j<n;j++)
        {
            t=p[j][i];
            p[j][i] = p[j][n-1-i];
            p[j][n-1-i] = t;
        }
    }
}


int main()
{
    int n,i,j;
    int**p;
    scanf("%d",&n);
    p = (int**)malloc(sizeof(int*)*n);
    for(i=0;i<n;i++)
    {
        p[i] = (int*)malloc(sizeof(int)*n);
        for(j=0;j<n;j++)
            p[i][j] = 0;        
    }

    luoxuanshu(n,1,p);

    for (i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
            printf("%2d\t",p[i][j]);
        printf("\n");
    }

    printf("旋转后:\n");
    rotate(n,p);
    for (i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
            printf("%2d\t",p[i][j]);
        printf("\n");
    }

    free(p);
    p=0;
    return 0;
}

18行应该是j>0,22行是i>0,这两行是要进行i--和j--,你应该判断i和j大于0 啊

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632