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;

}

}

}

相关推荐
涛ing30 分钟前
32. C 语言 安全函数( _s 尾缀)
linux·c语言·c++·vscode·算法·安全·vim
xrgs_shz1 小时前
MATLAB的数据类型和各类数据类型转化示例
开发语言·数据结构·matlab
独正己身1 小时前
代码随想录day4
数据结构·c++·算法
厂太_STAB_丝针3 小时前
【自学嵌入式(8)天气时钟:天气模块开发、主函数编写】
c语言·单片机·嵌入式硬件
利刃大大4 小时前
【回溯+剪枝】找出所有子集的异或总和再求和 && 全排列Ⅱ
c++·算法·深度优先·剪枝
charlie1145141914 小时前
从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(协议层封装)
c语言·驱动开发·单片机·学习·教程·oled
来恩10034 小时前
C# 类与对象详解
开发语言·c#
*TQK*4 小时前
ZZNUOJ(C/C++)基础练习1041——1050(详解版)
c语言·c++·编程知识点
komo莫莫da5 小时前
寒假刷题Day19
java·开发语言