c語(yǔ)言課程設(shè)計(jì)報(bào)告-使用菜單選擇趣味程序_第1頁(yè)
c語(yǔ)言課程設(shè)計(jì)報(bào)告-使用菜單選擇趣味程序_第2頁(yè)
c語(yǔ)言課程設(shè)計(jì)報(bào)告-使用菜單選擇趣味程序_第3頁(yè)
c語(yǔ)言課程設(shè)計(jì)報(bào)告-使用菜單選擇趣味程序_第4頁(yè)
c語(yǔ)言課程設(shè)計(jì)報(bào)告-使用菜單選擇趣味程序_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

PAGEPAGE1青島農(nóng)業(yè)大學(xué)課程設(shè)計(jì)報(bào)告題目:使用菜單選擇趣味程序姓名: 楊麗娜學(xué)院:理學(xué)與信息科學(xué)學(xué)院專業(yè): 通信工程班級(jí):2班學(xué)號(hào): 20213239指導(dǎo)教師: 年月日

目錄一設(shè)計(jì)目的…………….1二課程設(shè)計(jì)的內(nèi)容2三課程設(shè)計(jì)的要求與數(shù)據(jù)3四課程設(shè)計(jì)應(yīng)完成的工作4五總體設(shè)計(jì)(包含幾大功能模塊)5六詳細(xì)設(shè)計(jì)(各功能模塊的具體實(shí)現(xiàn)算法——流程圖)………….6七調(diào)試分析(包含各模塊的測(cè)試用例,及測(cè)試結(jié)果)…………….7八總結(jié)………………...8十參考資料…………….9

一設(shè)計(jì)目的進(jìn)一步加深、鞏固所學(xué)專業(yè)課程(《C語(yǔ)言程序設(shè)計(jì)》)的基本理論知識(shí),理論聯(lián)系實(shí)際,進(jìn)一步培養(yǎng)自己綜合分析問(wèn)題和解決問(wèn)題的能力。掌握運(yùn)用C語(yǔ)言獨(dú)立地編寫(xiě)、調(diào)試應(yīng)用程序和進(jìn)行其它相關(guān)設(shè)計(jì)的技能。結(jié)合實(shí)際深入理解高級(jí)語(yǔ)言程序設(shè)計(jì)的基本概念、原理及方法。運(yùn)用所學(xué)的基礎(chǔ)知識(shí)開(kāi)發(fā)一個(gè)小型的程序,能根據(jù)問(wèn)題的需要構(gòu)造所需的數(shù)據(jù)結(jié)構(gòu),設(shè)計(jì)適合的算法,解決問(wèn)題。掌握設(shè)計(jì)任務(wù)的具體要求,進(jìn)行設(shè)計(jì)、調(diào)試軟件的具體方法、步驟和技巧。對(duì)一個(gè)實(shí)際課題的軟件設(shè)計(jì)有基本了解,拓展知識(shí)面,激發(fā)在此領(lǐng)域中繼續(xù)學(xué)習(xí)和研究的興趣,為學(xué)習(xí)后續(xù)課程做準(zhǔn)備。二課程設(shè)計(jì)的內(nèi)容使用菜單選擇趣味程序設(shè)計(jì)目的:本程序旨在訓(xùn)練學(xué)生的編程能力,使用C語(yǔ)言最基本的知識(shí),訓(xùn)練結(jié)構(gòu)化程序設(shè)計(jì)的基本技術(shù)。功能:設(shè)計(jì)分兩步,首先設(shè)計(jì)一個(gè)含有多個(gè)菜單項(xiàng)的菜單演示程序,然后再為這些菜單項(xiàng)配上相應(yīng)的功能。要求:使用數(shù)字1—6來(lái)選擇菜單項(xiàng),其他輸入則不起作用。其實(shí)是5道編程題:1)FindNum使用窮舉法尋找滿足下式中的i的值(30+i)*6237=(10*i+3)*35642)FindRoot求方程的根的程序3)Detective一輛汽車撞人后逃跑。4個(gè)目擊者提供如下線索:甲:牌照三、四位相同;乙:牌號(hào)為31xxxx;丙:牌照五、六位相同;?。喝搅皇且粋€(gè)整數(shù)的平方4)Bear本題是一個(gè)笑話,話說(shuō)有一只狗熊到玉米地里掰玉米,一邊掰一邊吃。第一天吃了一半,又拿走一個(gè)回去喂小狗熊。第二天又去吃了剩下的一半,走時(shí)仍然帶一個(gè)回去喂小狗熊。以后每天都吃前一天剩下的一半,拿走一個(gè)。到第十天時(shí),地里只剩下一個(gè)玉米。求地里一共有多少玉米。5)Diamond本題要求編制打印以下圖案的程序,注意題目要求在左邊留出一定空格*************************6)GoodBye!結(jié)束程序運(yùn)行。三課程設(shè)計(jì)的要求與數(shù)據(jù)1.用C語(yǔ)言實(shí)現(xiàn)系統(tǒng);2.使用數(shù)字1—6來(lái)選擇菜單項(xiàng),其他輸入則不起作用;四課程設(shè)計(jì)應(yīng)完成的工作(1)編寫(xiě)算法;(2)算法測(cè)試,并有具體的測(cè)試結(jié)果和結(jié)果分析;(3)撰寫(xiě)課程設(shè)計(jì)報(bào)告。內(nèi)容包括:封面扉頁(yè)設(shè)計(jì)任務(wù)書(shū)目錄總體設(shè)計(jì)方案(包括流程圖)使用說(shuō)明及運(yùn)行實(shí)例(包括界面)成員設(shè)計(jì)內(nèi)容簡(jiǎn)介項(xiàng)目源程序代碼(注意注釋的使用)指導(dǎo)教師評(píng)語(yǔ)五總體設(shè)計(jì)(包含幾大功能模塊)通過(guò)輸入1-6來(lái)進(jìn)行菜單選擇,來(lái)選取自己需要的程序結(jié)果,從而得到想要的結(jié)果。六詳細(xì)設(shè)計(jì)(各功能模塊的具體實(shí)現(xiàn)算法——流程圖)使用菜單選擇程序

