欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    数组运算器实验报告.docx

    • 资源ID:558760       资源大小:89.46KB        全文页数:29页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数组运算器实验报告.docx

    数组运算器上机实验报告一,问题的描述1,一维数组的定义和使用2,循环结构和分支结构3,函数的定义和函数的调用4,数组作为函数的参数5,局部变量和全局变量6,数组处理技术(排序,插入,删除,查找,统计,逆置)7,数组作为实现算法的辅助工具(筛法求素数,约瑟夫环等)二,算法描述及分析0、退出:退出程序1、配置系统参数:确定数组长度12、生成样本数据1)用指定范围的随机数填充数组:调用库函数rand()实现随机数填充2)键盘输入:循环遍历数组赋值3)整个数组填同一个值:循环遍历数组赋值4)用等差序列填充数组:循环遍历数组赋值3、显示数组:循环遍历数组打印4、删除1)删除指定下标的元素:把指定下标后元素挨次前移2)删除指定值的元素:先确定指定值元素下标,调用删除制定下标函数3)删除按指定下标区间的一组元素:把区间后元素挨次前移区间长度,并调整数组长度5、插入1)按指定下标位置插入新元素:先将指定下标后元素从后往前挨次后移,再更改指定下标处的值2)在有序数组中插入新元素:确定新元素应在位置,调用指定下标插入函数6、统计D求最大值:挨次比较2)求最小值:挨次比较3)求平均值:累加法4)求方差和均方差:调用平均值函数,利用方差和均方差公式7、查找1)普通查找:挨次与要查找元素比较2)二分查找:排序,利用二分法查找8、判断1)是否升序罗列:前项是否大于后项2)是否降序罗列:前项是否小于后项3)是否全部相等:前项是否恒等于后项9、罗列数组元素1)排序:a.冒泡法b.选择法c.交换法2)逆置数组:先后对称交换数组值3)左旋数组:每次向左挪移一位,并将第一个值放置于数组尾4)右旋数组:每次向右挪移一位,并将末尾值放置于数组头10、数组的其他应用1)约瑟夫环:通过求余数循环遍历数组,挨次标记间隔的倍数下标的数组位置2)筛法求素数:判断2Jk间是否存在整除k的数三,程序结构的描述函数的描述voidprintarr(inta,intn);打印数组voidFillArray(int*a,intm,intn,int1);生成数组的随机样本数据voidConfigO;/S己置系统参数:数组元素个数、一行打印元素个数、每一个元素的打印宽度等voidReverse(inta,intn);逆置数组voidinsert(inta,intn,intpos,intval);在数组中POS下标处插入新元素voidiDelete(inta,int1,intid);删除指定下标的元素voidvDelete(inta,int1,intid);删除指定值voidDeleteRange(inta,int1,ints,intt);删除s.t下标区间的元素intSearch(inta,intn,intval);查找值为VaI的元素,找到返回其下标,找不到返回Tinttsearch(intr,intn,intkey);intisAsc(inta,intn);判断数组是否升序罗列intisDesc(inta,intn);判断数组是否降序罗列intisEqual(inta,intn);判断数组是否全相等intmmax(inta,intn);返回数组最大值的下标intmmin(inta,intn);返回数组最小值的下标voidfangcha(inta,intn);floataverage(inta,intn);计算数组的平均值voidInsert(int*r,intm,intn,int1);voidOrderinsert(inta,intn,intval);在有序数组中插入新元素保持有序性voidbubblesort(intr,intn);冒泡排序voidselectsort(intr,intn);选择排序voidexchangesort(inta,intn);交换排序intSearch(inta,intn,intval);普通查找voidnizhi(inta,intn);逆置数组voidLeftRotate(inta,intn,intm);左旋m位voidRightRotate(inta,intn,intm);右旋m位voidjosephus(intman,intn,intc,intm);约瑟夫环voidjuzhen(intc100);自选功能矩阵乘法voidsushu(inta,intn);筛法求素数函数间调用关系的描述voidvDelete(inta,int1,intid)inti;for(i=0;i<l;i+)if(ai=id)iDelete(a,1,i);调用删除指定下标函数i;1一;)printf("改变后数组为:n);printarr(a,1);)voidfangcha(inta,int1)inti;doublef,b;floatm-0,x;x=average(a,1);调用average函数for(i=0;i<l;i+)ra÷=(float)ai-)*(float)ai-);f=ml;b=sqrt(f);Printf(方差二%f标准差=%f”,f,b);)voidOrderinsert(inta,int1,intval)intk,i;if(isAsc(a,1)=调用是否升序罗列函数(for(i-0;val>ai;i+);k=i+l;Insert(a,val,k,1);)if(isDesc(a,I)=I)调用是否降序罗列函数(for(i-0;val<ai;i+);k=i+l;Insert(a,val,k,1);调用插入函数)inttsearch(intr,intn,intkey)intlow,mid,high,i0;Iow=O;highn1;if(isAsc(r,n)=l)调用是否升序罗列函数(while(low<high)mid=(low+high)/2;if(key>rmid)IOW=Inid+1;elseif(key=rmid)return(mid);)elsehigh二mid1;)return(-1);)if(isDesc(r,n)=l)调用是否降序罗列函数(while(low<-high)mid=(low+high)/2;if(key<rmid)low-mid+1;elseif(key=-rmid)return(mid);)elsehigh=mid1;)return(-1);)四,调试分析1,tsearch函数中的if语句不能涵盖所有情况,会浮现warning2,存在隐式类型转换,可能丢失数据3,删除和查找指定值函数在存在相同数组值时不能全部识别4,其他一些问题五,测试数据及结果分析数组运算器的分级菜单:0,退出0.退出L配置系统参数2.生成样本数据*3.显示数组4*除5,插入*6.统计*7.查找*B.判断*9.排列数组元系*10歌组的其他应用11.自选应用*请选择O-Tl:0Pressanykeytocontinue1、配置系统参数2、生成样本数据1)用指定范围的随机数填充数组谓选择(ATi:2D用指定范围的随机数填充数组2)键盘输入3)整个数组填同一个值4)用等差序歹IJji充数组i怪1)4)1般人随机数范围:1100选搔5-11:3268351702)键盘输入旌搽1)-4)P13457恸选捺011:313457ltet<3)整个数组填同一个值谱选掾011:21)2)3)4)用指定范围的随机班埴充数组键盘愉入整个数组值同一个值用等差序列博充数组选捺1)-4)输入填充值:4谓选怪O-T匕3444444)用等差序列填充数组(注:输入序列的起始值和每项的差值)选择1)-4)4谕入首项和公差:12谓选搔011:3135793、显示数组4、删除1)删除指定下标的元素谙选择011:41)瞬指定下标的元素2)删除指定值的元素3)删除按指定下标区间的一组元素选搔1)7)愉入碉元素下标:3改变后数组为:13592)删除指定值的元素请选择011乂1)册赊指定下标的元素2)册赊指定值的元素3)版余按指定下标区间的一组元素选择1)7)2$谕入要删除的值:3改变后数组为:1593)删除按指定下标区间的一组元素(重置数组值13579)请选择O-UM3)删除按指定下标区间的一组元素D删除指定下标的元素2)删除指定值的元素选择1)7)3输入删除区间下标12改变后剧组为:1795、插入1)按指定下标位置插入新元素谙选怪LII:5D按指定下标位差插入新元索2)在有序数组中插入新元素保持有序性选择1)-2)1海入要插入的数及插入位图:152改变后蓟组为:115792)在有序数组中插入新元素(重置为13579)谙选掾O-IU5D按指定下标位跟插入新元素2)在有序数组中插入新元素保持有序性选择1)2)2雁人要插入的元素:6改变后勤组为:1356796、统计1)求最大值请选捺011;6D隶最大值2)求最小值3)求平均值4)求方差和均方差选怪1)-4)S±tt92)求最小值选择I)Y)2最小值13)求平均值选择I)Y)3平均值5.1666674)求方差和均方差4方差=6.805556标淮爰=2.6087467、查找1)普通查找满选择011:71)普通片找B)二分瓷找萍1)-2)官人要查找的数:口=6箍X5查找的数:查找失败2)二分查找请选捺011;71)普通查找2)二分查找选择1)-2)2除人要查找的数:8查找失败俞人要查找踊:a5=98、判断1)是否升序罗列请选探5-11;8D是否升序排列2)是否降序排列3)是否全部相等选授1)7)2)是否降序罗列谙选授011:8D是升序排列2)是否展序排列3)是否全部相等选择1)7)2非降序排列3)是否全部相等语选怪。一11;8D是否升序排列2)是否降序排列3)>S全部蹄选探1)7)%相等(重置数组为44444)选择1)7)3全部晦9、罗列数组元素1)排序每次均重置数组为(14273)a.冒泡法请选择0-11:91排序2)逆度黔组3)左族数组4)右旋的组选择I)Y)1D泡法2)选择法3)交换法选择A3)改变后数组为:74321b.选择法法法法3)泡择换)-官选交Il2改变后数蛆为:74321c.父换法选择1)-4)去去去3)海能撼)-301送交513改变后数组为:743212)逆置数组请选择1)排序2)逆凿数组3)左旋数组4)右旋数组选揖)-4)2改变后数组为:123473)左旋数组请选捺O11:9D排序2)逆更拊组3)左旋数组4)右旋数组选捺1)-4)左旋位教:3改变后数嵬为:471231)约瑟夫环请选择071: 10D约新夫环2)施法求素数选择1)2)3788682387597383995960409774114161128342138962144375l9344166384174576186446199990I4765217748228566234996247850I679426518627685228799129536915431907032658733总人数,起始位置和报数间隔:1823约慈天环:9856341718123557392364725852)筛法求素数重置数组为(71234)者选径O-11;101.)约赫夫环O的法求素数班1)-2)Ik其他自选功能矩阵乘法请选择H:11矩阵乘法临入相乘矩阵的行列数(如3*2与2*4数组相篥愉A“324):323输入第一个数组:输入第1行元素:1,谕入第2行元素:3涌入第学亍元素:5除入第二个数组:菌入第1行元装1瑞入笫2行元素;2结果为;555111111171717六,实验体味,心得和意见1程序结构要清晰。2函数的参数表和返回值设计要合理3要养成良好的编程风格和习惯4掌握大型程序的调试和测试方法5要学会分段调试程序6要学会选择不同的样本数据检测软件中可能存在的问题。七,改进空间1交互界面和用户体验还需要改进2程序兼容性不强3查找、删除函数可以采用更高级算法减少计算量八,源程序代码菜单框架#include"stdio.h#includezztime.h"#include"stdlib.h"#include"math,h”voidprintarr(inta,intn);打印数组voidFillArray(int*a,intm,intn,int1);生成数组的随机样本数据voidConfigO;配置系统参数:数组元素个数、一行打印元素个数、每一个元素的打印宽度等voidReverse(inta,intn);逆置数组voidinsert(inta,intn,intpos,intval);在数组中PoS下标处插入新元素voidiDelete(inta,int1,intid);删除指定下标的元素voidvDelete(inta,int1,intid);删除指定值voidDeleteRange(inta,int1,ints,intt);删除s.t下标区间的元素intSearch(inta,intn,intval);查找值为Val的元素,找到返回其下标,找不到返回7inttsearch(intr,intn,intkey);intisAsc(inta,intn);判断数组是否升序罗列intisDesc(inta,intn);判断数组是否降序罗列intisEqual(inta,intn);判断数组是否全相等intmmax(inta,intn);返回数组最大值的下标intmmin(inta,intn);返回数组最小值的下标voidfangcha(inta,intn);floataverage(inta,intn);计算数组的平均值voidInsert(int*r,intm,intn,int1);voidOrderinsert(inta,intn,intval);在有序数组中插入新元素保持有序性voidbubblesort(intr,intn);冒泡排序voidselectsort(intr,intn);/选择排序voidexchangesort(inta,intn);交换排序intSearch(inta,intn,intval);普通查找voidnizhi(inta,intn);逆置数组voidLeftRotate(inta,intn,intm);左旋m位voidRightRotate(inta,intn,intm);右旋m位voidjosephus(intman,intn,intc,intm);约瑟夫环voidjuzhen(intc100);voidsushu(inta,intn);intmain()(int1,n,i;intal,d;数值输入inta100=0;intb1000=0;intc100100;while(l)Printf("n*n")printf("0.退出*n);Printf("1.配置系统参数*n,z)printf(z,2.生成样本数据*n)printf(zz3.显示数组*11/z)Printf("4.删除*n)printf("5.插入*n,z)printf("6.统计*n)printf("7.查找*nzz)printf("8.判断*n)Printf(9.罗列数组元素*n,z)printf(zz10.数组的其他应用*n)printf(,11.自选应用*n);Printf("*n");printf("请选择O11:");scanf("%c,&n);switch(n)caseO:exit(O);case1:Printf(数组长度:);scanf(,z%d,&1);break;case2:Printf(1)用指定范围的随机数填充数组n);printf(zz2)键盘输入n");printf3)整个数组填同一个值n);printf4)用等差序列填充数组n);Printf("选择1)4)n");scanf(zz%dzz,&n);switch(n)case1:Printf(输入随机数范围:"):scanf("%d%c,&al,&d);FillArray(a,al,d,1);break;case2:for(i=0;i<l;i+)scanf(zz%dzz,&ai);break;case3:Printf("输入填充值:);scanf("%d",&n);for(i=0;i<l;i+)ai=n;break;case4:Printf(输入首项和公差:);scanf("%d%d”,&.al,&d);aO=al;for(i=l;i<l;i+)ai=ai-l+d;break;break;casecase3:printarr(a,1);break;4printfl)删除指定下标的元素n);printf2)删除指定值的元素n);printf3)删除按指定下标区间的一组元素n);Printf(选择l)-3)n");SCanf("%c,&n);switch(n)case1:Printf("输入删除元素下标:);scanf(zz%dz,&al);iDelete(a,1,al);1-;Printf(改变后数组为:n);printarr(a,1);break;case2:Printf(输入要删除的值:);scanf(",&al);vDelete(a,1,al);break;case3:Printf(输入删除区间下标);scanfC%d%d",&al,&d);DeleteRange(a,1,al,d);1=1-(d-al+l);break;)break;case5:Printf("1)按指定下标位置插入新元素n");Printf(2)在有序数组中插入新元素保持有序性n);Printf(选择1)-2)n);scanf&n);switch(n)case1:Printf(输入要插入的数及插入位置:);scanf("%d%d”,&al,&d);Insert(a,al,d,1);1=1+1;Printf(“改变后数组为:n");printarr(a,1);break;case2:Printf(输入要插入的元素:);scanf(zz%d,&al);Orderinsert(a,1,al);1=1÷1;Printf("改变后数组为:n");printarr(a,1);break;break;case6:Printf('T)求最大值n");Printf(2)求最小值n");Printf("3)求平均值n");Printf(4)求方差和均方差n);Printf("选择l)-4)n");scanf(z,%dz,&n);switch(n)case1:printf(最大值i”,mmax(a,1);break;case2:printf("最小值%d”,mmin(a,1);break;case3:Printf("平均值%f”,average(a,1);break;case4:fangcha(a,1);break;)break;case7:Printf(1)普通查找r);Printf(2)二分查找n");Printf(选择D-2)r);scanf(,%d,&n);switch(n)case1:Printf(输入要查找的数:n);scanf(zz%dzz,&al);d=Search(a,1,al);if(d=(T)Printf("查找失败);elseprintf(xza%d=%d*,d,al);break;case2:Printf("输入要查找的数:n");scanf(",&al);dtsearch(a,1,al);if(d(T)Printf("查找失败);elseprintf(zza%d=%dzz,d,al);break;)break;case8:Printf("1)是否升序罗列n,z);Printf(2)是否降序罗列n);Printf(3)是否全部相等n);Printf(选择l)-3)n");scanf(zz%dz&n);switch(n)case1:if(isAsc(a,D=Dprintf("升序罗列n");elsePrintf("非升序罗列n");break;case2:if(isDesc(a,D=Dprintf("降序罗列n,z);elsePrintf("非降序罗列n");break;case3:if(isEqual(a,1)=1)printf(全部相等n);elsePrintf("不全相等n");break;)break;case9:Printf("1)排序n");Printf(2)逆置数组n);printf("3)左旋薮组n");Printf(4)右旋数组n");Printf(选择1)-4)n");scanf(zz%dzz,&n);switch(n)case1:Printf("1)冒泡法n");Printf(2)选择法n");printf(,z3)交换法n");Printf(选择l)-3)n");scanf("%c,&n);switch(n)case1:bubblesort(a,1);Printf(改变后数组为:n");printarr(a,1);break;case2Iselectsort(a,1);printf(改变后数组为:nzz);printarr(a,1);break;case3:exchangesort(a,1);Printf(改变后数组为:n");printarr(a,1);break;break;case2:nizhi(a,1);Printf(改变后数组为:n,z);printarr(a,1);break;case3:Printf("左旋位数:);scanf("%d",&d);1.eftRotate(a,1,d);printf(“改变后数组为:nz,);printarr(a,1);break;case4:Printf("右旋位数:);scanf("%c,&d);RightRotate(a,1,d);Printf("改变后数组为:n);printarr(a,1);break;)break;case10:Printf(1)约瑟夫环n");printf("2)筛法求素数n");Printf("选择l)-2)n");scanf(,%d,z,&n);switch(n)case1:Printf(总人数,起始位置和报数间隔:);scanf(zz%d%d%d",&n,&al,&d);josephus(b,n,al,d);Printf(约瑟夫环:n");for(i-0;i<n;i+)Printf("%d%c",bi,(i+l)%15)=0?n'break;case2:sushu(a,1);break;)break;case11:printf("矩阵乘法n");juzhen(c);break;default:Printf(输入错误,重新输入n);))voidprintarr(inta,intn)inti;for(i=0;i<n;i+)printf(zz%d*,ai);)voidiDelete(inta,int1,intid)inti;for(i=id;i<l-l;i+)ai=ai+l;voidDeleteRange(inta,int1,ints,intt)inti,j;i=t+l;j=s;for(;i<l;)aj=ai;j+÷I7=I(t-s+l);Printf(改变后数组为:n);printarr(a,1);voidvDelete(inta,int1,intid)inti;for(i=0;i<l;i+)if(ai=id)iDelete(a,1,i);i;1-;)Printf(改变后数组为:n);printarr(a,1);voidFillArray(int*a,intm,intn,int1)(inti,j,t;for(i=0;i<1;)(t=randO%(n-m+1)+m;for(j=0;j<i;j+)if(aj二二t)break;if(j=i)ai+=t;)voidDelete(inta,intn,intid)intmmin(inta,intn)inti,low;low=a0;for(i-l;i<n;i+)if(ai<low)low=ai;)return(low);)intmmax(inta,intn)inti,high;high=aO;for(i=l;i<n;i+)if(ai>high)high=ai;)return(high);)floataverage(inta,intn)floatp;inti,sum-0;for(i=0;i<n;i+)sum+=ai;P=(float)sum/(float)n;return(p);)voidfangcha(inta,int1)inti;doublef,b;floatm=0,x;x-average(a,1);for(i=0;i<l;i+)m+=(float)ai-)*(float)ai-);)f=ml;b=sqrt(f);Printf(方差二%f标准差=%f”,f,b);)intisAsc(inta,intn)inti;for(i-0;i<n-l;i+)if(ai>ai+l)return(0);return(1);intisDesc(inta,intn)inti;for(i=0;i<n1;i+)if(ai<ai+l)return(0);return(1);intisEqual(inta,intn)inti;for(i=0;i<n-l;i+)if(ai!=ai+l)return(0);return(1);voidInsert(int*r,intm,intn,int1)inti;for(i=1;i>=n-l;i-)*(r+i+l)=*(r+i);*(r+n1)=m;voidOrderinsert(inta,int1,intval)intk,i;if(isAsc(a,D=Dfor(i-0;val>ai;i+);k=i+l;Insert(a,val,k,1);)if(isDesc(a,D-=Dfor(i=0;val<ai;i+);k=i+l;Insert(a,val,k,1);)intSearch(inta,intn,intval)inti;for(i=0;i<n;i+)if(ai-val)return(i);return(-1);inttsearch(intr,intn,intkey)intlow,mid,high,i=0;low三0;high=n-l;if(isAsc(r,n)=l)while(low<=high)raid=(low+high)/2;if(key>rmid)low=mid+l;elseif(key=rmid)return(mid);elsehigh=mid-l;return(-1);if(isDesc(r,n)=1)while(low<=high)mid=(low+high)/2;if(key<rmid)low=mid+l;elseif(key=rmid)return(mid);elsehigh=mid-l;return(-1);voidjosephus(intman,intn,intc,intm)inti,k,pos;for(i=0;i<n+l;i+)mani=0;i=k=0;for(pos=(CT);kn;PoS=(pos+l)%n)if(manpos=O)i+;if(i=m)i=0;k+÷manpos=k;voidselectsort(intr,intn)inti,j,k,1=0;inttemp;for(i=0;i<n-l;i+)k=i;for(j=i+l;j<n;j+)if(rj>=rk)k=j;if(k!=itork!=ri)temperk;rk=ri;ri=temp;voidbubblesort(intr,intn)inti,j,last;inttemp;i=n;while(i>l)last0;for(j=ljj<iJ+)if(rj-l<rj)temp=rj;rj=rj-l;rj-l=temp;last=j;)i=last;)voidexchangesort(inta,intn)inttemp;inti,j;for(i=0;i<n-l;i+)for(j=i+l;j<n;j+)if(ai<aj)temp=ai;ai=aj;aj=temp;)voidnizhi(inta,intn)inttemp;inti=0,j=n-1;for(;i<j;i+»j)temp-ai;ai=aj;aj=temp;)voidLeftRotate(inta,intn,intm)inti,j,temp;for(i=0;i<m;i+)temp=aO;for(j=0;j<n-l;j+)aj=aj+l;a11-l=temp;voidRightRotate(inta,intn,intm)inti,j,temp;for(i=0;i<m;i+)temp=an-l;for(j=n-1;j>0;j-)aj=aj-l;aO=temp;voidsushu(inta,intn)inti,j,k;for(i-0;i<n;i+)k=sqrt(ai);if(ai=l&&ai=2)printf(z,%dai);elsefor(j=2;j<=k;j+)if(ai%j-=O)break;if(j>=k+l)printf(*%dzz,ai);voidjuzhen(intc100)inta100100;intb100100;intm,n,p,i,j,1,s=0;Printf(输入相乘矩阵的行列数(如3*2与2*4数组相乘输入“324”):n);scanf(zz%d%d%d,z,&m,&n,&p);printf("输入第一个数组:n");for(iz0;i<m;i÷+)Printf(输入第d行元素:",i+l);for(j=0;j<n;j+)scanf(zz%dzz,&aij);printf("输入第二个数组:n");for(i=0;i<n;i+)Printf(输入第d行元素:",i÷l);f

    注意事项

    本文(数组运算器实验报告.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开