【C语言】案例三十三 【二维数组】神奇魔方阵
害,神奇魔方阵。让我想起了我做过的快乐暑假······
案例描述
古代又称“纵横图”,就是指由自然数组成的方阵。编程要求实现一个5行5列的魔方阵。
必备知识
- 二维数组的定义与初始化
在实际工作中仅仅使用一维数组是远远不够的,这时可以用二维数组,定义方式与一维数组相似,代码如下:
数据类型 数组名[常量表达式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
- 二维数组的引用
和一维数组一样,语法格式如下:
int x[2][3]; //定义二维数组
x[2][3] = 3;//出错
再上述代码中,数组x 的下标最大为a[1][2]。x[2][3]超出了数组的下标范围。
案例设计
直到这里我才知道这玩意儿有啥神奇的:
- 假设前数的下标为(x,y),则下一个数的放置位置为当前位置的右上方(x - 1)(y + 1)
- 如果当前数在第一行,则将下一个数放在最后一行的下一列。第一列同理
- 如果下一个位置已经被占用,则下一个数直接放在当前位置的正下方,下一行,同一列(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语言】案例三十三 【二维数组】神奇魔方阵相关推荐
- c语言中二维数组怎么,c语言中什么是二维数组
c语言中什么是二维数组 二维数组A[m][n],这是一个m行,n列的二维数组.以下是由应届毕业生小编整理关于c语言二维数组的内容,希望对大家有所帮助!更多相关内容请关注应届毕业生考试 网. c语言的二 ...
- 实体类 接口_Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口)
原文:Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口, 视频讲解) 这里分享三道编程题, 下面是我个人的视频讲解 二维数组, 五子棋游戏, 实体类和接口_哔哩哔哩 (゜-゜)つロ ...
- C语言学习之将一个二维数组的行和列互换,存到另一个二维数组中
C语言学习之将一个二维数组的行和列互换,存到另一个二维数组中 #include <stdio.h> int main(){int a[2][3]={{1,2,3},{4,5,6}}; // ...
- C语言错误c2063,请教C语言中关于将二维数组复制到一个三维数组的问题
请教C语言中关于将二维数组复制到一个三维数组的问题 小白正在填写一段代码,是有点类似与俄罗斯方块的一段游戏代码,代码如下 要求在增加参数,变量和函数的情况下完成此代码,只能填写// write app ...
- c语言函数输出数组,如何让C语言函数返回一个二维数组
为了让C语言函数返回一个二维数组,有些人这样定义函数: int **foo(int rows, int columns) 然后在函数中费劲心机拼出来一个这样的malloc语句: int (*resul ...
- 【C语言进阶深度学习记录】三十 二维数组与二维指针
文章目录 1 二维指针(指向指针的指针) 2 二维数组 3 二维数组的类型 3.2 如何动态申请二维数组 4 总结 1 二维指针(指向指针的指针) 指针的本质是变量 指针的指针是保存指针变量的地址.如 ...
- 指针:C语言二级指针与二维数组
前言 最近用C语言写LeetCode 有的题目给的函数把二维数组用二级指针传进来 并传入行数和列数 引起一些疑惑 本来以为C语言学得海星,查了一些资料后,觉得自己还是个弟弟 : ( 按一维数组 ...
- Java 数组(三)二维数组
如果一维数组的各个元素仍然是一个数组,那么它就是一个二维数组.二维数组常用于表示表,表中的信息以行和列的形式组织,第一个下标代表元素所在的行,第二个下标代表所在的列. 一.二维数组的创建 1.先声明, ...
- C语言中如何将二维数组作为函数的参数传递
今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不 ...
- C语言定义和引用二维数组
怎样定义和引用二维数组 二维数组常称为矩阵.把二维数组写成行(row)和列(column)的排列形式,可以有助于形象地理解二维数组的逻辑结构. 一.怎样定义二维数组 其基本概念与方法与一维数组相似,如 ...
最新文章
- 关于一对多,多对多的多表查询的控制
- nodejs(三) --- nodejs进程与子进程
- Matlab 条形图实例
- 数值数据表示的三要素
- python3的3D开发-基于blender(1)
- 函数节流你应该知道的那点事,建议收藏!
- 前端学习(1296):第三方模块nodenrm
- 在UE中自由绘制基本图元的几种方法
- Java JDBC Statement
- NetShopForge网上商店程序(VB)源码—讨论-发布
- 全球最大的电子图书馆创世纪下载网址
- 新手小白做短视频自媒体,入门级教程分享,抓紧收藏
- ant构建异常UNEXPECTED TOP-LEVEL EXCEPTION com.android.dx.cf.iface.ParseException解决
- android实时声音信号波形_android绘制播放音频的波形图
- 吉洪诺夫正则化(Tikhonov regularization )
- 从键盘输入一个整数,判断它是正数,负数,0
- 用HTML5实现手机摇一摇的功能并配上声音
- Win11如何清理C盘垃圾文件
- c语言题库16页,C语言题库(完整版)(16页)-原创力文档
- python刷微博转发_一个简单的python刷新浪微博粉丝小程序