1、1第第第第第第6 6 6 6 6 6章章章章章章 数数数数数数 组组组组组组2023-2-1222023-2-123l一个人一个人N门课的成绩怎样存储和处理?门课的成绩怎样存储和处理?l一个班一个班N门课的成绩怎样存储和处理?门课的成绩怎样存储和处理?.2023-2-124数据类型数据类型 数组名数组名常量表达式常量表达式;2023-2-1252023-2-126score0score1score2score3score491.534.567.572.084.0低地址低地址高地址高地址score数组数组2023-2-1272023-2-128 下标从下标从0开始(下界为开始(下界为0),数组的
2、最大下标),数组的最大下标(上界)是数组长度减(上界)是数组长度减1。例如:例如:int a10;scanf(%d,&a10);/*下标越界下标越界*/C编译系统不做越界检查,如果引用的数组元素编译系统不做越界检查,如果引用的数组元素超出数组范围会破坏其他变量的值。超出数组范围会破坏其他变量的值。2023-2-129 是是引用引用数组元素数组元素时,时,根据数组的根据数组的和和数,计算出数,计算出该元素的实际地址,该元素的实际地址,取出该地址的取出该地址的进行操作。进行操作。如引用如引用 score2:(1)计算计算 2000+2*4=2008(2)取出取出2008的内容的内容2000H200
3、4H2008H200CH218CHscore0score1score2score3score491.534.567.572.084.02023-2-1210初始化:在定义数组时给数组元素赋初值。初始化:在定义数组时给数组元素赋初值。1在定义数组时,对全部数组元素赋初值在定义数组时,对全部数组元素赋初值 例如:例如:int a5=0,1,2,3,4;此时可以省略数组长度,例如:此时可以省略数组长度,例如:int a=0,1,2,3,4;2在定义数组时,对部分数组元素赋初值在定义数组时,对部分数组元素赋初值 例如:例如:int a5=1,2,3;系统为其余元素赋系统为其余元素赋 0。3当初值的个数
4、多于数组元素的个数时,编译出错当初值的个数多于数组元素的个数时,编译出错 例如:例如:int a5=0,1,2,3,4,5;2023-2-1211【例例6.16.1】将将1010个人的成绩输入计算机后按逆序显示。个人的成绩输入计算机后按逆序显示。#define N 10main()int i;float scoreN;for(i=0;i=0;i-)printf(%6.1f,scorei);运行情况如下:运行情况如下:67 74 89 92 34 67 83 95 73 78 78.0 73.0 95.0 83.0 67.0 34.0 92.0 89.0 74.0 67.02023-2-1212
5、l求最大求最大/小值采用打擂台的方法。小值采用打擂台的方法。l定义一维数组定义一维数组a存放被比较的数。存放被比较的数。l定义变量定义变量max:最大值,:最大值,min:最小值,:最小值,k:最大值下标:最大值下标,j:最小值下标:最小值下标。l各数依次与擂主进行比较,各数依次与擂主进行比较,若若aimax 则则:max=ai;k=i;否则判断否则判断:若若aimin 则则:min=ai;j=i;l当所有的数都比较完之后,将当所有的数都比较完之后,将aj=max;k=min;l输出输出a数组。数组。2023-2-1213程序运行情况如下:程序运行情况如下:5 7 2 3 1 5 1 2 3
6、72023-2-1214第一趟排序情况如下:第一趟排序情况如下:3 7 5 6 8 0第一次第一次 3和和7比较,不交换比较,不交换 3 7 5 6 8 0第二次第二次 7和和5比较,交换比较,交换 3 5 7 6 8 0第三次第三次 7和和6比较,交换比较,交换 3 5 6 7 8 0第四次第四次 7和和8比较,不交换比较,不交换 3 5 6 7 8 0第五次第五次 8和和0比较,交换比较,交换 3 5 6 7 0 8在第一趟排序中,在第一趟排序中,6个数比较了个数比较了5次,把次,把6个数中个数中的最大数的最大数8排在最后。排在最后。2023-2-12152023-2-1216 冒泡法排序
7、冒泡法排序for(i=0;iN;i+)输入输入ai for(j=1;jN;j+)for(i=0;iai+1 T F ai与与ai+1交换交换输出输出a0aN-12023-2-1217/*控制比较的趟数控制比较的趟数*/*两两比较的次数两两比较的次数*/程序运行情况如下:程序运行情况如下:3 7 5 6 8 0 0 3 5 6 7 82023-2-12182023-2-1219图6.3 选择法排序for(i=0;iN;i+)输入ai for(j=0;jN-1;j+)for(i=j+1;iai T F aj与ai交换 输出a0aN-12023-2-1220for(j=0;jN-1;j+)/*确定基
8、准位置确定基准位置*/for(i=j+1;iai)t=aj;aj=ai;ai=t;程序运行情况如下:96 78 65 86 40The sorted numbers:40 65 78 86 962023-2-1221数据类型数据类型 数组名常量表达式数组名常量表达式1常量表达式常量表达式2;的定义的定义2023-2-1222x00 x01x02x10 x11x12元素元素的的2023-2-1223x0是数组名,是元素是数组名,是元素x00的地址的地址x1是数组名,是数组名,是元素是元素x10的地址的地址二维数组可看作是一种特殊的一维数组二维数组可看作是一种特殊的一维数组2023-2-1224a
9、34=3;/*下标越界下标越界*/a1,2=1;/*应写成应写成 a12=1;*/例:例:int a34;a00=3;a01=a00+10;2023-2-1225例:例:int a23=1,2,3,4,5,6例例:int a23=1,2,3,4,5,6;例:例:int a23=1,4;初始化后结果:初始化后结果:1 0 0 4 0 02023-2-12262023-2-12272023-2-1228main()int a43,i,j,k;for(i=0;i4;i+)for(j=0;j3;j+)scanf(%d,&aij);for(i=0;i4;i+)printf(n);for(j=0;j3;j
10、+)printf(%dt,aij);printf(n);程序运行情况如下:程序运行情况如下:1 2 3 4 5 6 7 8 9 10 11 12 1 2 34 5 67 8 910 11 122023-2-1229 图图6.4 查找最大元素查找最大元素max=|a00|,row=0,colum=0 for(i=0;iN;i+)for(j=0;jmax T F max=|aij|row=i colum=j输出绝对值输出绝对值最大的元素及行列下标最大的元素及行列下标2023-2-1230程序运行情况如下:程序运行情况如下:34 56 12 67 23 12 67 43 98 54 65 45 66
11、 16 24 37 83 25 64 19 max=98,row=1,colum=32023-2-12316.3 字符数组与字符串字符数组与字符串6.3.1 6.3.1 基本概念基本概念不是字符串不是字符串2023-2-12322023-2-1233不是字符串不是字符串2023-2-12342023-2-1235b0b13思考:哪个数组存放的是字符串思考:哪个数组存放的是字符串2023-2-1236【例例6.8】对字符数组对字符数组c1赋赋 09,对字符,对字符数组数组c2赋赋 AZ,然后输出,然后输出c1和和c2数组中数组中的数据。的数据。可以为可以为数组元素数组元素赋值,也可以输入赋值,也
12、可以输入/输出输出元元素的值。素的值。2023-2-1237main()char c110,c226;int i;for(i=0;i10;i+)c1i=i+48;for(i=0;i26;i+)c2i=i+A;for(i=0;i10;i+)printf(%c,c1i);printf(n);for(i=0;i0)printf(s1s2);else printf(s1=0&si=A&si=a&si=z)lett+;else oth+;for(i=0;i10;i+)printf(%d:%d个个 ,i,digi);printf(nspace:%d letter:%d other:%dn,sp,lett,
13、oth);程序运行情况如下程序运行情况如下:China 1949.10.12004.10.10:4个 1:5个 2:2个 3:0个 4:1个 5:0个 6:0个 7:0个 8:0个 9:2个space:1 letter:5 other:52023-2-1252Illegalm onth.0Decen m ber 0将将1212个英文月份以字符串的形式存放到个英文月份以字符串的形式存放到month1315month1315中,一行存放一个字符串。中,一行存放一个字符串。2023-2-1253main()char month 15=Illegal month.,January,February,March,April,May,June,July,August,September,October,Novenber,Decenmber;int m;printf(nInput month:);scanf(%d,&m);printf(%d:%sn,m,(m12)?month0:monthm);2023-2-1254从键盘输入从键盘输入N N个国家名称存放到一个二维个国家名称存放到一个二维字符数组中,然后用字符数组中,然后用选择法选择法对这对这N N个字符串个字符串排序排序。:2023-2-1255选择法排序选择法排序2023-2-1256