菜單是應(yīng)用程序的界面,控制語(yǔ)句用來(lái)改變程序執(zhí)行的順序,是實(shí)現(xiàn)結(jié)構(gòu)化程序設(shè)計(jì)的基礎(chǔ)。設(shè)計(jì)一個(gè)比較實(shí)用的菜單,通過(guò)菜單選擇不同的功能。

設(shè)計(jì)分為兩步:首先設(shè)計(jì)一個(gè)含有多個(gè)菜單項(xiàng)的菜單演示程序,然后再為這些菜單項(xiàng)配上相應(yīng)的功能。

一、設(shè)計(jì)一個(gè)菜單程序

(1)菜單內(nèi)客

程序運(yùn)行后,給出6個(gè)菜單項(xiàng)的內(nèi)容和輸入提示。

1.FindNum

2.FindRoot

3.Detective

4.Bear

5.Diamond

6.Goodbye!

Input1-6:

(2)設(shè)計(jì)要求

使用數(shù)字1-6來(lái)選擇菜單項(xiàng),其他輸人則不起作用。

二、增加菜單項(xiàng)的處理功能

以設(shè)計(jì)的菜單為基礎(chǔ),增加菜單項(xiàng)的處理功能。

菜單項(xiàng)設(shè)計(jì)要求

這其實(shí)是5道編程題,目的是鍛煉使用控制語(yǔ)句的能力。

(1)FindNum

利用計(jì)算機(jī)的計(jì)算速度快的特點(diǎn),把所有可能的數(shù)都試一下,從中找出符合條件的數(shù)。這就是所謂的窮舉法。

某位的數(shù)字只有0-9個(gè)數(shù)字,顯然已經(jīng)排除了為0的可能性,將1--9種可能性拿來(lái)試驗(yàn),即可找到合適的數(shù)字。由此可見(jiàn),就是尋找滿足下式面的i值:

(30+i)×6237=(10×i+3)×3564

(2)FindRoot

這里要求編制一個(gè)求方程ax2+bx+c=0的根的程序。一般將系數(shù)設(shè)計(jì)成float型,可以把變量設(shè)為double型,使用庫(kù)函數(shù)sqrt求平方根,sqrt在頭文件math.h中定義。假設(shè)

disc=b×b-4×a×c

可以根據(jù)d大于、等于或小于零來(lái)決定求解方法。

