- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第几个月 小兔子对数 中兔子对数 老兔子对数 兔子总数
1
1
0
0
1
2
0
1
0
1
3
1
0
1
2
4
1
1
1
3
5
2
1
2
5
6
3
2
3
8
7
5
3
5
13
┆
┆
┆
┆
┆
21
FF12
1 1
Fn Fn1 Fn2
(n 1) (n 2) (n 3)
费波那西(Fibonacci)数列
解题思路:
建立一个数组,将数列中第1个数放在数组第1个元素中, 数列第2个数放在数组第2个元素中,…
24
例6.3 假如有n个人,各人年龄不同,希望按年龄将他们从小 到大排列。
解题思路:
排序的规律有两种:一种是“升序”,从小到大;另 一种是“降序”,从大到小
把题目抽象为:“对n个数按升序排序”
采用起泡法排序:先将第1个数和第2个数比较,如果
第2个数比第1个数小,将两数交换,交换后大的放到
第2个位置,将第2个数和第3个数比较,如果第2个数
a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9] 0123456789
17
6.2.3 一维数组的初始化
对数组元素的赋值既可以通过赋值语句来实现,也可以在定义 数组时同时给予初值,这就称为数组的初始化。 (1) 定义数组时对全部数组元素赋初值 int a[10]={0,1,2,3,4,5,6,7,8,9}; a[0]=0,a[1]=1,a[2]=2;a[3]=3;a[4]=4;a[5]=5,a[6]=6, a[7]=7,a[8]=8,a[9]=9。
a[5]
99 99
28
for(i=0;i<2;i++) if (a[i]>a[i+1]) { t=a[i];a[i]=a[i+1];a[i+1]=t; }
a[0]
4 22
a[1]
2 40
a[2]
0 04
a[3]
5 55
a[4]
8 88
a[5]
9 99
29
for(i=0;i<1;i++) if (a[i]>a[i+1]) { t=a[i];a[i]=a[i+1];a[i+1]=t; }
for(i=0;i<20;i++)
{
if(i%5==0) printf("\n"); //每行输出5个
printf("%12d",f[i]);
}
printf("\n");
23
例5.8程序在顺序求出并输出各个数后,不能保存这些 数据,如果要单独输出第10个数,是比较困难的。
本例用数组处理时,把每个数据都保存在各数组元素中, 如果要单独输出第10个数,是很容易的,直接输出f[9] 即可。
比第三个数小,将两数交换,交换后大的放到第3个
位置,。。。。执行一次循环后,最大的书被沉到最
后面。
25
for(i=0;i<5;i++) if (a[i]>a[i+1]) { t=a[i];a[i]=a[i+1];a[i+1]=t; }
a[0] 9 8 8 8 8 8
a[1]
8 9 55 5 5
a[2] 5 5 9 4 4 4
数组 一维、二维数组
1
上课要求
课前预习 将手机调到静音 认真做笔记 及时完成作业
2
学习目标
了解数组的概念 掌握定义和引用一维数组的方法 掌握定义和引用二维数组的方法
3
学习内容
数组 定义和引用一维数组 定义和引用一维数组
4
6.1 数组的概念
➢ 前几章使用的变量都属于基本类型,例如整型int、 字符型char、浮点型(float、double)数据, 这些都是简单的数据类型。
for(j=0;j<5;j++) for(i=0;i<5-j;i++) if (a[i]>a[i+1]) { ……}
31
#include<stdio.h> void main() {int a[10]; int i,j,t; printf("input 10 numbers :\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); printf("\n"); for( j=0;j<9;j++)
for(i=0;i<9-j;i++) if(a[i]>a[i+1]) {t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf("the sorted numbers :\n"); for(i=0;i<10;i++) printf("%d ",a[i]);
32
printf("\n");
6.2.1 定义一维数组 6.2.2 引用一维数组的元素 6.2.3 一维数组的初始化 6.2.4 一维数组程序举例
8
6.2.1 定义一维数组
一维数组是最简单的数组。
数组元素只有1个下标—一维数组,s[5],相当于“线”。 数组元素有2个下标—二维数组,s[1][2],相当于 “面”。 数组元素有3个下标—三维数组,s[2][4][3],相当于 “体”。
………
9
6.2.1 定义一维数组
定义数组的方法与定义变量的方法类似。 int a;int a[5]; 不同的是数组一次定义一批有关联的变量; 在定义数组时需要指定这批变量的类型、数组名称,数组中
包含变量的个数。 如 int a[10];
10
6.2.1 定义一维数组
➢ 定义一维数组的方式为: 类型符 数组名[常量表达式];
448 2 2
a[3]
222 8 0
a[4]
000 0 8
a[5]
999 9 9
27
for(i=0;i<3;i++) if (a[i]>a[i+1]) { t=a[i];a[i]=a[i+1];a[i+1]=t; }
a[0]
54 44
a[1]
45 22
a[2]
22 50
a[3]
00 05
a[4]
88 88
6
➢ 数组是一组有序数据的集合。数组中各数据的排 列是有一定规律的,下标代表数据在数组中的序 号,如s[5]。
➢ 用一个数组名和下标唯一确定数组中的元素。 ➢ 数组中的每一个元素都属于同一个数据类型。 ➢ 用循环对数组中的元素进行操作,可以有效地处
理大批量的数据,大大提高效率。
7
6.2 定义和引用一维数组
13
6.2.2 引用一维数组的元素
➢ 引用数组元素的表示形式为: 数组名[下标] a[0]=a[5]+a[2+1]-a[2*3] a[7/3],a[19%3] int n=5,a[10]; a[n]=20;
14
注意定义数组与引用数组元素的区别:
形式上:int a[10];定义数组长度为10; t=a[6];引用a数组中序号为6的元素;
注意:如果数组的长度与定义初值的个数不相同,则数组长度 不能省略。
如果数组a的长度为10,使用int a[ ]={1,2,3,4,5};数组只赋了5个初值,系统认为 数组长度为5。 应该写为a[10] ]={1,2,3,4,5};
20
6.2.4 一维数组程序举例
例6.2 用数组来处理求Fibonacci数列问题。Fibonacci 数列问题的含义见例P138(兔子生小兔子)。
int a[3][4]={{1},{5},{9}};等价于 int a[3][4]={{1,0,0,0},{5,0,0,0},{9,0,0,0}};
int a[3][4]={{1},{5,6}};等价于 int a[3][4]={{1},{5,6},{0}};等价于 int a[3][4]={{1,0,0,0},{5,6,0,0},{0,0,0,0}};
➢ 对于有些数据,只用简单的数据类型是不够的, 难以反映出数据的特点,也难以有效地进行处理。
5
➢ 30名学生成绩,需要用30个变量 ➢ 100名学生成绩,需要用多少个变量?
一组具有同一属性的数据
➢ 用s1,s2,s3,……,s30表示成绩,能否体现内在联系?
➢ C语言用方括号中的数字表示下标,如用s[15]表示, s为数组名,15为数组中元素的个数。
int n; scanf(“%d”,&n); int a[n];
12
6.2.2 引用一维数组的元素
➢ 必须先定义数组,才能引用数组中的元素 ➢ t=a[3],将a数组中序号为3的元素的值赋给变量t。 ➢ 只能逐个引用数组元素而不能一次引用整个数组中的
全部元素。 b=a[2];c=a[5]; printf(“%d,%d,%d,%d,%d,%d\n”,a);
18
(2) 可以只给一部分元素赋值,未被赋值的根据数组 类型自动赋值。 int a[10]={0,1,2,3,4}; int a[10]={0,1,2,3,4,0,0,0,0,0};
19
(3)在对全部数组元素赋初值时,如果数据个数确定,则可以在 定义数组时不指定数组长度,系统根据数据的数量确定数组的 长度。 int a[5]={1,2,3,4,5}; 可写为 int a[ ]={1,2,3,4,5};