【C语言疯狂讲义】(八)C语言一维数组
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语言一维数组的更多相关文章
- 【C语言入门教程】4.1 一维数组
数组与指针涉及到数据在内存中的存储位置问题,数组由连续的存储单元组成,最低地址对应于数组的第一个单元,最高地址对应于数组的最后一个单元.指针是一种特殊的变量,该变量所存放的是内存地址,通过指针变量可访 ...
- C语言100题集合005-删除一维数组中所有相同的数,使之只剩一个
系列文章<C语言经典100例>持续创作中,欢迎大家的关注和支持. 喜欢的同学记得点赞.转发.收藏哦- 后续C语言经典100例将会以pdf和代码的形式发放到公众号 欢迎关注:计算广告生态 即 ...
- C语言回顾-整型变量修饰符和一维数组
1.整型变量修饰符 1)改变整型变量的存储空间 #include <stdio.h> int main(int argc, const char * argv[]) { //改变整型变量占 ...
- 【C语言疯狂讲义】(七)C语言进制转换
1.计算机中的进制 2进制:逢二进1 0 1 8进制:逢八进1 0 1 2 3 4 5 6 7 10进制:逢十进1 默认的进制 0 - 9 16进制:逢十六进 ...
- 【C语言疯狂讲义】(三)C语言运算符
1.运算符: 连接两个操作数(常量.变量)的符号 用运算符依照一定的规则连接的式子称为表达式 运算符的分类: 1)操作数的个数: 单目运算(++ sizeof !) 双目运算符:... ...
- 《Java疯狂讲义》(第3版)学习笔记 2 - Java语言的运行机制
内容 1.高级语言的运行机制 2.Java 语言的运行机制 1.高级语言的运行机制 高级语言主要分为编译型语言和解释型语言两类. 编译型语言是指使用专门的编译器.针对特定平台(操作系统)将高级语言源代 ...
- C语言学习 第八次作业总结
本次作业其实没有新的内容,主要就是复习上一次的一维数组的相关内容.冯老师布置了5道题目,其中涉及到一些比较简单的排序或者是查找的方法.因为数据很少,所以直接使用for循环遍历就可以了. 关于本次作业, ...
- C#6.0语言规范(十八) 不安全代码
前面章节中定义的核心C#语言与C和C ++的区别在于它省略了作为数据类型的指针.相反,C#提供了引用和创建由垃圾收集器管理的对象的能力.这种设计与其他功能相结合,使C#成为比C或C ++更安全的语言. ...
- C语言一维数组、二维数组、结构体的初始化
C语言数组的初始化表示方法 一.C语言一维数组初始化: (1)在定义数组时对数组元素赋以初值.如: static int a[10]={0,1,2,3,4,5,6,7,8,9}; 经过上面的定义和初始 ...
随机推荐
- 跟着鬼哥学so改动,一,准备篇
图/文 听鬼哥说故事 闲话少说,so的改动,重要性大家都知道,这里从头编写so文件,分析so文件,改动so文件,打算做一个系列的教程,当然,主要是看时间同意. android的sdk配置以及ndk环境 ...
- 黑马程序猿_Objective C 类与协议
<a href="http://www.itheima.com"target="blank">ASP.Net+Unity开发</a>.& ...
- Spring通过工厂创建实例的注意事项
假设第三方(or别的team)提供一个工厂类(此类是不能够改动的.往往以jar包形式提供的),须要供给我们项目来使用. 可是我们自己的项目使用了spring来配置,所以我们当然希望可以通过spring ...
- [转]java开发环境搭建
分成两个部分: 1.下载安装jdk,并配置环境变量 链接:http://www.runoob.com/java/java-environment-setup.html 2.安装Eclipse 链接:h ...
- 讲解下for循环的用法,加深记忆
引子 这是一段很简单的代码,但是即便是这么简单的东西,这里我们还是需要说一下. 关于for循环整个执行流程就是,先执行var i=10,然后到了第二个语句,判断10是否大于0,很明显为true,所以此 ...
- python模块介绍- HTMLParser 简单的HTML和XHTML解析器
python模块介绍- HTMLParser 简单的HTML和XHTML解析器 2013-09-11 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq ...
- OS X 10.10 Yosemite Beta能够下载了
刚刚启动迅雷.蹦出一消息.点击后出现-- watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdmlzdGE5OTk5OQ==/font/5a6L5L2T/fon ...
- 某公司ASP.NET应聘上机试题
ASP.NET笔试题是ASP.NET程序员面试必须经历的,一般会叫你填两个表 1个是你的详细信息表 1个是面试题答卷 两个都要注意反正面是否都有内容不要遗漏,如果考你机试一般也有两种,就是程序连接数据 ...
- Tomcat 用户配置
如果你没有改变任何配置文件,请检查文件conf / tomcat用户.xml在你安装.该文件必须包含凭证让你使用这个应用. 例如,添加一个用户名为tomcat manager gui角色s3cret密 ...
- JDK 安装以及环境变量的配置(Windows)
首先下载对应版本的jdk ,然后安装,这里使用的是jdk 1.7的安装的 这个时候,JDK 已经安装完成,打开cmd 输入 java -version 就可以查看到,当前JDK 的版本如图 JDK 安 ...