資源描述:
《c語言實驗報告、折半查找數(shù)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、C語言程序設(shè)計實驗報告實驗名稱數(shù)組學(xué)院材料與冶金學(xué)院專業(yè)班級新能源科學(xué)與工程姓名汪爽學(xué)號20110558任課教師柳秀梅實驗時間2012年10月13日1實驗?zāi)康?.熟練掌握一維數(shù)組、二維數(shù)組的定義、初始化和輸入/輸出方法;2.熟練掌握字符數(shù)組和字符串函數(shù)的使用;3.掌握與數(shù)組有關(guān)的常用算法(如查找、排序)。2實驗內(nèi)容編程實現(xiàn)“折半查找”的過程。要求1.設(shè)定一個整型數(shù)組存放20個元素,采用直接賦值的方法在程序之初始化該數(shù)組;2.用scanf函數(shù)輸入一個要找的數(shù)值;3.對查找的結(jié)果給出相應(yīng)的說明,如果找到該數(shù)值,則輸出“Found”信息,并給出該數(shù)是數(shù)組中的第
2、幾個元素。如果該數(shù)值不在數(shù)組中,則輸出“Notfound”信息;4.修改程序,設(shè)定輸入的數(shù)據(jù)是無序的,則先要對這些無序的數(shù)據(jù)進(jìn)行排序,然后在采用“半折查找”。3算法描述流程圖YYYYY開始a[20]={2,1,4,5,7,3,6,9,10,8,14,15,12,19,20,17,18,11,13,16},b,q,d,i,,min=0n,m,p=10,c,s=10最大數(shù)和最小數(shù)的序數(shù)max=19n<=19?i<=19?a[n]>a[i]?將最小的數(shù)賦給a[n]q>9?b是要找的數(shù)嗎b=a[s]?b>a[s]?b在前面c=s;s=(max-min)/2+mi
3、n;max=c;將區(qū)間縮小,取中點b在后面c=s;s=max-(max-min)/2min=c;將區(qū)間小,取中點輸出Found位置num=s+1輸出Notfound結(jié)束Yq=q+14源程序#include#includevoidmain(){inta[20]={2,1,4,5,7,3,6,9,10,8,14,15,12,19,20,17,18,11,13,16},b,q,d,i,max=19,min=0,n,m,p=10,c,s=10;for(n=0;n<=19;n++){for(i=n;i<=19;i++){if(a[
4、n]>a[i]){m=a[n];a[n]=a[i];a[i]=m;}}printf("%d",a[n]);}printf("請輸入要查找的數(shù)");scanf("%d",&b);for(q=1;q<=10;q++){if(max-min!=0){if(b==a[s]){d=1;break;}else{if(b>a[s]){c=s;s=max-(max-min)/2;min=c;d=0;}elsec=s;s=(max-min)/2+min;max=c;d=0;}}}if(d==1){s=s+1;printf("FoundNum=%d",s);}elsep
5、rintf("notfound");}5測試數(shù)據(jù)測試數(shù)據(jù)為5,236運行結(jié)果當(dāng)輸入數(shù)值為3時當(dāng)輸入數(shù)值為87時7出現(xiàn)問題及解決方法1.本實驗需要對數(shù)組排序因此采用循環(huán)for(n=0;n<=19;n++){for(i=n;i<=19;i++){if(a[n]>a[i]){m=a[n];a[n]=a[i];a[i]=m;}}printf("%d",a[n]);}從而將數(shù)組排序,并輸出順序數(shù)組。2.實驗需要半折找數(shù)因此采用循環(huán)for(q=1;q<=10;q++){if(max-min!=0){if(b==a[s]){d=1;break;}else{if(b
6、>a[s]){c=s;s=max-(max-min)/2;min=c;d=0;}elsec=s;s=(max-min)/2+min;max=c;d=0;}}}從而找到數(shù)組中是否有要找的數(shù),是則d=1,不是則d=0.8實驗心得1.通過實驗我對c語言的編程語言更加熟悉,加快編程輸入語言的速度。2.掌握一維數(shù)組、二維數(shù)組的定義、初始化和輸入/輸出方法;掌握字符數(shù)組和字符串函數(shù)的使用;掌握與數(shù)組有關(guān)的常用算法(如查找、排序)。3.再次讓我明白做實驗時要細(xì)心,認(rèn)真檢查。