if(disc>0)

{//有兩個(gè)不相等的實(shí)數(shù)解}

elseif(disc==0)

{//有兩個(gè)相等的實(shí)數(shù)解}

else

{//有兩個(gè)不相等的虛數(shù)解}

(3)Detective

這是一道偵探題。一輛汽車憧人后逃跑。4個(gè)目擊者提供如下線索:

甲:牌照三、四位相同;

乙:牌號(hào)為31xxxx;

丙:牌照五、六位相同;

?。喝涣皇且粋€(gè)整數(shù)的平方。

為了從這些線索中求出牌照號(hào)碼,只要求出后四位再加上310000即可。這四位又是前兩位相同,后兩位也相同,互相又不相同并且是某個(gè)整數(shù)的平方的數(shù)??梢匀匀皇褂酶F舉法,利用計(jì)算機(jī)的計(jì)算速度快的特點(diǎn),把所有可能的數(shù)都試一下,從中找出符合條件的數(shù)。

因?yàn)楹竺?位數(shù),1000的平方根>31,所以窮舉實(shí)驗(yàn)時(shí)不需從1開(kāi)始,而是從31開(kāi)始尋找一個(gè)整數(shù)的平方。下面直接使用for語(yǔ)句格式,給出算法思想。{inti,a,b,c,d;longm;for(i=32;i<=99;i++)/*窮舉找出后四位號(hào)碼*/{m=i*i;a=m%10;b=m/10%10;c=m/100%10;d=m/1000;if(a==b&&c==d)break;}printf("%ld\n",m+310000);return0;}

(4)Bear

本題是一個(gè)笑話,話說(shuō)有一只狗熊到玉米地里掰玉米,一邊掰一邊吃。第一天吃了一半,又拿走一個(gè)回去喂小狗熊。第二天又去吃了剩下的一半,走時(shí)仍然帶一個(gè)回去喂小狗熊。以后每天都吃前一天剩下的一半,拿走一個(gè)。到第十天時(shí),地里只剩下一個(gè)玉米。求地里一共有多少玉米。

這里可以使用回溯算法。假設(shè)狗熊每次吃掉的為x2,則第10天時(shí)的x2=1,第9天地里剩下的玉米xl=(x2+l)×2,這也是狗熊在第8天時(shí)吃掉的玉米數(shù)量。因此可以使用如下算法描述:{ intday,x1,x2; day=9; x2=1; while(day>0) {x1=(x2+1)*2;/*第1天玉米數(shù)是第2天玉米數(shù)加1后的2倍*/ x2=x1; day--; } printf("total=%d\n",x1); return0;}(5)Diamond

本題要求編制打印以下圖案的程序,注意題目還要求在左邊留出一定空格。

*************************

(6)Goodbye!

這里除了輸出一個(gè)簡(jiǎn)單的信息之外,還必須結(jié)束程序運(yùn)行。七調(diào)試分析(包含各模塊的測(cè)試用例,及測(cè)試結(jié)果)7.1源程序#include<stdio.h>#include<stdlib.h> /*定義雜相函數(shù)及內(nèi)存分配函數(shù)*/#include<ctype.h> /*字符處理*/#include<math.h>intmenu_select();intFindNum();intFindRoot();intDetective();intBear();intDiamond();intGoodBye();voidmain()/*主函數(shù)*/{for(;;) /*一直循環(huán)直到用break等終止,和while(1)有著同樣的作用*/{switch(menu_select()){case1: FindNum(); system("pause"); break;case2: FindRoot(); system("pause"); break;case3: Detective(); system("pause"); break;case4: Bear(); system("pause"); break;case5: Diamond(); system("pause"); break;case6: printf("GoodBye!\n"); system("pause"); exit(6);}}}intmenu_select()/*主函數(shù)菜單*/{charc;do{system("cls");printf("1.FindNum\n");printf("2.FindRoot\n");printf("3.Detective\n");printf("4.Bear\n");printf("5.Diamond\n");printf("6.GoodBye\n");c=getchar();}while(c<'1'||c>'6');return(c-'0');}intFindNum()/*找數(shù)字*/{inti; for(i=0;i<10;i++) {if((30+i)*6237==(i*10+3)*3564) {printf("Theansweris%d\n",i); printf("3%d*6237=%d3*3564\n",i,i); break; } }return0;}intFindRoot()/*找方程的根*/{ doublea,b,c,disc,x1,x2,realpart,imagpart; /*定義double型變量*/ scanf("%lf%lf%lf",&a,&b,&c); printf("Theequation"); if(fabs(a)<=1e-6) printf("isnotaequation\n"); else { disc=b*b-4*a*c; if(fabs(disc)<=1e-6) printf("hastwoeqaulroots:%8.4f\n",-b/(2*a)); else if(disc>1e-6) { x1=(-b+sqrt(-disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); printf("hasdistinctrealroots:%8.4fand%8.4f\n",x1,x2); } else { realpart=-b/(2*a);/*realpart是復(fù)根的實(shí)部*/ imagpart=sqrt(disc)/(2*a);/*realpart是復(fù)根的虛部*/ printf("hascomplaxroots\n"); printf("%8.4f+%8.4fi\n",realpart,imagpart);/*輸出一個(gè)復(fù)數(shù)*/ printf("%8.4f+%8.4fi\n",realpart,imagpart);/*輸出另一個(gè)復(fù)數(shù)*/ } } return0;}intDetective()/*找牌照*/{inti,a,b,c,d;longm;for(i=32;i<=99;i++)/*窮舉找出后四位號(hào)碼*/{m=i*i;a=m%10;b=m/10%10;c=m/100%10;d=m/1000;if(a==b&&c==d)break;}printf("%ld\n",m+310000);return0;}intBear()/*熊吃玉米的問(wèn)題*/{ intday,x1,x2; day=9; x2=1; while(day>0) {x1=(x2+1)*2;/*第1天玉米數(shù)是第2天玉米數(shù)加1后的2倍*/ x2=x1; day--; } printf("total=%d\n",x1); return0;}intDiamond()/*鉆石*/{inti,j,k;for(i=0;i<=3;i++) /*控制循環(huán)次數(shù),i由1變到3,共循環(huán)3次*/{for(j=0;j<=2-i;j++)printf(""); for(k=0;k<=2*i;k++) printf("*"); printf("\n"); } for(i=0;i<=2;i++) {for(j=0;j<=i;j++) printf(""); for(k=0;k<4-2*i;k++) printf("*"); printf("\n"); } return0;}intGoodBye()/*再見(jiàn)*/{ chara='G',b='o',c='o',d='d',e='B',f='y',g='e’,h=’!’;/*定義8個(gè)字符變量并初始化*/ putchar(a);/*向顯示器輸出字母G*/ putchar(b);/*向顯示器輸出字母o*/ putchar(c);/*向顯示器輸出字母o*/ putchar(d);/*向顯示器輸出字母d*/ putchar(e);/*向顯示器輸出字母B*/ putchar(f);/*向顯示器輸出字母y*/ putchar(g);/*向顯示器輸出字母e*/putchar(h);/*向顯示器輸出符號(hào)!*/ putchar('\n');/*向顯示器輸出一個(gè)換行值*/ return0;}7.2主要程序運(yùn)行結(jié)果1)當(dāng)輸入的菜單項(xiàng)為1時(shí),輸出結(jié)果如圖a所示圖a2)當(dāng)輸入的菜單項(xiàng)為2時(shí)有以下3種情況(1)輸入a,b,c的值1,2,1,得到兩個(gè)相等的實(shí)根,輸出結(jié)果如圖b①所示 圖b①(2)輸入a,b,c的值1,2,2,得到兩個(gè)共軛的復(fù)根,輸出結(jié)果如圖b②所示 圖b②(3)輸入a,b,c的值2,6,1,得到兩個(gè)不等的實(shí)根,輸出結(jié)果如圖b③所示 圖b②3)當(dāng)輸入的菜單項(xiàng)為3時(shí),輸出結(jié)果如圖c所示 圖b③4)當(dāng)輸入的菜單項(xiàng)為4時(shí),輸出結(jié)果如圖d所示 圖d5)當(dāng)輸入的菜單項(xiàng)為5時(shí),輸出結(jié)果如圖e所示 圖e6)當(dāng)輸入的菜單項(xiàng)為6時(shí),輸出結(jié)果如圖f所示 圖f八總結(jié)由于本課題中的許多知識(shí)點(diǎn)都沒(méi)有學(xué)過(guò)都要靠自己到課外的資料中去查找。在用的時(shí)候難免出現(xiàn)這樣那樣的錯(cuò)誤。如開(kāi)始設(shè)計(jì)出來(lái)的菜單不是預(yù)想的那樣,而是總個(gè)窗中出現(xiàn)混亂。解決的這個(gè)問(wèn)題的辦法是調(diào)整。一個(gè)系統(tǒng)的菜單和提示信息非常重要。如果沒(méi)有這些用戶根本不知道怎么用你設(shè)計(jì)的這個(gè)系統(tǒng)。在設(shè)計(jì)的調(diào)試過(guò)程中也無(wú)法順利的完成調(diào)試工作。有了一個(gè)清晰簡(jiǎn)單的菜單和一些提示信息這后,調(diào)試過(guò)程完成的非常順利?;仡櫰鸫舜握n程設(shè)計(jì),我感慨頗多,的確,從拿到題目到完成整個(gè)編程,從理論到實(shí)踐,在整整兩個(gè)禮拜的日子里,可以學(xué)到很多很多的東西,同時(shí)不僅可以鞏固了以前所學(xué)過(guò)的知識(shí),而且學(xué)到了很多在書(shū)本上所沒(méi)有學(xué)到過(guò)的知識(shí)。通過(guò)這次課程設(shè)計(jì)使我們懂得了理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識(shí)與實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能真正為社會(huì)服務(wù),從而提高自己的實(shí)際動(dòng)手能力和獨(dú)立思考的能力。在設(shè)計(jì)的過(guò)程中遇到問(wèn)題,可以說(shuō)得是困難重重,這畢竟第一次做的,難免會(huì)遇到過(guò)各種各樣的問(wèn)題,同時(shí)在設(shè)計(jì)的過(guò)程中發(fā)現(xiàn)了自己的不足之處,對(duì)以前所學(xué)過(guò)的知識(shí)理解得不夠深刻,掌握得不夠牢固,比如說(shuō)結(jié)構(gòu)體……通過(guò)這次課程設(shè)計(jì)之后,一定把以前所學(xué)過(guò)的知識(shí)熟悉了,本次課程設(shè)計(jì)結(jié)束了,我們通過(guò)這次實(shí)踐學(xué)到了許多知識(shí)。學(xué)到了設(shè)計(jì)一個(gè)簡(jiǎn)單的系統(tǒng)。要注意哪些方面。也使我們知道自己哪些方面做得還不夠。這不僅是程序設(shè)計(jì),更是鍛煉我們處理問(wèn)題的能力,同時(shí)也使我了解編寫(xiě)程序是件細(xì)心活,稍不留神就會(huì)出錯(cuò),這就必須要求我們對(duì)待事情要認(rèn)真!在編寫(xiě)程序的過(guò)程中,錯(cuò)誤不斷出現(xiàn),不同的類型(如少寫(xiě)了一個(gè)符號(hào),寫(xiě)錯(cuò)了字母,用錯(cuò)了函數(shù)等等)層出不窮,這考驗(yàn)我們待事細(xì)心,耐心,能不能堅(jiān)持到底,不能半途而廢。但我們總結(jié)出了一點(diǎn)點(diǎn)的經(jīng)驗(yàn)如下:1、要對(duì)系統(tǒng)的功能和要求做出詳細(xì)的分析,并合理分解任務(wù)。2、把分解出來(lái)的子任務(wù),做給一個(gè)相對(duì)獨(dú)立的模塊。3、在設(shè)計(jì)一個(gè)模塊之前,要簡(jiǎn)單構(gòu)想一下總界面的顯視情況。4、針對(duì)構(gòu)想出來(lái)的界面進(jìn)行程序的編寫(xiě)。九參考資料[1]譚浩強(qiáng).C程序設(shè)計(jì)(第三版).北京:清華大學(xué)出版社,2021[2]譚浩強(qiáng).C程序設(shè)計(jì)題解與上機(jī)指導(dǎo)(第三版).北京:清華大學(xué)出版社,2021[3]李春葆,張植民,肖忠付.C語(yǔ)言設(shè)計(jì)題典[M].北京:清

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論