版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、學(xué) 院*班 級(jí)*學(xué) 號(hào)*姓 名*目錄1 摘要31.1 設(shè)計(jì)題目31.2 設(shè)計(jì)內(nèi)容31.3 開發(fā)工具31.4 應(yīng)用平臺(tái)32 詳細(xì)設(shè)計(jì)32.1 程序結(jié)構(gòu)32.2 主要功能32.3 函數(shù)實(shí)現(xiàn)32.4 開發(fā)日志43 程序調(diào)試及運(yùn)行43.1 程序運(yùn)行結(jié)果43.2 程序使用說明43.3 程序開發(fā)總結(jié)44 附件源程序41 摘要1.1 設(shè)計(jì)題目折半法查找演示程序1.2 設(shè)計(jì)內(nèi)容 本程序是一個(gè)演示折半查找算法的演示程序。由用戶輸入查找的數(shù)據(jù)表列和查找的數(shù)據(jù),系統(tǒng)在將數(shù)表排序后可以在屏幕上演示在排序后的表列中按折半查找法查找該數(shù)據(jù)的具體過程通過每次查找的中間數(shù)據(jù)、下次查找表列等,具體效果見下列圖,支持屢次演示、錯(cuò)
2、誤提醒,程序暫停演示功能。1.3 開發(fā)工具Visual C+ 6.0和Win32。1.4 應(yīng)用平臺(tái)Windows 2000/XP/Vista 32位2 詳細(xì)設(shè)計(jì)2.1 程序結(jié)構(gòu)程序功能模塊:本程序主要由五大模塊組成:程序說明模塊、輸入模塊、排序模塊、折半法查找及顯示模塊、進(jìn)程選擇模塊。各模塊的主要功能如下:程序說明模塊:給使用者營造一個(gè)較為友好的界面,同時(shí)提供程序開發(fā)人員的相關(guān)信息以及程序操作的相關(guān)說明信息。此局部模塊主函數(shù)源代碼如下:int aN;/*存儲(chǔ)要查找的數(shù)表,用戶輸入*/ int i,n,num,count;/*count為折半次數(shù)計(jì)數(shù)器,n為數(shù)表數(shù)據(jù)個(gè)數(shù),num存儲(chǔ)所查數(shù)據(jù)*/
3、int top,bottom,mid;char c;/*存儲(chǔ)選擇函數(shù)中的輸入的字符y或n*/ int flag=1;/*折半法循環(huán)標(biāo)志變量*/ int loc=-1;/*存儲(chǔ)所查找數(shù)據(jù)位置*/double k=0; p_s(76);puts("n");/*引用p_s函數(shù),打出一行'*'*/p_s函數(shù)位于print_star.cpp文件中,參見下文printf("*歡*迎*使*用*折*半*查*找*法*演*示*器*n");puts("n");/*程序歡送語*/p_s(13);printf("制 * ")
4、;/*作者信息*/p_s(4);printf("Email:* ");/*電子郵件*/p_s(11);puts("n"); p_s(76);puts("n");/*再次引用p_s函數(shù),程序說明局部結(jié)束*/附:print_star.cpp文件源代碼#include<stdio.h>void p_s(int k)int i;for(i=1;i<=k;i+)/*連續(xù)輸出ka個(gè)'*'*/printf("*");輸入模塊:引導(dǎo)使用者輸入要在其中查找數(shù)據(jù)的數(shù)表的數(shù)據(jù)個(gè)數(shù)和數(shù)表數(shù)據(jù)。并通過一個(gè)j
5、udge函數(shù)判斷輸入是否合法,假設(shè)不合法提醒用戶繼續(xù)輸入。此局部模塊主函數(shù)源代碼如下:printf("請輸入你想要在其中查找數(shù)據(jù)的數(shù)據(jù)表列的數(shù)據(jù)個(gè)數(shù)1-50:n");/ scanf("%d",&n);n=judge(n);/*引用judge函數(shù),判斷n值是否合法*/judge函數(shù)位于judge.cpp文件,參見下文 printf("請輸入你要在其中查找數(shù)據(jù)的數(shù)據(jù)表列(%d個(gè)數(shù)據(jù) 用空格間隔 大小排序不限):n",n);/*輸入要查找的n 個(gè)數(shù)據(jù)*/ for(i=0;i<=n-1;i+)scanf("%d&quo
6、t;,&ai);/*將要查找的n個(gè)數(shù)據(jù)存入數(shù)組a*/sort(a,n);/*引用sort函數(shù),將數(shù)表排序*/ printf("n輸出表列(從小到大排列)n");附:judge.cpp文件源代碼#include <stdio.h>int judge(int n2)/*函數(shù)作用:判斷n2的值是否在150范圍內(nèi)*/int n3;while(n2<1 | n2>50)printf("你輸入的數(shù)不正確,請重新輸入。n"); printf("請輸入你想要在其中查找數(shù)據(jù)的數(shù)據(jù)表列的數(shù)據(jù)個(gè)數(shù)1-50:n");/*不合法
7、重新輸入并傳遞給主函數(shù)*/ scanf("%d",&n3);return n3;return n2;排序模塊:將用戶輸入數(shù)表的按升序排列并輸出,為接下來的折半法查找做準(zhǔn)備。此局部模塊主要通過sort.cpp文件中的sort函數(shù)實(shí)現(xiàn)此局部模塊主函數(shù)源代碼如下:sort(a,n);/*引用sort函數(shù),將數(shù)表排序*/ printf("n輸出表列(從小到大排列)n"); putout(a,0,n-1);/*引用putout函數(shù),輸出排序后數(shù)表*/附:sort.cpp 文件源代碼#include <stdio.h>void sort(int
8、A,int n1)/*將數(shù)組A的元素按從下到大順序排序 */int x,y,z;for(x=0;x<n1;x+)for(y=0;y<n1-x-1;y+)if(Ay>Ay+1)/*二重循環(huán)將n1個(gè)數(shù)據(jù)由小到大排序*/z=Ay;/*z暫時(shí)存儲(chǔ)ay的值*/Ay=Ay+1;Ay+1=z;折半法查找及顯示模塊:提醒用戶輸入要查找的數(shù)據(jù)并判斷是否合法。假設(shè)合法那么進(jìn)入折半法查找循環(huán),在每次折半法查找過程中輸出數(shù)表中間數(shù)據(jù)、查找數(shù)據(jù)與該數(shù)據(jù)的大小關(guān)系、下次再左還是右局部查找,并輸出該次折半法后要查找的數(shù)表的,用來演示折半法的查找過程,并在每次折半過程中設(shè)定程序暫停一次,方便演示,最后輸出該
9、數(shù)據(jù)在排序后數(shù)表的位置,然后進(jìn)入進(jìn)程選擇模塊;假設(shè)非法,那么輸出“這個(gè)數(shù)在表列中沒有找到,然后進(jìn)入進(jìn)程選擇模塊。此局部模塊主函數(shù)源代碼如下:r_s: printf("請你輸入要查找的數(shù):n");/*輸出要查找的數(shù)據(jù)*/ scanf("%d",&num);count=0;/*折半次數(shù)計(jì)數(shù)器初值賦0*/ flag=1; top=n-1; bottom=0; mid=(top+bottom)/2; while(flag) count+;/*折半次數(shù)計(jì)數(shù)器自加1*/if( (num>atop) | (num<abottom) )/*查找數(shù)據(jù)非
10、法,loc為1*/loc=-1; flag=0; else if(amid=num)/*折半法查找到該數(shù)據(jù)*/loc=mid;printf("第%d次折半n",count);/*輸出此次折半后中間數(shù)據(jù)*/printf("中間數(shù)據(jù)為%dn",amid);system("pause");/*利用該語句暫停程序,便于演示,以下同理*/printf("找到數(shù) %6d 排序后的位置%2dn",num,loc+1);/*輸出結(jié)果*/ loc=1; goto c_e;/*轉(zhuǎn)至選擇語句c_e,判斷是否繼續(xù)查找*/ else if(
11、amid>num) printf("第%d次折半n",count);/*利用折半次數(shù)計(jì)數(shù)器和循環(huán)顯示每次折半查找后的表列*/ printf("中間數(shù)據(jù)為%dn",amid);/*輸出此次折半后中間數(shù)據(jù)*/printf("因?yàn)?d<%d",num,amid);/*說明下步折半查找原因*/printf("所以在左半局部查找n折半后查找數(shù)表為:n");top=mid-1; mid=(top+bottom)/2;putout(a,bottom,top);/*引用putout函數(shù),輸出該次折半后數(shù)表*/syste
12、m("pause"); else if(amid<num) printf("第%d次折半n",count);/*利用折半次數(shù)計(jì)數(shù)器和循環(huán)顯示每次折半查找后的表列*/printf("中間數(shù)據(jù)為%dn",amid);/*輸出此次折半后中間數(shù)據(jù)*/printf("因?yàn)?d>%d",num,amid);/*說明下步折半查找原因*/printf("所以在右半局部查找n折半后查找數(shù)表為:n");bottom=mid+1; mid=(top+bottom)/2;putout(a,bottom,to
13、p);/*引用putout函數(shù),輸出該次折半后數(shù)表*/system("pause");if(loc=-1) printf("%d 這個(gè)數(shù)在表列中沒有找到。n",num);/*假設(shè)查找數(shù)據(jù)非法,提示查找錯(cuò)誤*/ printf("請重新輸入要查找的數(shù)據(jù)n"); goto r_s;/*利用goto語句轉(zhuǎn)職r_s語句重新查找*/此段函數(shù)會(huì)用到putout函數(shù),因上文已經(jīng)提到,在此不做贅述。進(jìn)程選擇模塊:通過判斷用戶輸入的字符決定程序下一步的走向,假設(shè)為“y那么進(jìn)入下一次折半法查找演示過程,假設(shè)為“n那么進(jìn)入程序退出模塊。此局部模塊主函數(shù)源代碼
14、如下:c_e:fflush(stdin);/*利用fflush語句去除按鍵緩存*/printf("請選擇是否繼續(xù)查找n");printf("是y,否nn");/*選擇步驟操作說明*/c=getchar();if(c!='y'&&c!='n') printf("選擇錯(cuò)誤!");/*假設(shè)選擇錯(cuò)誤,繼續(xù)選擇*/goto c_e;else if(c='y') goto r_s;/*選擇y,轉(zhuǎn)至r_s語句繼續(xù)查找*/ else goto end;/*選擇n,轉(zhuǎn)至end語句結(jié)束程序*
15、/ 程序退出模塊:與程序說明模塊照應(yīng),友好的退出程序。此局部模塊源代碼如下:end: printf("程序結(jié)束n");system("pause");printf("謝謝使用,再見!n");for(k=0;k<1.9e8;k+)/*延時(shí)程序*/;exit(0);/*利用exit語句退出主函數(shù)*/工程文件結(jié)構(gòu)本程序的工程含有6個(gè)文件,其中main.cpp、print_stars.cpp、judge.cpp、sort.cpp、putout.cpp5個(gè)cpp文件和include.h1個(gè)頭文件(參見下列圖),兩者共同存在于工程“折半法查
16、找演示程序中。其中main.cpp文件包含了程序的主體局部,程序說明模塊、輸入、排序、折半查找及顯示、程序退出模塊按線性排列,進(jìn)程選擇模塊穿插于其中,根據(jù)用戶操作決定進(jìn)程執(zhí)行。其中輸入、排序模塊一般執(zhí)行一次,進(jìn)程選擇模塊可調(diào)控程序?qū)掖螆?zhí)行折半查找及顯示模塊,也可以調(diào)控執(zhí)行程序退出模塊。2.2 主要功能本程序的主要功能是演示折半法在一組升序排列的數(shù)表中查找某個(gè)數(shù)據(jù)的查找過程,同時(shí)兼有數(shù)表排序、屢次演示、錯(cuò)誤提醒等功能。各功能的實(shí)現(xiàn)具體說明如下:演示折半法查找功能:運(yùn)用計(jì)數(shù)器的規(guī)律和選擇、循環(huán)結(jié)構(gòu)實(shí)現(xiàn)折半法的程序特點(diǎn),在一般折半法的程序模塊上加以改動(dòng),增加一個(gè)折半次數(shù)計(jì)數(shù)器程序中用count變量表
17、示,同時(shí)在每次折半的選擇結(jié)構(gòu)中參加一個(gè)for循環(huán)語句,輸出此次折半后的查找數(shù)表,配上相關(guān)的printf語句、程序暫停語句并輸出相關(guān)文字說明,就能很好的演示折半法的查找原理和過程。具體參見下列圖。數(shù)表排序功能:通過一個(gè)簡單的二重循環(huán)將無序的數(shù)表按升序排列,主要運(yùn)用冒泡算法。運(yùn)行效果如下列圖。屢次演示功能:通過提示用戶做相應(yīng)的操作,實(shí)現(xiàn)程序的屢次演示或者退出,提高程序的實(shí)用性。程序中主要通過goto語句和假設(shè)干標(biāo)號(hào)的語句實(shí)現(xiàn)。此局部程序運(yùn)行截圖如下:屢次演示及程序結(jié)束的運(yùn)行效果:錯(cuò)誤提醒功能:判斷用戶輸入的數(shù)據(jù)及相關(guān)操作是否合法,如不合法提醒用戶改正,增加了程序德使用性和操作便捷性。主要是通過wh
18、ile循環(huán)和輸入輸出函數(shù)實(shí)現(xiàn)。相關(guān)運(yùn)行截圖如下:n值輸入錯(cuò)誤的錯(cuò)誤提醒及修正:進(jìn)程選擇錯(cuò)誤的錯(cuò)誤提醒及修正:程序暫停功能:主要運(yùn)用system(pause)語句和一段延時(shí)小程序,增加程序演示時(shí)的可操作性和可講解性。運(yùn)行效果如下;2.3 函數(shù)實(shí)現(xiàn)本程序中含有一個(gè)主函數(shù),四個(gè)子函數(shù)以及主函數(shù)中假設(shè)干個(gè)起重要作用的函數(shù)語句,現(xiàn)將它們的功能、算法、數(shù)據(jù)結(jié)構(gòu)等說明如下:主函數(shù):參數(shù): 參數(shù)名aNinnumcounttop.mid.bottomcflagloc類型數(shù)組整型整型整型整型整型字符整型整型作用存儲(chǔ)查找數(shù)表循環(huán)控制存儲(chǔ)表列數(shù)據(jù)存儲(chǔ)要查找數(shù)據(jù)記錄折半法次數(shù)折半法查找控制變量存儲(chǔ)進(jìn)程選擇中輸入字符折半
19、循環(huán)控制變量存儲(chǔ)要查找數(shù)據(jù)位置備注用戶輸入用戶輸入,可執(zhí)行中動(dòng)態(tài)更新折半次數(shù)計(jì)數(shù)器,每執(zhí)行一次加一只可以為y或n只可為0或1隨循環(huán)執(zhí)行值改變主要思想為:由用戶自主輸入n個(gè)數(shù)據(jù),將其排序后,在傳統(tǒng)折半法的根底上,增加一些必要的輸入輸出及控制語句,輸出不同階段循環(huán)控制變量所決定的數(shù)、特征值,伴以相關(guān)文字說明,延時(shí)折半法的原理過程。再嵌套一些進(jìn)程控制的語句,到達(dá)屢次使用的效果。主函數(shù)代碼及相關(guān)說明如下:p_s(76);puts("n");printf("*歡*迎*使*用*折*半*查*找*法*演*示*器*n");puts("n");p_s(1
20、3);printf("制 * ");p_s(4);printf("Email:* ");p_s(11);puts("n"); p_s(76);puts("n");以上為程序說明局部,主要通過程簡單的輸入輸出函數(shù)序說明程序功能和操作信息。 printf("請輸入你想要在其中查找數(shù)據(jù)的數(shù)據(jù)表列的數(shù)據(jù)個(gè)數(shù)1-50:n");/ scanf("%d",&n);n=judge(n);在此調(diào)用judge函數(shù),將輸入n值代入judge函數(shù)檢驗(yàn)是否合法。 printf("請輸
21、入你要在其中查找數(shù)據(jù)的數(shù)據(jù)表列(%d個(gè)數(shù)據(jù) 用空格間隔 大小排序不限):n",n);/ for(i=0;i<=n-1;i+)scanf("%d",&ai);sort(a,n);在此引用sort函數(shù),將數(shù)組aN,n代入sort函數(shù),將數(shù)表排序。 printf("n輸出表列(從小到大排列)n"); putout(a,0,n-1);*以“*標(biāo)記的三處都引用了putout函數(shù),輸出一個(gè)一維數(shù)組r_s: printf("請你輸入要查找的數(shù):n");scanf("%d",&num);count=
22、0; *flag=1;top=n-1; bottom=0; mid=(top+bottom)/2; while(flag) count+;if( (num>atop) | (num<abottom) )loc=-1; flag=0; else if(amid=num)loc=mid;printf("第%d次折半n",count);printf("中間數(shù)據(jù)為%dn",amid);system("pause"); 利用該語句暫停程序,便于演示,以下同理printf("找到數(shù) %6d 排序后的位置%2dn",
23、num,loc+1); loc=1; goto c_e; else if(amid>num) printf("第%d次折半n",count); printf("中間數(shù)據(jù)為%dn",amid);printf("因?yàn)?d<%d",num,amid);printf("所以在左半局部查找n折半后查找數(shù)表為:n");top=mid-1; mid=(top+bottom)/2;putout(a,bottom,top);*system("pause"); else if(amid<num)
24、以*間隔局部主要運(yùn)用了折半法查找數(shù)據(jù)printf("第%d次折半n",count);printf("中間數(shù)據(jù)為%dn",amid);printf("因?yàn)?d>%d",num,amid);printf("所以在右半局部查找n折半后查找數(shù)表為:n");bottom=mid+1; mid=(top+bottom)/2;putout(a,bottom,top);*system("pause");if(loc=-1) printf("%d 這個(gè)數(shù)在表列中沒有找到。n",num);
25、 printf("請重新輸入要查找的數(shù)據(jù)n"); goto r_s;利用goto語句文中綠色局部和標(biāo)記語句文中黃色局部和循環(huán)語句實(shí)現(xiàn)進(jìn)程的控制*end: printf("程序結(jié)束n");system("pause");printf("謝謝使用,再見!n");for(k=0;k<1.9e8;k+)延時(shí)程序,延時(shí)約二秒;exit(0); 利用exit語句直接退出主函數(shù)c_e:fflush(stdin);fflush語句去除按鍵緩存,防止程序進(jìn)程混亂printf("請選擇是否繼續(xù)查找n");pr
26、intf("是y,否nn");c=getchar();if(c!='y'&&c!='n') printf("選擇錯(cuò)誤!");goto c_e;else if(c='y') goto r_s; else goto end; judge函數(shù):參數(shù):n2n3數(shù)據(jù)交換:導(dǎo)入main函數(shù)n的值,導(dǎo)出n2或n3的值函數(shù)代碼及相關(guān)說明:#include <stdio.h>int judge(int n2)函數(shù)作用:判斷n2的值是否在150范圍內(nèi)int n3;while(n2<1 | n2
27、>50)printf("你輸入的數(shù)不正確,請重新輸入。n"); printf("請輸入你想要在其中查找數(shù)據(jù)的數(shù)據(jù)表列的數(shù)據(jù)個(gè)數(shù)1-50:n");不合法重新輸入并傳遞給主函數(shù) scanf("%d",&n3);return n3;return n2;合法直接傳回主函數(shù)putout函數(shù):參數(shù): B,m1, m2數(shù)據(jù)傳遞:B導(dǎo)入aN的值,m1、m2視情況而定函數(shù)代碼及相關(guān)說明:#include <stdio.h>void putout(int B,int m1,int m2)函數(shù)作用:將數(shù)組B的第m1到m2個(gè)元素在一
28、行輸出int x1;for(x1=m1;x1<=m2-1;x1+)printf("%6d",Bx1);printf("%6dn",Bx1);sort函數(shù):參數(shù):A, n1;數(shù)據(jù)傳遞:A導(dǎo)入aN,然后導(dǎo)出,n1導(dǎo)入n的值函數(shù)代碼及相關(guān)說明:#include <stdio.h>void sort(int A,int n1)將數(shù)組A的元素按從下到大順序排序int x,y,z;for(x=0;x<n1;x+)for(y=0;y<n1-x-1;y+)if(Ay>Ay+1)z=Ay;Ay=Ay+1;冒泡算法Ay+1=z;p_s函數(shù)
29、:參數(shù): k代碼及相關(guān)說明:#include<stdio.h>void p_s(int k)int i;for(i=1;i<=k;i+)函數(shù)作用:連續(xù)輸出k個(gè)'*'printf("*");2.4 開發(fā)日志程序開發(fā)從構(gòu)思到完成共歷時(shí)二十天左右,根本過程如下:6.16.4開始根本構(gòu)思,考慮大體的程序算法,并分段編寫、調(diào)試局部程序。6.56.7編寫主要程序,并且不斷調(diào)試,直至到達(dá)了最根本的折半法演示功能。圖片如下:6.86.10完善演示功能,參加更多的描述性語句和控制語句,使程序根本到達(dá)了如今程序演示折半法的效果。如圖示:6.116.13參加了程
30、序說明模塊和程序退出模塊,完善了程序的引導(dǎo)性說明信息,完善程序的可操作性。6.14接受同學(xué)的意見,參加了進(jìn)程選擇模塊,使程序可以屢次演示。參加system語句,使演示過程中可以暫停,使演示效果優(yōu)化。6.15完善源代碼,將局部程序從主函數(shù)剝離,寫進(jìn)子函數(shù),將程序工程變?yōu)槎辔募こ?,增加頭文件,使程序更易維護(hù)。6.16總體調(diào)試檢查程序。6.17完成開發(fā)報(bào)告。3 程序調(diào)試及運(yùn)行3.1 程序運(yùn)行結(jié)果程序開始運(yùn)行:排序模塊結(jié)束:屢次執(zhí)行折半查找及顯示模塊:執(zhí)行進(jìn)程選擇模塊和程序退出模塊:3.2 程序使用說明本程序使用較為簡單,只需要按照程序提示做符合要求的操作,就可以完成折半法演示的功能,假設(shè)不小心做了
31、錯(cuò)誤的操作,在程序允許的范圍內(nèi)可以重新操作,因此要仔細(xì)閱讀程序說明局部和運(yùn)行中的相關(guān)提示,按要求操作。另外,在程序演示過程中有很多暫停語句,用戶只要按任意鍵就可繼續(xù)運(yùn)行。3.3 程序開發(fā)總結(jié)通過這次程序開發(fā),我對程序員有了更深刻的認(rèn)識(shí)。我意識(shí)到程序員不僅要有過人的思維,還要有足夠的耐心,以及合作的意識(shí)、獨(dú)立解決困難的意識(shí)。通過這次程序開發(fā),我明白了網(wǎng)絡(luò)對與學(xué)習(xí),特別是程序設(shè)計(jì)方面的巨大推動(dòng)作用,通過上網(wǎng)搜索,我根本了解了system、exit、fllush等語句的一些用法,還知曉了很多有用的網(wǎng)站,以后在學(xué)習(xí)中我會(huì)更多的利用這點(diǎn)。通過這次程序開發(fā),我明白了創(chuàng)造性工作的魅力,雖然這段時(shí)間經(jīng)常在數(shù)字
32、化一待就是幾個(gè)小時(shí),但看著程序在自己手里不斷完善,心里有說不出的喜悅。創(chuàng)造性的工作更能激發(fā)我們的熱情。通過這次程序開發(fā),我明白了自己有很多的缺乏,程序也有缺陷,但這本來就是一個(gè)不斷嘗試、不斷完善的過程,有了這次的體驗(yàn),以后我會(huì)在這條路上走的更遠(yuǎn)。4 附件源程序源程序代碼分為6個(gè)文件,main.cpp、judge.cpp、sort.cpp、putout.cpp和print_stars.cpp以及一個(gè)頭文件include.h,六者共同存在于工程“折半法查找演示程序中。各文件源代碼如下:main.cpp文件源代碼:#include <stdio.h>#include <stdlib
33、.h>#include <conio.h>#define N 51#include "include.h"/*聲明頭文件include.h*/void main()int aN;/*存儲(chǔ)要查找的數(shù)表,用戶輸入*/ int i,n,num,count;/*count為折半次數(shù)計(jì)數(shù)器,n為數(shù)表數(shù)據(jù)個(gè)數(shù),num存儲(chǔ)所查數(shù)據(jù)*/ int top,bottom,mid;char c;/*存儲(chǔ)選擇函數(shù)中的輸入的字符y或n*/ int flag=1;/*折半法循環(huán)標(biāo)志變量*/ int loc=-1;/*存儲(chǔ)所查找數(shù)據(jù)位置*/double k=0; p_s(76);put
34、s("n");/*引用p_s函數(shù),打出一行'*'*/printf("*歡*迎*使*用*折*半*查*找*法*演*示*器*n");puts("n");/*程序歡送語*/p_s(13);printf("制 * ");/*作者信息*/p_s(4);printf("Email:* ");/*電子郵件*/p_s(11);puts("n"); p_s(76);puts("n");/*再次引用p_s函數(shù),程序說明局部結(jié)束*/ printf("請輸
35、入你想要在其中查找數(shù)據(jù)的數(shù)據(jù)表列的數(shù)據(jù)個(gè)數(shù)1-50:n");/ scanf("%d",&n);n=judge(n);/*引用judge函數(shù),判斷n值是否合法*/ printf("請輸入你要在其中查找數(shù)據(jù)的數(shù)據(jù)表列(%d個(gè)數(shù)據(jù) 用空格間隔 大小排序不限):n",n);/*輸入要查找的n 個(gè)數(shù)據(jù)*/ for(i=0;i<=n-1;i+)scanf("%d",&ai);/*將要查找的n個(gè)數(shù)據(jù)存入數(shù)組a*/sort(a,n);/*引用sort函數(shù),將數(shù)表排序*/ printf("n輸出表列(從小到大排
36、列)n"); putout(a,0,n-1);/*引用putout函數(shù),輸出排序后數(shù)表*/r_s: printf("請你輸入要查找的數(shù):n");/*輸出要查找的數(shù)據(jù)*/ scanf("%d",&num);count=0;/*折半次數(shù)計(jì)數(shù)器初值賦0*/ flag=1; top=n-1; bottom=0; mid=(top+bottom)/2; while(flag) count+;/*折半次數(shù)計(jì)數(shù)器自加1*/if( (num>atop) | (num<abottom) )/*查找數(shù)據(jù)非法,loc為1*/loc=-1; fla
37、g=0; else if(amid=num)/*折半法查找到該數(shù)據(jù)*/loc=mid;printf("第%d次折半n",count);/*輸出此次折半后中間數(shù)據(jù)*/printf("中間數(shù)據(jù)為%dn",amid);system("pause");/*利用該語句暫停程序,便于演示,以下同理*/printf("找到數(shù) %6d 排序后的位置%2dn",num,loc+1);/*輸出結(jié)果*/ loc=1; goto c_e;/*轉(zhuǎn)至選擇語句c_e,判斷是否繼續(xù)查找*/ else if(amid>num) printf(
38、"第%d次折半n",count);/*利用折半次數(shù)計(jì)數(shù)器和循環(huán)顯示每次折半查找后的表列*/ printf("中間數(shù)據(jù)為%dn",amid);/*輸出此次折半后中間數(shù)據(jù)*/printf("因?yàn)?d<%d",num,amid);/*說明下步折半查找原因*/printf("所以在左半局部查找n折半后查找數(shù)表為:n");top=mid-1; mid=(top+bottom)/2;putout(a,bottom,top);/*引用putout函數(shù),輸出該次折半后數(shù)表*/system("pause")
39、; else if(amid<num) printf("第%d次折半n",count);/*利用折半次數(shù)計(jì)數(shù)器和循環(huán)顯示每次折半查找后的表列*/printf("中間數(shù)據(jù)為%dn",amid);/*輸出此次折半后中間數(shù)據(jù)*/printf("因?yàn)?d>%d",num,amid);/*說明下步折半查找原因*/printf("所以在右半局部查找n折半后查找數(shù)表為:n");bottom=mid+1; mid=(top+bottom)/2;putout(a,bottom,top);/*引用putout函數(shù),輸出該次折半后數(shù)表*/system("pause");if(loc=-1) printf("%d 這個(gè)數(shù)在表列中沒有找到。n",num);/*假設(shè)查找數(shù)據(jù)非法,提示查找錯(cuò)誤*/ printf("請重新輸入要查找的數(shù)據(jù)n"); goto r_s;/*利用goto語句轉(zhuǎn)職r_s語句重新查找*/end: printf("程序結(jié)束n");system(&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年代理加盟協(xié)議范本
- 《民族復(fù)興中國夢》課件
- 2025年個(gè)人消費(fèi)貸款抵押合同
- 2025年化學(xué)災(zāi)難責(zé)任保險(xiǎn)合同
- 2025年寬帶網(wǎng)絡(luò)使用協(xié)約
- 2025年石材質(zhì)押合同
- 2025版綠色建筑項(xiàng)目募集資金三方監(jiān)管與支持合同4篇
- 2025版信息安全管理體系委托管理合同范本3篇
- 2025版衛(wèi)生間裝修材料環(huán)保認(rèn)證協(xié)議書3篇
- 2025版農(nóng)業(yè)設(shè)施設(shè)計(jì)顧問服務(wù)協(xié)議3篇
- 醫(yī)院三基考核試題(康復(fù)理療科)
- 2024-2030年中國招標(biāo)代理行業(yè)深度分析及發(fā)展前景與發(fā)展戰(zhàn)略研究報(bào)告
- 醫(yī)師定期考核 (公共衛(wèi)生)試題庫500題(含答案)
- 基因突變和基因重組(第1課時(shí))高一下學(xué)期生物人教版(2019)必修2
- 內(nèi)科學(xué)(醫(yī)學(xué)高級(jí)):風(fēng)濕性疾病試題及答案(強(qiáng)化練習(xí))
- 音樂劇好看智慧樹知到期末考試答案2024年
- 辦公設(shè)備(電腦、一體機(jī)、投影機(jī)等)采購 投標(biāo)方案(技術(shù)方案)
- 案卷評查培訓(xùn)課件模板
- 2024年江蘇省樣卷五年級(jí)數(shù)學(xué)上冊期末試卷及答案
- 人教版初中英語七八九全部單詞(打印版)
- 波浪理論要點(diǎn)圖解完美版
評論
0/150
提交評論