狠狠干影院/欧美午夜电影在线观看/高黄文/国产精品一区二区在线观看完整版

一元數組運算器實驗報告

| 瀏覽次數:

 數組運算器實驗報告 實驗目的 · 實現一個數組運算器 實驗要求 ·一維數組的定義和使用 ·循環結構和分支結構 ·函數的定義和調用 ·數據處理技術(排序、插入、刪除、查找、統計、逆置、左旋、右旋)

 ·數組作為實現算法的輔助工具(篩選法求素數、約瑟夫環)

 實驗思路 1. 定義一維數組 首先配置數組大小,再填充數據。

 時間復雜度:O(n) 2. 顯示一維數組

  輸出數組每一個元素。

  時間復雜度:O(n)

 3. 數據處理 調用排序函數、插入函數、刪除函數、查找函數、統計函數、逆置函數、 左旋函數、右旋函數對數據進行操作。

 時間復雜度:O(n)

 4. 數組輔助工具 調用篩選法求素數函數、約瑟夫環函數實現算法。

 時間復雜度: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()

 //插入菜單 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 p83()

 //是否全部相等 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()

 //篩選法求素數 測試數據

 具體效果由測試者體驗,例如下圖:

 調試分析

 調試時編寫一個函數對其 debug,減輕了后期調試壓力。

 實驗心得

 對一維數組的應用更加熟練;能加快編程速度和效率;能編寫和調試更長的程序。

 源程序清單 #include<stdlib.h> #include<stdio.h> #include<math.h> #include<time.h>

 int a[10000],top,i; #define FOR for(i=0;i<top;i++) void p() {

  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("請選擇 0-10:"); } void p1()

 //配置系統參數 {

 printf("請輸入數組大小:");

 scanf("%d",&top);

 }

 void p2()

  //生成樣本數據

 {

  printf("\n1)用指定范圍的隨機數填充數組\n");

 printf("2)鍵盤輸入\n");

 printf("3)整個數組填同一個值\n");

 printf("4)用等差序列填充數組(輸入首項和公差)\n");

 printf("請選擇 1-4:"); } void p21() {

 int A,B;

 printf("請輸入隨機數的下限和上限:");

 scanf("%d%d",&A,&B);

 srand((unsigned int)time(NULL));

 FOR a[i]=rand()%(B-A)+A; } void p22() {

 printf("請輸入%d 個數填充數組:",top);

  FOR scanf("%d",&a[i]); }

 void p23() {

 int k;

  printf("請輸入想填充的數據:");

 scanf("%d",&k);

 FOR a[i]=k; } void p24() {

 int A,d;

 printf("請輸入首項和公差:");

 scanf("%d%d",&A,&d);

 a[0]=A;

 for(i=1;i<top;i++) a[i]=a[i-1]+d;

 } void p3()

  // 顯示數組

 {

 FOR printf("%-6d",a[i]);

 printf("\n"); }

 void p4()

 // 刪除

 {

 printf("\n1)刪除指定下標的元素\n");

  printf("2)刪除指定值的元素\n");

 printf("3)刪除按指定下標區間的一組元素\n");

 printf("請選擇 1-3:"); } void p41(int k) {

  for(i=k;i<top;i++) a[i]=a[i+1]; } void p42(int k) {

 FOR

 {

  if(a[i]==k) p41(i);

  } } void p43(int A,int B) {

 for(i=A;i<B+1;i++) a[i]=a[i+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;i>j;i--) a[i]=a[i-1];

 a[j]=k; }

 void p52sx() {

 int k,j;

  printf("請輸入插入值:");

 scanf("%d",&k);

  if(k<a[0])

 {

  top++;

  for(i=top-1;i>0;i--) a[i]=a[i-1];

 a[0]=k;

 }

 else if(k>a[top-1])

 {

  top++;

  a[top-1]=k;

  }

 else

  {

  FOR

  {

 if((a[i]<=k)&&(a[i+1]>k))

 {

  top++;

 for(j=top-1;j>i+1;j--) a[j]=a[j-1];

  a[i+1]=k;

  }

  }

 }

 }

 void p52jx() {

  int k,j;

  printf("請輸入一個數,代表要插入的數:");

 scanf("%d",&k);

 if(k>a[0])

 {

  top++;

  for(i=top-1;i>0;i--) a[i]=a[i-1];

  a[0]=k;

 }

 else if(k<a[top-1])

 {

  top++;

  a[top-1]=k;

 }

 else

  {

  FOR

  {

 if((a[i]>=k)&&(a[i+1]<k))

 {

  top++;

 for(j=top-1;j>i+1;j--) a[j]=a[j-1];

  a[i+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(a[i]>a[k]) k=i;

 printf("最大值=%d\n",a[k]); } void p62()

 {

 int k=0;

 FOR if(a[i]<a[k]) k=i;

 printf("最小值=%d\n",a[k]);

 }

 void p63() {

 double s=0;

 FOR s+=a[i];

 printf("平均值=%lf\n",s/top); } void p64() {

 double v,f,t,s1=0,s2=0;

 FOR {s1+=a[i];s2+=a[i]*a[i];}

 v=s1/top;

 f=s2/top-v*v;

 t=sqrt(f);

 printf("方差=%lf\n 均方差=%lf\n",f,t); } void p7()

  //查找

 {

 printf("\n1)普通查找\n");

 printf("2)二分查找(首先保證有序)\n");

 printf("請選擇 1-2:"); } void p71(int k) {

 int flag=0;

 FOR

  if(a[i]==k) flag=1;

 if(flag==1)

  {

 FOR if(a[i]==k) printf("找到元素%d,下標為%d ,即a[%d]=%d\n ",k,i,i,k);

 }

 else printf("未找到元素%d\n",k); } void p72(int k) {

 int l=0,h=top-1,m;

 while(l<=h)

 {

 m=(l+h)/2;

  if(k>a[m]) l=m+1;

  else if(k<a[m]) 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() {

 int flag=0;

 for(i=1;i<top;i++)

  if(a[i]<a[i-1]) flag=1;

 if(flag==0) printf("是\n");

 else printf("否\n");

 } void p82()

 {

 int flag=0;

 for(i=1;i<top;i++)

  if(a[i]>a[i-1]) flag=1;

 if(flag==0) printf("是\n");

 else printf("否\n"); } void p83()

 {

 int flag=0;

 for(i=1;i<top;i++)

  if(a[i]!=a[i-1]) flag=1;

 if(flag==0) printf("是\n");

 else printf("否\n"); } void p9()

 //排列數組元素

 {

 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;i<top-1;i++)

  for(j=0;j<top-i-1;j++)

 if(a[j]<a[j+1])

  {

 t=a[j];

 a[j]=a[j+1];

 a[j+1]=t;

  } } void p912()

 {

 int j,k,t;

 for(i=0;i<top-1;i++)

 {

  k=i;

  for(j=i+1;j<top;j++) if(a[k]>a[j]) k=j;

  if(k!=i)

  {

 t=a[k];

 a[k]=a[i];

 a[i]=t;

  }

  } } void p913() {

 int t,j;

 for(i=0;i<top-1;i++)

  for(j=i+1;j<top;j++)

 if(a[i]<a[j])

 {

  t=a[i];

 a[i]=a[j];

  a[j]=t;

  }

 } void p92(int a[],int A,int B) {

 int t,j;

 for(i=A,j=B;i<j;i++,j--)

  {

 t=a[i];

  a[i]=a[j];

  a[j]=t;

  }

 } void p93(int a[],int top,int k) {

 p92(a,0,k-1);

 p92(a,k,top-1);

 p92(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,man[10000];

 for(i=0;i<n+1;i++) man[i]=0;

 i=k=0;

 printf("總人數和報數間隔:\n");

 scanf("%d%d",&n,&m);

 for(pos=0;k<n;pos=(pos+1)%n)

 {

  if(man[pos]==0) i++;

  if(i==m)

  {

 i=0;

 k++;

  man[pos]=k;

  }

 }

 printf("約瑟夫環:\n");

 for(pos=0;pos<n;pos++)

 printf("%-6d%c",man[pos],((pos+1)%10==0)?"\n":" ");

 printf("\n"); } void p102() {

 int j,n;char line[10000];

 printf("求 1-指定數之間的素數\n");

 printf("輸入一個數:");

 scanf("%d",&n);

 for(i=0;i<=n;i++) line[i]=1;

 for(i=2;i<=n;i++)

 {

  if(line[i])

  {

 printf("%-6d",i);

 for(j=i+1;j<=n;j++)

  if(j%i==0) line[j]=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: 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(a[0]<=a[top-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();break;

 case 4: p64();break;

  }

 }

  if(zhu==7)

 {

  p7();

  scanf("%d",&fu);

  switch(fu)

  {

 case 1: printf("請輸入想查找的元素:");

 scanf("%d",&k);

 p71(k);break;

 case 2: printf("請輸入想查找的元素:");

 scanf("%d",&k);

 p72(k);break;

  }

 }

  if(zhu==8)

  {

 p8();

  scanf("%d",&fu);

 switch(fu)

  {

 case 1:p81();break;

  case 2:p82();break;

  case 3:p83();break;

 }

 }

  if(zhu==9)

 {

  p9();

  scanf("%d",&fu);

  switch(fu)

  {

 case 1:p91();scanf("%d",&fu);

 switch(fu)

  {

 case 1:p911();break;

  case 2:p912();break;

  case 3:p913();break;

 }break;

 case 2:p92(a,0,top-1);break;

  case 3: printf("請輸入左旋位數:");

 scanf("%d",&k);

 p93(a,top,k);break;

 case 4: printf("請輸入右旋位數:");

 scanf("%d",&k);

 p94(a,top,k);

 break;

  }

 }

 if(zhu==10)

 {

  p10();

  scanf("%d",&fu);

  switch(fu)

 {

  case 1:p101();break;

  case 2:p102();break;

  }

  }

 }

 }

推薦訪問: 運算器 數組 實驗

【一元數組運算器實驗報告】相關推薦

工作總結最新推薦

NEW