科大C语言数组大作业_第1页
科大C语言数组大作业_第2页
科大C语言数组大作业_第3页
科大C语言数组大作业_第4页
科大C语言数组大作业_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

#include<stdio.h>#include<math.h>#include<stdlib.h>#include<time.h>intn=10;voidsort(intr[],intn);//冒泡排序voidinsert1(intarr[],intn,intelement,intn0);//插入1:在指定位置插入,n0是插入的位置voidinsert2(intarr[],intelement,intn);//插入2:在有序数列中插入voidreverse(intarr[],inta,intb);//逆置数组,从a到bvoidzuoxuan(intarr[],intn,intk);//左旋数组voidyouxuan(intarr[],intn,intk);//右旋数组voidoutput(intarr[],intn);//打印数组voidjiaohuanpaixu(intarr[],intn);//交换排序voiddelect1(intarr[],intn,intn0);//删除指定下标的元素voiddelect2(intarr[],intn,intn0);//删除指定值voiddelect3(intarr[],inta,intb,intn);//删除指定下标区间的元素intjudge1(intarr[],intn);//判断是否是升序,并输出是否升序,其中变量n是记录数组的长度intjudge2(intarr[],intn);//判断是否是降序排列voidjudge3(intarr[],intn);//判断数组元素是否都相等doubleaver(intarr[],intn);//求平均数,返回平均数intMax(intarr[],intn);//求最大值intMin(intarr[],intn);//求最小值doublefangcha(intarr[],intn);//求方差voidxuanze_paixu(intarr[],intn);//选择排序voidputongchazhao(intarr[],intn,intn0);//普通查找voiderfenchazhao(intarr[],intk,intn);//二分查找voidjosephus(intdie[],intn,intm,ints);//约瑟夫环voidgoldbach(intn);//验证哥德巴赫猜想voidshujutianchong1(intarr[],intn,inta);//用小于a的随机数填充数组voidshujutianchong2(intarr[],intn);//从键盘输入voidshujutianchong3(intarr[],intn,intn0);//整个数组填同一个值voidshujutianchong4(intarr[],inta,intb,intn);//等差数列填充数组doublejunfangcha(intarr[],intn);//求均方差voidsort(intr[],intn){ inti,j,lastExchangeIndex; inttemp; i=n; while(i>0) { lastExchangeIndex=0; for(j=1;j<i;j++) { if(r[j-1]>r[j]) { temp=r[j]; r[j]=r[j-1]; r[j-1]=temp; lastExchangeIndex=j; } } i=lastExchangeIndex; }}voidinsert1(intarr[],intn,intelement,intn0)//n是长度,n0是插入下标{ inti=0; for(i=n;i>n0;i--) arr[i]=arr[i-1]; arr[n0]=element;}voidinsert2(intarr[],intelement,intn)//n是数组的长度,因为有插入函数,所以数组长度定义时候要大些{ inti,j; for(i=0;i<n;i++) { if((arr[i]==element)&&(arr[i+1]!=element)) { for(j=n;j>i+1;j--) arr[j]=arr[j-1]; arr[i+1]=element; break; } if(((arr[i]<element)&&(arr[i+1]>element))||((arr[i]>element)&&(arr[i+1]<element))) { for(j=n;j>i+1;j--) arr[j]=arr[j-1]; arr[i+1]=element; } if(element>arr[n-1]) arr[n]=element; }}voidreverse(intarr[],inta,intb){ inti,t; intj=b; for(i=a;i<j;i++,j--) { t=arr[i]; arr[i]=arr[j]; arr[j]=t; }}voidzuoxuan(intarr[],intn,intk){ reverse(arr,0,k-1); reverse(arr,k,n-1); reverse(arr,0,n-1);}voidyouxuan(intarr[],intn,intk){ zuoxuan(arr,n,n-k);}voidoutput(intarr[],intn){ inti; for(i=0;i<n;i++) printf("%2d\t",arr[i]); printf("\n");}voidjiaohuanpaixu(intarr[],intn){ inttemp; inti,j; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(arr[i]>arr[j]) { temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; }}voiddelect1(intarr[],intn,intn0)//注意数组长度的变化,n0是下标,n是数组长度{ inti; for(i=n0;i<n;i++) arr[i]=arr[i+1];}voiddelect2(intarr[],intn,intn0){ inti; for(i=0;i<n;i++) { if(arr[i]==n0) delect1(arr,n,i); }}voiddelect3(intarr[],inta,intb,intn){ inti; for(i=a;i<b+1;i++) arr[i]=arr[i+b-a+1];}intjudge1(intarr[],intn)//判断是否是升序,并输出是否升序,其中变量n是记录数组的长度{ inti,flag; { for(i=0,flag=0;i<n;i++,flag++) if(arr[i]>arr[i+1]) break; } if(flag==n-1) printf("数组是升序排列,可以执行二分查找,有序数列中插入等操作\n"); if(flag<n-1) printf("数组不是升序排列,不可以进行二分查找,有序数列中插入等操作\n"); returnflag;}intjudge2(intarr[],intn)//判断是否是降序排列{ inti,flag; { for(i=0,flag=0;i<n;i++,flag++) if(arr[i]<arr[i+1]) break; } if(flag==n-1) printf("数组是降序排列,可以执行二分查找,有序数列中插入等操作\n"); if(flag<n-1) printf("数组不是降序排列,不可以进行二分查找,有序数列中插入等操作\n"); returnflag;}voidjudge3(intarr[],intn)//判断数组元素是否都相等{ inti,flag; { for(i=0,flag=0;i<n;i++,flag++) if(arr[i]!=arr[i+1]) break; } if(flag==n-1) printf("数组元素全相等\n"); if(flag<n-1) printf("数组元素不全相等\n");}doubleaver(intarr[],intn)//求平均数,返回平均数{ inti,sum=0; doubleaver=0; for(i=0;i<n;i++) { sum+=arr[i]; } aver=((double)sum)/n; returnaver;}intMax(intarr[],intn)//求最大值{ inti,max_=arr[0]; for(i=0;i<n;i++) { if(arr[i]>max_) max_=arr[i]; } returnmax_;}intMin(intarr[],intn)//求最小值{ inti,min_=arr[0]; for(i=0;i<n;i++) { if(arr[i]<min_) min_=arr[i]; } returnmin_;}doublefangcha(intarr[],intn)//求方差{ doubleaverage=aver(arr,n); doublefangcha_=0; inti;for(i=0;i<n;i++) { fangcha_+=(arr[i]-average)*(arr[i]-average); } fangcha_=fangcha_/n; returnfangcha_;}doublejunfangcha(intarr[],intn)//求均方差{ doublejunfangcha_; junfangcha_=pow(fangcha(arr,n),0.5); returnjunfangcha_;}voidxuanze_paixu(intarr[],intn)//选择排序{ inti,j,temp,min; for(i=0;i<n-1;i++) { min=i; for(j=i+1;j<n;j++) if(arr[min]>arr[j]) min=j; if(min!=i) { temp=arr[i]; arr[i]=arr[min]; arr[min]=temp; } }}voidputongchazhao(intarr[],intn,intn0){ inti; for(i=0;i<n;i++) { if(arr[i]==n0) break; } if(i<n) printf("找到元素,下标为%d\n",i); if(i==n) { printf("未找到元素\n"); }}voiderfenchazhao(intarr[],intk,intn){intlow=0,high=n-1; intmid; while(low<=high) { mid=(low+high)/2; if(k>arr[mid]) low=mid+1; elseif(k<arr[mid]) high=mid-1; elsebreak; } if(low<=high)printf("找到元素,下标为:%d\n",mid); elseprintf("未找到\n");}voidjosephus(intdie[],intn,intm,ints){ inti,n0; intsum; for(i=0;i<n+1;i++) die[i]=0; i=sum=0; for(n0=s;sum<n;n0=(n0+1)%n) { if(die[n0]==0) i++; if(i==m) { i=0; sum++; die[n0]=sum; } }}voidgoldbach(intn){ inti,i0,i_,i_0; for(i=3;i<=(n/2);i+=2) { for(i0=2;i0<=sqrt(i)+1;i0++) { if(i%i0==0) break;//验证是否为素数 elseif(i0>sqrt(i)) { i_=n-i; for(i_0=2;i_0<=sqrt(i);i_0++); { if(i_%i_0==0) break; if(i_0>sqrt(i)) printf("n=%d+%d\n",i,i_); } } } } }voidshujutianchong1(intarr[],intn,inta,intb){ inti; srand(time(NULL)); for(i=0;i<n;i++) arr[i]=rand()%(b-a)+a;}voidshujutianchong2(intarr[],intn)//从键盘输入{ inti; printf("请输入%d个数填充数组:",n); for(i=0;i<n;i++) scanf("%d",&arr[i]);}voidshujutianchong3(intarr[],intn,intn0)//整个数组填同一个值{ inti; for(i=0;i<n;i++) arr[i]=n0;}voidshujutianchong4(intarr[],inta,intb,intn)//等差数列填充数组{ intc=(b-a)/(n-1),i; for(i=0;i<n;i++) arr[i]=a+c*i;}main(){ intarr[100]={0};inti=1,i1=1,i2=1,i3=1,i4=1,i5=1,i6=1,i7=1,i7_=1,i8=1,a,b,n0,a0,b0,k,a_,n__;inti_,m,n,s; intdie[100]={0}; inti0,j,k0,count=0; inta1[100]; intelement; while(i) {printf("**********主菜单**********\n"); printf("*****0.退出*****\n"); printf("*****1.配置系统参数*****\n"); printf("*****2.生成样本数据*****\n"); printf("*****3.显示数组*****\n"); printf("*****4.删除*****\n"); printf("*****5.插入*****\n"); printf("*****6.统计*****\n"); printf("*****7.查找*****\n"); printf("*****8.判断*****\n"); printf("*****9.排列数组元素*****\n"); printf("*****10.数组的其他应用*****\n"); printf("请输入:"); scanf("%d",&i); switch(i) { case0:;break; case1:{ printf("请输入数组大小:"); scanf("%d",&n); }break; case2: { while(i1) { printf("*****生成样本数据*****\n"); printf("*****1.用指定范围的随机数填充数组*****\n"); printf("*****2.键盘输入*****\n"); printf("*****3.整个数组填同一个数*****\n"); printf("*****4.用等差数列填充数组*****\n"); printf("*****0.退出*****\n"); scanf("%d",&i1); switch(i1) { case1: { printf("请输入随机数的下限和上限:"); scanf("%d%d",&a,&b); shujutianchong1(arr,n,a,b); }break; case2:shujutianchong2(arr,n);break; case3: { printf("请输入想填充的数据:"); scanf("%d",&n0); shujutianchong3(arr,n,n0); }break; case4: { printf("请输入等差数列的起始项和最后一项:"); scanf("%d%d",&a0,&b0); shujutianchong4(arr,a0,b0,n); } break; case0:;break; default:printf("请重新输入"); } } }break; case3:output(arr,n);break; case4: {while(i2) { printf("*****删除*****\n"); printf("*****1.删除指定下标元素*****\n"); printf("*****2.删除指定值的元素*****\n"); printf("*****3.删除指定下标区间的元素*****\n"); printf("*****0.退出*****\n"); scanf("%d",&i2); switch(i2) { case1: { printf("请输入想删除的元素对应下标:"); scanf("%d",&n0); delect1(arr,n,n0); n=n-1; }break; case2: { printf("请输入想删除的元素:"); scanf("%d",&n0); delect2(arr,n,n0); n=n-1; }break; case3: { printf("请输入删除的区间:"); scanf("%d%d",&a,&b); delect3(arr,a,b,n); n=n-(b-a)-1; }break; case0:;break; default:printf("请重新输入:"); } } } break; case5: { while(i3) { printf("*****插入*****\n"); printf("*****1.指定位置插入*****\n"); printf("*****2.有序数列中插入*****\n");printf("*****0.退出*****\n"); scanf("%d",&i3); switch(i3) { case1: { printf("请输入插入位置和插入值:"); scanf("%d%d",&n0,&element); insert1(arr,n,element,n0); n=n+1; } break; case2: { if((judge1(arr,n)<n)||(judge2(arr,n)<n)) break; printf("请输入插入的值:"); scanf("%d",&element); insert2(arr,element,n); n=n+1; }break; case0:;break; default:printf("请重新输入:"); } } }break; case6: { while(i4) { printf("*****统计*****\n"); printf("*****1.最大值*****\n"); printf("*****2.最小值*****\n"); printf("*****3.平均值*****\n"); printf("*****4.方差和均方差*****\n"); printf("*****0.退出*****\n"); scanf("%d",&i4); switch(i4) { case1:printf("%d",Max(arr,n)); break; case2:printf("%d",Min(arr,n)); break; case3:printf("%f",aver(arr,n)); break; case4:printf("%f,%f",fangcha(arr,n),junfangcha(arr,n)); break; case0:;break; default:printf("请重新输入:"); } } }break; case7: { while(i5) { printf("*****查找*****\n"); printf("*****1.普通查找*****\n"); printf("*****2.二分查找*****\n"); printf("*****0.退出*****\n"); scanf("%d",&i5); switch(i5) { case1: { printf("请输入想查找的元素:"); scanf("%d",&n0); putongchazhao(arr,n,n0); }break; case2: { printf("请输入想查找的元素:"); scanf("%d",&k); erfenchazhao(arr,k,n); }break; case0:;break; default:printf("请重新输入:"); } } }break; case8: { while(i6) { printf("*****判断*****\n"); printf("*****1.是否升序*****\n"); printf("*****2.是否降序*****\n"); printf("*****3.是否相等*****\n"); printf("*****0.退出*****\n"); scanf("%d",&i6); switch(i6) { case1:judge1(arr,n); break; case2:judge2(arr,n); break; case3:judge3(arr,n); break; case0:;break; default:printf("请重新输入:"); } } }break; case9: { while(i7) { printf("*****排列数组元素*****\n"); printf("*****1.排序*****\n"); printf("*****2.逆置*****\n"); printf("*****3.左旋*****\n"); printf("*****4.右旋*****\n"); printf("*****0.退出*****\n"); scanf("%d",&i7); switch(i7) { case1: { while(i7_) { printf("0.退出1.冒泡2.选择3.交换"); scanf("%d",&i7_); switch(i7_) { case1:sort(arr,n); break; case2:xuanze_paixu(arr,n); break; case3:jiaohuanpaixu(arr,n); break; case0:;break; default:printf("请重新输入:"); } } }break; case2: reverse(arr,0,n-1); break; case3: { printf("请输入左旋位数:"); scanf("%d",&k); zuoxuan(arr,n,k); }break; case4: { printf(

温馨提示

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

最新文档

评论

0/150

提交评论