C程数组学习教程.pptx
《C程数组学习教程.pptx》由会员分享,可在线阅读,更多相关《C程数组学习教程.pptx(75页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、引例:引例:输入输入3030个学生的成绩,求高于平均成绩的人数。个学生的成绩,求高于平均成绩的人数。main()int i,x;float sum=0,ave;for(i=1;i=30;i+)scanf(%d,&x);sum+=x;ave=sum/30;printf(aver=%fn,ave);将30个人的成绩逐一与ave比较,大于ave计数。(循环处理)如何保存30个成绩?第1页/共75页第第5 5章章 数组数组5.1 一维数组5.2 二维数组5.3 字符型数据5.4 算法举例第3页/共75页l定义:批量数据的集合l特点:所有数据类型相同l要素:数组名、下标第4页/共75页5.1 5.1 一
2、维数组一维数组一、一维数组的定义和引用l定义:类型说明符类型说明符 数组名数组名数组长度数组长度 如:int a10,x5*3;0 01 12 23 34 45 56 67 78 89 9aa0 a2 a4 a6 a8 a1 a3 a5 a7 a9int n;scanf(“%d”,&n);int an;l引用方式:数组名引用方式:数组名下标下标l注意:命名规则、数组长度、下标、空间分配整型表达式整型表达式整数或整型常量表达式第5页/共75页5.1 5.1 一维数组一维数组二、一维数组元素的赋值1.初始化:定义同时赋值;2.数组元素的输入:scanf函数输入;3.数组元素的赋值:使用赋值运算;4
3、.产生随机数:使用随机函数random。第6页/共75页5.1 5.1 一维数组一维数组1、初始化l在定义数组时,对全部数组元素赋初值。int a5=6,2,7,-3,5;l只给一部分元素赋值。int a5=6,2;int a5=6,2,0,0,0;l定义数组时使数组a中全部元素自动赋以0值。static int a5;int a5=0;l对全部数组元素赋初值时,可以不指定数组长度。int a3=1,2,3;int a =1,2,3;等价等价等价第7页/共75页随机函数random的用法:l 格式:random(x)random(x)l 说明:(1)(1)x x为为整型整型 (2)(2)头文件
4、头文件stdlib.hstdlib.h (3)(3)产生产生0,x)0,x)区间上的整数。区间上的整数。注意:若需每次运行时产生不同的随机整数,用randomize()函数,所在头文件:time.h产生产生 a,ba,b区间上任意整数的方法:区间上任意整数的方法:random(b-a+1)+arandom(b-a+1)+a2、随机函数random和rand第8页/共75页rand函数的用法:格式:rand()说明:(1)头文件stdlib.h。(2)该函数产生0到整型最大值之间的一个随机整数。产生a,b区间上任意整数的方法:rand()%(b-a+1)+asrand函数(头文件time.h)s
5、rand(time(0)用当前时间作为随机数的初始种子第9页/共75页main()int i,a5=1,2,3,4,5;for(i=0;i5;i+)printf(%5d,ai);printf(n);例5-1 数组元素的引用。int i,a5;for(i=0;i5;i+)scanf(%d,&ai);ai=i+1;ai=random(20);#include第10页/共75页例:用数组求Fibonacci数列前40项.main()int i;long f40=1,1;for(i=2;i40;i+)fi=fi-2+fi-1;for(i=0;i40;i+)if(i%5=0)printf(n);prin
6、tf(%12ld,fi);第11页/共75页例5-2 求10个学生成绩的最高分、最低分和平均分。#include stdio.hmain()int i,a10,min,max;float av,s;for(i=0;i=9;i+)scanf(%d,&ai);max=min=a0;s=a0;for(i=1;i10;i+)if(aimax)max=ai;s+=ai;av=s/10;printf(max=%d,min=%d,av=%.2f,max,min,av);运行输入:63 88 89 90 66 73 61 92 72 78 运行结果:max=92,min=61,av=77.20第12页/共75
7、页例5-3:求10个数的最小值及其位置,并与第1个数对调。(最小值唯一)分析:分析:l 用数组用数组a存放存放10个数据,个数据,int a10;l 用用k记录最小值的位置。记录最小值的位置。l 交换交换a0与与ak的值。的值。12-1437 276231-3665-2-31k=0 k=1k=6k=1k=1k=1k=1k=6k=6k=6a0a1a2a3a4a5a6a7a8a9第13页/共75页例5-3:求10个数的最小值及其位置,并与第1个数对调。(最小值唯一)main()int i,k,a10,t;for(i=0;i10;i+)scanf(%d,&ai);k=0;for(i=1;i10;i+
8、)if(aiak)k=i;if(k!=0)t=a0;a0=ak;ak=t;printf(min:%dn,a0);printf(“weizhi:%dn,k);4 6 8 9 0 12 3 45 1 5min:0weizhi:4第14页/共75页例5-45-4:产生10个40,100内的随机数,并用选择排序法按由小到大的顺序排序后输出。5 59 93 37 76 6k=0k=2533 39 95 57 76 6k=3k=1k=2593 35 59 97 76 63 35 56 67 79 9k=2k=3k=4967 思路:在ai和a9中找出最小的数,记录最小数所在的下标位置k,然后将最小数与ai交
9、换。第 i 轮:k=i;k=i;for(j=i+1;jN;j+)for(j=i+1;jaj)if(akaj)k=j;k=j;if(k!=i)if(k!=i)t=ai;ai=ak;ak=t;t=ai;ai=ak;ak=t;第第0轮轮第第1轮轮第第2轮轮第第3轮轮第15页/共75页#include stdlib.hmain()int i,j,k,t,a10;for(i=0;i10;i+)ai=rand()%61+40;printf(%5d,ai);printf(n);for(i=0;i9;i+)k=i;for(j=i+1;jaj)k=j;if(k!=i)t=ai;ai=ak;ak=t;for(i=
10、0;i10;i+)printf(%5d,ai);例5-4:产生10个40,100内的随机数,并用选择排序法按由小到大的顺序排序后输出。第16页/共75页例5-55-5:用顺序排序法对1010个数按升序排序。57362第第0轮轮53322756323765235765735675667第第1轮轮第第2轮轮第第3轮轮思路:假设ai最小,发现其后面的数比ai小,就将这两个数交换。第 i 轮:for(j=i+1;jn;j+)for(j=i+1;jn;j+)if(if(ajaiajai)t=ai;t=ai;ai=aj;ai=aj;aj=t;aj=t;第17页/共75页例5-55-5:用顺序排序法对101
11、0个数按升序排序。#include stdlib.hmain()int i,j,k,a10;for(i=0;i10;i+)ai=rand()%61+40;printf(%5d,ai);printf(n);for(i=0;i9;i+)for(j=i+1;j10;j+)if(ajai)k=ai;ai=aj;aj=k;for(i=0;i10;i+)printf(%5d,ai);第18页/共75页 main()int a =1,3,5,6,8,9,10,15,k,left,right,m,n=8;scanf(%d,&k);left=0;right=n-1;while(left=right)m=(lef
12、t+right)/2;if(k=am)printf(%d,m);break;else if(kright)printf(no found!);例5-6:用二分查找法判断一个数是否在一个有序数组中。第19页/共75页例:用randomrandom函数产生n n个10,5010,50之间的随机整数,并按逆序重放在数组中。(n50)(n50)#includetime.h#includestdlib.h main()int a50,t,n,i;scanf(%d,&n);srand(time(0);for(i=0;in;i+)ai=rand()%41+10;printf(%5d,ai);printf(n
13、);逆序存放a数组元素 第20页/共75页1 12 23 34 45 56 67 78 89 90 0a数组处理过程:数组处理过程:0 09 98 87 76 65 54 43 32 21 1a0a1a2a3a4a5a6a7a8a9a0a1a2a3a4a5a6a7a8a9算法:算法:for(i=0;in/2;i+)t=ai;ai=an-1-i;an-1-i=t;第21页/共75页例:用randomrandom函数产生n n个10,5010,50之间的随机整数,并按逆序重放在数组中。(n50)(n50)#include “time.h”#include stdlib.h main()int a5
14、0,t,n,i;scanf(%d,&n);srand(time(0);for(i=0;in;i+)ai=rand()%41+10;printf(%5d,ai);printf(n);for(i=0;in/2;i+)t=ai;ai=an-1-i;an-1-i=t;for(i=0;in;i+)printf(%5d,ai);第22页/共75页 main()int i,j,t,a8=1,2,3,4,5,6,7,8;for(i=0;i=7;i+)printf(%3d,ai);printf(n);for(i=1;i=3;i+)t=a0;for(j=1;j=7;j+)aj-1=aj;a7=t;for(i=0;
15、i=7;i+)printf(%3d,ai);数据前移例例:一个数组有一个数组有8 8个元素:个元素:1 2 3 4 5 6 7 81 2 3 4 5 6 7 8不增加数组,通过移动元素将数组变化为不增加数组,通过移动元素将数组变化为4 5 6 7 8 1 2 34 5 6 7 8 1 2 3第23页/共75页例:用随机函数产生2020个10,9010,90之间的整数,找出其中素数,并按由小到大顺序排列。#include “stdlib.h”main()int a20,b20,i,j,k=0,t;for(i=0;i20;i+)ai=rand()%81+10;printf(%5d,ai);prin
16、tf(n);for(i=0;i20;i+)for(j=2;j=ai-1;j+)if(ai%j=0)break;if(j=ai)bk=ai;k+;将数组 a 中的素数找出放到数组b中第24页/共75页例:用随机函数产生2020个10,9010,90之间的整数,找出其中素数,并按由小到大顺序排列。for(i=0;ik-1;i+)for(j=i+1;jk;j+)if(bjbi)t=bi;bi=bj;bj=t;for(i=0;ik;i+)printf(%5d,bi);用顺序排序法使 b 数组升序第25页/共75页例:输入n个数到数组中(n最多为100),选出所有大于n个数的平均值的那些数。1.int
17、a100;2.输入n个数据并求这n个数据的累加和。3.求n个数据的平均值。4.选出所有大于平均值的那些数。第26页/共75页 main()int a100,s=0,av,i,n;scanf(%d,&n);for(i=0;in;i+)scanf(%d,&ai);s=s+ai;av=s/n;printf(av=%dn,av);for(i=0;iav)printf(%6d,ai);printf(n);例:输入n个数到数组中(n最多为100),选出所有大于n个数的平均值的那些数。第27页/共75页l定义类型说明符 数组名 常量表达式 常量表达式 例:int a23l说明u二维数组看作是特殊的一维数组。
18、a0 a00 a01 a02 a1 a10 a11 a12 u二维数组在内存中按行存放。5.2 二维数组 a00 a02 a11 a01 a10 a12 第28页/共75页5.2 二维数组l引用形式 数组名下标下标l举例:若有说明:若有说明:若有说明:若有说明:int a34int a34 则对则对则对则对a a数组元素非法引用的是数组元素非法引用的是数组元素非法引用的是数组元素非法引用的是 A.a03*1 B.a23 C.a1+10 D.a04D第29页/共75页5.2 二维数组l初始化u对全部元素赋初值 int a33=1,2,3,4,5,6,7,8,9;int a33=1,2,3,4,5
19、,6,7,8,9;int a 3=1,2,3,4,5,6,7,8,9;u对部分元素赋初值 int a33=1,2,5,6;等价第30页/共75页例:打印如下方阵 1 0 0 0 0 0 1 3 1 0 0 0 1 4 3 3 1 0 1 4 4 3 3 3 1 4 4 4 3 3 1 2 1 4 4 3 1 2 2 2 1 4 1 2 2 2 2 2 1主对角线:i=j副对角线:i+j=6ij&i+jj&i+j6ij&i+j6i6第31页/共75页 main()int a77,i,j;for(i=0;i7;i+)for(j=0;j7;j+)if(ij&i+j6)aij=0;if(i6)aij=
20、4;if(ij&i+jj&i+j6)aij=2;if(i=j|i+j=6)aij=1;for(i=0;i7;i+)for(j=0;j7;j+)printf(%3d,aij);printf(n);例:打印如下方阵第32页/共75页3311111114 6 45 10 10 56 15 20 15 6例5-8:打印杨辉三角形,输出形式如下所示。算法分析:算法分析:u 定义定义a77u ai0=1;aii=1;u aij=ai-1j-1+ai-1j211 11 2 11 3 3 11 4 6 4 11 5 10 10 5 11 6 15 20 15 6 1111111第33页/共75页例5-8:打印
21、杨辉三角形。main()int a77,i,j;for(i=0;i7;i+)ai0=1;aii=1;for(i=2;i7;i+)for(j=1;ji;j+)aij=ai-1j+ai-1j-1;for(i=0;i7;i+)for(j=0;j=i;j+)printf(%6d,aij);printf(n);填充杨辉三角形中的 1 数字填充除1以外的其它数字第34页/共75页例:打印杨辉三角形。1 1 1 1 2 1 1 3 3 1 1 4 6 4 11 5 10 10 5 1for(i=0;i6;i+)for(j=1;j6-i;j+)printf();for(j=0;j=i;j+)printf(%6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数组 学习 教程
限制150内