C语言数组讲解学习教案_第1页
C语言数组讲解学习教案_第2页
C语言数组讲解学习教案_第3页
C语言数组讲解学习教案_第4页
C语言数组讲解学习教案_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、会计学1C语言数组讲解语言数组讲解第一页,编辑于星期六:四点 二十三分。/17v 若要统计高于平均分的人数,则无法实现。若要统计高于平均分的人数,则无法实现。markmark是是一个简单变量,存放的是最后一个学生的成绩。一个简单变量,存放的是最后一个学生的成绩。 用已有知识解决方法:用已有知识解决方法:1. 1.再重复输入成绩,带来两个问题:再重复输入成绩,带来两个问题: (1 1)输入数据的工作量成倍增加;)输入数据的工作量成倍增加; (2 2)若本次输入的成绩与上次不同,则统计的结果不)若本次输入的成绩与上次不同,则统计的结果不正确。正确。2. 2.使用使用100100个变量个变量mark

2、1mark1,mark2, , mark99, mark2, , mark99, mark100mark100。第1页/共87页第二页,编辑于星期六:四点 二十三分。/17第2页/共87页第三页,编辑于星期六:四点 二十三分。第第4章章 数组和指针数组和指针第3页/共87页第四页,编辑于星期六:四点 二十三分。16 一维数组一维数组 34 二维数组二维数组 234 三维数组三维数组 int a6; int b34; int c234;第4页/共87页第五页,编辑于星期六:四点 二十三分。/17a00145a1a2a3a4a523a数组名表示内存首地址,是地址常量编译时系统分配连续内存内存字节数

3、内存字节数=数组维数数组维数*sizeof(元素数据类型元素数据类型)数组a在内存占24字节(6*4字节)第5页/共87页第六页,编辑于星期六:四点 二十三分。第6页/共87页第七页,编辑于星期六:四点 二十三分。/17第7页/共87页第八页,编辑于星期六:四点 二十三分。/17第8页/共87页第九页,编辑于星期六:四点 二十三分。/17第9页/共87页第十页,编辑于星期六:四点 二十三分。4.1.2 4.1.2 一维数组元素的引用一维数组元素的引用与操作与操作main()int i,a5; for(i=0;i5;i+) ai=i; /用循环结构直接对数组赋初值用循环结构直接对数组赋初值 fo

4、r(i=0;i5;i+) printf(%d,ai); printf(n); 运行结果为:运行结果为:0,1,2,3,4, 第10页/共87页第十一页,编辑于星期六:四点 二十三分。第11页/共87页第十二页,编辑于星期六:四点 二十三分。main() int i,a10; for(i=0;i10;i+) printf(第第%d个数据个数据: ,i+1), scanf(%d,&ai); for(i=0;i=0;i-) printf(%4d,ai); printf(n);第12页/共87页第十三页,编辑于星期六:四点 二十三分。main()int i,a10;for(i=1;i=10;i

5、+)ai=0;printf(%d ,ai);第13页/共87页第十四页,编辑于星期六:四点 二十三分。第14页/共87页第十五页,编辑于星期六:四点 二十三分。/171. 1. 比较法排序比较法排序第15页/共87页第十六页,编辑于星期六:四点 二十三分。第16页/共87页第十七页,编辑于星期六:四点 二十三分。/17第17页/共87页第十八页,编辑于星期六:四点 二十三分。/17用冒泡法排序将10个整数按从小到大的次序排列出来。2. 2. 冒泡法排序冒泡法排序第18页/共87页第十九页,编辑于星期六:四点 二十三分。/17#include #define N 10 /数据的个数数据的个数 m

6、ain()int aN=5,12,29,47,9,18,13,50,38,2;int i,j,k,t;for(i=0;iN-1;i+) for(j=0;jaj+1)t=aj;aj=aj+1; aj+1=t;printf(n最后的排序结果最后的排序结果:n);for(i=0;iN;i+) printf(%5d, ai); 2. 2. 冒泡法排序冒泡法排序第19页/共87页第二十页,编辑于星期六:四点 二十三分。向一个有序数组中插入一个数字,插入后不改变原有顺序向一个有序数组中插入一个数字,插入后不改变原有顺序a01a12a23a34a46a57a68a79a810a90a01a12a23a34a

