c语言数据22数组使用

1.1数组分配的空间

int a10={1,2,3,4,5,6,7,8,9,10};//分配空间 元素类型大小int4*元素个数10=40byte

元素之间空间连续

数组名代表数组首元素地址;a 取的是a0的地址;&a 是整个数组的地址

说明:

数组首元素地址:

0号元素的地址属性

数组名代表首元素地址

a+1:首字母的地址,偏移一个元素

数组的地址:

数组的地址属性表示整个数组的地址:&a

从地址编号上是一样的,但偏移量是不一样的

&a+1数组的地址,偏移整个数组长度地址

1.2数组初始化

说明:数组初始化就是给数组中每个元素赋初值

规则:

元素个数可以省略 a\[\]={10,20,30};

初始化个数可以少于元素个数a10={10,20,30};//没初始化默认0

数组初始化必须在定义语句中完成

1.3访问下标

1.3.1 数组下标的使用

下标:数组中的元素从0开始编号一直到(数组元素个数-1)

通过数组的下标来锁定数组元素,从而达到操作具体元素的作用

格式:数组名下标号 //数组元素相应编号的内容

元素内容与地址:

数组名编号; //某号元素的内容

&数组名编号; //某号元素的地址

1.3.2数组名访问数组元素

数组名代表数组首元素地址

(数组名+i)的形式表示数组i号元素的地址

*(数组名+i)的形式 表示i号元素的内容

1.3.3通过指针的形式访问数组的元素

说明:通过指针来操作数组中的元素,首先要定义一个指针

指针指向对象类型 是元素的数据类型 数组的类型

int *p;

通过指针操作数组的话用 int (*p)5;

//获取首元素地址

p=&a0; //(p=a;)

//下一个元素的地址及内容

p++;

//指针可能会偏移,需要指针重新指向首元素

1.4数组的应用

1.4.1数组元素累加

需求:定义一个10个元素的数组,每个元素是int类型,用户输入十个整型数据,求平均值。

分析:1通过循环结构将数据输入数据

int sum=0;

int val;

printf();

for(i=0;i<=10;i++)

{

scanf("%d",&ai)

}

for(i=0;i<=10;i++)

{

sum+=ai;

}

val=sum/10.0;

printf("%d",val);

2对数组累加和

3求平均值打印

1.4.2数组排序--冒泡排序

可以将数组中的数据进行从大到小或者从小到大排序

排序原理:

通过与后面各个位数据比较将最大/最小的值找出来。

若需要将数组从大到小进行排序,通过两两比较的方式将最小的数据排到最后,然后是次小.....

考虑循环的次数,和遍历的数量。

在第一次循环时,最小的数被排到了最后,因此在下一次排序时不需要遍历到最后一位,其他以此类推......因此遍历的数量为 数据个数-轮数

循环的最后一次,应该是最大和次大的数进行比较,因此所需要循环的循环次数为 数据个数-1

两层循环:

for(i=1;i<数据个数;i++)

{

for(j=0;j<数据个数-轮数;j++)

{

//从小到大

if(aj<aj+1

{

数据交换

/*这样排序不是将第一个数变成最大数,而是想将最后一个数变成最小数*/

}

}

}

1.4.3选择排序

相对于冒泡排序,选择排序更为直接,通过与后面各个数进行比较后将符合的放在最前面的位置

第一次循环将第一位数据换成我们需要的值....下一次循环的起点应该从下一个数据开始遍历

最后一次为最小数和次小数间比较因此循环次数为.....数据个数-1

如果我要找一个十个数据中的最大值,定义一个a变量让他的值与数组其中一个元素相等

然后让他和数组中其他元素进行比较,若遇到更大的数则得到改值继续往后比较,最终打印a即可

int t10={1,5,7,4,6,5,4,4,5,3,}

int a=t0

for(i=0;i<10;i++)

{

if(a<ti+1)

{

a=ti+1;

}

}

printf("%d",a);

同样的,我可以不定义a,直接用a0来接收最大值

int t10={1,5,7,4,6,5,4,4,5,3,}

for(i=0;i<10;i++)

{

if(t0<ti+1)

{

t0=ti+1;

}

}

printf("%d",t0);

但是这样只是让第一个元素复制了其中最大的值,因此需要中间变量使数组进行交换

int t10={1,5,7,4,6,5,4,4,5,3,};

int a;

for(int i=0;i<10;i++)

{

if(t0<ti+1)

{

i=t0;

t0=ti+1;

ti+1=i;

}

}

printf("%d",t0);

这样第一个数就是最大数,接着后几位按照这个方式循环比较

int t10={1,5,7,4,6,5,4,4,5,3,};

int a;

for(int j=0;j<10-1;j++)

{

for(int i=0;i<10;i++)

{

if(tj<ti+1)

{

a=tj;

tj=ti+1;//这样会把第一个值变为我们最需要的值

ti+1=a;

}

}

}

相关推荐
小熊美家熊猫系统12 分钟前
电子合同技术实现与合规实践
java·开发语言·分布式
ytttr87315 分钟前
C# 定时数据库备份工具
开发语言·数据库·c#
玖玥拾18 分钟前
C/C++ 基础笔记(十二)友元、运算符重载
c语言·c++·运算符重载·友元
智者知已应修善业20 分钟前
【51单片机8位数码管同时倒计时从9999】2024-1-25
c++·经验分享·笔记·算法·51单片机
洛水水23 分钟前
【力扣100题】86.柱状图中最大的矩形
算法·leetcode·职场和发展
渡之30 分钟前
GRiM-Net 深度解析 | 无人机 GNSS 拒止场景下两阶段跨视角视觉定位框架
深度学习·算法·动态规划·无人机
skywalk816342 分钟前
言知项目后续方向建议
开发语言·学习·编程
测试仪器廖生135902563851 小时前
罗德与施瓦茨 FSP13频谱分析仪FSP30
网络·人工智能·算法
happymaker06261 小时前
LeetCodeHot100——560.和为K的子数组
算法
dtq04241 小时前
C语言刷题数组5,6(求平均值,求最大值)
c语言·数据结构·算法