C语言第六讲——数组

目录

一、数组的作用

1.数组的作用

2.数组的概念

二、怎样定义和引用一维数组

1. 一维数组的定义

2. 一维数组元素的引用

3.一维数组的初始化

4.利用数组进行数据查找

(一)顺序查找:在一批数据中查找某数基本思想:从前向后依次与所查数比较,看是否为所找之数。

(二)折半查找:在一批有序数据中查找某数(课后作业5.9)基本思想:选定这批数中居中间位置的一个数与所查数比较,看是否为所找之数,若不是,利用数据的有序性,可以决定所找的数是在选定数之前还是在之后,从而很快可以将查找范围缩小一半。以同样的方法在选定的区域中进行查找,每次都会将查找范围缩小一半,从而较快地找到目的数。

三、怎样定义和引用二维数组

1.二维数组的定义

2 二维数组元素的引用

3. 二维数组的初始化

4 二维数组的初始化

四、字符数组和字符串

1.字符数组的定义

2.字符数组的初始化

3.字符串的概念


一、数组的作用

1.数组的作用

数组的作用从键盘输入一百个学生的成绩,求总成绩。

当时由此引入了循环结构,用一个变量保存成绩,循环输入,求累加。

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

scanf(“%f",&a);

s=s+a;

如果这个程序不是要求和,而是要把这一百个学生的成绩按从高到低的顺序排列,则必须要把这一百个学生的成绩都同时记录下来,也就是说,必须要设定一百个变量。

在C语言中,提供了一种方便的同时设定多个变量的数据类型,这就是数组。前提是,这多个变量必须具有相同的数据类型,比如同为int、long、float、char等等。

数组有一维数组、二维数组和多维数组

2.数组的概念

数组:具有相同类型的数据组成的序列,是有序集合,

数组中的每一个数据称:(数组元素、数组分量、下标变量)

数组元素由其所在的位置序号(称数组元素的下标)来区分。一个数组元素就是一个相对独立的变量。

注意:数组的有序性,是指数组元素存储的有序性,而不是指数组元素值有序


二、怎样定义和引用一维数组

一维数组:只有一个下标的数组。

1. 一维数组的定义

定义格式:

类型标识符 数组名标识符[常量表达式];

说明:

(1)类型标识符:数组元素的数据类型。int、long、char、float、 double等。

(2)数组名标识符:与变量的命名规则相同。

(3)常量表达式:即数组长度(数组包含元素的个数),只能是一个整型常量表达式,可以是符号常量。

2. 一维数组元素的引用

数组元素的描述:由数组名加方括号中的下标组成

即:数组名[下标]

下标:数组元素在数组中的顺序号,可以是整型常量、整型变量下或整型表达式。

取值范围:从0到(元素个数-1)*C语言不对下标越界作语法检查。

注意:

只能引用数组元素而不能一次整体调用整个数组全部元素的值。

数组元素与一个简单变量的地位和作用相似。

“下标"可以是整型常量或整型表达式。

定义数组时用到的“数组名「常量表达式1和引用数组元素时用的“数组名[下标]”形式相同,但含义不同。

int a[10];

//前面有int,这是定义数组,指定数组包含10个元素

t=a[6];

//这里的a[6]表示引用a数组中序号为6的元素

3.一维数组的初始化

含义:在定义数组的同时,对数组所有元素指定初值。初始化是编译阶段完成,不占用运行时间。

注意:用赋值语句或输入语句只能给单个数组元素指定初值,是在运行时完成,占用运行时间。

初始化数组格式:

类型标识符数组名[元素个数]={<初值列表>}

说明:①<初值列表>是用逗号分隔的数组元素的初始值(常量)②)<初值列表>中数值的类型必须与<类型标识符>一致。

Eg:对数组初始化的几种情形:

①在定义数组时,对所有数组元素赋初值。例:int a[5]={8,8,2,4,123};

②在定义数组时,对部分数组元素赋初值。例:int a[5]={7,6};等价a[0]=7,a[1]=6;其它赋0;

③若要使一个数组所有元素为零,可以写成例:int a[5]={0};括号不能省略,此格式仅限于全零数组如有:int al5]={1};只有第一个元素为1,其他全是零

④对全部数组元素赋初值时,可省数组长度,系统自动确定

4.利用数组进行数据查找

(一)顺序查找:在一批数据中查找某数基本思想:从前向后依次与所查数比较,看是否为所找之数。

#define M 10

int main()

{int a[M]={-12,0,6,16,23,56,80,100,110,115},i,n;

printf("Input a number to be searched:");

scanf"%d",&n);

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

if(a[i]==n)break;

if(i<M)printf("%d",i);

else print("数据不存在”);

}

(二)折半查找:在一批有序数据中查找某数(课后作业5.9)基本思想:选定这批数中居中间位置的一个数与所查数比较,看是否为所找之数,若不是,利用数据的有序性,可以决定所找的数是在选定数之前还是在之后,从而很快可以将查找范围缩小一半。以同样的方法在选定的区域中进行查找,每次都会将查找范围缩小一半,从而较快地找到目的数。

例6.7假设在数组a中的数据是按由小到大顺序排列的:

-12 0 6 16 23 56 80 100 110 115

从键盘上输入一个数,判定该数是否在数组中,若在输出所在序号;若不在输出相应信息。

查找过程如下:

