81数组.docx

上传人:b****7 文档编号:9997418 上传时间:2023-02-07 格式:DOCX 页数:10 大小:17.97KB
下载 相关 举报
81数组.docx_第1页
第1页 / 共10页
81数组.docx_第2页
第2页 / 共10页
81数组.docx_第3页
第3页 / 共10页
81数组.docx_第4页
第4页 / 共10页
81数组.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

81数组.docx

《81数组.docx》由会员分享,可在线阅读,更多相关《81数组.docx(10页珍藏版)》请在冰豆网上搜索。

81数组.docx

81数组

第七章数组(一维数组)

一、一维数组的定义

变量定义的格式:

类型说明符变量名;inta;

在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。

这些按序排列的同类数据元素的集合称为数组。

数组定义的格式:

类型说明符数组名[常量表达式];

例:

inta[10];

它表示定义了一个整型数组,数组名为a,此数组有10个元素。

说明:

1.类型说明符:

表明该数组所属类型,即数组元素的类型。

(例:

学生成绩都是0~100的整数,所以定义为整型)

2.数组名:

数组名的命名规则和变量名相同,遵循标识符命名规则。

3.[]:

下标运算符,可通过该运算符的个数反映出数组的维数

(必须为中括号,其他符号都是错误的)

4.常量表达式:

表示元素的个数,即数组长度。

例如:

指定a[5],表示a数组有5个元素。

注意:

下标是从0开始的,这5个元素是:

a[0],a[1],a[2],a[3],a[4]。

请特别注意,按上面的定义,不存在数组元素a[5]。

intj,a[5];

j=a[0];

5.常量表达式:

常量表达式中可以包括常量和符号常量,不能包含变量。

如下面的例子,是不行的。

例:

intn;

scanf(“%d\n”,&n);/*在程序中临时输入数组的大小*/

inta[‘A’];

二、一维数组元素的引用

1.引用方式:

数组名[下标]

2.说明:

下标为整型常量或整型表达式。

3.注意:

定义数组时用到的“数组名[常量表达式]”和引用数组元素时用到的“数组名[下标]”的区别:

inta[10];/*定义数组长度为10*/

t=a[6];/*引用a数组中序号为6的元素,此时6不代表数组长度*/

4.一维数组元素引用的规定:

(1)数组必须先定义后使用

(2)数组元素只能逐个被引用,不能一次引用整个数组

(3)对数组中所有元素逐个引用时,通常可使用循环结构

例:

#include

main()

{

inti,a[10];

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

a[i]=i;

for(i=9;i>=0;i--)

printf(“%d”,a[i]);

}

结果为:

9876543210

程序使a[0]~a[9]的值为0~9,然后按逆序输出。

三、一维数组的初始化

数组的初始化:

指定义数组时,对数组元素赋以初值

格式:

类型符数组名[表达式]={初值表};

说明:

1.在定义数组时给数组的全部元素赋初值

例:

inta[10]={0,1,2,3,4,5,6,7,8,9};

2.可以只给一部分元素赋初值

例:

inta[10]={0,1,2,3,4};/*定义a数组有10个元素,但花括号内只提供5个初值,这表示只给前面5个元素赋初值,后5个元素为0*/

3.给全部元素赋初值时,可不指定数组的长度

例:

inta[]={0,1,2,3,4,5,6,7,8,9};

四、一维数组程序举例

如果一对兔子每月能生一对小兔(一雄一雌),而每对小兔

在它出生后的第三个月里,又能开始生一对小兔,假定在

不发生死亡的情況下,由一对出生的小兔开始,10个月后会有

多少对兔子?

时间(月)

初生兔子(对)

成熟兔子(对)

兔子总数(对)

1

1

0

1

2

0

1

1

3

1

1

2

4

1

2

3

5

2

3

5

6

3

5

8

7

5

8

13

8

8

13

21

9

13

21

34

10

21

34

55

#include

main()

{

inti;

intf[10]={1,1};

for(i=2;i<10;i++)

f[i]=f[i-2]+f[i-1];

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

{

if(i%5==0)printf(“\n”);

printf(“%12d”,f[i]);

}

printf(“\n”);

}

五、一维数组经典算法

(一)冒泡法排序(每年的上机、笔试题都考)

用冒泡法对10个数排序

t

