害,神奇魔方阵。让我想起了我做过的快乐暑假······

案例描述
古代又称“纵横图”,就是指由自然数组成的方阵。编程要求实现一个5行5列的魔方阵。

必备知识

  1. 二维数组的定义与初始化
    在实际工作中仅仅使用一维数组是远远不够的,这时可以用二维数组,定义方式与一维数组相似,代码如下:
数据类型 数组名[常量表达式1] [常量表达式2]

二维数组是按照 进行储存的先存放a[0]行,再是a[1],a[2]等。
完成二维数组的定义后要进行初始化:
初始化二维数组的方式有三种
1)按行给二维数组赋值

int x[3][3] ={{2,3,4}{1,2,3}};

2)将所有数组元素按照行顺序写入括号内

int x[3][3] ={2,3,4,1,2,3};

3)对部分数组元素进行赋值

int x[3][3] ={{2,3},{1,2,3}};

需要注意的是,二维数组下第一个下标可以省略,但第二个不可以省略例如:

int x[2][3] ={2,3,1,2,3};

可以写成

int x[][3] ={2,3,1,2,3};

系统将根据固定列数,将数值进行划分,自动定义数为2

  1. 二维数组的引用
    和一维数组一样,语法格式如下:
int x[2][3]; //定义二维数组
x[2][3] = 3;//出错

再上述代码中,数组x 的下标最大为a[1][2]。x[2][3]超出了数组的下标范围。

案例设计
直到这里我才知道这玩意儿有啥神奇的:

  1. 假设前数的下标为(x,y),则下一个数的放置位置为当前位置的右上方(x - 1)(y + 1)
  2. 如果当前数在第一行,则将下一个数放在最后一行的下一列。第一列同理
  3. 如果下一个位置已经被占用,则下一个数直接放在当前位置的正下方,下一行,同一列(x + 1)(y)

案例实现

#include <stdlib.h>
#include <stdio.h>int main()
{int i,j;int x = 1,y = 3;     //要求从第一行中间开始int a[6][6] = {0};   //定义一个二维数组来储存魔方阵for (i = 1 ; i <= 25 ; i ++ )   //魔方阵中有25个数字,他们为1~25{a[x][y] = i; // 把此时的i储存在到数组中if (x == 1 && y == 5)  //当数字在数组右上角时(右上角为啥不是a[0][5]??→右上角是a[0][5],但在一个6 * 6的数组中安排5 * 5的数据并满足要求可以是这个数组的任意一个拐角){x ++;continue;    //结束本次循环(为啥是结束本次循环???小小的脑袋充满了大大的问号?)→continue语句只结束本次循环,而不终止整个循环的执行。 而break语句则是结束整个循环过程,不再判断执行循环的条件是否成立 。}if (x == 1)x = 5 ;elsex -- ;if (y == 5)y = 1 ;elsey ++ ; if (a[x][y] != 0){x = x + 1;/*x = x + 2;  ←书上是这么写的,但我觉得应该是上面那种↑y = y - 1;   (最后证明两种方式都可以输出正确答案)*/}}for (i = 1;i <= 5; i ++)  // 输出二维数组(书上这么写的,感觉好乱啊,刚刚还是a[x][y],现在又变成了a[i][j]→不影响,只要小于5,不论是什么变量都可以){for (j = 1;j <= 5; j ++){printf ("%4d",a[i][j]);}printf ("\n");}system ("pause");return 0;
}

程序运行结果如下:

