设计层叠方阵(C语言)

题目要求如下图:


设计程序如下:

#include<stdio.h>
int main()
{
int a,m,i,j,k;
printf("a=");
scanf("%d",&a);
printf("the number of line is:");
scanf("%d",&m);
int z[m][m];
z[0][0]=a;
for(i=0;i<m-1;i++)      //!!!!!
{
z[0][i+1]=++a;
for(j=1;j<=i+1;j++)
{
z[j][i+1]=++a;
//printf("z[%d][%d]=%d\n",j,i+1,a);
}
for(k=i;k>=0;k--)
{
z[j-1][k]=++a;
//printf("z[%d][%d]=%d\n",j-1,k,a);
}

for(i=0;i<m;i++)         //输出数组 
{
for(j=0;j<m;j++)
printf("%4d",z[i][j]);
printf("\n");
}
return 0;
 } 

按照题目要求,a为初值即z[0][0]的值,共m层,a和m都由运行者手动输入。每一层数字由顺时针方向递增,并且下一层第一个数由本层最后一个数加1得到,因此可以设置一个变量a,记录当时的数值,下一次只要加1就行。每层分3种位置,即第一个数,下面的一列数字,以及最后一列数往前一行。可以使用二重循环给数组赋值,最后打印输出。

本人第一次出错的地方在循环的语句内变量i(控制每层的变量)的范围,开始写的是i<m。出现了下图这样的结果:


程序中j和k的循环结构内各有1处注释掉的printf语句,那是用来寻找错误用的,在编写程序时如果自己寻找不到错误可以通过这种方法查找对比,这样可以节省时间,更快的发现问题所在。

最后附上在Linux虚拟机上程序运行的结果:


祝大家学习愉快,共同进步!!╰(*°▽°*)╯

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值