鱼C论坛

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

关于这段代码的问题

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

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

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

x
本帖最后由 御笔剑客 于 2017-11-30 17:17 编辑
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     int n,m,k,i,t,j;
  5.     scanf("%d",&n);
  6.     m=n; //控制列数
  7.     int num[n][m]={0};
  8.     i=0,t=1; //给第一个元素的初始值
  9.     while(t<n*n)
  10.     {
  11.         //顶行从左往右赋值
  12.         for(k=i;k<m;k++)
  13.             num[i][k]=t++;
  14.         //顶行从上往下赋值
  15.         for(j=i+1;j<m;j++)
  16.             num[j][m-1]=t++;
  17.         //底行从右往左赋值
  18.         for(k=m-1;k>0;k--)
  19.             num[k][m-1]=t++;
  20.         //底行从下往上赋值
  21.         for(j=m-1;j>0;j--)
  22.             num[j][k]=t++;
  23.         i++;
  24.         m--;
  25.     }
  26.     for(i=0;i<n;i++)
  27.     {
  28.         for(m=0;m<n;m++)
  29.             printf("%d ",num[i][m]);
  30.         printf("\n");
  31.     }


  32. }
复制代码


问题描述
  找出下面给出图形的规律,给出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};
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-11-30 17:17:56 | 显示全部楼层
应该是没支持,或者codeblock不支持,gcc的c99是支持变量作为数组长度的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

如果定义一个常量数组,结果为什么会是错的呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2017-12-5 19:50:24 | 显示全部楼层
本帖最后由 lyjlyj 于 2017-12-5 19:53 编辑
  1. //变长数组不能初始化
  2. #include<stdio.h>
  3. /* 1  2  3
  4.    8  9  4
  5.    7  6  5
  6. */
  7. int main()
  8. {
  9.         int num=1;
  10.         int i=0,j=0;
  11.         int t=0;
  12.         int l;
  13.         printf("请输入你要打印的行数:");
  14.         scanf("%d",&l);
  15.         int a[l][l];//变长数组不能初始化
  16.         if(l%2)
  17.         {
  18.                 a[l/2][l/2]=l*l;
  19.                 while(num<l*l)
  20.                 {
  21.                         for(i=t,j=t;j<l-1-t;j++)
  22.                         {
  23.                                 a[i][j]=num++;
  24.                         }
  25.                         for(j=l-1-i;i<l-1-t;i++)
  26.                         {
  27.                                 a[i][j]=num++;       
  28.                         }
  29.                         for(i=j;j>t;j--)
  30.                         {
  31.                                 a[i][j]=num++;       
  32.                         }
  33.                         for(j=t,i=l-t-1;i>t;i--)
  34.                         {
  35.                                 a[i][j]=num++;       
  36.                         }
  37.                         t++;
  38.                 }       
  39.         }
  40.         else
  41.         {
  42.                 while(num<=l*l)
  43.                 {
  44.                         for(i=t,j=t;j<l-1-t;j++)
  45.                         {
  46.                                 a[i][j]=num++;
  47.                         }
  48.                         for(j=l-1-i;i<l-1-t;i++)
  49.                         {
  50.                                 a[i][j]=num++;       
  51.                         }
  52.                         for(i=j;j>t;j--)
  53.                         {
  54.                                 a[i][j]=num++;       
  55.                         }
  56.                         for(j=t,i=l-t-1;i>t;i--)
  57.                         {
  58.                                 a[i][j]=num++;       
  59.                         }
  60.                         t++;
  61.                 }               
  62.         }
  63.         for(i=0;i<l;i++)
  64.         {
  65.                 for(j=0;j<l;j++)
  66.                 {
  67.                         printf("%3d ",a[i][j]);
  68.                 }
  69.                 printf("\n");
  70.         }

  71.         return 0;
  72. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-31 21:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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