數組運算器實驗報告 實驗目的 · 實現一個數組運算器 實驗要求 ·一維數組的定義和使用 ·循環結構和分支結構 ·函數的定義和調用 ·數據處理技術(排序、插入、刪除、查找、統計、逆置、左旋、右旋)
·數組作為實現算法的輔助工具(篩選法求素數、約瑟夫環)
實驗思路 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;
}
}
}
}
推薦訪問: 運算器 數組 實驗在偉大祖國73華誕之際,我參加了單位組織的“光影鑄魂”主題黨日活動,集中觀看了抗美援朝題材影片《長津湖》,再一次重溫這段悲壯歷史,再一次深刻感悟偉大抗美援朝精神。1950年10月,新中國剛剛成立一年,
根據省局黨組《關于舉辦習近平談治國理政(第四卷)讀書班的通知》要求,我中心通過專題學習、專題研討以及交流分享等形式,系統的對《習近平談治國理政》(第四卷)進行了深入的學習與交流,下面我就來談一談我個人
《習近平談治國理政》(第四卷)是在百年變局和世紀疫情相互疊加的大背景下,對以習近平同志為核心的黨中央治國理政重大戰略部署、重大理論創造、重大思想引領的系統呈現。它生動記錄了新一代黨中央領導集體統籌兩個
《真抓實干做好新發展階段“三農工作”》是《習近平談治國理政》第四卷中的文章,這是習近平總書記在2020年12月28日中央農村工作會議上的集體學習時的講話。文章指出,我常講,領導干部要胸懷黨和國家工作大
在《習近平談治國理政》第四卷中,習近平總書記強調,江山就是人民,人民就是江山,打江山、守江山,守的是人民的心。從嘉興南湖中駛出的小小紅船,到世界上最大的執政黨,在中國共產黨的字典里,“人民”一詞從來都
黨的十八大以來,習近平總書記以馬克思主義戰略家的博大胸襟和深謀遠慮,在治國理政和推動全球治理中牢固樹立戰略意識,在不同場合多次圍繞戰略策略的重要性,戰略和策略的關系,提高戰略思維、堅定戰略自信、強化戰
《習近平談治國理政》第四卷集中展示了以習近平同志為核心的黨中央在百年變局和世紀疫情相互疊加背景下,如何更好地堅持和發展中國特色社會主義而進行的生動實踐與理論探索;對于新時代堅持和發展什么樣的中國特色社
在黨組織的關懷下,我有幸參加了區委組織部組織的入黨積極分子培訓班。為期一周的學習,學習形式多樣,課程內容豐富,各位專家的講解細致精彩,對于我加深對黨的創新理論的認識、對黨的歷史的深入了解、對中共黨員的
《習近平談治國理政》第四卷《共建網上美好精神家園》一文中指出:網絡玩命是新形勢下社會文明的重要內容,是建設網絡強國的重要領域。截至2021年12月,我國網民規模達10 32億,較2020年12月增長4
剛剛召開的中國共產黨第十九屆中央委員會第七次全體會議上討論并通過了黨的十九屆中央委員會向中國共產黨第二十次全國代表大會的報告、黨的十九屆中央紀律檢查委員會向中國共產黨第二十次全國代表大會的工作報告和《