科大C语言数组大作业.docx
《科大C语言数组大作业.docx》由会员分享,可在线阅读,更多相关《科大C语言数组大作业.docx(28页珍藏版)》请在冰豆网上搜索。
![科大C语言数组大作业.docx](https://file1.bdocx.com/fileroot1/2023-7/10/e48a72ba-8302-46c8-8a4a-00a0e2f8bc4b/e48a72ba-8302-46c8-8a4a-00a0e2f8bc4b1.gif)
科大C语言数组大作业
#include
#include
#include
#include
intn=10;
voidsort(intr[],intn);//冒泡排序
voidinsert1(intarr[],intn,intelement,intn0);//插入1:
在指定位置插入,n0是插入的位置
voidinsert2(intarr[],intelement,intn);//插入2:
在有序数列中插入
voidreverse(intarr[],inta,intb);//逆置数组,从a到b
voidzuoxuan(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
{
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{
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]>element)&&(arr[i+1]{
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{
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;iprintf("%2d\t",arr[i]);
printf("\n");
}
voidjiaohuanpaixu(intarr[],intn)
{
inttemp;
inti,j;
for(i=0;ifor(j=i+1;jif(arr[i]>arr[j])
{
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
voiddelect1(intarr[],intn,intn0)//注意数组长度的变化,n0是下标,n是数组长度
{
inti;
for(i=n0;iarr[i]=arr[i+1];
}
voiddelect2(intarr[],intn,intn0)
{
inti;
for(i=0;i{
if(arr[i]==n0)
delect1(arr,n,i);
}
}
voiddelect3(intarr[],inta,intb,intn)
{
inti;
for(i=a;i
arr[i]=arr[i+b-a+1];
}
intjudge1(intarr[],intn)//判断是否是升序,并输出是否升序,其中变量n是记录数组的长度
{
inti,flag;
{
for(i=0,flag=0;iif(arr[i]>arr[i+1])
break;
}
if(flag==n-1)
printf("数组是升序排列,可以执行二分查找,有序数列中插入等操作\n");
if(flagprintf("数组不是升序排列,不可以进行二分查找,有序数列中插入等操作\n");
returnflag;
}
intjudge2(intarr[],intn)//判断是否是降序排列
{
inti,flag;
{
for(i=0,flag=0;iif(arr[i]break;
}
if(flag==n-1)
printf("数组是降序排列,可以执行二分查找,有序数列中插入等操作\n");
if(flagprintf("数组不是降序排列,不可以进行二分查找,有序数列中插入等操作\n");
returnflag;
}
voidjudge3(intarr[],intn)//判断数组元素是否都相等
{
inti,flag;
{
for(i=0,flag=0;iif(arr[i]!
=arr[i+1])
break;
}
if(flag==n-1)
printf("数组元素全相等\n");
if(flagprintf("数组元素不全相等\n");
}
doubleaver(intarr[],intn)//求平均数,返回平均数
{
inti,sum=0;
doubleaver=0;
for(i=0;i{
sum+=arr[i];
}
aver=((double)sum)/n;
returnaver;
}
intMax(intarr[],intn)//求最大值
{
inti,max_=arr[0];
for(i=0;i{
if(arr[i]>max_)
max_=arr[i];
}
returnmax_;
}
intMin(intarr[],intn)//求最小值
{
inti,min_=arr[0];
for(i=0;i{
if(arr[i]min_=arr[i];
}
returnmin_;
}
doublefangcha(intarr[],intn)//求方差
{
doubleaverage=aver(arr,n);
doublefangcha_=0;
inti;
for(i=0;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{
min=i;
for(j=i+1;jif(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{
if(arr[i]==n0)
break;
}
if(iprintf("找到元素,下标为%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(khigh=mid-1;
elsebreak;
}
if(low<=high)printf("找到元素,下标为:
%d\n",mid);
elseprintf("未找到\n");
}
voidjosephus(intdie[],intn,intm,ints)
{
inti,n0;
intsum;
for(i=0;idie[i]=0;
i=sum=0;
for(n0=s;sum{
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;iarr[i]=rand()%(b-a)+a;
}
voidshujutianchong2(intarr[],intn)//从键盘输入
{
inti;
printf("请输入%d个数填充数组:
",n);
for(i=0;iscanf("%d",&arr[i]);
}
voidshujutianchong3(intarr[],intn,intn0)//整个数组填同一个值
{
inti;
for(i=0;iarr[i]=n0;
}
voidshujutianchong4(intarr[],inta,intb,intn)//等差数列填充数组
{
intc=(b-a)/(n-1),i;
for(i=0;iarr[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)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.方差和均方差*****