收藏 分销(赏)

2023年科大C语言数组大作业.docx

上传人:丰**** 文档编号:3197670 上传时间:2024-06-24 格式:DOCX 页数:36 大小:17.62KB 下载积分:12 金币
下载 相关 举报
2023年科大C语言数组大作业.docx_第1页
第1页 / 共36页
2023年科大C语言数组大作业.docx_第2页
第2页 / 共36页


点击查看更多>>
资源描述
#include<stdio.h> #include<math.h> #include<stdlib.h> #include<time.h> int n=10; void sort(int r[],int n);//冒泡排序 void insert1(int arr[],int n,int element,int n0);//插入1:在指定位置插入,n0是插入旳位置 void insert2(int arr[],int element,int n);//插入2:在有序数列中插入 void reverse(int arr[],int a,int b);//逆置数组,从a到b void zuoxuan(int arr[],int n,int k);//左旋数组 void youxuan(int arr[],int n,int k);//右旋数组 void output(int arr[],int n);//打印数组 void jiaohuanpaixu(int arr[],int n);//互换排序 void delect1(int arr[],int n,int n0);//删除指定下标旳元素 void delect2(int arr[],int n,int n0);//删除指定值 void delect3(int arr[],int a,int b,int n);//删除指定下标区间旳元素 int judge1(int arr[],int n);//判断与否是升序,并输出与否升序,其中变量n是记录数组旳长度 int judge2(int arr[],int n);//判断与否是降序排列 void judge3(int arr[],int n);//判断数组元素与否都相等 double aver(int arr[],int n);//求平均数,返回平均数 int Max(int arr[],int n);//求最大值 int Min(int arr[],int n);//求最小值 double fangcha(int arr[],int n);//求方差 void xuanze_paixu(int arr[],int n);//选择排序 void putongchazhao(int arr[],int n,int n0);//一般查找 void erfenchazhao(int arr[],int k,int n);//二分查找 void josephus(int die[],int n,int m,int s);//约瑟夫环 void goldbach(int n);//验证哥德巴赫猜测 void shujutianchong1(int arr[],int n,int a);//用不大于a旳随机数填充数组 void shujutianchong2(int arr[],int n);//从键盘输入 void shujutianchong3(int arr[],int n,int n0);//整个数组填同一种值 void shujutianchong4(int arr[],int a,int b,int n);//等差数列填充数组 double junfangcha(int arr[],int n);//求均方差 void sort(int r[],int n) { int i,j,lastExchangeIndex; int temp; 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; } } void insert1(int arr[],int n,int element,int n0)//n是长度,n0是插入下标 { int i=0; for(i=n;i>n0;i--) arr[i]=arr[i-1]; arr[n0]=element; } void insert2(int arr[],int element,int n)//n是数组旳长度,由于有插入函数,因此数组长度定义时候要大些 { int i,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; } } void reverse(int arr[],int a,int b) { int i,t; int j=b; for(i=a;i<j;i++,j--) { t=arr[i]; arr[i]=arr[j]; arr[j]=t; } } void zuoxuan(int arr[],int n,int k) { reverse(arr,0,k-1); reverse(arr,k,n-1); reverse(arr,0,n-1); } void youxuan(int arr[],int n,int k) { zuoxuan(arr,n,n-k); } void output(int arr[],int n) { int i; for(i=0;i<n;i++) printf("%2d\t",arr[i]); printf("\n"); } void jiaohuanpaixu(int arr[],int n) { int temp; int i,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; } } void delect1(int arr[],int n, int n0)//注意数组长度旳变化,n0是下标,n是数组长度 { int i; for(i=n0;i<n;i++) arr[i]=arr[i+1]; } void delect2(int arr[],int n,int n0) { int i; for(i=0;i<n;i++) { if(arr[i]==n0) delect1(arr,n,i); } } void delect3(int arr[],int a,int b,int n) { int i; for(i=a;i<b+1;i++) arr[i]=arr[i+b-a+1]; } int judge1(int arr[],int n)//判断与否是升序,并输出与否升序,其中变量n是记录数组旳长度 { int i,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"); return flag; } int judge2(int arr[],int n)//判断与否是降序排列 { int i,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"); return flag; } void judge3(int arr[],int n)//判断数组元素与否都相等 { int i,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"); } double aver(int arr[],int n)//求平均数,返回平均数 { int i,sum=0; double aver=0; for(i=0;i<n;i++) { sum+=arr[i]; } aver=((double)sum)/n; return aver; } int Max(int arr[],int n)//求最大值 { int i,max_=arr[0]; for(i=0;i<n;i++) { if(arr[i]>max_) max_=arr[i]; } return max_; } int Min(int arr[],int n)//求最小值 { int i,min_=arr[0]; for(i=0;i<n;i++) { if(arr[i]<min_) min_=arr[i]; } return min_; } double fangcha(int arr[],int n)//求方差 { double average=aver(arr,n); double fangcha_=0; int i; for(i=0;i<n;i++) { fangcha_+=(arr[i]-average)*(arr[i]-average); } fangcha_=fangcha_/n; return fangcha_; } double junfangcha(int arr[],int n)//求均方差 { double junfangcha_; junfangcha_=pow(fangcha(arr,n),0.5); return junfangcha_; } void xuanze_paixu(int arr[],int n)//选择排序 { int i,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; } } } void putongchazhao(int arr[],int n,int n0) { int i; for(i=0;i<n;i++) { if(arr[i]==n0) break; } if(i<n) printf("找到元素,下标为%d\n",i); if(i==n) { printf("未找到元素\n"); } } void erfenchazhao(int arr[],int k,int n) { int low=0,high=n-1; int mid; while(low<=high) { mid=(low+high)/2; if(k>arr[mid]) low=mid+1; else if(k<arr[mid]) high=mid-1; else break; } if(low<=high) printf("找到元素,下标为:%d\n",mid); else printf("未找到\n"); } void josephus(int die[],int n,int m,int s) { int i,n0; int sum; 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; } } } void goldbach(int n) { int i,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;//验证与否为素数 else if(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_); } } } } } void shujutianchong1(int arr[],int n,int a,int b) { int i; srand(time(NULL)); for(i=0;i<n;i++) arr[i]=rand()%(b-a)+a; } void shujutianchong2(int arr[],int n)//从键盘输入 { int i; printf("请输入%d个数填充数组:",n); for(i=0;i<n;i++) scanf("%d",&arr[i]); } void shujutianchong3(int arr[],int n,int n0)//整个数组填同一种值 { int i; for(i=0;i<n;i++) arr[i]=n0; } void shujutianchong4(int arr[],int a,int b,int n)//等差数列填充数组 { int c=(b-a)/(n-1),i; for(i=0;i<n;i++) arr[i]=a+c*i; } main() { int arr[100]={0}; int i=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__; int i_,m,n,s; int die[100]={0}; int i0,j,k0,count=0; int a1[100]; int element; 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) { case 0: ; break; case 1:{ printf("请输入数组大小:"); scanf("%d",&n); } break; case 2: { while(i1) { printf("*****生成样本数据*****\n"); printf("*****1.用指定范围旳随机数填充数组*****\n"); printf("*****2.键盘输入*****\n"); printf("*****3.整个数组填同一种数*****\n"); printf("*****4.用等差数列填充数组*****\n"); printf("*****0.退出*****\n"); scanf("%d",&i1); switch(i1) { case 1: { printf("请输入随机数旳下限和上限:"); scanf("%d%d",&a,&b); shujutianchong1(arr,n,a,b); }break; case 2:shujutianchong2(arr,n);break; case 3: { printf("请输入想填充旳数据:"); scanf("%d",&n0); shujutianchong3(arr,n,n0); }break; case 4: { printf("请输入等差数列旳起始项和最终一项:"); scanf("%d%d",&a0,&b0); shujutianchong4(arr,a0,b0,n); } break; case 0: ;break; default: printf("请重新输入"); } } }break; case 3:output(arr,n);break; case 4: { while(i2) { printf("*****删除*****\n"); printf("*****1.删除指定下标元素*****\n"); printf("*****2.删除指定值旳元素*****\n"); printf("*****3.删除指定下标区间旳元素*****\n"); printf("*****0.退出*****\n"); scanf("%d",&i2); switch(i2) { case 1: { printf("请输入想删除旳元素对应下标:"); scanf("%d",&n0); delect1(arr,n,n0); n=n-1; }break; case 2: { printf("请输入想删除旳元素:"); scanf("%d",&n0); delect2(arr,n,n0); n=n-1; }break; case 3: { printf("请输入删除旳区间:"); scanf("%d%d",&a,&b); delect3(arr,a,b,n); n=n-(b-a)-1; }break; case 0: ;break; default:printf("请重新输入:"); } } } break; case 5: { while(i3) { printf("*****插入*****\n"); printf("*****1.指定位置插入*****\n"); printf("*****2.有序数列中插入*****\n"); printf("*****0.退出*****\n"); scanf("%d",&i3); switch(i3) { case 1: { printf("请输入插入位置和插入值:"); scanf("%d%d",&n0,&element); insert1(arr,n,element,n0); n=n+1; } break; case 2: { if((judge1(arr,n)<n)||(judge2(arr,n)<n)) break; printf("请输入插入旳值:"); scanf("%d",&element); insert2(arr,element,n); n=n+1; }break; case 0: ;break; default :printf("请重新输入:"); } } }break; case 6: { while(i4) { printf("*****记录*****\n"); printf("*****1.最大值*****\n"); printf("*****2.最小值*****\n"); printf("*****3.平均值*****\n"); printf("*****4.方差和均方差*****\n"); printf("*****0.退出*****\n"); scanf("%d",&i4); switch(i4) { case 1:printf("%d", Max(arr,n)); break; case 2:printf("%d",Min(arr,n)); break; case 3:printf("%f",aver(arr,n)); break; case 4:printf("%f,%f",fangcha(arr,n),junfangcha(arr,n)); break; case 0: ;break; default:printf("请重新输入:"); } } }break; case 7: { while(i5) { printf("*****查找*****\n"); printf("*****1.一般查找*****\n"); printf("*****2.二分查找*****\n"); printf("*****0.退出*****\n"); scanf("%d",&i5); switch(i5) { case 1: { printf("请输入想查找旳元素:"); scanf("%d",&n0); putongchazhao(arr,n,n0); }break; case 2: { printf("请输入想查找旳元素:"); scanf("%d",&k); erfenchazhao(arr,k,n); }break; case 0: ;break; default:printf("请重新输入:"); } } }break; case 8: { while(i6) { printf("*****判断*****\n"); printf("*****1.与否升序*****\n"); printf("*****2.与否降序*****\n"); printf("*****3.与否相等*****\n"); printf("*****0.退出*****\n"); scanf("%d",&i6); switch(i6) { case 1:judge1(arr,n); break; case 2:judge2(arr,n); break; case 3:judge3(arr,n); break; case 0: ;break; default:printf("请重新输入:"); } } }break; case 9: { while(i7) { printf("*****排列数组元素*****\n"); printf("*****1.排序*****\n"); printf("*****2.逆置*****\n"); printf("*****3.左旋*****\n"); printf("*****4.右旋*****\n"); printf("*****0.退出*****\n"); scanf("%d",&i7); switch(i7) { case 1: { while(i7_) { printf("0.退出1.冒泡2.选择3.互换"); scanf("%d",&i7_); switch(i7_) { case 1:sort(arr,n); break; case 2:xuanze_paixu(arr,n); break; case 3:jiaohuanpaixu(arr,n); break; case 0: ;break; default:printf("请重新输入:"); } } }break; case 2: reverse(arr,0,n-1); break; case 3: { printf("请输入左旋位数:"); scanf("%d",&k); zuoxuan(arr,n,k); }break; case 4: { printf("请输入右旋位数:"); scanf("%d",&k); youxuan(arr,n,k); } break; case 0: ;break; default:printf("请重新输入:"); } } }break; case 10: { while(i8) { printf("*****数组旳其他应用*****\n"); printf("*****1.约瑟夫环*****\n"); printf("*****2.筛法求素数*****\n"); printf("*****3.验证哥德巴赫猜测*****\n"); printf("*****0.退出*****\n"); scanf("%d",&i8); switch(i8) { case 1: { printf("请输入总人数,报数间隔和起始人编码:"); scanf("%d%d%d",&n__,&m,&s); josephus(die,n__,m,s); for(i_=0;i_<n__-1;i_++) printf("第%d个被处死旳是%d ",i_,die[i_]); printf("最终存活下来旳是%d ",die[n__-1]); }break; case 2: { for(i0=0;i0<100;i0++) a1[i0]=i0; for(j=2;j<100;j++) { for(k0=2;k0<=sqrt(j);k0++) { if(a1[j]%k0==0) { a1[j]=0; } } if(a1[j]!=0) { printf("%4d",j); count++; if(count%5==0) printf("\n"); } } } break; case 3:printf("请输入一种不不大于6旳偶数"); scanf("%d",&a_); if(a_<6||(a_%2)!=0) break; goldbach(a_); break; case 0: ;break; default:printf("请重新输入:"); } } }break; } } }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服