关于这段代码的问题
本帖最后由 御笔剑客 于 2017-11-30 17:17 编辑#include <stdio.h>
int main()
{
int n,m,k,i,t,j;
scanf("%d",&n);
m=n; //控制列数
int num={0};
i=0,t=1; //给第一个元素的初始值
while(t<n*n)
{
//顶行从左往右赋值
for(k=i;k<m;k++)
num=t++;
//顶行从上往下赋值
for(j=i+1;j<m;j++)
num=t++;
//底行从右往左赋值
for(k=m-1;k>0;k--)
num=t++;
//底行从下往上赋值
for(j=m-1;j>0;j--)
num=t++;
i++;
m--;
}
for(i=0;i<n;i++)
{
for(m=0;m<n;m++)
printf("%d ",num);
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={0};提示error: variable-sized object may not be initialized ,是不支持c99标准还是什么情况呢?codeblock应该支持c99吧?
2.这段代码把上面的数组改成常量定以后,为什么答案是错的呢? int ={0}; 应该是没支持,或者codeblock不支持,gcc的c99是支持变量作为数组长度的 BngThea 发表于 2017-11-30 17:17
应该是没支持,或者codeblock不支持,gcc的c99是支持变量作为数组长度的
如果定义一个常量数组,结果为什么会是错的呢?
在DEV C++ 5.11上验证过问题1、2都没有出现,没有报错,能运行。就是楼主的程序运行结果不符合问题描述的规律。 本帖最后由 lyjlyj 于 2017-12-5 19:53 编辑
//变长数组不能初始化
#include<stdio.h>
/* 123
894
765
*/
int main()
{
int num=1;
int i=0,j=0;
int t=0;
int l;
printf("请输入你要打印的行数:");
scanf("%d",&l);
int a;//变长数组不能初始化
if(l%2)
{
a=l*l;
while(num<l*l)
{
for(i=t,j=t;j<l-1-t;j++)
{
a=num++;
}
for(j=l-1-i;i<l-1-t;i++)
{
a=num++;
}
for(i=j;j>t;j--)
{
a=num++;
}
for(j=t,i=l-t-1;i>t;i--)
{
a=num++;
}
t++;
}
}
else
{
while(num<=l*l)
{
for(i=t,j=t;j<l-1-t;j++)
{
a=num++;
}
for(j=l-1-i;i<l-1-t;i++)
{
a=num++;
}
for(i=j;j>t;j--)
{
a=num++;
}
for(j=t,i=l-t-1;i>t;i--)
{
a=num++;
}
t++;
}
}
for(i=0;i<l;i++)
{
for(j=0;j<l;j++)
{
printf("%3d ",a);
}
printf("\n");
}
return 0;
}
页:
[1]