1、数组的基本概念:

同样类型   
若干个     有序

由若干个同样类型的数据组成的有序的集合

有序:存储地址连续

下标连续

数组名:用来存放数组首地址的变量

数组元素:构成数组的每个数据

数组的下标:给数组的每个元素做一个编号

数组的长度:构成数组的数据的个数

2、一维数组的定义

数组的使用的流程:先定义   --->
初始化   --->使用

数组定义完毕后,假设不初始化里面存放的时垃圾值

格式:int arr[10];

定义长度为10的整型数组,每一个都是Int型的,数组的名称 arr

float f1[12];

char c[10];

1) 定义变量的同一时候,能够定义数组

int a[10],b,c;

2) int a1[3+2];

3) int n=5;   int a2[n];  //其它编译器数组定义的时候,数组长度不能使用变量,可是xcode做了优化,这是能够的

4)#define N 5      int a3[N+3];

5) int a4; int a4[10]; 数组的名称不能和变量名重名

6)数组名的命名原则严格遵守标示符命名原则

3、初始化和使用

数组中,一旦有一个元素被初始化了。其它元素也都被初始化了

1)定义的时候初始化

int a[10] = {0};

(1) 全然初始化(数组的每个元素都被初始化了)

int a[3]={2,3,4};  //全然初始化  a[0]=2,a[1]=3,a[2]=4

不指定数组长度的全然初始化

int a1[]={2,3,34,4}; //定义int型数组a1,初始化值为2,3,34,4,依据初始化的值,确定数组的长度

(2)部分初始化(仅仅指定数组的一部分初始化值)

int a2[10]={0}   //相当于有a2全部的元素都初始化为0

//a[0]=0,

int a3[5]={1,2,3};

指定下标的数组元素的初始化

int a4[6]={[3]=100,[0]=23};

//a[3]=100,a[0]=23;没有初始化的值,系统自己主动初始化为0

2)先定义。后初始化

int a5[10];

a5[0]=1;

a5[1]=2;

...

a5[9]=100;

3)数组的引用

取出数组中存放的内容

数组仅仅能通过数组的下标来获取相应的内容

int a[n];

下标的范围:0 ~ (n-1)

越界(越界訪问):訪问的数组元素的下标超出了最大的下标

int a6[3]={1,2,3,4,5};

4、数组的存储方式

数组在内存中是怎样存储的?

1)数组在内存中分配的时连续的一片内存空间

2)数组的名称存放连续内存空间的首地址

3)数组的第一个元素存放到数组内存的低地址(首地址)

4)首地址 = &a[0] = a

怎样计算数组的长度

1) int a[5];

2)int a[]={1,2,3,34,6,6,67};

数组占用总得存储空间

sizeof(a)

计算数组的元素的个数(长度)

sizeof(a)/sizeof(int)

5、数组和函数之间的关系

1) 数组的元素作为函数的參数(实參)

int a[3]={1,2,3};

int sum(int x,int y){

return x+y;

}

sum(a[0],a[1]);

注意:值传递

2)数组名作为函数的參数(实參)

void sum(int s[]){

}

sum(a);   // int s[];  s=a;  s存放了a得地址

// 相当于s和a都指向了同一块内存区域

// 操作s等同于操作a

注意:地址的传递

6、几个算法

1)选择排序

每一次找到一个最小值,跟未排序的第一元素进行交换

0   1  2   3  4

12  2  3  56  1

min=0

a[j],j=1

min=1

a[j] j=2

第一趟0   1   2  3  56  12

第二趟1   1   2  3  56  12

第三趟2   1   2  3  56  12

第四趟3   1   2  3  12  56

2)冒泡排序(必需要掌握的)

冒泡排序:大数下沉(每一趟最大的数跑到最后一个元素中)   
小数上浮

0   1  2   3  4

12  2  3  56  1

第一趟0

1        2   12 3  56  1

2        2   3  12 56  1

3        2   3  12 56  1

4        2   3  12 1   56

len-1-0   4

第二趟1    2   3  12 1   56

1       2   3  12 1   56

2       2   3  12 1   56

3       2   3  1  12  56

len-1-1   3

第三趟2    2   3  1  12  56

1       2   3  1  12  56

2       2   1  3  12  56

第四趟3

1       1   2  3  12  56

3)折半查找

在一个有序的数据序列中查找一个数,用最快的方法

low=0          high=4

int mid = (low+high)/2

0   1  2  3   4

------------------------------------- key = 5

1   2  3  12  56

h  l

m

key>a[mid]    low = mid+1

key==a[mid]   return mid;

key<a[mid]    high = mid-1;

结束:查找到了, return mid;

没查找到(l>h)  return -1;

