Day06 数组

Day06 数组

一、数组的定义

1、数组的定义和使用

格式:
	数据类型 数组名[元素个数]
	例子:int scores[10];		//scores[0]-scores[9]
	scores[0] = 10;				//赋值操作
	int scores[10] = {99,66,51,516,15,3151,31,31,52,85};			//赋值操作
	int scores[10] = {99,66,51};			//赋值时括号中一次为数组前面的元素赋值,如果数组长度超过元素个数,后面的值全部初始化为0
	int scores[] = {99,66,51};				//数组长度为3
	

	数组下标越界:超出了数组元素个数的下标,如果操作越界数据会出现程序错误 1、乱码结果 2、报错

2、求出数组元素个数:

两种方法
1、int len = sizeof(数组名)/sizeof(数据类型);
	int len = sizeof(scores)/sizeof(int);
	2、int len = sizeof(数组名)/sizeof(元素);
	int len = sizeof(scores)/sizeof(scores[0]);

3、求出数组地址:

printf("%p\n",&scores[0]);		//%p打印变量的内存地址,以无符号16进制格式打印,打印前需要在变量前加取地址符号【&】
printf("%p\n",&scores);

二、二维数组

1、二维数组初始化

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

2、二维数组内存模型

#define _CRT_SECURE_NO_WARNINGS
	#include<stdio.h>
	
	int main(void)
	{
		int arr[3][3];
		printf("二维数组的长度:%d\n", sizeof(arr));
		printf("二维数组中一行的长度:%d\n", sizeof(arr[0]));
		printf("行数:%d\n", sizeof(arr)/sizeof(arr[0]));
		printf("列数:%d\n", sizeof(arr[0])/sizeof(arr[0][0]));
	
		//二维数组的内存模型
		printf("二维数组的内存首地址:%p\n",arr);
		printf("二维数组的内存首行地址:%p\n",arr[0]);
		printf("二维数组的内存第二行行地址:%p\n",arr[1]);
		printf("二维数组的内存首个元素地址:%p\n",&arr[0][0]);
		printf("二维数组的内存首行第二个元素地址:%p\n",&arr[0][1]);
		printf("二维数组的内存首行第三个元素地址:%p\n",&arr[0][2]);
		printf("二维数组的内存第二行第一个元素地址:%p\n",&arr[1][0]);
		printf("二维数组的内存第二行第二个元素地址:%p\n",&arr[1][1]);
	
		return 0;
	}

三、多维数组

三维数组例子:
int arr[2][3][4] = {
							{
								{1,2,3,4},
								{2,3,4,5},
								{3,4,5,6}
							}
							{
								{4,5,6,7},
								{5,6,7,8},
								{6,7,8,9}
							}
						}

四、字符数组

1、字符数组

char arr_1[10] = { 'H','e','l','l','o' };
	char arr_2[] = { 'H','e','l','l','o' };
	char arr_3[] = "hello";
	char arr_4[100];
	scanf("%[^\n]", arr);    //碰到换行结束
	
	//%s会接收字符串结束标志【'\0'】之前的所有字符 在ASCII中就是数字0
	printf("%s", arr);
	//for (int i = 0; i < 10; i++)
	//{
	//     printf("%c", arr[i]);
	//}  
	//printf("%d\n", sizeof(arr));

2、字符串追加

#define _CRT_SECURE_NO_WARNINGS
	#include<stdio.h>
	
	int main(void)
	{
		char arr1[6];
		char arr2[6];
		char arrBuf[11];
		scanf("%[^\n]", arr1);
		getchar();
		scanf("%[^\n]", arr2);
	
	
		//printf("%s", arr1);
		//printf("%s", arr2);
	
		int index = 0;
		while (arr1[index] != '\0')
		{
			arrBuf[index] = arr1[index];
			index++;
		}
		while (arr2[index - 5] != '\0')
		{
			arrBuf[index] = arr2[index - 5];
			index++;
		}
		arrBuf[index] = '\0';
		printf("%s", arrBuf);
		return 0;
	
	}

、案例

1、案例一:十只小猪称体重

//定义一个数组,存储小猪体重,通过遍历找到最重的小猪
	#define _CRT_SECURE_NO_WARNINGS
	#include<stdio.h>
	
	int main(void)
	{
		int max = 0, j = 0;
		int fits[10];
		printf("请输入十只小猪的体重:\n");
		for (int i = 0; i < 10; i++)
		{
			scanf("%d",&fits[i]);
			if (max < fits[i])
			{
				max = fits[i];
				j = i + 1;
	
			}
		}
		printf("第%d个小猪最重,体重为:%dKg\n", j, max);
		return 0;
	}

