内容正文:
总复习方案·第六章数组
第六章数
组
大纲要求
1.掌握一维数组和多维数组的定义、初始化和引用。
2.掌握字符串与字符数组。
3.掌握数组元素的移动、插入、复制和删除等基本算法。
4.掌握选择排序法、冒泡排序法、插入排序法等排序方法。
5.掌握顺序查找和折半查找的基本算法。
6.掌握字符串与整数、字符串的子串等算法。
第一节数组的定义、初始化和引用
知识体系
C务⊙
数组的定义:一维和二维数组的定义
数组元素的引用:一维和二维数组元素的引用
数组的基本概念
初始化:一维和二维数组的初始化
数组元素输入输出:一维和二维数组元素的输入输出
知识梳理
C⑤
一、数组的定义
数组是指一组同类型数据组成的序列,用一个统一的数组名标识这一组数据,用下标来指
示数组中元素的序号,同一数组中的所有元素必须属于同一数据类型。
1.数组定义:分为一维数组定义、二维数组定义及字符数组的定义
2.inta[10],b[2][20];一维数组的数组名是:
,二维数组的数组名是
3.char x3][80];其定义的数组名是:
,数据类型是
,是
维数组。
二、数组元素的引用
l.一维数组元素的表示形式为:数组名[下标]。若定义:inta[20];其数组元素下标的下
限为
,上标的上限为
。其有
个存储单元。
2.二维数组元素的表示形式为:数组名[行下标][列下标]。若有定义:double x[3][5];
则X数组中行下标的上限为
,列下标的上限为
3.下标表示了元素在数组中的顺序号。其中的下标只能为整型常量或整型表达式。下
标从
开始计算。在C语言中,二维数组的元素在内存中的存放顺序是
一个二维数组可以看成若干个
数组。
·125·
单招零距离·计算机专业综合·下册
三、数组的初始化
1.一维数组的初始化。若定义inta[10]={1,2,3,4,5};则表示只给下标
到
赋的初值分别是
,其余的下标赋的初值全为
。若定义为:intx[]={1,2,3,
4,5};则共有
个存储单元。
2.二维数组的初始化。若定义inta[3][4幻={1,2,3,4,5,6,7,8,9,10,11,12};也可以写
成:inta[门[4]={1,2,3,4,5,6,7,8,9,10,11,12};这就是说:对二维数组初始化时对第1维长
度
:但对第2维长度
3.一维数组和二维数组初始化均可以对部分元素赋初值。若定义:ita[3][4]={1},
{2},{3}};则a[0][0]=
a[1][0]=
;a[2][0]=
;其它的元素的初
值均为
4.二维数组初始化时,可以通过列数来计算行数。若定义了intb[][3]=(1,2,3,4,5,6,
7);则b数组第一维的长度是
四、数组元素输入输出
1.逐个元素的输入输出。
2.用循环语句依次输入输出各个数组元素。
典例精析
【例1】若定义:inta[3][4]={{1,2},{0},{4,6,8,10};则初始化后a[1][2]的值为
,a[2][1]得到的值为
【分析】此题涉及到对二维数组空间的存储方式。它是按行存放的。所在要对应每一个
数据。
【答案】06
【例2】写出下列程序的运行结果。
#include<stdio.h
int main()
{inta[3][3]={1},{2},{3}};
intb[3][3]=(1,2,3};
printf("%d",a[1][o]+b[o][1]):
printf("%d
",a[o][1]+b[1][o]);
}
【分析】本题考察二维数组的赋值。重点理解二维数组元素的行、列之关系。
【答案】程序运行结果为:40
【例4】利用数组求Fibonacci数列的前20项,要求每行输出5项。
【分析】Fibonacci数列是这样一组无穷数列:前两个数是1、1,从第三个数起,每个数均
是前两个数之和。
【答案】
#include <stdio.h
int main()
int i;
·126·
总复习方案·第六章数组
int fib[20]=(1,1};
for(i=2;i<20;i++)
fib[i]=fib[i-2]+fibCi-1];
for(i=0;i<20;i++)
{if((i+1)%5==0)
printf("
");
printf("%8d",fib[i]);
巩固练习
©⊙
1.写出下列程序的运行结果:
#include <stdio.h
int main()
inti,a[5];
for(i=0;i<5;)
a[i十+]=2*i+1;
for(--i;i=0;i--)
printf("%d\t",ai]);
}
2.写出下列程序的运行结果:
#include<stdio.h
int main()
{inta[5][5]={0},i,j
for(i=1;i<5;i++)
for(G=1;j<5;j++)
a[i][G]=(i/j)*(j/i);
for(i=1;i<5;i++)
for(j=1;j<i;j+)
printf("%2d",ai);
printf("
");
}
3.写出下列程序的运行结果:
#include<stdio.h
int main()
{inti,j,a[4][4];
for(i=0;i<4;i++)
for(G=0;j<4;j++)
·127·
单招零距离·计算机专业综合·下册
a[]Gj]=1+i-j;
for(i=0:i<4;i++)
{forj=0;j<4;j++)
if(a)
printf("%3d",ai]);
putchar(
');
}
4.用随机函数产生[0,99]的数据赋值给数组inta[10].
#include <stdio.h
#include
#include
int main()
int i,a10];
for(i=0;i<10;i++)
a[i]=
for(i=0;i<10;i++)
printf("%4d",ai]);
}
5.顺序给数组a中各元素赋给下标位置值,并逆序输出各元素的值。
#include <stdio.h
int main()
int i,a[10];
/***米米*米米*BEGIN米****米米/
拓展练习
1.下面程序执行后的输出结果是
include <stdio.h
int main()
{inta[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;
·128·
总复习方案·第六章数组
for(i=1;i<3:i++)
for (j=0;j<i;j+)
s+aCi]];
printf("%d",s);
2.下面程序执行后的输出结果是
include <stdio.h
int main()
{int aa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}};
int i,s=0;
for(i=0:i<4;i++)
s+-aa[i][1];
printf("%d",s);
}
3.以下程序的输出结果是
#include <stdio.h>
int main()
{intb[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=0;
for(i=0:i<3;i++)
for(j=i;j<=i;j++)
t=t+bli]b]];
printf("%d
",t);
}
4.下列程序的功能是输入N个实数,然后依次输出前1个实数和、前2个实数和、·、前
N个实数和。填写程序中缺少的语句。
#include <stdio.h
#define N 10
int main()
float f[N],x=0.0;int i;
for(i=0;i<N;i++)
scanf("%f",&fi]);
for(i=1;i<=N;i+++)
printf("sum of NO %2d-%f
",i,x);
}
5.请编程实现:给数组a的10个元素赋奇数值即{1,3,5,7,…,19},并逆序输出元素值。
#include <stdio.h
int main()
int i,a[10];
·129·
单招零距离·计算机专业综合·下册
技能实践
C
1.程序填空题:下列程序运行之后输出结果是:1123581321……。
试填空:
include <stdio.h
int main()
{
int i,j
a[0]=a[1]=1;
printf("%d\t%d\t",a[o],a[1]);
for(i=2;i<=15;i++)
{a[i]=
printf("%d\t",ai]);}
2.程序改错题:先从键盘输人一个3行3列矩阵的各个元素的值,然后输出主对角线元素
之和。
#include <stdio.h
int main()
{
/*米并并米米关*米*米FOUND米米米米米米米*米米米
int a[3]3],sum;
int i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j+)
/*关米0米关关菜米类*FOUND米并*米米米米***/
scanf("%d,",a[]);
for(i=0;i<3;i++)
/关关米米米米关关关关关FOUND米关¥米米米米¥¥*关/
sum十=ai][3-i];
printf("sum=%d
",sum);
·130·
总复习方案·第六章数组
3.程序设计题:在一个二维数组(inta[5][5]:)中形成并按下列形式输出矩阵各元素的值
(不得用scanf函数输入数据)
10000
21000
32100
43210
54321
#include <stdio.h>
int main()
{inta[5][5];
/*关米米米米关关**并BEGIN黄米米光关关米***米
第二节
数组的极值、统计、求和、逆置
知识体系
Y⊙
极值:是指求出数组元素中的最大值、最小值等值
统计:是指按指定元素的值的统计元素的个数
数组的基本算法
求和:是指按指定的要求求和及平均值
逆置:是指数组元素的数据首尾对调
知识梳理
⊙Y
一、数组元素中的最大值和最小值
最大值和最小值的求解方法:采用穷举法,用第一个元素与数组中(一维数组或二维数组)
的各元素进行逐一比较,找出满足条件的元素即可。
二、数组元素的统计
数组元素的统计,是指按指定的要求来统计元素的个数。通常使用a[x]=a[x]+1;或写
成a[x]十+;语句。其中x一定要与统计的数有一定的联系。
三、数组元素求和、求平均值
数组元素的求和:是指按指定的要求求出元素的和及平均值。注意:求和的初值应为0。
·131·第六章 数 组
第一节 数组的定义、初始化和引用
【知识梳理】
一、数组定义
2.a b
3.x 字符型 二
二、数组元素的引用
1.0 19 20
2.2 4
3.0 按行存放 一维
三、数组初始化
1.0 4 1-5 0 5
2.可以不指定 不能省略
3.1 2 3 0
4.3
【巩固练习】
1.9 7 5 3 1
2.1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
3.1
2 1
3 2 1
4 3 2 1
4.(1)stdlib.h
(2)time.h
(3)srand((unsigned)time(NULL))
(4)rand()%100
5.for(i=0;i<10;i++)
a[i]=i;
for(i=9;i>=0;i--)
printf("%d",a[i]);
或
for(i=0;i<10;i++)
a[i]=i;
for(i=0;i<10;i++)
printf("%d",a[9-i]);
【拓展练习】
1.18
2.19
3.3
4.x=x+f[i-1]
5.for(i=0;i<10;)
a[i++]=2∗i+1;
for(i=0;i<=9;i++)
printf("%d",a[9-i]);
【技能实践】
1.inta[16] a[i-1]+a[i-2]
2.sum 改为sum=0
scanf("%d,",a[i][j])改为scanf("%d,",&a
[i][j]);
sum+=a[i][3-i];改为sum+=a[i][i]
3.inti,j,t=0;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(i>=j)a[i][j]=i-j+1;
elsea[i][j]=0;
for(i=0;i<5;i++)
{ for(j=0;j<5;j++)
printf("%d\t",a[i][j]);
printf("
");
}
第二节 数组的极值、统计、求和、逆置
【巩固练习】
1.56 99 77 45 67
average=68
2.max=56min=33
注意:是求半个数组的最大值,求后半个数组的最
小值.
3.p=172p=38p=54
4.012
012
012
5.inta[7]=0,i,x;
srand((unsigned)time(NULL));
for(i=1;i<=1000;i++)
{ x=rand()%6+1;
a[x]++;
}
for(i=1;i<=6;i++)
printf(“%d面出现的次数为%d
”,i,a
[i]);
22
单招零距离计算机专业综合下册