C语言实现打印螺旋数组(顺时针)

2023-06-0408:56:17编程语言入门到精通Comments956 views字数 1126阅读模式

问题的描述是:给出一个30*30的二维数组,用1~900这900个数字去填满这个二维数组,并且打印结果。要求是实现填充顺序是顺时针,例如现在有一个3*3规模的二维数组,用9个数字去填满它,则结果如下。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44290.html

1 2 3文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44290.html

8 9 4文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44290.html

7 6 5文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44290.html

可以看出这是一个顺时针打印的1~9的排列。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44290.html

假定num = 1;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44290.html

对于本题目给出的要求,我们想到用4个for循环分别打印行和列,并且每次打印num的值会依次递增,直到循环到最后一次后,num = 900为止,但是显然4个for循环不够打印出30*30的列表,所以这时候我们需要在4个for循环外面套上一个大的while循环,其存在是为了判断num目前的值是否小于等于900,如果条件为真,则执行循环,打印列表的行列,如果为假,则说明打印完成,那么就退出循环。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44290.html

对于四个for循环,最难的就是如何控制行列的增加,比如说我第一个for循环,正常打印第一行1~30的数字,但是在这一轮所有的for循环打印完后,我该如何通过第一个for循环打印第二行呢?文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44290.html

所以就想到使用四个参数来表示行列的变化,我选择a,b,c,d来表示,下面是我的思路。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44290.html

C语言实现打印螺旋数组(顺时针)
C语言实现打印螺旋数组(顺时针)

最开始我也是设了4个参数,但是由于混乱的逻辑,导致最后输出十分混乱,在经过画图和思考之后也理解了这四个参数之间的关系了,然后列出四个for()循环来解决问题。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44290.html

接下来是代码部分,代码中我没有单独写打印函数,就直接在主函数中将最后的二维数组打印出来。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44290.html

代码:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44290.html

#include<stdio.h>
int main() {
	int count = 0;//计数器
	int rui[30][30] = { {0} };//二维数组
	int num = 1;
	int yang = 30 * 30;
	int a = 0;//控制行的a b
	int b = 29;
	int c = 0;//控制列的c d
	int d = 29;
	while (num <= yang) {
		for (int i = a; i <= b; i++) {
			rui[c][i] = num++;
		}c++;
		for (int i = c; i <= d; i++) {
			rui[i][b] = num++;
		}b--;
		for (int i = b; i >= a; i--) {
			rui[d][i] = num++;
		}d--;
		for (int i = d; i >= c; i--) {
			rui[i][a] = num++;
		}a++;
	}
	for (int n = 0; n < 30; n++) {
		for (int m = 0; m < 30; m++) {
			printf("%4d", rui[n][m]);
			count++;
			if (count % 30 == 0) {//隔30个数换一行打印
				printf("n");
			}

		}
	}
	return 0;
}

接下来是代码的运行结果:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44290.html

C语言实现打印螺旋数组(顺时针)AI配图魔改

当然,如果题目要求是输出二维数组中某个具体位置的值,你也可以在代码中添加相应的printf()即可。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44290.html

这就是实现螺旋打印的代码了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44290.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/44290.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/44290.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定