鱼C论坛

 找回密码
 立即注册
查看: 2601|回复: 4

关于这段代码的问题

[复制链接]
发表于 2017-11-30 16:59:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 御笔剑客 于 2017-11-30 17:17 编辑
#include <stdio.h>
int main()
{
    int n,m,k,i,t,j;
    scanf("%d",&n);
    m=n; //控制列数
    int num[n][m]={0};
    i=0,t=1; //给第一个元素的初始值
    while(t<n*n)
    {
        //顶行从左往右赋值
        for(k=i;k<m;k++)
            num[i][k]=t++;
        //顶行从上往下赋值
        for(j=i+1;j<m;j++)
            num[j][m-1]=t++;
        //底行从右往左赋值
        for(k=m-1;k>0;k--)
            num[k][m-1]=t++;
        //底行从下往上赋值
        for(j=m-1;j>0;j--)
            num[j][k]=t++;
        i++;
        m--;
    }
    for(i=0;i<n;i++)
    {
        for(m=0;m<n;m++)
            printf("%d ",num[i][m]);
        printf("\n");
    }


}

问题描述
  找出下面给出图形的规律,给出n,画一个n行的对应图形。
  1 2 3 4
  12 13 14 5
  11 16 15 6
  10 9 8 7
输入格式
  输入包含一个数n。1<=n<=30



1.这段代码中的   int num[m][n]={0};提示error: variable-sized object may not be initialized ,是不支持c99标准还是什么情况呢?codeblock应该支持c99吧?
2.这段代码把上面的数组改成常量定以后,为什么答案是错的呢? int [30][30]={0};
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-30 17:17:56 | 显示全部楼层
应该是没支持,或者codeblock不支持,gcc的c99是支持变量作为数组长度的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-30 17:50:28 | 显示全部楼层
BngThea 发表于 2017-11-30 17:17
应该是没支持,或者codeblock不支持,gcc的c99是支持变量作为数组长度的

如果定义一个常量数组,结果为什么会是错的呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-4 15:25:49 | 显示全部楼层
在DEV C++ 5.11上验证过问题1、2都没有出现,没有报错,能运行。就是楼主的程序运行结果不符合问题描述的规律。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-5 19:50:24 | 显示全部楼层
本帖最后由 lyjlyj 于 2017-12-5 19:53 编辑
//变长数组不能初始化
#include<stdio.h>
/* 1  2  3
   8  9  4
   7  6  5
*/ 
int main()
{
        int num=1;
        int i=0,j=0;
        int t=0;
        int l;
        printf("请输入你要打印的行数:");
        scanf("%d",&l);
        int a[l][l];//变长数组不能初始化
        if(l%2)
        {
                a[l/2][l/2]=l*l;
                while(num<l*l)
                {
                        for(i=t,j=t;j<l-1-t;j++)
                        {
                                a[i][j]=num++;
                        }
                        for(j=l-1-i;i<l-1-t;i++)
                        {
                                a[i][j]=num++;        
                        }
                        for(i=j;j>t;j--)
                        {
                                a[i][j]=num++;        
                        }
                        for(j=t,i=l-t-1;i>t;i--)
                        {
                                a[i][j]=num++;        
                        }
                        t++;
                }        
        }
        else
        {
                while(num<=l*l)
                {
                        for(i=t,j=t;j<l-1-t;j++)
                        {
                                a[i][j]=num++;
                        }
                        for(j=l-1-i;i<l-1-t;i++)
                        {
                                a[i][j]=num++;        
                        }
                        for(i=j;j>t;j--)
                        {
                                a[i][j]=num++;        
                        }
                        for(j=t,i=l-t-1;i>t;i--)
                        {
                                a[i][j]=num++;        
                        }
                        t++;
                }                
        }
        for(i=0;i<l;i++)
        {
                for(j=0;j<l;j++)
                {
                        printf("%3d ",a[i][j]);
                }
                printf("\n");
        }

        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-1 03:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表