C语言—数组

一维数组

  1. 数组的概念:数组是一组相同的数的集合
  • 数组中存放的是一个或多个数据,但是数组元素的个数不能为零;
  • 数组中存放的多个数据,其类型是相同的;
    数组一般分为一维数组和多维数组,多维数组中二维数组比较常见。
  1. 数组的创建
  • 一维数组的创建语法如下:
tepe arr_name[常量值]

存放在数组的值叫做元素,数组在创建的时候可以指定数组的大小和数组元素的类型;
type:指定存放在数组元素的数据类型;
arr_name:数组的名字;
[常量值]中的常量值是用来指定数组的大小的;

  1. 数组的初始化
//完全初始化
int arr1[5]={1,11,111,1111,11111};
//不完全初始化
int arr2[6]={1};
//错误❌初始化,数组中有三个元素,但是初始化时初始了四个元素
int arr3[3]={1,11,111,1111};
  1. 数组的类型
    数组是一种自定义类型,去掉数组名留下的就是数组的类型。

数组的使用

数组下标:C语言规定数组的下标是从零开始的;
在C语言中数组的访问提供了一个操作符**[ ]** 叫做下标访问操作符。

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

在这里插入图片描述

数组元素打印

代码如下:

#include <stdio.h>
int main()
{
	int arr1[10]={1,2,3,4,5,6,7,8,9,10};
	for(int i=0;i<10;i++)
	{
		printf("%d",arr[i]);
	}
	return 0;
}

数组输入

#include <stdio.h>
int main()
{
	int ## 标题arr1[10]={1,2,3,4,5,6,7,8,9,10};
	int i=0;
	for(i=0;i<10;i++)
	{
		scanf("%d",&arr[i]);
	}
	for(i=0;i<10;i++)
	{
		printf("%d",arr[i]);
	}
	return 0;
}

一维数组在内存中的存储

#include <stdio.h>
int main()
{
	int arr1[10]={1,2,3,4,5,6,7,8,9,10};
	for(int i=0;i<10;i++)
	{
		printf("%d",&arr[i]);
	}
	return 0;
}

在这里插入图片描述
计算数组元素个数

//sizeof中C语⾔是⼀个关键字,是可以计算类型或者变量⼤⼩的,其实 sizeof 也可以计算数组的
⼤⼩
sizeof(arr)/sizeof(arr[0])

二维数组

二维数组的概念:
前⾯学习的数组被称为⼀维数组,数组的元素都是内置类型的,如果我们把⼀维数组做为数组的元素,这时候就是⼆维数组,⼆维数组作为数组元素的数组被称为三维数组,⼆维数组以上的数组统称为多维数组。
在这里插入图片描述
二维数组的创建:

//type arr_name[常量值1][常量值2];
//例如:
int arr[3][5];
double data[2][8];

解释:上述代码中出现的信息
• 3表⽰数组有3行;
• 5表⽰每⼀⾏有5个元素;
• int 表⽰数组的每个元素是整型类型;
• arr 是数组名,可以根据自己的需要指定名字;
data数组意思基本⼀致。

数组练习

二分查找

在⼀个升序的数组中查找指定的数字n,很容易想到的⽅法就是遍历数组,但是这种⽅法效率⽐较低。比如我买了⼀双鞋,你好奇问我多少钱,我说不超过300元。你还是好奇,你想知道到底多少,我就让你猜,你会怎么猜?你会1,2,3,4…这样猜吗?显然很慢;⼀般你都会猜中间数字,⽐如:150,然后看大了还是小了,这就是⼆分查找,也叫折半查找。

#include <stdio.h>
int main()
{
 	int arr[] = {1,2,3,4,5,6,7,8,9,10};
	int left = 0;
 	int right = sizeof(arr)/sizeof(arr[0])-1;
 	int key = 7;//要找的数字
 	int mid = 0;//记录中间元素的下标
 	int find = 0;
 while(left<=right)
 {
 	mid = (left+right)/2;
 	if(arr[mid]>key)
 		{
 			right = mid-1;
		}
 	else if(arr[mid] < key)
 		{
 			left = mid+1;
 		}
 	else
 		{
 			find = 1;
 			break;
 		}
 }
 	if(1 == find )
 	printf("找到了,下标是%d\n", mid);
 else
 	printf("找不到\n");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值