第一步:设low、mid和high三个变量,分别指示数列中的起始元素中间元素与最后一个元素位置,其初始值为low=0,high=9,mid=4,判断mid指示的数是否为所求,mid指示的数是23,不是要找的80,须继续进行查找。

第二步:确定新的查找区间。因为80大于23,所以查找范围可以缩小为23后面的数,新的查找区间为[5680100110 1151,low,mid,high分别指向新区间的开始、中间与最后一个数。实际上high不变,将low(mid=(low+high)/2)指向100,还不是要找的(low=mid+1)指向56,(mid=(low+high)/2)指向100,还不是要找的80,仍须继续查找。

第三步:上一步中,所找数80比mid指示的100小,可知新的查找区间为[5680],low不变,,mid与high的值作相应修改。mid指示的数为56,还要继续查找。

第四步:根据上一步的结果,80大于mid指示的数56,可确定新的查找区间为[801,此时,low与high都指向80,mid亦指向80,即找到了80,到此为止,查找过程完成。

若在查找过程中,出现low>high的情况,则说明,序列中没有该数亦结束查找过程。

#define M 10

输入:80  输出:The  index of 80 is 6

#include<stdio.h>
#define M 10

int main()

{int a[M]={-12,0,6,16,23,56,80,100,110,115};

int n,low,mid,high,found;

low=0;high=M-1; found=0;

printf("Input a number to be searched:");

scanf("%d",&n);

while(low<=high)

{mid=(low+high)/2;

if(n==a[mid]){found=1;break;)

else if(n>a [mid]) low=mid+1;

else high=mid-1;

}

if (found==1) printf("The index of %d is %d",n,mid);

else printf("There is not %d",n);

}

三、怎样定义和引用二维数组

1.二维数组的定义

若一个一维数组,它的每一个元素亦是类型相同的一维数组时,便构成二维数组。

数组的类型相同:是指数组大小、元素类型相同。

数组的维数体现为数组元素的下标个数,一维数组元素只有一个下标,二维数组元素有两个下标。

定义形式:

类型标识符 数组名[常量表达式1][常量表达式2];

例:

float b[4][3];

定义了一个4x3的数组b,即数组为4行3列,可存放12个实型数据。

2 二维数组元素的引用

二维数组元素的引用形式:

数组名[下标1][下标2]

下标1称第一维下标(或称行号),下标2称第二维下标(或称列号)。下标从0开始变化,其值分别小于数组定义中的常量表达式1与常量表达式2。

二维数组可被看作一种特殊的一维数组:它的元素又是一个一维数组。例如,float a[3][4];可以把a看作一个一维数组,它有3个元素:a[0],a[1],a[2],每个元素又是一个包含4个元素的一维数组:

a[0]- a[0][0] a[0][1] a[0][2]a[0][3]

a[1]-a[11[0] a[1][1] a[11[2] a[1][3]

a[2]-- a[2][0] a[2][1] a[2][2] a[2][3]

3. 二维数组的初始化

(1)分行给二维数组赋初值。((最清楚直观)

int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

(2)可以将所有数据写在一个花括号内,按数组元素在内存中的排列顺序对各元素赋初值。

int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

(3)可以对部分元素赋初值

int a[3][4]={{1},{5},{9}};

int a[3][4]={{1},{0,6},{0,0,11}};

4 二维数组的初始化

(1).分行给二维数组赋初值,每个花括号内的数据对应一行元素例:int a[3][2]={{0,1},{2,3},{4,5}};

(2).将所有初值写在一个花括号内,顺序给各元素赋值。例:int a[3][2]={0,1,2,3,4,5};

(3).只对部分元素赋值,没有初值对应的元素赋0值或空字符(字符数组)

例:int a[3][2]={{1,2},{4},{5,3}};例:int a[3][2]={1,2,4,5,3};

(4).给全部元素赋初值或分行初始化时,可不指定第一维大小,其大小系统可根据初值数目与列数(第二维)自动确定;但必须指定第二维的大小。

例:int a[][2]={0,1,2,3,4,5};

int a[][2]={{1,2},{},{0,5}};


四、字符数组和字符串

1.字符数组的定义

字符数组:其元素类型为字符类型的数组,其定义与前面介绍的数组定义相同。

例如:

char s[80];定义一个有80个元素的字符数组,每个元素相当于一个字符变量:

2.字符数组的初始化

方法:将字符常量以逗号分隔写在花括号中

①在定义字符数组时进行初始化char s[7]-{'p','r' ,'o','g','r','a','m'};

②在初始化时,可以指定一部分元素,其他元素补零char s[7]= {'p','r','o','g’};

③在对全部元素指定初值时,可省写数组长度char s[ ]= {'p','r','o','g''r','a','m'};

3.字符串的概念

字符串:若干有效字符的序列;可包含转义字符、ASCII码表中的字符:形式为:用双引号括起来的字符序列;

例:"Iam a student."  "Hello" 

字符串的结束标志\0'

注:C语言无字符串类型,字符串是存放在字符数组中的。

几点说明:

(1)字符串结束标志"0'仅用于判断字符串是否结束,输出字符串时不会输出。

(2)在对有确定大小的字符数组用字符串初始化时,数组长度应大于字符串长度。

如: char s[7]={“program”};是错误的.(3)在初始化一个一维字符数组时,可以省略花括号。如:

char s8="program

(4)不能直接将字符串赋值给字符数组。下面的操作是错误的。

s="program";

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jiao₍˄·͈༝·͈˄*₎◞ ̑̑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值