7、45a56a67a78a89a910插入数字前插入数字后第20页/共87页第二十一页,编辑于星期六:四点 二十三分。/17方法1:找到插入点后再移位。从前向后循环,从第1个元素开始依次将数组元素与要插入的数x比较,当xai时,将aia8依次向后移动,这时ai就可以存放x了。for(i=0;i9;i+) /将要插入的数与每个元素比较,找插入的位置将要插入的数与每个元素比较,找插入的位置 if(x=i;j-) aj+1=aj; ai=x; / 插入数据后退出整个循环插入数据后退出整个循环 break; 数组应用II -插入第21页/共87页第二十二页,编辑于星期六:四点 二十三分。/17方法2:边

8、找插入点边移位。从后向前循环,直接从最后1个元素开始,将其与要插入的数x比较,如果xx,因此x要赋值给ai+1。/从最后从最后1个元素开始,依次将要插入的数与每个元素比较个元素开始,依次将要插入的数与每个元素比较for(i=8;i=0;i-) /如果要插入的数比元素值小,则该元素直接向后移位如果要插入的数比元素值小,则该元素直接向后移位 if(xai) ai+1=ai; else break; /表示找到插入点,退出循环表示找到插入点,退出循环ai+1=x; / 插入数据插入数据数组应用数组应用II -II -插入插入第22页/共87页第二十三页,编辑于星期六:四点 二十三分。main() i

9、nt i,j,del=0, int a10=1,2,3,4,5,6,7,8,9,10,x=5; for(i=0;i10;i+)printf(%4d,ai); putch(n); for(i=0;i10-del;i+) /删除后数组的容量减小一删除后数组的容量减小一if(x=ai) for(j=i;j10;j+) aj=aj+1; i-; /还原到删除位置,以处理连续删除还原到删除位置,以处理连续删除 del+; for(i=0;i10-del;i+)printf(%4d,ai);删除前:删除前: 1 2 3 4 5 5 7 8 9 101 2 3 4 5 5 7 8 9 10删除后:删除后:

10、1 2 3 4 7 8 9 101 2 3 4 7 8 9 10第23页/共87页第二十四页,编辑于星期六:四点 二十三分。kabaab22数组应用数组应用IVIV二分查找二分查找( (检索检索) )第24页/共87页第二十五页,编辑于星期六:四点 二十三分。第25页/共87页第二十六页,编辑于星期六:四点 二十三分。/17列数行数int a23;逻辑结构存储结构第26页/共87页第二十七页,编辑于星期六:四点 二十三分。/17 二维数组的定义和初始化int a23=1,2,3,4,5,6; int a23=1,2,3,4,5,6; int a3=1,2,3,4,5,6; 第27页/共87页第

11、二十八页,编辑于星期六:四点 二十三分。/17int d34=1,2,3,4,5,6;int d4=1,2,3,4,5,6;int d34=1,0,0,0,2,3,0,0,4,5,6;int d4=1,0,0,0,2,3,0,0,4,5,6;int e34=0,0,0,1,0,0,2,3,0,4,5,6;int e4=0,0,0,1,0,0,2,3,0,4,5,6;int e34=0,0,0,1,0,0,2,3,0,4,5,6;第28页/共87页第二十九页,编辑于星期六:四点 二十三分。/17n Real computer memory has only one dimension, i.e.

12、 each location is identified with only one component of address.n 因此,二维数组元素可用它相对数组首元素00位置的偏移量来表示(称为存储映射关系storage mapping )。对二维数组元素的操作除了用二重循环外,还可以用一重循环实现。nIn C, or any other language supporting arrays with dimension sizes greater than one, two-dimensional arrays simulate the effect of using two compo

13、nents of address. To do this, the array is mapped into consecutive memory with row 0s values first, then row ones values, etc.n You can think of this as a set of one dimensional arrays holding the column values as a single value in the rows values.第29页/共87页第三十页,编辑于星期六:四点 二十三分。/17第30页/共87页第三十一页,编辑于星期

