第六章数组
前面我们使用了基本数据类型(如整型、实型、字符型
数组是C语言提供的一种构造类型数据,即由基本数据类型按
定规则组成。
数组是有序数据的集合。数组中的每一个元素都属于同
个数据类型。用一个统一的数组名和下标来唯一地确定数
组中的元素
1.一维数组的定义和引用
只能包含常量和符号常量。
表示数组包含的元素个数
*一维数组的定义方式:
既数组的长度,从0开始
类型说明符数组名[常量表达式]
如: int char
遵循标识符
float等
定名规则
如:inta[10];
定义了一个一维数组a,它包含了10个具有整型数据类型
的元素。即a[O],a[l22],a[3],a4]a5],a6]a[7],a[8l[9
一维数组的引用:
C语言规定只能逐个引用数组元素,不能一次引用整个数
组。而且必须先定义数组,然后才能使用数组元素。
数组元素的引用形式:数组名[下标]
下标可以是表达式
例61 maino
Rint i, a[101
for(i=0;<=9;i++)a[il=i;
for(i=9;i>=0;-
printf("%od", ali];
秦一维数组的初始化:
所谓初始化就是在定义数组的同时,给数组元素赋初始值。
方法见下例:
☆inta[0={0.,1,2,3,4,56,7,8,9};
aa[]a[2]a3a[4]a5]a6a[7]a8]a9」
o int b[10J-{0,1,2,3,4};(后5个元素赋值0。)
b0b[l]b2]b|3]b4|b|5]b|6]b7]b8]b9
Cint c[10={0.0.0,0,0,0,0.0,0,0};
static int c[10]
c0c[l]c[2]c3]c4]c5]c6c7]c8]c9
d[o d[l d2 d3 d4
O int d={1,2,3,4,5};
可以不指定数组长度,系
统根据后面花括号里的数
据决定数组的长度。
豪一维数组程序举例:
例62给数组a中存入10个整数,在保证数据不丢失的情况下,
将数组中的最大数存入a0位置。
输入:10个整数
计算:求最大数
输出:a数组
main(
将数组中的最大数存入a]位置
fint ij, k, x, a[101;
for(i=0;i<=9;i++)
a[0] a[l] a[2]a[3] a[4]a[5] al6 a[[8 a[91
scanf(“%d”,&ai);
printf("n”)
for(i=1;i<=9;i++){
if(ai>alONi
t=aO; a0=ai: a i=t;
for(i=0;i<=9;i++)
t=aO
printf("%d " a[iD): printf
“n”);}
例63:请将数组a0.9中的元素循环右移k位,要求只用一个元素大小
的附加空间
maino
a[O]a[l]a2]a[3]a[4]a[5]a[6a[7a[8]a[9
lint i,j, k, x, a[10];
for(i=0;i<=9;i++)
canf(od”’,a[j);
a0]a[1a2]a3]a[4]a{5]a6]a[7]a[8la9
scanf(%d”,&k);
printf("n”);
for (i=l; i<=k; i ++)
x=a9];
aoa[1a[2]a[3]a[4]a5la6]a[7a[8]a[9
for (j=8; j>=0; j--)
a[i+1=all;
a0]=x;}
for(i=0;i<=9;i++
aa[l]a[2]a3a[4]a[5]a6]a[7]a[8]a[9」
printf(ood”,al[i]);
printf(n”);}
64输入100个字符,统计各个字母的出现的个数(不区分大小写)
# include“ stdio.h
maino
It i=l; int num[26=0J
char c
while(i<=100)
C=getchar
if(c>='A&&c<=Z) num[c-A++
else if(c>='a&&c<=z)num[c-a1++,
for(i-A; i<=Z; i++)
printf(-/oc: %/dn,, i, num[i-A]);
用数组解排序问题
问题:给定一组数(整数或者实数),如何进行从小到大或从
大到小的排序?
如:已知原始数据:[4733618272112547
最后排序结果:1125334747617282
a]a[l]a[2]a[3]a4]a[5]a6]a[7]
例6.5用选择法对若干个数排序(由小到大)