C语言第六章_数组_2
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if (a[i]>a[i+1])
{temp=a[i];a[i]=a[i+1];a[i+1]=temp;14}
#include <stdio.h> main(){ /*对10个整数排序*/
int a[10]={9, 8, 5, 4, 2, 0, 6, 1, 3, 7}, i, k; for (k=1;k<10;k++)
f0=1 (n=0m) ain(){
f1=1
(n=1) int i; long f [20]={1,1};
0 f1n=fn-1f+[0f]n-2 (nfo2r) (i=2;i<20;i++)
1
1
f[1]
2
2
f[2]
f[i]=f[i-2]+f[i-1];
3
3
f[3]
for(i=0;i<20;i++)
4
数组是具有一定顺序的若干同数据类型变 量的集合体。数组要有名称,要有规模。
一.一维数组定义
类型说明符 数组名[常量];
例如:int a[6]; a = = &a[0]
a
内存映象:编译时分配一片连续的内 存空间,数组名为该空间的首地址— —常量地址。
0 a[0]
1 a[1]
2 a[2]
3 a[3]
1
4 a[4]
4
一行一行地存储所有的数组 5
a[0][1] a[0][2] a[0][3] a[1][0] a[1][1]
元素,数组名为该空间的首 6 a[1][2]
地址——地址常量。
7 a[1][3]
8
a[2][0]
例 int a[3] [4a][0;][0] a[0][1] a[0][2]
9 a[2][1] 10 a[2][2] 11 a[2][3]
for (i=0;i<=10-1-k;j++) if (a[i>a[i+1]) { temp=a[i]; a[i]=a[i+1]; a[i+1]=temp;}
for (i=0;i<10;i++)
15
printf(“%3d”,a[i]);
例7: 100名同学被学校食堂邀请来为某一种食品 打分,分数分为从1到10的10个等级(1分最低分, 10表示最高分),统计调查结果并输出。
for (i=0;i<=9;i++) printf(“%d,”, a[i]);
for (i=0,j=9;i<j;i++,j--)
{ t=a[i];a[i]=a[j];a[j]= t;} 8 for (i=0;i<=9;i++) printf(“%d,”,
例3:用数组求Fibon#aicnccil数ud列e 前<s2t0d个io数.h>
数据类型 数组名[整型常量1][整型常量 2];
例: float f[3][4] ; int myarray[5]
2[9.];二维数组元素变量的引用:
数组名[行表达式][列表达式]
下标从0开始
19
下标从0开始
二. 二维数组元素的存放顺序 0 a[0][0] a
1
内存映象:编译时为二维数 2 组分配一片连续的内存空间, 3
例 int a1[][3]={12,2,3,4,54};
0
0
0
a[aa0[[0]10[]10][[0]0]]aa[[0a0[]220][[1]1[]1] ]aa[[00a3]3[][0[22]][]2aa][[11a44]][[[100]]][0aa][[115]a5][[[111]]][a1[a]1[01]6[a]2[[21] ]][2] 21
#include <stdio.h>
main(){
int a[10],i,k;
for (i=0;i<=9;i++) scanf(“%d”,&a[i]);
k=0;
for (i=1;i<=9;i++)
if (a[i]>a[k]) k=i;
for (i=0;i<=9;i++) printf(“%d\t”,a [i]);
count[n]++
1
3
16
c[1] c[2] c
main(){
initnt cocuonutn[t2[61]1=]={i0n}t; n ;intchair,nc; {w0hf}io;lre((ic=h1=;geit<c=h1a0r0(h;;)i)+!+=) ‘{?n’=c)shc-a‘nfA(’“;%d”,&n);
5 a[5]
二.一维数组的引用
数组必须先定义,后使用
只能逐个引用数组元素变量,不能一次引用整个数组
例: int a[10]; ×
printf(“%d”,a ); 数组元素变量表示形式:
数组名[下标]
其中:下标可以是整型常量或整型表达式
例:a[0]=a[5]+a[7]-a[2*3];/* 常量做下标*
a[0][3]
a[1][0] a[1][1] a[1][2]a与&a[0][0]相20
a[1][]
同
三. 二维数组的初始化
①分行初始化
②按元素排列顺序初始化
第一维全长部部度初分省始初略化始初化始化
例例例initnaitn[a2t[]a][[[323]]]=[=3{{]{{=11{,}2{,1{3,4}2,}5{,}4{},45;},6}}; };
for (i=0;i<=i8<-=16-1;;
i++)
if (a[i]>a[i+1])
{temp=a[i];a[i]=a[i+1];a[i+1]=temp;}
第一次循环后,a[7]是最大的。
第2趟排序(k=2) : for (i=0i;<=i8<-=15-;2;
在第k 趟排序比较时: i<=8-1-k i++)
a[7] 30 3907 97 97 97 97 97 97 初第 第 第 第 第 第 第 始一 二 三 四 五 六 七 值趟 趟 趟 趟 趟 趟 趟
N=8 k=1 k=2 k=3 k=4 k=5 k=6 k=7 13
8个数组元素排序:
第1趟排序(k=1):
从第1个元素开始两两比较,最大的数被放在最后
四.一维数组的应用
例1:读入10个学生的成绩存于数组,求平均成绩。
92 85 68 75 54 88 98 45 61 79
#include <stdio.h>
a 92 0 85 1
void main(void ){
68 2
int a[10],k,sum=0 ;
75 3
for(k=0;k<10;k++)
54 4
scanf(“%d”,&a[k]);
88 5 98 6
for(k=0;k<10;k++)
45 7
sum+=a[k];
61 8
printf(“Average is %f \n”,sum/1709.960);
}
例2:读入10个整数存于数组并输出;将数组中 的元素颠倒顺序排放后再输出。
分析:
ai
12
排序结束。
a[0] 49 4398 38 38 38 3183 13 13
a[1] 38 3489 49 49 4193 132387 27 2277 a[2] 65 65 65 6153 124379 23708 3300 30 a[3] 97 9776 7163 162357 243790 3308 38 38 a[4] 76 791673 172367 236705 3409 49 49 49 a[5] 13 12937 237706 3605 65 65 65 65 a[6] 27 23970 3706 76 76 76 76 76
/
2
a[i]=a[i]+1;
/* 表达式做
例1:读程序。
main(){
int i,a[10]; 定义数组
for (i=0;i<=9;i++) a[i]=i;
for (i=9; i>=0;i--)
引用数组
printf(“%d ”,a[i]);
}
9 8 7 6 5 4 3 2 1 03
例2:读程序,写结果。 main(){
1
2
0
4
0
0
a[a0[]1a0[[0]10[]0][]a0[]a0[2]0a[[1]00[]1][]a1[]a0[3]0a[02][[0]2]][a2[a]14[]1[a40][[1]0]][a0[a]15[]1[a5]1部[[]11分]][a1[初a1]6[]始1[0a]2化[[]12]][2]
例 int a[2][3]={1,2,4}第; 一维长全度部省初略始初化始化 例 int a[2][3]={1,2,3,4,5,6};
printf(“max=%d,locate=%d\n”,a[k],11k);
例6:用起泡法对8个整数按从小到大的顺序排序. 排序过程:(对n个整数排序) 1)比较第一个数与第二个数,把较大的数放后 面;然后比较第二个数与第三个数,仍把较大 的数放后面;依次类推,直至第n-1个数和第n 个数比较完为止——结果最大的数被安置在最 后的位置上,这就完成了第一趟冒泡排序。 2)对前n-1个数进行第二趟冒泡排序,结果使 次大的数被安置在第n-1个元素位置。 3)重复上述过程,共经过n-1趟冒泡排序后,
fjo-r-)(i=0;i<n/2;i++)
1=]{{t=;tt;=t}a=}[ai[]i;];a[ai[]i=]a=[an[-ji]-;1]a;[ja][n-i-
7
#include <stdio.h> main(){
int i,j,a[10],t;
for (i=0;i<=9;i++) scanf(“%d”,&a [i]);
1. 输入:用for循pr环in输tf入(“10输个入整1数0个存整于数数:\n");
组
for(i=0;i<10;i++) scanf(“%d”,
2. 处理: &a[i]);
(a) 先令max=mimna=xa=[m0i]n=a[0];
(b) 依次用a[i]f和orm(aix=,1m;ini比<1较0;(循i+环+))
例: int a[5]={2,4,6,8,10,12}; (×)
(2) 初始数据少于数组元素个数时,多出的数
组元素赋零值。
例1: int a[5] = {2,4,6};
例2: int a[10] = { }; 区别于: i
nt a[10];
(3) 对[ ]中的数字可以省,数组元素个数由5
初始值个数决定。
int i,a[10],k=0; for (i=0;i<10;i++) a[i]=i; for (i=1;i<4;i++)
k+=a[i]+i; printf(“%d ”,k); }
4
三. 一维数组初始
化定义数组的同时,给数组元素变量赋初值。
[注]:
例 : int a[5]={2 ,
4(,1)6,初8,始1数0}据;多于数组规模时语法错误。
分析:
(1) 需要10个计数器用于统计: int count[11]= {0};
(2) 循环100次(i从1~100), 第i次读一个整数n作
为第i个同学打的分数,之后将该分数对应下标的
数31组331331元333素33加3313。3333
1
33
1
33
1
33
n=1 count[1]++ n=2 count[2]++ n=10 count[10]++
1. a[0] 与a[9]交换,
i i
a[1] 交换 a[8],依此类推。 i
i
92 85 68 75 54
79 61 45 98 88
2. 如何控制循环? 只需循环到一半.
j 88 54
j j
98 45
75 68
或fo:r n(=i1=00;,j=n-1;i<j;i++,
j j
61 79
85 92
思考问题?
• 在数学中我们常常会用到矩阵 Amn,它的 结构如下:
1 3 5
a11 a12 a13
A33 4 5 2
A33 a21
a22
a23
7 8 6
a31 a32 a33
• 怎样用一种数据结构来表示矩阵呢? 18
一. 二维数组的定义和引用
1. 定义方式:
行数 元素个数=列行数数*列数
5
f[4]
{
5
f[5]
if(i%4==0) printf("\n
……...
");
printf("%12ld" ,f
19
f[19] f[19] [i]);
9
}
例4:读10个#i整nc数lud存e 入<s数tdi组o.,h>找出其中最大值和 最小值。 void main(void){
步骤:
int a[10],max,min,i ;
{
若max<a[{i],i令fi(fmm(aamxxi=<naa>[[aii[]]i)])
max=a[i]; min=a[i];
若min>a[}i],令min=a[i]
}
printf(“最大值为: %d\n”,max);
3.
输出:max和mpirnintf(“最小值为:
10
%d\n”,min);
例5:读入10个整数给数组,找出10个数中最大值 所在的位置。
count[n]++;
}
ffoorr ((cih==1‘;Ai’<=;10c;h<i=+‘+)Z’;ch++) pripnrtifn(t“f(%“c:%d:%d\n%”d\,n”ch,, ic,oucnotu[ncth-’ A’[i]]));; }问: 如何实现读入一串大写字符,以字符’?’17
结束, 统计每个字母出现的次数。