c语言数据22数组使用

1.1数组分配的空间

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

元素之间空间连续

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

说明:

数组首元素地址:

0号元素的地址属性

数组名代表首元素地址

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

数组的地址:

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

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

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

1.2数组初始化

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

规则:

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

初始化个数可以少于元素个数a[10]={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=&a[0]; //(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",&a[i])

}

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

{

sum+=a[i];

}

val=sum/10.0;

printf("%d",val);

2对数组累加和

3求平均值打印

1.4.2数组排序--冒泡排序

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

排序原理:

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

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

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

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

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

两层循环:

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

{

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

{

//从小到大

if(a[j]<a[j+1])

{

数据交换

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

}

}

}

1.4.3选择排序

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

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

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

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

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

int t[10]={1,5,7,4,6,5,4,4,5,3,}

int a=t[0];

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

{

if(a<t[i+1])

{

a=t[i+1];

}

}

printf("%d",a);

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

int t[10]={1,5,7,4,6,5,4,4,5,3,}

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

{

if(t[0]<t[i+1])

{

t[0]=t[i+1];

}

}

printf("%d",t[0]);

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

int t[10]={1,5,7,4,6,5,4,4,5,3,};

int a;

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

{

if(t[0]<t[i+1])

{

i=t[0];

t[0]=t[i+1];

t[i+1]=i;

}

}

printf("%d",t[0]);

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

int t[10]={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(t[j]<t[i+1])

{

a=t[j];

t[j]=t[i+1];//这样会把第一个值变为我们最需要的值

t[i+1]=a;

}

}

}

相关推荐
熬了夜的程序员8 分钟前
【LeetCode】74. 搜索二维矩阵
线性代数·算法·leetcode·职场和发展·矩阵·深度优先·动态规划
蓝色汪洋8 分钟前
oj字符矩阵
算法
点云SLAM8 分钟前
矩阵奇异值分解算法(SVD)的导数 / 灵敏度分析
人工智能·线性代数·算法·机器学习·矩阵·数据压缩·svd算法
坚持编程的菜鸟9 分钟前
LeetCode每日一题——矩阵置0
c语言·算法·leetcode·矩阵
零基础的修炼14 分钟前
Linux---线程封装
linux·c++·算法
虚行23 分钟前
Python学习入门
开发语言·python·学习
总有刁民想爱朕ha27 分钟前
Python自动化从入门到实战(23):Python打地鼠游戏开发
开发语言·python·游戏开发
曹牧28 分钟前
C#:函数默认参数
开发语言·c#
黄焖鸡能干四碗37 分钟前
MES生产执行制造系统建设(Java+Mysql)
java·大数据·开发语言·信息可视化·需求分析
workflower40 分钟前
跨链协同制造中的服务博弈与激励机制
开发语言·软件工程·制造·需求分析·个人开发·结对编程