6.数组

六.数组

前言

​ 1.一维数组
​ 2.二维数组
​ 3.多维数组

数组属于数据类型中的一种

数据结构:就是帮助我们更好的管理与使用数据!!!
变量 数组 结构体 链表 队列 栈 堆 hash 树 图...
什么是变量??? 存储一个数据!!! 数据类型
人物属性 体重: 40kg 变化后45kg
int x=40; x=45; 用一个x变量去表示人物的体重

那如果我想表示50个人物的体重数据 怎么玩???
int x,x1,x2,x3....x49;//50个变量去存储50个人物的体重数据 很繁琐 很麻烦!!!
数组:帮助我们存储一组相同类型的数据

1.定义

​ 用法: 类型名 变量名[数字]
​ 中括号里面的数字就表示当前这个数组能够存储的数据个数

数据初始化:

int x[5] = { 10, 20, 30, 40, 50 };//第一种
printf("%d\n",x[0]);
printf("%d\n",x[1]);
printf("%d\n",x[2]);
printf("%d\n",x[3]);
printf("%d\n",x[4]);

这个是数据在数组中的状态,数据在数组中有各自的存储空间,需要通过小标的方式将它提取出来!

int x[5] = { 10, 20, 30};//表示将数组的前三个元素赋值,其余的用0补齐
printf("%d\n",x[0]);
printf("%d\n",x[1]);
printf("%d\n",x[2]);
printf("%d\n",x[3]);
printf("%d\n",x[4]);

int x[5] = { 0 };//将数组中的所有元素全部置零
printf("%d\n",x[0]);
printf("%d\n",x[1]);
printf("%d\n",x[2]);
printf("%d\n",x[3]);
printf("%d\n",x[4]);

  • 二维数组定义与使用

    int array[2][3];//定义了一个二维数组,有两个array[3]
    
  • 二维数组初始化

    int a[3][4] = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };
    

案例1,自动版电子钢琴

#include <stdio.h>
#include <windows.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")

int main()
{	//有乐谱!!!   小星星  1155665 4433221 5544332 5544332
	int i;
	int Music[31]
	{//0-27 28个音符
		    1, 1, 5, 5, 6, 6, 5,
			4, 4, 3, 3, 2, 2, 1,
			5, 5, 4, 4, 3, 3, 2,
			5, 5, 4, 4, 3, 3, 2
	};
	for (i = 0; i < 31; i++)//选出数组里面第i个元素所代表的值
	{
		switch (Music[i])
		{
			if (Music[i])
			{  //Music[i]值是0   严谨!!!
		case 1: mciSendString("close 1.mp3", 0, 0, 0); mciSendString("play 1.mp3", 0, 0, 0); break;
		case 2: mciSendString("close 2.mp3", 0, 0, 0); mciSendString("play 2.mp3", 0, 0, 0); break;
		case 3: mciSendString("close 3.mp3", 0, 0, 0); mciSendString("play 3.mp3", 0, 0, 0); break;
		case 4: mciSendString("close 4.mp3", 0, 0, 0); mciSendString("play 4.mp3", 0, 0, 0); break;
		case 5: mciSendString("close 5.mp3", 0, 0, 0); mciSendString("play 5.mp3", 0, 0, 0); break;
		case 6: mciSendString("close 6.mp3", 0, 0, 0); mciSendString("play 6.mp3", 0, 0, 0); break;
		case 7: mciSendString("close 7.mp3", 0, 0, 0); mciSendString("play 7.mp3", 0, 0, 0); break;
			}
		}
		Sleep(350);//毫秒 0.35秒 播放一次
	}
	return 0;
}

案例2,求数组中数据的和

先看辅对角线的数组分别对应的坐标是(0,0)(1,1)(2,2)(3,3)可以看出是行=列

再看主对角线的数组分别对应的坐标是(0,3)(1,2)(2,1)(3,0)可以看出是行+列=3

