十天学会C语言(day 4)

一、数组的基本概念与应用场景

1.数组的定义与本质

数组是由相同数据类型的元素组成的有序集合,通过数组名和下标访问每个元素。

1.数组在内存中占据连续的存储单元,数组名代表首元素的内存地址。
2.普通变量存储单个数据(如int a),而数组可存储批量数据(如int a[10]表示 10 个整型元素)。

二、一维数组的定义与使用

1.定义方式

数据类型 数组名[元素个数]

1.示例:
int nums[10];:定义包含 10 个整型元素的数组,下标范围 0~9。
char letters[26];:定义包含 26 个字符型元素的数组,存储 26 个英文字母。
2.注意事项:
元素个数必须是常量(如#define N 5; int arr[N];),不能是变量(如int n=5; int arr[n];在 C99 前不合法)。
数组名遵循标识符规则(字母、数字、下划线,不能以数字开头)。

2.初始化方式

1.全部元素赋值:
int arr[3] = {10, 20, 30};(等价于arr[0]=10, arr[1]=20, arr[2]=30)。
2.部分元素赋值:
int arr[5] = {1, 2};(arr[0]=1, arr[1]=2, arr[2]=0, arr[3]=0, arr[4]=0)。
3.初始化为 0
int arr[5] = {0};(仅第一个元素显式赋值 0,其余自动补 0)。
int arr[5] = {0,0,0,0,0};(显式初始化所有元素为 0)。
4.省略长度初始化
int arr[] = {1,2,3};(等价于int arr[3] = {1,2,3};。

3.练习示例

1.数组逆序输出
代码示例

#include <stdio.h>

int main()
{
	int a[10];
	
	printf("数组为:");
	for(int i=0;i<10;i++)
	{
		a[i]=i;
		printf("%d ",a[i]);
	}
	
	printf("\n逆序为:");
	for(int i=9;i>=0;i--)
	{
		printf("%d ",a[i]);
	}

	
	return 0;
}

2.斐波那契数列
定义:前两项为 1,从第三项开始每一项等于前两项之和(1, 1, 2, 3, 5, 8…)。
代码示例

#include <stdio.h>

int main()
{
	int arr[25];
	int size,i;
	
	arr[0]=0;
	arr[1]=1;

	size=sizeof(arr)/sizeof(arr[0]);
	for(i=2;i<size;i++)
	{
		arr[i]=arr[i-1]+arr[i-2];
		
	}
	
	for(i=0;i<size;i++)
	{
		printf("%d ",arr[i]);

	}
	
	return 0;
}

3.排序算法(顺、逆序)
冒泡排序(升序):相邻元素比较,大的往后移,每次将最大元素 “冒泡” 到末尾。
代码示例

#include <stdio.h>

int main()
{
	int a[]={43,2,65,2,5454,23,78,3,4,679,21};
	int len,tmp;
	
	len=sizeof(a)/sizeof(a[0]);
	
	for(int i=0;i<len-1;i++)
	{
		for(int j=0;j<len-1-i;j++)
		{
			if(a[j] < a[j+1])
			{
				tmp=a[j];
				a[j]=a[j+1];
				a[j+1]=tmp;
			}
		}
	}
	
	printf("数长为: %d\n",len);
	
	printf("逆序为:\n");
	for(int k=0;k<len;k++)
	{
		printf("%d ",a[k]);
	}
	
	printf("\n顺序为:\n");
	for(int m=len;m>=0;m--)
	{
		printf("%d ",a[m]);
	}


	return 0;
}

三、二维数组的定义与使用

1.定义与场景

二维数组是 “数组的数组”,用于表示具有行列结构的数据。
数据类型 数组名[行数][列数]

int matrix[3][4];:3 行 4 列的整型数组,共 12 个元素。
float table[5][2];:5 行 2 列的浮点型数组,可存储 5 组 (x,y) 坐标。

2.初始化方式

1.按行列初始化
数据类型 数组名[行数][列数] = {{行1值}, {行2值}, …};
int arr[2][3] = {{1,2,3}, {4,5,6}};
2.省略行数初始化
必须指定列数,行数由初始化数据的个数决定。
int arr[][3] = {{1,2}, {4,5}, {7,8}};(等价于 3 行 3 列数组,未赋值元素为 0)。
3.部分元素赋值
未赋值元素自动初始化为 0。
int arr[2][3] = {{1}, {4,5}};

3.练习示例

1.二维数组找最大值
问题描述:在 m×n 的二维数组中找到最大值及其位置。
代码实现

#include <stdio.h>

int main()
{
	int i,j;
	int hang,lie,max;
	int arry[3][4]={1,12,23,84,15,116,347,68,99,110,131,121};
	
	
	for(i=0;i<3;i++)
	{
		for(j=0;j<4;j++)
		{
			printf("%d\t",arry[i][j]);

		}
		printf("\n");

	}
	
	for(i=0;i<3;i++)
	{
		for(j=0;j<4;j++)
		{
			if(max < arry[i][j])
			{
				max=arry[i][j];
				hang=i;
				lie=j;
			}
		}
		
	}
	printf("数组中最大值为:%d,它在第%d行,第%d列\n",max,hang,lie);
	

	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值