2、案例二:冒泡排序

//
	#define _CRT_SECURE_NO_WARNINGS
	#include<stdio.h>
	
	int main()
	{
		int nums[] = { 1,5,9,6,7,8,4,3,2,0,98,56,12};
		int len = sizeof(nums) / sizeof(nums[0]);
		//打印原来顺序的数字
		for (int i = 0; i < len; i++)
		{
			printf("%d\t", nums[i]);
		}
		printf("\n");
		//外层循环每次执行都能确定一个最大值
		for (int i = len; i > 1; i--)
		{
			for (int j = 0; j < i-1; j++)	//每次排序需要比较的次数
			{
				if (nums[j] > nums[j + 1])		//前后两个数字进行比较,较大的放在后面
				{
					int temp = nums[j];
					nums[j] = nums[j + 1];
					nums[j + 1] = temp;
				}
	
			}
		}
		//打印排好顺序的数字
		for (int i = 0; i < len; i++)
		{
			printf("%d\t", nums[i]);
		}
		return 0;
	}

3、案例三:10名学生,三门成绩,scores[10][3],求出每名学生的总成绩和平均成绩,求出班级的语文 数学 英语的平均成绩。

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main(void)
{
	int stu[10][2] = {0};
	int scores[10][3] = {0};
	int scores_[3][2] = {0};
	for (int i = 0; i < 10; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			if (j == 0)
			{
				printf("请输入第%d个同学的语文成绩\t",i);
				scanf("%d", &scores[i][j]);
			}
			if (j == 1)
			{
				printf("请输入第%d个同学的数学成绩\t", i);
				scanf("%d", &scores[i][j]);
			}
			if (j == 2)
			{
				printf("请输入第%d个同学的英语成绩\t", i);
				scanf("%d", &scores[i][j]);
			}
		}
	}
	//求出每名学生的总成绩和平均成绩
	for (int i = 0; i < 10; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			stu[i][0] += scores[i][j];		//求出每名同学的总成绩	stu[i][0]
		}
		stu[i][1] = stu[i][0] / 3;			//求出每名同学的平均成绩	stu[i][1]
	}
	//求出班级的语文 数学 英语的平均成绩
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 10; j++)
		{
			scores_[i][0] += scores[i][j];		//求出每门课程的总成绩	scores_[i][0]
		}
		scores_[i][1] = scores_[i][0] / 10;		//求出每门课程的平均成绩 scores_[i][1]
	}
	//打印每名同学的总成绩和平均成绩
	for (int i = 0; i < 10; i++)
	{
		printf("第%d名同学的总成绩为%d\n", i, stu[i][0]);
		printf("第%d名同学的平均成绩为%d\n", i, stu[i][1]);
	}
	//打印每门课的总成绩和平均成绩
	printf("该班级语文总成绩为:%d\n", scores_[0][0]);
	printf("该班级语文平均成绩为:%d\n", scores_[0][1]);
	printf("该班级数学总成绩为:%d\n", scores_[1][0]);
	printf("该班级数学平均成绩为:%d\n", scores_[1][1]); 
	printf("该班级英语总成绩为:%d\n", scores_[2][0]);
	printf("该班级英语平均成绩为:%d\n", scores_[2][1]);
}

4、案例四:双色球

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<time.h>

int main()
{
	//双色球规则,红球加蓝球(6+1)  红球1-33  蓝球1-16 
	//红球不能重复,蓝球可以和红球重复
	//红球
	int r_balls[6];
	srand((unsigned int)time(NULL));
	for (int i = 0; i < 6; i++)
	{
		r_balls[i] = rand() % 33 + 1;
		//去重
		for (int j = 0; j < i; j++)
		{
			
			if (r_balls[j] == r_balls[i])
			{
				i--;
				continue;
			}
		}
	}
	//红球排序
	for (int i = 6; i > 1; i--)
	{
		for (int j = 0; j < i - 1; j++)	//每次排序需要比较的次数
		{
			
			if (r_balls[j] > r_balls[j + 1])		//前后两个数字进行比较,较大的放在后面
			{
				int temp = r_balls[j];
				r_balls[j] = r_balls[j + 1];
				r_balls[j + 1] = temp;
			}

		}
	}
	//打印双色球
	for (int i = 0; i < 6; i++)
	{
		printf("%d    ", r_balls[i]);
	}
	printf("  +  %d", rand() % 16 + 1);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值