



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本文格式为word版,下载可任意编辑一元数组运算器实验报告 数组运算器试验报告 试验目的 实现一个数组运算器 试验要求 一维数组的定义和使用 循环结构和分支结构 函数的定义和调用 数据处理技术(排序、插入、删除、查找、统计、逆置、左旋、右旋) 数组作为实现算法的帮助工具(筛选法求素数、约瑟夫环) 试验思路 1. 定义一维数组 首先配置数组大小,再填充数据。 时间简单度:o(n) 2. 显示一维数组 输出数组每一个元素。 时间简单度:o(n) 3. 数据处理 调用排序函数、插入函数、删除函数、查找函数、统计函数、逆置函数、 左旋函数、右旋函数对数据进行操作。 时间简单度:o(n) 4. 数组帮助
2、工具 调用筛选法求素数函数、约瑟夫环函数实现算法。 时间简单度:o(n) 函数清单 void p() /主菜单 void p1() /配置数组大小 void p2() /生成样本数据菜单 void p21() /随机数填充数据 void p22() /键入填充数据 void p23() /填充同一数据 void p24() /填充等差序列数据 void p3() /显示数组 void p4() /删除菜单 void p41(int k) /删除指定下标的元素 void p42(int k) /删除指定值的元素 调用 p41 void p43() /删除按指定下标区间的一组元素 void p5(
3、) /插入菜单 void p51() /按指定下标位置插入新元素 void p52sx() /在升序数组中插入新元素 void p52jx() /在降序数组中插入新元素 void p6() /统计菜单 void p61() /求最大值 void p62() /求最小值 void p63() /求平均值 void p64() /求方差和均方差 void p7() /查找菜单 void p71(int k) /一般查找 void p72(int k) /二分查找(首先保证有序) void p8() /推断菜单 void p81() /是否升序排列 void p82() /是否降序排列 void p
4、83() /是否全部相等 void p9() /排列菜单 void p91() /排序菜单 void p911() /冒泡法(降序) void p912() /选择法(升序) void p913() /交换法(降序) void p92(int a,int a,int b) /逆置数组 void p93(int a,int top,int k) /左旋数组 调用 p92 void p94(int a,int top,int k) /右旋数组 调用 p93 void p10() /其他菜单 void p101() /约瑟夫环 void p102() /筛选法求素数 测试数据 详细效果由测试者体验,
5、例如下图: 调试分析 调试时编写一个函数对其 debug,减轻了后期调试压力。 试验心得 对一维数组的应用更加娴熟;能加快编程速度和效率;能编写和调试更长的程序。 源程序清单 #includestdlib.h #includestdio.h #includemath.h #includetime.h int a10000,top,i; #define for for(i=0;itop;i+) void p() printf(-*主菜单*-n); printf(0、退出n); printf(1、配置系统参数n); printf(2、生成样本数据n); printf(3、显示数组n); print
6、f(4、删除n); printf(5、插入n); printf(6、统计n); printf(7、查找n); printf(8、推断n); printf(9、排列数组元素n); printf(10、数组的其他应用n); printf(请选择 0-10:); void p1() /配置系统参数 printf(请输入数组大小:); scanf(%d,top); void p2() /生成样本数据 printf(n1)用指定范围的随机数填充数组n); printf(2)键盘输入n); printf(3)整个数组填同一个值n); printf(4)用等差序列填充数组(输入首项和公差)n); print
7、f(请选择 1-4:); void p21() int a,b; printf(请输入随机数的下限和上限:); scanf(%d%d,a,b); srand(unsigned int)time(null); for ai=rand()%(b-a)+a; void p22() printf(请输入%d 个数填充数组:,top); for scanf(%d,ai); void p23() int k; printf(请输入想填充的数据:); scanf(%d,k); for ai=k; void p24() int a,d; printf(请输入首项和公差:); scanf(%d%d,a,d);
8、a0=a; for(i=1;itop;i+) ai=ai-1+d; void p3() / 显示数组 for printf(%-6d,ai); printf(n); void p4() / 删除 printf(n1)删除指定下标的元素n); printf(2)删除指定值的元素n); printf(3)删除按指定下标区间的一组元素n); printf(请选择 1-3:); void p41(int k) for(i=k;itop;i+) ai=ai+1; void p42(int k) for if(ai=k) p41(i); void p43(int a,int b) for(i=a;ib+1
9、;i+) ai=ai+b-a+1; void p5() / 插入 printf(n1)按指定下标位置插入新元素n); printf(2)在有序数组中插入新元素n); printf(请选择 1-2:); void p51() int j,k; printf(请输入插入位置下标和插入值:); scanf(%d%d,j,k); top+; for(i=top-1;ij;i-) ai=ai-1; aj=k; void p52sx() int k,j; printf(请输入插入值:); scanf(%d,k); if(ka0) top+; for(i=top-1;i0;i-) ai=ai-1; a0=k
10、; else if(katop-1) top+; atop-1=k; else for if(ai=k)(ai+1k) top+; for(j=top-1;ji+1;j-) aj=aj-1; ai+1=k; void p52jx() int k,j; printf(请输入一个数,代表要插入的数:); scanf(%d,k); if(ka0) top+; for(i=top-1;i0;i-) ai=ai-1; a0=k; else if(katop-1) top+; atop-1=k; else for if(ai=k)(ai+1k) top+; for(j=top-1;ji+1;j-) aj=
11、aj-1; ai+1=k; void p6() /统计 printf(n1)求最大值n); printf(2)求最小值n); printf(3)求平均值n); printf(4)求方差和均方差n); printf(请选择 1-4:); void p61() int k=0; for if(aiak) k=i; printf(最大值=%dn,ak); void p62() int k=0; for if(aiak) k=i; printf(最小值=%dn,ak); void p63() double s=0; for s+=ai; printf(平均值=%lfn,s/top); void p64
12、() double v,f,t,s1=0,s2=0; for s1+=ai;s2+=ai*ai; v=s1/top; f=s2/top-v*v; t=sqrt(f); printf(方差=%lfn 均方差=%lfn,f,t); void p7() /查找 printf(n1)一般查找n); printf(2)二分查找(首先保证有序)n); printf(请选择 1-2:); void p71(int k) int flag=0; for if(ai=k) flag=1; if(flag=1) for if(ai=k) printf(找到元素%d,下标为%d ,即a%d=%dn ,k,i,i,k
13、); else printf(未找到元素%dn,k); void p72(int k) int l=0,h=top-1,m; while(l=h) m=(l+h)/2; if(kam) l=m+1; else if(kam) h=m-1; else break; if(l=h) printf(找到此元素,下标为 %d,即 a%d=%d n,m,m,k); else printf(未找到此元素n); void p8() /推断 printf(n1)是否升序排列n); printf(2)是否降序排列n); printf(3)是否全部相等n); printf(请选择 1-3:); void p81(
14、) int flag=0; for(i=1;itop;i+) if(aiai-1) flag=1; if(flag=0) printf(是n); else printf(否n); void p82() int flag=0; for(i=1;itop;i+) if(aiai-1) flag=1; if(flag=0) printf(是n); else printf(否n); void p83() int flag=0; for(i=1;itop;i+) if(ai!=ai-1) flag=1; if(flag=0) printf(是n); else printf(否n); void p9()
15、/排列数组元素 printf(n1)排序n); printf(2)逆置数组n); printf(3)左旋数组n); printf(4)右旋数组n); printf(请选择 1-4:); void p91() printf(n1. 冒泡法(降序) 2. 选择法(升序) 3. 交 换 法 ( 降序)n); printf(请选择 1-3:); void p911() int j,t; for(i=0;itop-1;i+) for(j=0;jtop-i-1;j+) if(ajaj+1) t=aj; aj=aj+1; aj+1=t; void p912() int j,k,t; for(i=0;itop
16、-1;i+) k=i; for(j=i+1;jtop;j+) if(akaj) k=j; if(k!=i) t=ak; ak=ai; ai=t; void p913() int t,j; for(i=0;itop-1;i+) for(j=i+1;jtop;j+) if(aiaj) t=ai; ai=aj; aj=t; void p92(int a,int a,int b) int t,j; for(i=a,j=b;ij;i+,j-) t=ai; ai=aj; aj=t; void p93(int a,int top,int k) p92(a,0,k-1); p92(a,k,top-1); p9
17、2(a,0,top-1); void p94(int a,int top,int k) p93(a,top,top-k); void p10() printf(n1)约瑟夫环n); printf(2)筛选法求素数n); printf(请选择 1-2:); void p101() int n,m,k,pos,man10000; for(i=0;in+1;i+) mani=0; i=k=0; printf(总人数和报数间隔:n); scanf(%d%d,n,m); for(pos=0;kn;pos=(pos+1)%n) if(manpos=0) i+; if(i=m) i=0; k+; manpo
18、s=k; printf(约瑟夫环:n); for(pos=0;posn;pos+) printf(%-6d%c,manpos,(pos+1)%10=0)?"n":" "); printf(n); void p102() int j,n;char line10000; printf(求 1-指定数之间的素数n); printf(输入一个数:); scanf(%d,n); for(i=0;i=n;i+) linei=1; for(i=2;i=n;i+) if(linei) printf(%-6d,i); for(j=i+1;j=n;j+) if(j%i=0)
19、 linej=0; printf(n); main() int zhu,fu,k,a,b; while(1) p(); scanf(%d,zhu); if(zhu=0) return 0; if(zhu=1) p1(); if(zhu=2) p2(); scanf(%d,fu); switch(fu) case 1: p21();break; case 2: p22();break; case 3: p23();break; case 4: p24();break; if(zhu=3) p3(); if(zhu=4) p4(); scanf(%d,fu); switch(fu) case 1:
20、 printf(请输入想删除的元素对应下标:); scanf(%d,k); p41(k);top-; break; case 2: printf(请输入想删除的元素:); scanf(%d,k); p42(k);top-; break; case 3: printf(请输入删除的区间:); scanf(%d%d,a,b); p43(a,b);top=top-(b-a)-1; break; if(zhu=5) p5(); scanf(%d,fu); switch(fu) case 1: p51();break; case 2: if(a0=atop-1) p52sx(); else p52jx(); break; if(zhu=6) p6(); scanf(%d,fu); switch(fu) case 1: p61();break; case 2: p62();break; case 3: p63
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 四川华新现代职业学院《工程软件I》2023-2024学年第一学期期末试卷
- 山西省吕梁地区汾阳市2025届数学四下期末经典试题含解析
- 山东科技大学《工业过程控制》2023-2024学年第二学期期末试卷
- 金肯职业技术学院《中国文化概说》2023-2024学年第一学期期末试卷
- 上饶师范学院《工程基础训练》2023-2024学年第二学期期末试卷
- 四川工商学院《Web应用与开发》2023-2024学年第二学期期末试卷
- 应天职业技术学院《园林设计基础》2023-2024学年第二学期期末试卷
- 江西省抚州市临川一中2024-2025学年高三5月总复习质检(二模)数学试题含解析
- 遵义师范学院《GNSS原理及应用》2023-2024学年第二学期期末试卷
- 采购合同履行保密保密措施重点基础知识点
- 搬运装卸服务外包投标方案(技术标)
- 多智能体机器人系统控制及其应用课件全套第1-8章多智能体机器人系统-异构多智能体系统的协同控制和最优控制
- 公司法司法解释三(全文)
- 英语国家概况-Chapter10-government解析
- 【53天天天练】小学数学二年级下册有余数的除法第四课时同步练习(含答案)
- (毕业设计方案)福田轻型货车制动系统设计方案
- 砂石路维修工程施工方案
- 2023年电气中级工程师考试题库
- 站台保洁服务方案
- 2024-2030年中国高端半导体激光芯片行业市场全景调研及发展前景研判报告
- 植物拓染非物质文化遗产传承拓花草之印染自然之美课件
评论
0/150
提交评论