【C语言】案例三十三 【二维数组】神奇魔方阵相关推荐

  1. c语言中二维数组怎么,c语言中什么是二维数组

    c语言中什么是二维数组 二维数组A[m][n],这是一个m行,n列的二维数组.以下是由应届毕业生小编整理关于c语言二维数组的内容,希望对大家有所帮助!更多相关内容请关注应届毕业生考试 网. c语言的二 ...

  2. 实体类 接口_Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口)

    原文:Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口, 视频讲解) 这里分享三道编程题, 下面是我个人的视频讲解 二维数组, 五子棋游戏, 实体类和接口_哔哩哔哩 (゜-゜)つロ ...

  3. C语言学习之将一个二维数组的行和列互换,存到另一个二维数组中

    C语言学习之将一个二维数组的行和列互换,存到另一个二维数组中 #include <stdio.h> int main(){int a[2][3]={{1,2,3},{4,5,6}}; // ...

  4. C语言错误c2063,请教C语言中关于将二维数组复制到一个三维数组的问题

    请教C语言中关于将二维数组复制到一个三维数组的问题 小白正在填写一段代码,是有点类似与俄罗斯方块的一段游戏代码,代码如下 要求在增加参数,变量和函数的情况下完成此代码,只能填写// write app ...

  5. c语言函数输出数组,如何让C语言函数返回一个二维数组

    为了让C语言函数返回一个二维数组,有些人这样定义函数: int **foo(int rows, int columns) 然后在函数中费劲心机拼出来一个这样的malloc语句: int (*resul ...

  6. 【C语言进阶深度学习记录】三十 二维数组与二维指针

    文章目录 1 二维指针(指向指针的指针) 2 二维数组 3 二维数组的类型 3.2 如何动态申请二维数组 4 总结 1 二维指针(指向指针的指针) 指针的本质是变量 指针的指针是保存指针变量的地址.如 ...

  7. 指针:C语言二级指针与二维数组

    前言   最近用C语言写LeetCode 有的题目给的函数把二维数组用二级指针传进来 并传入行数和列数 引起一些疑惑 本来以为C语言学得海星,查了一些资料后,觉得自己还是个弟弟 : (   按一维数组 ...

  8. Java 数组(三)二维数组

    如果一维数组的各个元素仍然是一个数组,那么它就是一个二维数组.二维数组常用于表示表,表中的信息以行和列的形式组织,第一个下标代表元素所在的行,第二个下标代表所在的列. 一.二维数组的创建 1.先声明, ...

  9. C语言中如何将二维数组作为函数的参数传递

    今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不 ...

  10. C语言定义和引用二维数组

    怎样定义和引用二维数组 二维数组常称为矩阵.把二维数组写成行(row)和列(column)的排列形式,可以有助于形象地理解二维数组的逻辑结构. 一.怎样定义二维数组 其基本概念与方法与一维数组相似,如 ...

最新文章

  1. 关于一对多,多对多的多表查询的控制
  2. nodejs(三) --- nodejs进程与子进程
  3. Matlab 条形图实例
  4. 数值数据表示的三要素
  5. python3的3D开发-基于blender(1)
  6. 函数节流你应该知道的那点事,建议收藏!
  7. 前端学习(1296):第三方模块nodenrm
  8. 在UE中自由绘制基本图元的几种方法
  9. Java JDBC Statement
  10. NetShopForge网上商店程序(VB)源码—讨论-发布
  11. 全球最大的电子图书馆创世纪下载网址
  12. 新手小白做短视频自媒体,入门级教程分享,抓紧收藏
  13. ant构建异常UNEXPECTED TOP-LEVEL EXCEPTION com.android.dx.cf.iface.ParseException解决
  14. android实时声音信号波形_android绘制播放音频的波形图
  15. 吉洪诺夫正则化(Tikhonov regularization )
  16. 从键盘输入一个整数,判断它是正数,负数,0
  17. 用HTML5实现手机摇一摇的功能并配上声音
  18. Win11如何清理C盘垃圾文件
  19. c语言题库16页,C语言题库(完整版)(16页)-原创力文档
  20. python刷微博转发_一个简单的python刷新浪微博粉丝小程序

热门文章

  1. linux下.xz文件的解压方式
  2. 虚拟机软件VMware Workstation Pro的安装与使用
  3. Android_Page Curl:Android平台上的翻书翻页
  4. php中奖概率算法程序,PHP中奖概率的抽奖算法程序代码
  5. 如何长时间坚持学习python?
  6. 世界需要一种什么样的语言?
  7. 饥荒mod制作初学笔记
  8. 最新微信订餐订房系统
  9. LiveGBS流媒体平台国标GB/T28181作为上级平台对接海康大华华为宇视等下级平台硬件NVR监控摄像机
  10. 北京艾德思奇科技有限公司面试实录