码迷,mamicode.com
首页 > 编程语言 > 详细

C语言-数组

时间:2019-09-24 17:53:56      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:ons   src   区别   没有   其它   size   个数   安全   alt   

定义一维数组的语法:

datatype arrayName ;

  数据类型      数组名    [       ]  ;

 技术图片

引入一个新的定义方式

 

宏定义                                                  

第一种是定义标识,标识有效范围为整个程序,形如#define XXX,常与#if配合使用;

 

第二种是定义常数,如#define max 100,则max代表100(这种情况下使用const定义常数更好,因为:const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误 );

 

第三种是定义"函数",如#define get_max(a, b) ((a)>(b)?(a):(b)) 则以后使用get_max(x,y)就可以得到x和y中较大的数(这种方法存在一些弊病,如get_max(a++, b)时,a++会被执行多少次取决于a和b的大小!所以建议还是用内联函数而不是这种方法提高速度。虽然有这样的弊病,但这种方法的确非常灵活,因为a和b可以是各种数据类型。)

技术图片

代表N作为一个常量

关于#define 详细使用方法

https://blog.csdn.net/king110108/article/details/80728010

 

对于#define  和 const 定义两种的区别

 

1,define表示宏定义,这个N可以是其它类型

先定义,在使用时编译器转化成相应类型

 

2,const在定义时就有固定类型

所以define在用的时候可能会有风险

 

不仅仅类型不同,编译的处理方式也不同,还有存储方式也是不同的

 

———————————————————————————————————

一维数组初始化:

技术图片

 

 

此时符合:后面的元素个数和声明的一致

技术图片

 

 这时明显不够12个——但却仍正确,后面5个元素没有初始化,默认值为0

 技术图片

正确——元素个数为2

注:这时元素个数固定为2了,如果在想赋第三个值时会报错,因为数组个数时固定的

 

错误:未知元素个数

int array[ ] = { } ;

———————————————————————————————————

 

一维数组的动态赋值

 

动态地从键盘录入信息并赋值

技术图片

 

 

小结:

 

使用数组的步骤是什么?

 

1,定义数组是什么类型

2,数组的大小

3,考虑如何给数组每个元素进行赋值

4,录入值之后操作数组,一般采取循环

 

 

 

 

——————————————————————————————————

一维数组实战

 

有一个数列:8,4,2,1,23,344,12

 

1,循环输出数列的值

2,求数列中所有的数值的和及平均值

3,猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含此数

技术图片

 

技术图片

也可以通过定义一个不相关的变量,通过在for循环中改变其值再来观察

循环是否正常退出

技术图片

 

 

————————————————————————————————

 

数组的排序

 

循环录入5个整形数字,进行降序排列后输出结果

 

方案:使用冒泡排序

16     25    9    90    23

降序排列    -    从大到小

 

冒泡排序的基础原理:   遍历  和  交换

 

 第一轮循环

某个数字小于后面的数字,那么就交换第1轮            25    16    9    90    23             16 和 25作比较,25 > 16 放在左边

第2轮            25    16    9    90    23             16 和 9作比较,16  >  9  所以不变第3轮            25    16    90  9      23             冒泡已经冒到 9,

第4轮            25    16    90  23    9               9 和 23 作比较  交换位置

最小的数字就冒到了最后

 

 特点 :

1,需要比较多轮        - >    (  共需要比较数组长度   -   1 )轮

2,每一轮比较的次数比上一轮 - 1次

( 数组长度   -   1) -  当前的轮数

 

例如:这个数组长度是 5

共需要比较 4 轮

第1轮   需要比较   4 次

技术图片

 

 在数组已经有序的情况下

逆序可以重复采用冒泡排序的方式

如果数组初始无序的情况下,要求数组逆序输出

 

逆序:

第一个元素和最后一个元素交换

第二个元素和倒数第二个元素交换

 

12             34              23              67                 9

 i                                                                 N - i  -1

                 i                                N - i - 1

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

{

           temp = nums [ i ];

           nums[ i ]  =  nums [ N - i - 1];

           nums [N - i - 1]   = temp;

}

 

但是执行发现数组并没有变化

技术图片

 

技术图片

 

 正确代码如下:

技术图片

————————————————————————————————

数组的增删改查

 

数组删除的逻辑

 

12    34     23     67     9

1,查找要删除数字的下标(如23——>2)

2,从下标开始,后面一个覆盖前面一个数字

变成   12      34       23       9        9

 

3,数组的总长度 -  1 

技术图片

技术图片

 

 

数组的增加

C语言一维数组分静态一维数组和动态一维数组两种

一、静态一维数组,在定义的时候就已经确定其长度。如

int a[10];

就是定义了一个长度为10个元素的整型数组。

静态数组不支持长度的增加。如果要增加长度,只能新定义一个更长的数组,并把原始数组的数据复制到新数组中。

 

二、动态一维数组,本质上是一个一维指针,并在其上分配一段内存,在这段内存上,可以当做数组来使用。

这种情况下,可以通过realloc函数,来实现增加长度。

 

int *p; //定义指针

p = malloc(10*sizeof(int));//分配10个元素。

p = realloc(p,20*sizeof(int));//重新分配,长度增加到20. 使用该函数,可以保持原本空间内的数据不变,只是可用空间增加。

如果删除数组当中的一个元素之后,是可以进行再次增加的,将覆盖掉的元素直接等价于要增加的元素即可

 

老九学堂会员社群出品

作者:zero

C语言-数组

标签:ons   src   区别   没有   其它   size   个数   安全   alt   

原文地址:https://www.cnblogs.com/ljxt/p/11579176.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!