【C语言疯狂讲义】(八)C语言一维数组的更多相关文章

  1. 【C语言入门教程】4.1 一维数组

    数组与指针涉及到数据在内存中的存储位置问题,数组由连续的存储单元组成,最低地址对应于数组的第一个单元,最高地址对应于数组的最后一个单元.指针是一种特殊的变量,该变量所存放的是内存地址,通过指针变量可访 ...

  2. C语言100题集合005-删除一维数组中所有相同的数,使之只剩一个

    系列文章<C语言经典100例>持续创作中,欢迎大家的关注和支持. 喜欢的同学记得点赞.转发.收藏哦- 后续C语言经典100例将会以pdf和代码的形式发放到公众号 欢迎关注:计算广告生态 即 ...

  3. C语言回顾-整型变量修饰符和一维数组

    1.整型变量修饰符 1)改变整型变量的存储空间 #include <stdio.h> int main(int argc, const char * argv[]) { //改变整型变量占 ...

  4. 【C语言疯狂讲义】(七)C语言进制转换

    1.计算机中的进制 2进制:逢二进1      0  1 8进制:逢八进1      0  1   2  3  4  5  6  7 10进制:逢十进1  默认的进制  0 - 9 16进制:逢十六进 ...

  5. 【C语言疯狂讲义】(三)C语言运算符

    1.运算符: 连接两个操作数(常量.变量)的符号 用运算符依照一定的规则连接的式子称为表达式 运算符的分类: 1)操作数的个数: 单目运算(++     sizeof    !) 双目运算符:... ...

  6. 《Java疯狂讲义》(第3版)学习笔记 2 - Java语言的运行机制

    内容 1.高级语言的运行机制 2.Java 语言的运行机制 1.高级语言的运行机制 高级语言主要分为编译型语言和解释型语言两类. 编译型语言是指使用专门的编译器.针对特定平台(操作系统)将高级语言源代 ...

  7. C语言学习 第八次作业总结

    本次作业其实没有新的内容,主要就是复习上一次的一维数组的相关内容.冯老师布置了5道题目,其中涉及到一些比较简单的排序或者是查找的方法.因为数据很少,所以直接使用for循环遍历就可以了. 关于本次作业, ...

  8. C#6.0语言规范(十八) 不安全代码

    前面章节中定义的核心C#语言与C和C ++的区别在于它省略了作为数据类型的指针.相反,C#提供了引用和创建由垃圾收集器管理的对象的能力.这种设计与其他功能相结合,使C#成为比C或C ++更安全的语言. ...

  9. C语言一维数组、二维数组、结构体的初始化

    C语言数组的初始化表示方法 一.C语言一维数组初始化: (1)在定义数组时对数组元素赋以初值.如: static int a[10]={0,1,2,3,4,5,6,7,8,9}; 经过上面的定义和初始 ...

随机推荐

  1. CF 319D(Have You Ever Heard About the Word?-模拟)

    D. Have You Ever Heard About the Word? time limit per test 6 seconds memory limit per test 256 megab ...

  2. 《C陷阱与缺陷》整理二

    1.数组名作实參     在C语言中,我们没有办法将一个数组作为函数參数传递,假设我们使用数组名作为參数.这个时候数组名立马会被转换为指向该数组的第一个元素的指针.     关于这一点的理解能够向前深 ...

  3. adb logcat 命令行用法

    作者 :万境绝尘  转载请著名出处 eclipse 自带的 LogCat 工具太垃圾了, 开始用 adb logcat 在终端查看日志; 1. 解析 adb logcat 的帮助信息 在命令行中输入  ...

  4. EasyUI - DataGrid 组建 - [ 排序功能 ]

    效果: 红框的字段看,为设置了,列排序,向后台Post数据sort/order. 原理:向后台POST数据,sort/post数据. html代码: <table id="tab&qu ...

  5. Thymeleaf Javascript 取值

    <script th:inline="javascript"> var openid = /*[[${session.wxuser.openId}]]*/ </s ...

  6. SQL 2008 数据库迁移

    1,改动迁移路径 USE master GO ALTER DATABASE 数据库名  --主数据 MODIFY FILE(NAME='数据库名', FILENAME='F:\DataBase\数据库 ...

  7. APK扩展文件介绍、功能及用法

    APK扩展文件介绍 Android Market (Google Play Store)中每一个APK文件的最大限制是50MB.假设您的程序中包括大量的数据文件,曾经您仅仅能把这些数据文件放到自己的s ...

  8. cms配置使用

    在早期完成了页面的切图之后,需要配置cms来实现小编上传数据更新页面的流程,在取得SEO的官网URL规则之后,就能开始官网在cms的基本配置了. 下面介绍cms的特点: 类别,决定内容与内容对应的路径 ...

  9. 微信JSAPI支付(比较详细) 关于getRrandWCPayRequest:fail_invalid appid 错误

    原文:微信JSAPI支付(比较详细) 关于getRrandWCPayRequest:fail_invalid appid 错误 首先微信支付需注册  微信公从平台开发 和 微信支付商户平台 关于4个密 ...

  10. iOS 使用UIBezierPath类实现随手画画板

    在上一篇文章中我介绍了 UIBezierPath类 介绍 ,下面这篇文章介绍一下如何通过这个类实现一个简单的随手画画板的简单程序demo,功能包括:划线(可以调整线条粗细,颜色),撤销笔画,回撤笔画, ...