借助中间变量t来交换两个变量的值

8

7

4

6

3

2

9

1

5

0

7

4

6

3

2

8

1

5

0

9

4

6

3

2

7

1

5

0

8

9

4

3

2

6

1

5

0

7

8

9

3

2

4

1

5

0

6

7

8

9

…………

0

1

2

3

4

5

6

7

8

9

#include

#defineN10

voidsort(inta[],intn);

main()

{

inta[N],i;

printf(“请输入十个数:

\n”);

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

scanf(“%d”,&a[i]);

sort(a,10);

printf(“\n”);

printf(“排序以后的结果为:

\n”);

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

printf(“%d”,a[i]);

}

voidsort(inta[],intn)/*n表示元素个数*/

{

inti,j,t;/*主要是为了调换,所以t应该与数组元素的类型相一致*/

for(j=0;j

for(i=0;i

if(a[i]>a[i+1])

{

t=a[i];

a[i]=a[i+1];

a[i+1]=t;

}

}

排序过程:

1.比较第一个数与第二个数,若为逆序a[0]>a[1],则交换;然后比较第二个数与第三个数;以此类推,直至第n-1个数和第n个数比较为止——第一趟冒泡排序,结果最大的数被放在最后一个元素位置上。

2.对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在地n-1个元素位置上。

3.重复上述过程,共经过n-1趟冒泡排序后,排序结束。

(二)选择法排序(通常考程序填空题)

用选择法对6个数排序

22

44

11

55

33

66

#include

main()

{

inta[6],i,j,k,x;

printf(“请输入6个整数:

\n”);

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

scanf(“%d”,&a[i]);

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

{

k=i;

for(j=i+1;j<6;j++)

if(a[j]

if(i!

=k)

{

x=a[i];

a[i]=a[k];

a[k]=x;

}

}

printf(“排序后的结果为:

\n”);

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

printf(“%d”,a[i]);

}

排序过程:

1.首先通过n-1次比较,从n个数中找出最小的,将它与第一个数交换——第一趟选择排序,结果最小的数被安置在第一个元素位置上。

2.再通过n-2次比较,从剩余的n-1个数中找出关键字次小的记录,将它与第一个数交换——第二趟选择排序。

3.重复上述过程,共经过n-1趟排序后,排序结束。

(三)在一个有序的一维数组中插入一个元素,保证有序。

步骤:

1.定位,在数组中找到该元素应该在的位置

2.找到的位置,就是要插入元素应该在的位置,此时,应该将每个元素向后移动,将元素向后移动时,应该注意要从后向前,将每个元素依次向后移动

3.插入

#include

#defineN10

voidinsert(inta[],intk);/*声明函数,该函数是以数组名作参数,k表示要插入的值*/

main()

{

inta[N]={1,5,8,12,15,23,27,29},i,k;/*将数组初始化时只存入8个值,由于要插入元素,所以原数组内必须要有剩余空间*/

printf(“请输入要插入的元素:

\n”);

scanf(“%d”,&k);

insert(a,k);/*调用插入的函数,注意实参是数组名*/

for(i=0;a[i]!

=0;i++)

printf(“%d”,a[i]);

printf(“\n”);

}

voidinsert(inta[],intk)

{

inti,j;

for(i=0;a[i]!

=0;i++)/*定位,将i停在第一个大于k的位置上*/

if(a[i]>k)

break;

for(j=0;a[j]!

=0;j++)/*将j指到数组的最后,也就是第一个内容为0的元素上*/

for(;j>i;j--)

a[j]=a[j-1];/*将每个元素依次向后移动*/

a[i]=k;

}

(二)在一个数组中删除给定的元素

步骤:

1.地位,找到与要删除元素相同的地址

2.将其后的每个元素向前移动,将之覆盖

#include

#defineN10

voiddelete(inta[],intk);

main()

{

inta[N]={1,5,8,12,15,23,27,29},i,k;

printf(“请输入要删除的元素:

\n”);

scanf(“%d”,&k);

delete(a,k);

for(i=0;a[i]!

=0;i++)

printf(“%d”,a[i]);

printf(“\n”);

}

voiddelete(inta[],intk)

{

inti;

for(i=0;a[i]!

=0;i++)

if(a[i]==k)

break;

for(;a[i]!

=0;i++)

a[i]=a[i+1];

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1