已阅读5页,还剩130页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章数组,例题链接,编写程序,输入100名学生的成绩,求平均分并统计高于平均值的人数。main()ints0,s2,s99,count=0;floatave;scanf(“%d%d”,main()ints100,k,count=0,sum=0;floatave;for(k=0;kave)count+;printf(“ave=%f,count=%dn”,ave,count);,常用于处理大批量数据;数据特点:存在内在联系;数组具有相同数据类型的变量集合;这些变量都有相同名字,但下标不同;称这些变量为数组元素;只有一个下标的数组一维数组;具有两个下标的数组二维数组。,本章将介绍的内容,5.1一维数组5.2字符串5.3二维数组,例题链接,例题链接,例5.1,例5.2,例5.3,例5.4,例5.6,例5.7,例5.8,例5.9,例5.5,例5.10,例5.11,例5.12,例5.13,例3.14,例5.15,例5.16,例5.17,例5.18,例5.19,例5.20,例5.21,例5.22,5.1一维数组,5.1.1一维数组的定义和引用5.1.2一维数组的初始化5.1.3一维数组程序举例,P129,5.1.1一维数组的定义和引用,【例5.1】一维数组示例。#defineN10main()inti=0,a3;floatbN;a0=2;a1=4;a2=a0+a1;for(i=0;iN;i+)scanf(%f,N为符号常量,定义数组a和b,给数组a的元素赋值,P129,运行结果:,12345678910,246,12345678910,数组a的元素值,数组b的元素值,inta3;表示:a为一维数组名a的长度为3,即含3个元素元素为a0、a1、a2元素类型均为整型,说明:,每个元素都是变量,下标:02,floatbN;表示:数组名为bb数组的长度为N元素为b0、b1、b2、bN-1各元素的类型为单精度型,不能含变量,数组元素代表内存中的一个存储单元数组元素像普通变量一样使用数组元素用下标形式表示常用循环对数组进行输入输出操作,为a数组分配3个连续的存储单元(2字节3=6个字节)为b数组分配N个连续的存储单元(4字节N),用#defineN10定义符号常量N,方便修改程序例如:要将数组b的长度改为20,只需把命令行改为#defineN20其他部分无需改动,【例5.2】存放字符的数组示例。#includemain()inti=0;charch4;ch0=G;ch1=o;ch2=o;ch3=d;for(i=0;i4;i+)putchar(chi);,运行结果:Good,ch0,ch1,ch2,ch3,ch,ch数组的存储单元,一维数组的一般定义形式:类型名数组名1常量表达式1,数组名2常量表达式2,;例如,inta5,b6+3;,引用数组元素的形式:数组名下标例如:a2,bi,bi+1是合法引用下标可以是常量、变量或表达式其值必须确定、且是整型系统不做下标越界检查,【例5.3】输入10名学生的成绩,计算其平均成绩,并统计不低于平均分的学生人数。,编程点拨,为了统计不低于平均分的学生人数,先把学生成绩存起来,等到计算平均成绩后,再与平均分比较如果使用普通变量,过程就会很繁琐选用数组简化程序,for(i=0;i10;i+)scanf(“%d”,for(i=0;i=ave)count+;,输入并计算平均分,统计高于平均分人数,printf(%f,%d,ave,count);,main()inta10,i,count,total=0;floatave;,请思考:,本题如果改为:输入若干名学生的成绩,用负数结束输入,如何改写程序?,#defineN40main()inti=0,n=0,count=0;floatscore,total=0,aN,ave;printf(data:n);scanf(%f,学生人数不能多于40,a中存放成绩,ave=total/n;for(i=0;i=ave)count+;printf(ave=%f,count=%d,ave,count);,运行结果:data:55667788991001ave=80.833336,count=3,计算平均成绩,统计不低于平均分人数,5.1.2一维数组的初始化,【例5.4】一维数组的初始化示例。,inti=0;inta5=1,2,3,4,5;for(i=0;i5;i+)printf(%5d,ai);,等价于,P132,inti=0;intb5=2,3,4;for(i=0;i5;i+)printf(%5d,bi);,等价于,intb5=2,3,4,0,0;,【例5.4】一维数组的初始化示例。,5.1.2一维数组的初始化,P132,inti=0;intc=3,4,5,6,7;for(i=0;i5;i+)printf(%5d,ci);,等价于,intc5=3,4,5,6,7;,【例5.4】一维数组的初始化示例。,5.1.2一维数组的初始化,P132,inti=0;intd5=0;for(i=0;i5;i+)printf(%5d,di);,等价于,intd5=0,0,0,0,0;,【例5.4】一维数组的初始化示例。,5.1.2一维数组的初始化,P132,inti=0;inte5;for(i=0;i5;i+)printf(%5d,ei);,未初始化,不能写成inte;,输出不确定值,【例5.4】一维数组的初始化示例。,5.1.2一维数组的初始化,P132,inti=0;intf5=1,2,3,4,5,6,7,8;,提供数据过多,报错,定义数组的同时,给数组元素赋初值数组的初始化,【例5.4】一维数组的初始化示例。,5.1.2一维数组的初始化,P132,【例5.5】存放字符的数组初始化示例。#includemain()inti=0;chara4=G,o,o,d;charb4=G;charc4=0;for(i=0;i4;i+)printf(%c,ai);printf(n);for(i=0;i4;i+)printf(%c,bi);printf(n);for(i=0;i4;i+)printf(%c,ci);,等价于,0,运行结果:GoodG,0在屏幕上无显示0的ASCII码值为0,讨论题5.1,如果将含有10个元素的数组按顺序和逆序输出,应如何编写程序?,#includemain()inti;inta10=1,2,3,4,5,6,7,8,9,10;for(i=0;i=0;i-)printf(%4d,ai);printf(n);,运行结果:1234567891010987654321,【例5.6】定义含有10个元素的数组,并将数组中的元素按逆序重新存放后输出。,a,a,值变化,逆序输出和逆序存放不同,a,b,按逆序将a数组的值赋给b数组,按顺序将b数组的值赋给a数组,a,方法1:开辟另一个数组,for(i=0;i10;i+)bi=a10-i-1;,for(i=0;i10;i+)ai=bi;,#includemain()inti,a10=1,2,3,4,5,6,7,8,9,10,b10;for(i=0;i10;i+)printf(%4d,ai);printf(n);for(i=0;i10;i+)bi=a10-i-1;for(i=0;i10;i+)ai=bi;for(i=0;i10;i+)printf(%4d,ai);printf(n);,运行结果:1234567891010987654321,方法2:只开辟一个存储单元t,12345678910,a,通过,交换,通过,交换,t,通过,交换,通过,交换,通过,交换,for(i=0;i10/2;i+),t=ai;ai=a10-i-1;a10-i-1=t;,#includemain()inti=0,t=0,a10=1,2,3,4,5,6,7,8,9,10;for(i=0;i10;i+)printf(%4d,ai);printf(n);for(i=0;i10/2;i+)t=ai;ai=a10-i-1;a10-i-1=t;for(i=0;i10;i+)printf(%4d,ai);printf(n);,能改成i10?,5.1.3一维数组程序举例,【例5.7】观察运行情况,P135,inti=0,t=0,a10=1,2,3,4,5,6,7,8,9,10;,t=a0;,for(i=0;i9;i+)ai=ai+1;,a9=t;,for(i=0;i0;i-)bi=bi-1;,b0=t;,for(i=0;i=0;i-),讨论题5.4,数组元素中的值往前或往后移动两个位置时,应如何改写程序?,【例5.8】数组中已存互不相同的10个整数,从键盘输入一个整数,输出与该值相同的数组元素下标。,编程点拨:,使用循环将输入的数和数组元素逐个进行比较如果找到相等的元素,用k记住该元素下标值输出k的值,#includemain()inti=0,x=0,a10=1,2,3,4,5,6,7,8,9,10;for(i=0;i10;i+)printf(%4d,ai);printf(n);,if(k!=-1)printf(下标值=%dn,k);,printf(Inputx:);scanf(%d,for(i=0;i10;i+),if(x=ai)k=i;,输入需查找的数,若找到,用k记下标值,k=-1,elseprintf(没找到%dn,x);,程序编写过程:,不能赋09之间的值,逐个查找数,若有多个元素与x相等,则k中存的是第1个还是最后一个元素的下标?,运行过程:,第1次运行:Inputx:612345678910下标值=5第2次运行:Inputx:1212345678910没找到12,优化程序:,main()inti=0,x=0,k=-1,a10=1,2,3,4,5,6,7,8,9,10;printf(Inputx:);scanf(%d,break;,i10,i,若有多个元素与x相等,则k中存的是第1个还是最后一个元素的下标?,【例5.9】从键盘输入10个互不相同的整数并存放在一维数组中,找出值最大的元素,并输出最大值所在的元素下标。,编程点拨,不必用max记住最大值,只要用k记住最大值所在的元素下标,#includemain()inti=0,k=0,a10=0;printf(Inputdata:);for(i=0;i10;i+)scanf(%d,a,k,k=0;,if(aka1),k=1;,真,执行,0,1,2,3,4,5,6,7,8,9,if(aka2),k=2;,假,不执行,if(aka3),k=3;,真,执行,下标=,k=0;for(i=1;i10;i+)if(akai)k=i;,a,#includemain()inti,k,a10;printf(Inputdata:);for(i=0;i10;i+)scanf(%d,输出结果:max:a3=10,【例5.10】从键盘输入10个互不相同的整数并存放在一维数组中,删除其中下标为4的元素。,编程点拨,只要从下标为4的元素开始将其后面元素中的值依次前移一个位置即可,for(i=0;i9;i+)printf(%4d,ai);printf(n);,最先,a4=a4+1;,最后,a8=a8+1;,k8,for(i=k;i9;i+)ai=ai+1;,a,k,k,讨论题5.6,本题如果改为输入要删除的元素下标k的值,应如何修改程序?当k的值为9时,程序还成立吗?,讨论题5.7,要删除最大值所在的元素,应如何改写本题中的程序?,【例5.11】在数组中找出最小元素,并与第1个元素对调。,第1步:求最小值所在元素下标,k=0;for(j=1;jaj)k=j;,编程点拨,第2步:最小元素与第1个元素对调temp=a0;a0=ak;ak=temp;,#includemain()intj=0,k=0,temp=0,a10=0;for(j=0;j10;j+)scanf(%d,k=0;for(j=0+1;jaj)k=j;,8,1,temp=a0;a0=ak;ak=temp;,5,for(j=0;j10;j+)printf(%4d,aj);,a,新的问题:,在后9个元素中,最小值与第2个元素对调,a,k=1;for(j=1+1;jaj)k=j;,9,2,temp=a1;a1=ak;ak=temp;,3,a,k=1;for(j=1+1;jaj)k=j;,10,3,temp=a2;a2=ak;ak=temp;,7,2,2,a,for(;iaj+1)aj与aj+1交换(j:0N-3)第N-1趟:在2个数中进行比较。(i=N-1)if(ajaj+1)aj与aj+1交换(j:00),#defineN10main()inti,j,temp,aN;for(i=0;iaj+1)temp=aj;aj=aj+1;aj+1=temp);for(i=0;iN;i+)printf(“%4d”,ai);,冒泡法排序,【训练5.2】掷100次骰子,统计各点数出现的次数。编程点拨:用for循环i:1100。每次点数为16之间的数,用rand()6+1表示rand()%k:随机产生0,k)的整数。定义数组a7,产生点数n时,an增1。即用ai统计出现点数为i的次数。例如,若产生3,则执行:a3=a3+1;进入循环之前要加srand(time(0);以保证每次运行时产生的随机数彼此独立。为使用srand(),rand()函数,要加#include#include,#include#include,main()inti,n,a7=0;,for(i=1;i0)printf(第1个串大于第2个串n);if(strcmp(a,b)=0)printf(两串相等n);if(strcmp(a,b)b),strcmp()函数,调用格式:strcmp(s1,s2);功能:比较两个字符串。将字符串s1和s2从左至右逐个字符比较,直到出现不同的字符或遇到0为止。,二维数组的定义及数组元素的引用二维数组的存储结构二维数组的初始化二维数组应用,5.3二维数组,一、二维数组的定义和数组元素的引用,有两个下标的数组aij称为二维数组,1、定义形式:类型数组名【常量表达式1】【常量表达式2】;,inta23;floatb35;charc310;,inta32;,a00,a01,a10,a11,a20,a21,1,2,3,4,5,6,a,行下标,列下标,2、数组元素的引用形式数组名下标1下标2,inta33,k;for(k=0;k3;k+)akk=k+1;,二、二维数组的存储结构,inta32;,占用连续的内存空间,并且按行存储。,a00a01a10a11a20a21,三、二维数组的初始化,可以在定义二维数组的同时给二维数组的各元素赋初值。,1、所赋初值个数与数组元素的个数相同,inta43=1,2,3,4,5,6,7,8,9,10,11,12;全部初值括在一对花括号中,每一行的初值又分别括在一对花括号中,之间用逗号隔开。,2、每行所赋初值个数与数组元素的个数不同,inta43=1,2,4,5,7,10;,a:1204507001000,系统将自动给该行后面的元素补零。,3、所赋初值行数少于数组行数,inta43=1,2,3,4;,系统将自动给后面各行的元素补零。,a:120340000000,4、可以省略行花括号对。即按照数组元素在内存中的排列顺序赋值。,inta43=1,2,3,4,5,6;,a:123456000000,inta43=1,4,7,10;intb43=1,4,7,10;,5、通过赋初值定义二维数组的大小,inta3=1,2,3,4,5,6,8;,inta43=1,2,3,4,5,6,8;,inta3=1,2,3,4,5,6,8;,inta33=1,2,3,4,5,6,8;,【例5.19】二维数组的示例。#includemain(),初始化二维数组,给第1行输入数据,b为2行5列数组,12345,for(j=0;j5;j+)scanf(%d,给第2行输入数据,67890,for(j=0;j5;j+)scanf(%d,inta32=1,2,3,4,5,6;,inti=0,j=0,b25=0;,【例5.19】二维数组的示例。#includemain(),for(j=0;j5;j+)scanf(%d,for(j=0;j5;j+)scanf(%d,inta32=1,2,3,4,5,6;,inti=0,j=0,b25=0;,for(i=0;i2;i+)for(j=0;j5;j+)scanf(%d,【例5.19】二维数组的示例。#includemain()inta32=1,2,3,4,5,6;inti=0,j=0,b25=0;for(i=0;i2;i+)for(j=0;j5;j+)scanf(%d,外循环控制行,内循环控制列,给数组赋值,for(i=0;i3;i+)for(j=0;j2;j+)printf(%5d,aij);printf(n);printf(Arrayb:n);for(i=0;i2;i+)for(j=0;j5;j+)printf(%5d,bij);printf(n);,按矩阵形式输出时需加此行,运行结果:1234567890Arraya:123456Arrayb:1234567890,inta32=1,2,3,4,5,6;表示a为二维数组名,a含6个元素各元素均为整型常用双层for处理二维数组在内存中为a分配6个连续的存储单元(按行),说明:,123456,a00,a01,a10,a11,a20,a21,a,【例5.20】打印如下杨辉三角形。11112113311464115101051,杨辉三角形有如下特点:只有下半三角形有确定的值第1列和对角线上的元素值都是1,其它元素值均是前一行同一列元素与前一行前一列元素之和,编程点拨,#defineN6main()intaNN=0,i=0,j=0;for(i=0;iN;i+)for(i=2;iN;i+)for(j=1;ji;j+)for(i=0;iN;i+)for(j=0;j=i;j+)printf(%5d,aij);printf(n);,给第一列、对角线赋1,给其它元素赋值,ai0=aii=1;,aij=ai-1j-1+ai-1j;,【例5.21】定义46的实型数组,并将各行前五列元素的平均值分别放在同一行的第六列上。,floata46;,定义46的实型数组,计算第一行平均值,sum=0;for(j=0;j5;j+)sum=sum+a0j;a05=sum/5;,二,1,1,三,2,2,四,3,3,for(i=0;i4;i+),计算第一行平均值,sum=0;for(j=0;j5;j+)sum=sum+a0j;a05=sum/5;,四,3,3,各,i,i,【例5.21】定义46的实型数组,并将各行前五列元素的平均值分别放在同一行的第六列上。,main()floata46=0,sum=0;inti=0,j=0;for(i=0;i4;i+)for(j=0;j5;j+)aij=i*j+1;for(i=0;i4;i+)sum=0;for(j=0;j5;j+)sum=sum+aij;ai5=sum/5;for(i=0;i4;i+)for(j=0;j6;j+)print
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 行业内外部环境分析报告
- 广州市2024年中考生物考试真题分析
- 公司年度分支机构检查报告
- 电力设计合同风险防范与条款解析
- 小学二年级部编本语文公开课设计
- 桥梁基础钻孔施工方案设计
- 河南省名校大联考2026届化学高三上期末监测模拟试题含解析
- 2026届广西桂林全州县石塘中学化学高二上期末质量跟踪监视模拟试题含答案
- 2026届新疆呼图壁县第一中学化学高一第一学期期中考试试题含解析
- 陕西铜川市同官高级中学2026届化学高二上期中统考试题含解析
- 人工挖方孔桩模(板)施工方案
- 无人机制造工厂建设施工方案
- 基于大语言模型的水文模型参数优化特性研究
- 地球科学通识课(中国地质大学(武汉))知到智慧树网课答案
- 疫苗接种进校园活动方案
- 2025至2030中国航运金融行业发展趋势分析与未来投资战略咨询研究报告
- 江苏入团考试试题及答案2025年
- 微信客户维护培训课件
- GB/T 22577-2025核电站用1E级电缆通用要求
- 《房屋工程总承包工程量计算规范》
- 2025年中小学生读书知识竞赛题库及答案
评论
0/150
提交评论