14、六:四点 二十三分。122112111二维数组的应用举例二维数组的应用举例矩阵矩阵第31页/共87页第三十二页,编辑于星期六:四点 二十三分。二维数组的应用举例二维数组的应用举例矩阵(续矩阵(续1)第32页/共87页第三十三页,编辑于星期六:四点 二十三分。二维数组的应用举例二维数组的应用举例矩阵(续矩阵(续2)第33页/共87页第三十四页,编辑于星期六:四点 二十三分。【例】显示二维数组b的各元素#include main() int b4=0,1,0,0,1,0,0,0,2,6,4,i,j; for(i=0;isizeof(b)/sizeof(b0);i+) for(j=0;jsizeof

15、(b0)/sizeof(int);j+) printf(%5d,bij); printf(n); 二维数组的应用举例二维数组的应用举例sizeof的使用的使用第34页/共87页第三十五页,编辑于星期六:四点 二十三分。第35页/共87页第三十六页,编辑于星期六:四点 二十三分。if(maxi=minj) printf(a%d%d=%d是鞍点是鞍点n, i,j,aij);第36页/共87页第三十七页,编辑于星期六:四点 二十三分。b000 b001 b002 b003b010 b011 b012 b013b020 b021 b022 b023 以下标 0、1为变量 i,下标0、1、2为变量j,下

16、标0、1、2、3为变量k,就可以用三重循环结构对数组的每一个元素进行处理了。第37页/共87页第三十八页,编辑于星期六:四点 二十三分。第38页/共87页第三十九页,编辑于星期六:四点 二十三分。第39页/共87页第四十页,编辑于星期六:四点 二十三分。H e l l o 0 0 0 0 0字符串结束符字符串结束符其余元素自动赋值为其余元素自动赋值为 0第40页/共87页第四十一页,编辑于星期六:四点 二十三分。s0s1s2How are you00Good morning0Good bye00000第41页/共87页第四十二页,编辑于星期六:四点 二十三分。第42页/共87页第四十三页,编辑

17、于星期六:四点 二十三分。4.3.1 字符数组的初始化字符数组的初始化第43页/共87页第四十四页,编辑于星期六:四点 二十三分。 char a12; gets(a);char s313;int i; for(i=0;i3;i+) gets(si);第44页/共87页第四十五页,编辑于星期六:四点 二十三分。第45页/共87页第四十六页,编辑于星期六:四点 二十三分。char a12=“How are you”;puts(a); char s25=Boy,Girl; puts(s0); puts(s1);char a12=How are you; printf(%s,a); char s313

18、=How are you,Good morning,Good bye; printf(%sn,s0); printf(%sn,s1); printf(%sn,s2); char s12=How are you;int i; for(i=0;i13;i+) printf(%c,si);第46页/共87页第四十七页,编辑于星期六:四点 二十三分。第47页/共87页第四十八页,编辑于星期六:四点 二十三分。第48页/共87页第四十九页,编辑于星期六:四点 二十三分。第49页/共87页第五十页,编辑于星期六:四点 二十三分。改为改为 s30=How do you do0s30=How do you d

19、o0 运行结果也是运行结果也是1313第50页/共87页第五十一页,编辑于星期六:四点 二十三分。第51页/共87页第五十二页,编辑于星期六:四点 二十三分。第52页/共87页第五十三页,编辑于星期六:四点 二十三分。常用的字符串处理函数常用的字符串处理函数-字符串连接字符串连接 strcat(字符数组(字符数组1,字符数组,字符数组2) 第53页/共87页第五十四页,编辑于星期六:四点 二十三分。 strcat(c, How do you do); printf(%sn,c); 第54页/共87页第五十五页,编辑于星期六:四点 二十三分。strcpy(t,a);strcpy(a,b);str

20、cpy(b,t);n将字符数组将字符数组2拷贝到字符数组拷贝到字符数组1中。中。复制后的结果放在字符数组中,字符数组不变。函数值是字符数组1的地址。 n字符数组1必须写成数组名形式,如s。n字符数组2可以是字符数组名,也可以是一个字符串常量。n说明:(1)字符数组1定义时其长度要大于等于字符数组2的长度。(2)复制时连同字串中的0一起被复制到字串中。(3)若字符数组中原存有字符,则原有字符不再存在。n 字串间的赋值不能用字串间的赋值不能用 a=b;n 只能用只能用 strcpy(a,b)strcpy(字符数组(字符数组1,字符数组,字符数组2) 第55页/共87页第五十六页,编辑于星期六:四点

21、 二十三分。第56页/共87页第五十七页,编辑于星期六:四点 二十三分。strcmp(a,b)0 a字串字串b字串字串(字符串比大小,按(字符串比大小,按ASCII码比较,先比第码比较,先比第1个字符。)个字符。)第57页/共87页第五十八页,编辑于星期六:四点 二十三分。在中的运行结果在中的运行结果: : 100 -1在在VC+VC+中的运行结果中的运行结果: : 1 -1第58页/共87页第五十九页,编辑于星期六:四点 二十三分。字符串字符串 strcmp(a,b)=0整数整数 a=b实数实数 fabs(a-b)1e-6第59页/共87页第六十页,编辑于星期六:四点 二十三分。第60页/共

22、87页第六十一页,编辑于星期六:四点 二十三分。strlwr(字符串)(字符串)将字符串中的大写字母转换成小写字母strupr(字符串)(字符串) 将字符串中的小写字母转换成大写字母 例:大小写转换函数应用main() char s100; gets(s); strupr(s); puts(s); strlwr(s); puts(s);第61页/共87页第六十二页,编辑于星期六:四点 二十三分。第62页/共87页第六十三页,编辑于星期六:四点 二十三分。第63页/共87页第六十四页,编辑于星期六:四点 二十三分。printf(%st,ai);第64页/共87页第六十五页,编辑于星期六:四点 二

23、十三分。int a6;int *p=a; &a0 &a1 &a2 &a3 &a4 &a5a+0 a+1 a+2 a+3 a+4 a+5p+0 p+1 p+2 p+3 p+4 p+5 a0 a1 a2 a3 a4 a5实际上,下标表达式实际上,下标表达式ai就是按照指针表达式就是按照指针表达式*(a+i)定义的定义的。第65页/共87页第六十六页,编辑于星期六:四点 二十三分。可替换为*(a+i)或*(p+i)第66页/共87页第六十七页,编辑于星期六:四点 二十三分。 (* p)+表示表示p所指向的元素值加所指向的元素值加1。第67页/共87页第

24、六十八页,编辑于星期六:四点 二十三分。第68页/共87页第六十九页,编辑于星期六:四点 二十三分。第69页/共87页第七十页,编辑于星期六:四点 二十三分。运行结果:运行结果: 9,8,7,6,5,4,3,2,1, 其中其中p p中存放的是地址,中存放的是地址,p-a1010表示表示p p单元中的值减去单元中的值减去数组数组a a的首地址所得的单元数不超过的首地址所得的单元数不超过1010。注意: 这种方法也造成了指针p的移动第70页/共87页第七十一页,编辑于星期六:四点 二十三分。第71页/共87页第七十二页,编辑于星期六:四点 二十三分。printf(%d ,*(p+i);第72页/共

25、87页第七十三页,编辑于星期六:四点 二十三分。可替换成可替换成&pi或或 a+i或或 p+i或或 p+利用利用p+p+和地址偏移量和地址偏移量p-ap-a实现数组元素的赋值实现数组元素的赋值for(p=a;p-a5;p+) printf(a%d= ,p-a); scanf(%d,p);第73页/共87页第七十四页,编辑于星期六:四点 二十三分。第74页/共87页第七十五页,编辑于星期六:四点 二十三分。第75页/共87页第七十六页,编辑于星期六:四点 二十三分。第一个循环后第一个循环后p p已经指向数组已经指向数组x x的末尾。在第二个的末尾。在第二个forfor循环开始后,发生错误,应该将在第二个循环开始后,发生错误,应该将在第二个forfor循环语句前加一句:循环语句前加一句:p=x;第76页/共87页第七十七页,编辑于星期六:四点 二十三分。p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论