所以代码如下:`

int main()
{	//		行  列   列:0   1     2    3     行
	int data[4][4] = { 35, 46,  88,  97,//   0
		               75, 104, 89,  65,//   1
		               65, 14,  684, 99,//   2
		               78, 65,  58,  25	//   3
                     };//行和列都是从0开始计数的!
	int sum1 = 0, sum2 = 0, i, j;
	//这个其实是简写的表示定义了两个变量sum1,sum2,并用行i列j来赋值并初始化sum1,2
	//0是可以不算的,只是用来初始化的
	//就是定义了2个变量,分别存储对应对角线的值
	for (i = 0; i <= 3; i++)
	{                         //行号
		for (j = 0; j <= 3; j++)
		{                     //列号
			if (j == i)
			{
				sum1 += data[i][j];
			}
			else if (j == 3 - i)
			{
				sum2 += data[i][j];
			}
		}
	}
	printf("sum1=%d\n",sum1);
	//这段代码就被简化了
	//int sum2 = 0 , a , b;
	//for (a=0;a<=3;a++)
	//{
	//	for (b = 0; b <=3 ; b++)
	//	{
	//		if (b==3-a)
	//		{
	//			sum2 += data[a][b];
	//		}
	//	}
	//}
	printf("sum2=%d\n", sum2);
	int SUM = sum1 + sum2;
	printf("SUM=%d\n",SUM);

案列3,简单的小游戏—人物移动

白色 数字1 障碍
蓝色 数字0 道路
五角星 数字2 终点
♀ 数字3 人物
‘w’:人物向上移动 行号-1
‘s’:人物向下移动 行号+1
‘a’:人物向左移动 列号-1
‘d’:人物向右移动 列号+1
人物移动就是数字4的移动

#include <stdio.h>
#include <conio.h>

int main()
{//绘制地图
	int Map [8][13] = {1,1,1,1,1,1,1,1,1,1,1,1,1,
		               1,0,0,0,0,0,0,0,0,0,0,0,1,
		               1,0,1,1,1,1,1,1,1,1,1,0,1,
		               1,0,1,0,0,0,0,0,0,0,1,0,1,				  
		               1,0,1,0,1,1,1,1,1,2,1,0,1,				  
		               1,0,1,0,1,1,1,1,1,1,1,0,1,				  
		               1,0,1,0,0,0,0,0,0,0,0,0,1,				  
		               1,3,1,1,1,1,1,1,1,1,1,1,1,				  
	                  };
	int i, j;
	for (i = 0; i < 8; i++)
	{
		for (j = 0; j < 13; j++)
		{
			switch (Map[i][j])
			{
				case 0:printf("  ");break;
				case 1:printf("■");break;
				case 2:printf("♀");break;
				case 3:printf("★");break;
			}
		}
		printf("\n");
	}

	int dy, dx;
	//1.确定人物的位置
	for (dy = 0; dy < 8; dy++)      //行
	{
		int flag = 0;//标记
		for (dx = 0; dx < 13; dx++)  //列
		{
			if (Map[dy][dx] == 2)
			{
				flag = 1;
				break;
			}
		}
		if (flag)break;
	}
	printf("%d,%d\n", dy, dx); //就是人物的坐标位置

	while(1)
	{
		switch (getch())
		{
		case 'w':
			Map[dy][dx] = 0;
			dy = dy - 1;
			Map[dy][dx] = 2;
			break;
		case 's':
			Map[dy][dx] = 0;
			dy = dy + 1;
			Map[dy][dx] = 2;
			break;
		case 'a':
			Map[dy][dx] = 0;
			dx = dx - 1;
			Map[dy][dx] = 2;
			break;
		case 'd':
			Map[dy][dx] = 0;
			dx = dx + 1;
			Map[dy][dx] = 2;
			break;
		}
		for (i = 0; i < 8; i++)
		{
			for (j = 0; j < 13; j++)
			{
				switch (Map[i][j])
				{
				case 0:printf("  "); break;
				case 1:printf("■"); break;
				case 2:printf("♀"); break;
				case 3:printf("★"); break;
				}
			}
			printf("\n");//换行
			}
		}

posted @ 2022-09-29 12:13  咸鱼呦  阅读(12)  评论(0)    收藏  举报