




已阅读5页,还剩91页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,提出问题:,【例6-1】从键盘输入10个数,求平均值并输出所有大于平均值的数。采用以前的方法解决,存在以下问题:循环体中只用一个变量完成。计算出平均值后,因没有保存这10个数,无法完成比较。用十个变量完成。无法完成循环输入。另外如果数据增加到100个、1000个或更多时,定义如此多的变量不现实。,第六章数组,6.1一维数组6.3二维数组及多维数组6.5字符数组和字符串,3,学习目标,一维数组二维数组字符数组字符串,4,基本概念,数组是一种构造数据类型数组有序数据的集合,用数组名标识元素是数组的基本组成成份,它们是同一种数据类型,用数组名和下标确定,5,、一维数组的说明定义方式:数据类型数组名整型常量表达式;,合法标识符,例inta6;,数组名表示该数组所占的内存单元的首地址,是地址常量,编译时分配内存,并且是连续的内存字节数=数组元素个数*sizeof(元素数据类型),表示元素个数只能是常量下标从0开始,6.1一维数组,6,数组定义举例,例inti=15;intdatai;例intdata5;data5=10;例#defineN15intaN;,不能用变量定义数组元素个数,5超出了数组定义的范围,范围是04共5个整型数据,7,、一维数组的引用数组必须先定义,后使用只能逐个引用数组元素,不能一次引用整个数组数组元素表示形式:数组名下标表达式其中:下标可以是整型常量或整型表达式,8,数组使用举例,例a0=a3+a5+a2*4;例ai=ai-1+ai-2;例inta10;printf(%d,a);,9,数组元素的输入,inta6;scanf(“%d%d%d%d%d%d”,inti,a6;for(i=0;i6;i+)scanf(“%d”,10,数组元素的输出,inta6;printf(“%d%d%d%d%d%d”,a0,a1,a2,a3,a4,a5);,inti,a6;for(i=0;i6;i+)printf(“%5d”,ai);,?只想输出a1,a5的值printf(“%d,%d”,a1,a5);,11,特别注意,在C语言中,程序运行时系统并不自动检验数组下标是否越界。但是我们写程序时,一定要保证数组下标不能越界例如inta4;a0、a1、a2、a3是合法的,但是a4、a5也是可以引用的,只是它们的数据是多少我们不知道,12,【例6-1】从键盘输入10个数,求平均值并输出所有大于平均值的数,#includemain()inti,n=10;floata10,avg=0;printf(“Pleaseinput10data:n”);for(i=0;i10;i+)/*输入10个数*/scanf(“%d”,avg+=ai,13,avg=avg/10;printf(“平均值为:%fn”,avg);for(i=1;iavg)printf(“%f”,ai);n+;if(n%5=0)/*每行输出5个数*/printf(“n”);printf(“n);,14,、一维数组的初始化初始化方式:定义时赋初值说明:数组不初始化,其元素值为随机数部分数组元素赋初值,没有赋初值的元素为0当全部数组元素赋初值时,可不指定数组长度,例inta5=6,2,3;a0=6;a1=2;a2=3;a3=0;a4=0;,例inta=1,2,3,4,5,6;编译系统根据初值个数确定数组元素个数,例inta5=1,2,3,4,5;a0=1;a1=2;a2=3;a3=4;a4=5;,15,4、一维数组的应用举例,【例6-3】从键盘输入10个互不相同的整数并存放在一维数组中,找出值最大的数组元素,并输出最大值所在的元素下标,k=0;for(i=1;i10;i+)if(akai)k=i;,16,#includemain()inti,k;inta10=0;printf(“Pleaseinputdata:n”);for(i=0;i10;i+)scanf(“%d”,17,k=0;for(i=1;i10;i+)if(akai)k=i;printf(“max=%d,”,ak);printf(“k=%dn,k);,18,【例6-4】利用数组计算Fibonacci数列的前20个数,2,3,5,8,19,main()inti;intf20=1,1;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;i20;i+)printf(%8d,fi);if(i%5=0)printf(n);,11235813213455891442333776109871597258441816765,f0f1f2f3f4f5f6f7f8f9f10f11f12f13f14f15f16f17f18f19,20,【例6-5】从键盘上输入一个数x,在给定的数组a中查找x。如果找到了,输出相应的下标,否则,输出“NotFound”。,20,flag=0;for(i=0;i10;i+)if(ai=x)printf(Indexis%dn,i);flag=1;break;if(flag=0)printf(“NotFoundn”);,21,【例6-5】从键盘上输入一个数x,在给定的数组a中查找x。如果找到了,输出相应的下标,否则,输出“NotFound”。,main()inti,flag,x;inta10=22,19,36,80,98,12,20,55,-8,16;for(i=0;i10;i+)printf(“%d”,ai);printf(Enterx:n);scanf(%d,21,22,flag=0;for(i=0;i10;i+)if(ai=x)printf(Indexis%dn,i);flag=1;break;if(flag=0)printf(“NotFoundn”);,22,23,【例】读入10个整数,将数组中的元素逆序存放,分析当程序中读入任意10个数:8、-9、30、43、87、98、23、79、62、28时,28,62,79,23,98,87,43,30,-9,8,for(i=0;i5;i+)t=ai;ai=a9-i;a9-i=t;,24,main()inti,a10,t;for(i=0;i10;i+)scanf(%d,25,for(i=0;i5;i+)t=ai;ai=a9-i;a9-i=t;printf(newdata:);for(i=0;i10;i+)printf(%d,ai);printf(n);,26,for(i=0,j=9;ij;i+,j-)t=ai;ai=aj;aj=t;,27,【例】已知十个整数升序排列,现输入整数x,要求将x插入到合适的位置,使得数列依然升序,分析1.找到插入位置p(默认插最后,设x为18)2.将插入位置p之后的元素后移;3.将x插入位置p,for(i=0,p=10;i10;i+)if(x=p+1;i-)ai=ai-1;,ap=x;,28,【例】已知十个整数升序排列,现输入整数x,要求将x插入到合适的位置,使得数列依然升序,main()inta11=1,4,7,9,12,15,17,20,21,30;intx,i,p;for(i=0;i=p+1;i-)/*将插入位置p之后的元素后移*/ai=ai-1;ap=x;/*插入*/for(i=0;i11;i+)printf(“%5d”,ai);/*输出结果*/,29,【例】读10个整数存入数组,找出其中最大值和最小值,分析1.输入:用for循环输入10个整数2.处理:(a)先令max=min=x0(b)依次用xi和max,min比较若maxxi,令min=xi3.输出:max和min,30,#include#defineSIZE10main()intaSIZE,i,max,min;printf(Enter%dintegers:n,SIZE);for(i=0;iSIZE;i+)scanf(%d,31,max=min=a0;for(i=1;iai)min=ai;printf(Maximumvalueis%dn,max);printf(Minimumvalueis%dn,min);,32,【例6-6】输入一个正整数n(1n10),再输入n个整数,用选择法将它们从小到大排序后输出,选择法排序的核心思想:将n个数据进行n-1次循环选择每次循环都在参与选择的数据中选择出最小的数据,并将它与本次参与选择的第一个数据进行互换然后再在剩下的数据中进行下一次循环选择,33,第一趟,第二趟,第1趟:在未排序的n个数(a0an-1)中找到最小的元素,将它与a0交换;第2趟:在剩下未排序的n-1个数(a1an-1)中找到最小的元素,将它与a1交换;第n-1趟:在剩下未排序的2个数(an-2an-1)中找到最小的元素,将它与an-2交换;,min=k;/k为趟数-1for(i=k+1;in;i+)if(aiamin)min=i;temp=amin;amin=ak;ak=temp;,34,#includemain()inti,min,k,n,temp;inta10;printf(Entern:n);scanf(%d,35,for(k=0;kn-1;k+)min=k;for(i=k+1;in;i+)if(aiamin)min=i;temp=amin;amin=ak;ak=temp;,对数组a中的n个元素排序(选择排序),36,printf(Aftersorted:n);for(i=0;in;i+)printf(%d,ai);printf(n);,输出排序结果,37,排序问题(冒泡排序法),比较第一个数和第二个数,把较大的数放后面;然后比较第二个数与第三个数,仍把较大的数放后面;依次类推,直至第n-1个数和第n个数比较完为止结果最大的数被安置在最后的位置上,这就是第一趟冒泡排序对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在第n-1个元素位置重复上述过程,共经过n-1趟冒泡排序后,排序结束,38,【例6-7】用冒泡法对8个数排序,39,第一趟,7次,for(j=0;jaj+1)temp=aj;aj=aj+1;aj+1=temp;,40,第一趟,7次6次5次4次3次2次1次,第二趟,第三趟,第四趟,第五趟,第六趟,第七趟,结果,41,规律:N个数比较大小共进行了趟比较用变量i来表示趟,则i=0,iN-1或i=1,i=N-1在第i趟比较中,共比较了次用变量j来表示次数,则j=0,jN-i-1或j=1,jN-i,N-1,N-i,42,#includemain()inti,j,temp,n=8;inta8;printf(pleaseinput8integers:n);for(i=0;in;i+)scanf(%d,43,for(i=0;iaj+1)temp=aj;aj=aj+1;aj+1=temp;,对数组a中的n个元素排序(冒泡排序),44,printf(sort:);for(i=0;in;i+)printf(%d,ai);,输出排序后的结果,45,for(i=0;iaj+1)temp=aj;aj=aj+1;aj+1=temp;flag=1;if(!flag)break;/无交换,排序完成,冒泡排序改进,46,思考问题:,在数学中我们常常会用到矩阵,它的结构如下:怎样用一种数据结构来表示矩阵呢?,47,6.3二维数组及多维数组,1、二维数组的定义2、二维数组理解3、二维数组元素的引用4、二维数组元素的初始化5、二维数组的应用,48,1、二维数组的定义定义方式:数据类型数组名常量表达式1常量表达式2;数组元素的存放顺序原因:内存是一维的二维数组:按行序优先,例inta34;floatb25;inta3,4;,行数下标从0开始,列数下标从0开始,元素个数=行数*列数,a21,a20,a11,a10,a01,a00,49,例inta34;,每个元素ai是由包含4个元素的一维数组组成,2、二维数组的理解,把二维数组a理解成由3个元素组成的一维数组,a2,a1,a0,50,3、二维数组元素的引用数组名下标1下标24、二维数组元素的初始化分行初始化按元素排列顺序初始化,51,inta34;for(i=0;i3;i+)for(j=0;j4;j+)scanf(%d,二维数组元素的输入输出,for(i=0;i3;i+)for(j=0;jarowcol,令row=i;col=j3.输出:row、col和arowcol,54,【例6-10】在一个二维数组中,找出最大的元素值以及最大元素的行下标和列下标,并输出该数组,#inlcudemain()introw,col,i,j;inta32;/*输入3x2的数组*/for(i=0;i3;i+)for(j=0;j2;j+)scanf(“%d”,55,row=0;col=0;for(i=0;i3;i+)for(j=0;j2;j+)if(arowcolaij)row=i;col=j;,56,printf(“maxa%d%d=%dn”,row,col,arowcol);,57,【例6-11】输入一个正整数n(1n6),根据下式生成1个nn的方阵,转置(行列互换)后输出,分析:1.输入:方阵的行数n2.处理:(a)循环计算出nn方阵每个元素的值;(b)将nn方阵转置;3.输出:循环输出转置前和转置后的方阵。,58,例如:n=3转置前转置后,for(i=0;in;i+)for(j=0;ji;j+)temp=aij;aij=aji;aji=temp;,59,1、先输入n的值,#includemain()inti,j,k,n,temp;inta66=0;printf(EnterN:);scanf(%d,60,2、计算并打印出原始矩阵,for(i=0;in;i+)for(j=0;jn;j+)aij=i*n+j+1;printf(%4d,aij);printf(“n”);,61,3、将矩阵转置,for(i=0;in;i+)for(j=0;ji;j+)temp=aij;aij=aji;aji=temp;,62,4、打印出转置后的矩阵,printf(“转置矩阵:n);for(i=0;in;i+)for(j=0;jn;j+)printf(%4d,aij);printf(n);,63,【例6-12】求NN阶二维数组的主对角线元素之和,sum=0;for(i=0;in;i+)sum=sum+aii;,64,【例】求NN阶二维数组每一行元素之和,数组a,数组b,65,【例】求NN阶二维数组每一行元素之和,intb3=0;for(i=0;i3;i+)for(j=0;j4;j+)bi+=aij;for(i=0;i3;i+)printf(%5d,bi);,66,main()inta66=0,i,j;for(i=0;i6;i+)/主对角线和第0列赋1ai0=1;aii=1;for(i=2;i6;i+)/其他元素ai,j=ai-1,j-1+ai-1,jfor(j=1;ji;j+)aij=ai-1j-1+ai-1j;for(i=0;i6;i+)for(j=0;j=i;j+)printf(%4d,aij);printf(n);,【例】杨辉三角形,67,在程序中使数组元素获得值的方法,说明数组的同时进行初始化缺点:数据相对固定用scanf语句由用户输入缺点:当数组规模较大时,需要读入的数据会很多利用循环变量为数组赋值,inta23;for(i=0;i2;i+)for(j=0;j3;j+)scanf(“%d”,i4;i+)for(j=0;j4;j+)aij=k+;,68,68,矩阵的术语与二维数组下标的对应关系,69,例在程序中使数组元素获得值的方法,初始化,缺点是数据相对固定利用scanf当数组元素有规律时,利用循环变量为数组赋值,k=1;for(i=0;i4;i+)for(j=0;j4;j+)aij=k+;,for(i=0;i2;i+)for(j=0;j3;j+)scanf(%d,70,多维数组,intc100100100intb234,71,6.5字符数组和字符串,1、使用字符数组存储字符序列定义定义格式与一维数组相同字符数组的引用逐个字符引用,与一维数组相同,72,逐个数组元素输入输出charc15;for(i=0;i15;i+)scan
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届北京市海淀区第二十中学数学九年级第一学期期末学业质量监测模拟试题含解析
- 中国数字气味城市发展机遇与市场机遇探讨
- 江苏省盐城市东台第一教育集团2026届数学八上期末质量检测模拟试题含解析
- 中国银行淄博市张店区2025秋招笔试会计学专练及答案
- 工商银行包头市九原区2025秋招英文群面案例角色分析
- 邮储银行鹤岗市萝北县2025秋招笔试英语选词填空题专练50题及答案
- 邮储银行贵港市桂平市2025秋招笔试英语阅读理解题专练30题及答案
- 中国银行焦作市中站区2025秋招笔试管理营销专练及答案
- 中国银行赣州市赣县区2025秋招笔试金融学专练及答案
- 中国银行商丘市民权县2025秋招笔试英语阅读理解题专练30题及答案
- 2025云南昆明中北交通旅游(集团)有限责任公司驾驶员招聘60人考试参考试题及答案解析
- 2025年国家电网有限公司特高压建设分公司招聘10人(第一批)笔试参考题库附带答案详解
- 迪尔凯姆社会学主义的巨擎汇总课件
- 防排烟系统施工安装全程验收记录
- 家庭经济困难学生认定申请表
- 阀门安装及阀门安装施工方案
- YY 9706.240-2021医用电气设备第2-40部分:肌电及诱发反应设备的基本安全和基本性能专用要求
- JJF 1059.2-2012用蒙特卡洛法评定测量不确定度
- GA 358-2007警服材料口袋布
- 河堤工程施工组织设计
- 全国第十四届冬季运动会疾病预防控制风险评估报告
评论
0/150
提交评论