版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、算法與編程實(shí)習(xí)實(shí)習(xí)報(bào)告班級(jí): 姓名:李明學(xué)號(hào):第一題一、題目:一、題目:統(tǒng)計(jì)字母的使用頻率二、目的與要求1 目的:通過(guò)編寫(xiě)程序統(tǒng)計(jì)字母的使用頻率,培養(yǎng)學(xué)生綜合利用C語(yǔ)言進(jìn)行程序設(shè)計(jì)的能力,熟悉字符串的操作方法,加強(qiáng)函數(shù)的運(yùn)用,提高軟件系統(tǒng)分析能力和程序文檔建立、歸納總結(jié)的能力。2 基本要求:1)要求用C語(yǔ)言編程,在Visual C+環(huán)境下調(diào)試完成;2)要求按照程序功能分成幾個(gè)功能模塊來(lái)實(shí)現(xiàn),各個(gè)功能模塊分別使用函數(shù)來(lái)完成;3)要求應(yīng)用本課所講授的程序設(shè)計(jì)語(yǔ)言知識(shí)來(lái)解決問(wèn)題三、設(shè)計(jì)方法和基本原理1 課題功能描述本程序的功能,就是要統(tǒng)計(jì)英文字母的使用頻率。2 問(wèn)題詳細(xì)描述為統(tǒng)計(jì)英文字母的使用頻率,
2、輸入一個(gè)不包括空格的由英文字母組成的字符串,長(zhǎng)度不超過(guò)200個(gè)字符。統(tǒng)計(jì)26個(gè)英文字母的使用頻率,不區(qū)分大小寫(xiě)。最后按使用頻率從大到小輸出字母(小寫(xiě)字母)和使用頻率(出現(xiàn)的次數(shù))。3 問(wèn)題的解決方案按照程序要求,本程序應(yīng)采用模塊化設(shè)計(jì)方法,設(shè)計(jì)幾個(gè)功能模塊。例如(僅供參考):l 將字符串中的大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)字母l 統(tǒng)計(jì)輸入的字符串中字母的使用頻率l 按使用頻率從大到小進(jìn)行排序主函數(shù)中控制輸入、函數(shù)調(diào)用和輸出。四、主要技術(shù)問(wèn)題的描述根據(jù)三的分析,主要問(wèn)題在于:1) 為統(tǒng)計(jì)字母的使用頻率,定義一個(gè)長(zhǎng)度為26的int數(shù)組存放所統(tǒng)計(jì)的各個(gè)字母的使用頻率。2) 在統(tǒng)計(jì)字母的使用頻率時(shí),不要使用if語(yǔ)句
3、或switch語(yǔ)句,利用字母的ASCII碼與數(shù)組元素下標(biāo)之間的關(guān)系來(lái)求得。3) 按使用頻率從大到小進(jìn)行排序時(shí),建議使用指針數(shù)組更為方便。五、創(chuàng)新要求實(shí)現(xiàn)程序功能后,可進(jìn)行創(chuàng)新設(shè)計(jì):1) 使用多文件,即主函數(shù)和各個(gè)函數(shù)分別存放在不同的.c文件中,在頭文件中進(jìn)行函數(shù)原型聲明。2) 讀入一篇英文文檔,并對(duì)其進(jìn)行字母頻率分析。二、功能描述1.程序運(yùn)行第一步進(jìn)行模式選擇:從屏幕讀入一串字母或從文件中讀取文章(從屏幕讀入時(shí)字符串長(zhǎng)度不超過(guò)200)。2.讀取文章完畢后,統(tǒng)計(jì)各個(gè)字母的使用頻率,并按從大到小的順序打印出來(lái),同時(shí),對(duì)使用次數(shù)相同的字母按字母表順序打印,對(duì)使用次數(shù)為0的字母不予打印。(下頁(yè)流程圖)
4、三、解決方案Main函數(shù)Chang函數(shù)(大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)字母后返回)Mode_Num=1?Cal函數(shù)(統(tǒng)計(jì)某一字母的使用頻率)Fprint函數(shù)(按順序打印字母及使用頻率)結(jié)束Fread函數(shù)(讀入一篇文檔)YN四、主要函數(shù)描述1. Main函數(shù):功能:負(fù)責(zé)變量的定義、模式的選擇及函數(shù)的調(diào)用。2.chang函數(shù)功能:負(fù)責(zé)將大小寫(xiě)字母統(tǒng)一成小寫(xiě)字母后返回小寫(xiě)字母。3.cal函數(shù)功能:負(fù)責(zé)統(tǒng)計(jì)某一字母的使用頻率并輸出。4.fread函數(shù)功能:讀入位于e:LDK的文檔ldk.txt,通過(guò)調(diào)用函數(shù)統(tǒng)計(jì)字母頻率并相應(yīng)輸出。5.fprint函數(shù)功能:按字母使用頻率從大到小的順序輸出字母及其使用頻率。五、實(shí)驗(yàn)
5、心得通過(guò)這次“統(tǒng)計(jì)字母頻率”算法編程的實(shí)習(xí),我學(xué)習(xí)并掌握了函數(shù)的調(diào)用、形參為指針或數(shù)組的傳遞方法以及讀取文件數(shù)據(jù)的方法。同時(shí),在實(shí)習(xí)過(guò)程中,也遇到了許多問(wèn)題:1. 在文件調(diào)用的過(guò)程中,使用課本上的“while(ch!=EOF)”不能實(shí)現(xiàn)對(duì)文件結(jié)尾的判斷,造成函數(shù)進(jìn)入死循環(huán),不能及時(shí)退出。解決方法:后來(lái),運(yùn)用老師講述的調(diào)試方法,發(fā)現(xiàn)程序在運(yùn)行到文檔結(jié)尾的時(shí)候,從文檔中讀取的值為-1,于是我把判斷文檔結(jié)尾的條件改為了“while(ch!=-1)”,從而使函數(shù)正常地跳出了循環(huán)。 心得:當(dāng)自己的程序出現(xiàn)邏輯錯(cuò)誤且自己不知道錯(cuò)誤的地點(diǎn)時(shí),用調(diào)試的方法一步步觀察程序的運(yùn)行方式,就可以發(fā)現(xiàn)錯(cuò)誤的原因并加以改
6、正。2. 在輸出字母及其使用頻率的過(guò)成中,曾因?yàn)椴恢肋\(yùn)用轉(zhuǎn)義字符而重新定義了一個(gè)數(shù)組用來(lái)存放az的英文字母,在一次翻書(shū)的過(guò)程中突然看見(jiàn)了轉(zhuǎn)義字符的使用方法,從而使自己的程序大幅度的簡(jiǎn)化。 雖然這并不屬于程序的語(yǔ)法或邏輯錯(cuò)誤,但這次經(jīng)過(guò)使我明白了:程序的編譯每個(gè)人可能都有不同的方法,但方法與方法之間是存在差別的,只有用心思考,才能以最簡(jiǎn)單明了的方式實(shí)現(xiàn)程序的功能。附錄:第一題源程序#include #define N 200/*函數(shù):chang功能:判斷字母并將大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)字母后返回入口參數(shù):字符指針出口參數(shù):相應(yīng)的小寫(xiě)字母*/void chang(char *p)int i=0;for
7、(i=0;*(p+i)!=0;i+)*(p+i)=(a=(*(p+i)&(*(p+i)=z)?*(p+i):(*(p+i)+32);/判斷字母的值并進(jìn)行相應(yīng)轉(zhuǎn)換/*函數(shù):cal功能:統(tǒng)計(jì)某一字母的使用頻率入口參數(shù):被統(tǒng)計(jì)字母的地址指針,統(tǒng)計(jì)用數(shù)組的地址指針出口參數(shù):void*/void cal(char *p,int * q)int i=0,temp=0;for(i=0;*(p+i)!=0;i+)(*(q+int(*(p+i)-a)+;/對(duì)相應(yīng)統(tǒng)計(jì)字母的數(shù)組進(jìn)行操作/*函數(shù):find功能:找出使用次數(shù)最大的字母,并按順序打印出來(lái)入口參數(shù):字符指針出口參數(shù):相應(yīng)的小寫(xiě)字母*/void find(
8、int b)int i=0,max=0,j=0,k=0;while(kmax)max = bi,j=i;/記錄最大使用次數(shù)為maxif(max=0)return;bj=0;printf(%c %6dn,a+j,max);/按順序打印各字母及其使用次數(shù)k+;max=0;/*函數(shù):fread功能:讀入位于e:LDK的文檔ldk.txt,通過(guò)調(diào)用函數(shù)統(tǒng)計(jì)字母頻率并相應(yīng)輸出入口參數(shù):void出口參數(shù):void*/void fread()FILE * fp;/定義文件指針char ch;int a27=0;a26=-1;if(!(fp=fopen(e:LDKldk.txt,r)printf(ERROR!
9、);exit(1);ch=fgetc(fp);while(ch!=-1)/txt文檔的結(jié)束符為-1if(ch=-1)continue;ch=(a=ch&(ch)=z)?ch:(ch+32);/字母大小寫(xiě)統(tǒng)一if(a=ch&(ch)=z)ach-a+;ch=fgetc(fp);/獲取下一個(gè)字符fclose(fp);/關(guān)閉文件指針fprint(a);/打印統(tǒng)計(jì)結(jié)果return;/*main函數(shù)*/void main()char aN;int b27=0,Mode_Num;/Mode_Num為模式選擇b26=-1;printf(Please choose the MODE:n1-to read fr
10、om the screenn2-to read from filen);scanf(%d,&Mode_Num);if(Mode_Num=1)scanf(%s,a);chang(a);cal(a,b);fprint(b);elsefread();第二題一、題目:?jiǎn)栴}描述: N盞燈排成一排,從1到N按順序依次編號(hào)。有N個(gè)人也從1到N依次編號(hào)。第一個(gè)人(1號(hào))將燈全部關(guān)閉。第二個(gè)人(2號(hào))將凡是2和2的倍數(shù)的燈打開(kāi)。第三個(gè)人(3號(hào))將凡是3和3的倍數(shù)的燈做相反的處理(如果該燈為打開(kāi)的,則將它關(guān)閉;如果該燈為關(guān)閉的,則將它打開(kāi))。以后的人都和3號(hào)一樣,將凡是與自己編號(hào)相同的燈,以及是自己編號(hào)倍數(shù)的燈做
11、相反處理。請(qǐng)編寫(xiě)程序?qū)崿F(xiàn)。要求:程序中要顯示每一個(gè)人所做工作的過(guò)程,例如:當(dāng)?shù)趇個(gè)人操作時(shí),則顯示將i和i的倍數(shù)的燈做相反的處理過(guò)程;當(dāng)?shù)贜個(gè)人操作之后,顯示燈的最后狀態(tài)。(建議:采用圖形法,顯示每一盞燈,并為每一盞燈加邊框,用不同的顏色顯示開(kāi)燈或關(guān)燈)。 例如:當(dāng)輸入N為7時(shí); 當(dāng)?shù)谝粋€(gè)人操作時(shí) 則輸出結(jié)果為: 第1盞燈是黑的 第2盞燈是黑的 第3盞燈是黑的 第4盞燈是黑的 第5盞燈是黑的 第6盞燈是黑的 第7盞燈是黑的 當(dāng)?shù)诙€(gè)人操作時(shí) 則輸出結(jié)果為: 第1盞燈是黑的 第2盞燈是亮的 第3盞燈是黑的 第4盞燈是亮的 第5盞燈是黑的 第6盞燈是亮的 第7盞燈是黑的 當(dāng)?shù)谌齻€(gè)人操作時(shí) 則輸出結(jié)
12、果為: 第1盞燈是黑的 第2盞燈是亮的 第3盞燈是亮的 第4盞燈是亮的 第5盞燈是黑的 第6盞燈是黑的 第7盞燈是黑的 二、功能描述本程序的主要功能為:記錄并輸出每個(gè)人對(duì)燈的操作后燈的狀態(tài)。三、 解決方案(流程圖)開(kāi)始Main函數(shù)(變量的定義、函數(shù)的調(diào)用)Ope函數(shù)(第k人的操作)Pr函數(shù)(輸出燈的狀態(tài))END四、 主要函數(shù)1.main函數(shù):功能:變量的定義以及函數(shù)的調(diào)用。2.ope函數(shù)功能:進(jìn)行第k人對(duì)燈的操作。3.pr函數(shù):功能:打印出當(dāng)前燈的狀態(tài)五、心得體會(huì)通過(guò)這次“指示燈控制”算法編程的實(shí)習(xí),我學(xué)習(xí)并更加熟練地掌握了函數(shù)的調(diào)用、數(shù)組及循環(huán)體的使用,在變成過(guò)程中也遇到了很多問(wèn)題,在不斷解
13、決問(wèn)題的過(guò)程中,我學(xué)到了更多,當(dāng)然,這也離不開(kāi)老師的幫助!以下為這次變成實(shí)習(xí)中遇到的主要問(wèn)題:1.在使用多文件存儲(chǔ)函數(shù)(即主函數(shù)和各個(gè)函數(shù)分別存放在不同的.c文件中,在頭文件中進(jìn)行函數(shù)原型聲明)時(shí),發(fā)現(xiàn)有些變量只能在當(dāng)前的C文件中使用,而不能正常調(diào)用,而且不知道如何將自己編寫(xiě)的頭文件包含到函數(shù)中。解決方法:在老師的指導(dǎo)下,我學(xué)到了:在包含自己編寫(xiě)的頭文件之前,需要先建立一個(gè)WIN32的工程,而不是簡(jiǎn)單新建一個(gè)cpp文件,同時(shí),在工程中包含自己編寫(xiě)的頭文件時(shí),不能使用單括號(hào),而應(yīng)該使用雙引號(hào)“ ”。這樣將自己編寫(xiě)的頭文件包含進(jìn)函數(shù)后,程序就能正常運(yùn)行了。附錄:第二題源程序/*第二題:指示燈控制班
14、級(jí):通信五班姓名:林大凱2010.7*/#include#define N 7/*函數(shù):pr功能:打印出當(dāng)前燈的狀態(tài)入口參數(shù):燈的狀態(tài)變量a出口參數(shù):屏幕輸出燈的亮滅*/void pr(int a)if(a%2)printf(%c ,2);elseprintf(%c ,1);/*函數(shù):ope功能:進(jìn)行第k人的操作入口參數(shù):人的編號(hào)k,記錄燈狀態(tài)的數(shù)組的出口參數(shù):void*/void ope(int k,int *p)int i=0;for(i=0;*(p+i)!=-1;i+)if(i+1)%k=0)(*(p+i)+;pr(*(p+i);/調(diào)用pr函數(shù),輸出低k人操作后燈的亮滅狀態(tài)printf(
15、n);/*main函數(shù)*/void main()int aN+1=0,i;/a記錄各盞燈的狀態(tài),奇數(shù)為亮,偶數(shù)為滅aN=-1;/結(jié)束標(biāo)志for(i=1;i=N;i+)printf(the result after the operating of NO.%dn,i);ope(i,a);/函數(shù)調(diào)用,進(jìn)行第i個(gè)人的操作第三題一、題目:一、題目:序列小游戲 二、目的與要求 1 目的: (1)讓學(xué)生體會(huì)到鴿巢原理(或抽屜原理)的樂(lè)趣并使學(xué)生更加系統(tǒng)地理解和掌握C語(yǔ)言的函數(shù)間參數(shù)傳遞方法、數(shù)組和指針的應(yīng)用等編程技巧。培養(yǎng)學(xué)生綜合利用C語(yǔ)言進(jìn)行科學(xué)計(jì)算,使學(xué)生將所學(xué)知識(shí)轉(zhuǎn)化為分析和設(shè)計(jì)簡(jiǎn)單實(shí)際問(wèn)題的能力,
16、學(xué)會(huì)查資料和工具書(shū)。 (2)提高學(xué)生建立程序文檔、歸納總結(jié)的能力。2 基本要求: (1)要求用C語(yǔ)言編程,在Visual C+環(huán)境下調(diào)試完成;(2)要求按照程序功能分成幾個(gè)功能模塊來(lái)實(shí)現(xiàn),各個(gè)功能模塊分別使用函數(shù)來(lái)完成;(3)要求應(yīng)用本課所講授的程序設(shè)計(jì)語(yǔ)言知識(shí)來(lái)解決問(wèn)題. 三、設(shè)計(jì)方法和基本原理 1 課題功能描述 任意給定5個(gè)數(shù)字,其中必定存在3個(gè)數(shù)字已經(jīng)有序(或者升序,或者降序),找出這5個(gè)數(shù)字中最長(zhǎng)的升序或降序序列。 例如:1,7,5,3,9。則1,7,9,1,5,9,1,3,9都是最長(zhǎng)的升序序列; 而7,5,3是最長(zhǎng)的降序序列。 再如:1,3,2,5,7。最長(zhǎng)的升序序列為1,3,5,7
17、和1,2,5,7。 2 問(wèn)題的解決方案: 自動(dòng)生成各種可能的序列,對(duì)于5個(gè)數(shù)字所有可能的序列為: 0,1,2,3、0,1,2,4、0,1,3,4、0,2,3,4、1,2,3,4 0,1,2、0,1,3、0,2,3、1,2,3 0,1,4、0,2,4、1,2,4 1,3,4 2,3,4、0,3,4 考察各種可能的序列是否升序或是降序,若是則打??; 四、創(chuàng)新要求 在基本要求達(dá)到后,進(jìn)行創(chuàng)新設(shè)計(jì),10個(gè)數(shù)據(jù),必定會(huì)有至少4個(gè)數(shù)據(jù)已經(jīng)有序(或升序或降序),找出最長(zhǎng)的升序或降序序列。二、功能描述任意給定10個(gè)數(shù)字,其中必定存在4個(gè)數(shù)字已經(jīng)有序(或者升序,或者降序),找出這10個(gè)數(shù)字中最長(zhǎng)的升序或降序序列
18、。 三、流程圖開(kāi)始Main函數(shù)(變量的定義、函數(shù)的調(diào)用)Find_UP函數(shù)(升序排列并輸出)Find_Down函數(shù)(降序排列并輸出)END四、主要函數(shù)1.main函數(shù):功能:變量的定義以及函數(shù)的調(diào)用。2.find_up函數(shù)功能:尋找數(shù)列中升序排列最長(zhǎng)的數(shù)列并輸出。3.find_down函數(shù)功能:尋找數(shù)列中降序排列最長(zhǎng)的數(shù)列并輸出。五、心得體會(huì)通過(guò)這次“鴿籠原理”算法編程的實(shí)習(xí),我學(xué)習(xí)并更加熟練地掌握了函數(shù)的調(diào)用、數(shù)組及循環(huán)體的使用,在變成過(guò)程中也遇到了很多問(wèn)題,在不斷解決問(wèn)題的過(guò)程中,我學(xué)到了更多,當(dāng)然,這也離不開(kāi)老師的幫助!以下為這次變成實(shí)習(xí)中遇到的主要問(wèn)題:1。在尋找升序排列(降序排列同理
19、)最長(zhǎng)的數(shù)列并輸出的過(guò)程中,在剛開(kāi)始編程時(shí)不知道如何判斷當(dāng)前數(shù)列為最長(zhǎng)的升序,也就不知道什么時(shí)候應(yīng)該輸出數(shù)組。之前的想法是:通過(guò)把當(dāng)前數(shù)列和原數(shù)列長(zhǎng)度進(jìn)行比較,若沒(méi)有與原數(shù)列等長(zhǎng)的升序數(shù)列,則判斷是否有與原數(shù)列長(zhǎng)度減1等長(zhǎng)的數(shù)列,如此重復(fù)。這種方法雖然可行,但每當(dāng)用于判斷的“標(biāo)準(zhǔn)長(zhǎng)度”減1,都要重復(fù)執(zhí)行函數(shù)找出最長(zhǎng)的升序數(shù)列并與“標(biāo)準(zhǔn)長(zhǎng)度”比較,造成了很大的資源浪費(fèi)。后來(lái),在自己的反復(fù)思考下,發(fā)現(xiàn)只要再找到新的升序排列數(shù)列后,將其長(zhǎng)度與之前的數(shù)列進(jìn)行比較,若新數(shù)列的長(zhǎng)度比之前的數(shù)列的長(zhǎng)度長(zhǎng),則記錄此時(shí)的數(shù)列及其長(zhǎng)度,這樣,在找完所有升序排列的數(shù)列后,就已經(jīng)記錄下了最長(zhǎng)的升序數(shù)列及其長(zhǎng)度,然后只
20、要輸出就可以了。心得:在這次邏輯突破后,我明白了實(shí)現(xiàn)一個(gè)問(wèn)題的方法是很多的,但我們需要用更加簡(jiǎn)潔的方式實(shí)現(xiàn)功能!附錄:第三題源程序/*第四題:鴿籠原理班級(jí):通信五班姓名:林大凱2010.7*/#include#define N 6/程序?qū)ο蟮膫€(gè)數(shù)void find_up(int a)/函數(shù):找出升序排列中位數(shù)最多的數(shù)組printf(To place from low to high:n);int kN,i=0,j=0,b=2,max_l=0,flag,flag2=0,x,y=N;/kn記錄升序排列的數(shù)組,while(y-)for(i=0;iN;i+)k0=k1=k2=k3=k4=0;flag=
21、ai;kj=ai;for(b=i+1;bflag)k+j=ab;flag=ab;continue;if(jmax_l)max_l=j;if(max_l=y)for(x=0;xj+1;x+)printf(%d,kx);flag2=1;printf(n);j=0;if(flag2=1) return;void find_down(int a)printf(To place from high to low:n);int kN,i=0,j=0,b=2,max_l=0,flag,flag2=0,x,y=5;while(y-)for(i=0;iN;i+)k0=k1=k2=k3=k4=0;flag=ai;
22、kj=ai;for(b=i+1;bN;b+)if(abmax_l)max_l=j;if(max_l=y)for(x=0;xj+1;x+)printf(%d,kx);flag2=1;printf(n);j=0;if(flag2=1) return;void main()int aN,i=0;printf(Please input %d datas,N);for(i=0;iN;i+)scanf(%d,&ai);find_up(a);find_down(a);第四題一、題目:一、題目:四則運(yùn)算二、目的與要求1 目的:通過(guò)編寫(xiě)四則運(yùn)算程序,培養(yǎng)學(xué)生綜合利用C語(yǔ)言進(jìn)行程序設(shè)計(jì)的能力,熟悉字符串的操作方法
23、,加強(qiáng)函數(shù)的運(yùn)用,提高軟件系統(tǒng)分析能力和程序文檔建立、歸納總結(jié)的能力。2 基本要求:1)要求用C語(yǔ)言編程,在Visual C+環(huán)境下調(diào)試完成;2)要求按照程序功能分成幾個(gè)功能模塊來(lái)實(shí)現(xiàn),各個(gè)功能模塊分別使用函數(shù)來(lái)完成;3)要求應(yīng)用本課所講授的程序設(shè)計(jì)語(yǔ)言知識(shí)來(lái)解決問(wèn)題.三、設(shè)計(jì)方法和基本原理1 課題功能描述本程序的功能,就是實(shí)現(xiàn)數(shù)的加減乘除四則運(yùn)算,如自動(dòng)計(jì)算3+5*8的結(jié)果。2 問(wèn)題詳細(xì)描述程序運(yùn)行時(shí),首先提示用戶輸入四則運(yùn)算表達(dá)式(表達(dá)式中最多有3個(gè)運(yùn)算符,數(shù)據(jù)范圍為1-100的整數(shù));輸入結(jié)束后,程序自動(dòng)進(jìn)行計(jì)算并給出結(jié)果。如:輸入13-10+5/8時(shí)輸出3.625。3 問(wèn)題的解決方案注
24、意:?jiǎn)栴}的解決方案有很多,下面給出的僅供同學(xué)們參考。該問(wèn)題主要注意四則運(yùn)算的優(yōu)先級(jí)問(wèn)題:乘除運(yùn)算比加減運(yùn)算優(yōu)先級(jí)高,同級(jí)運(yùn)算按從左到右的順序運(yùn)算。本程序應(yīng)采用模塊化設(shè)計(jì)方法,設(shè)計(jì)幾個(gè)功能模塊。例如(僅供參考):l 字符串解析函數(shù)(將輸入字符串分解成數(shù)和運(yùn)算符)l 將數(shù)據(jù)(字符數(shù)組中)轉(zhuǎn)換成十進(jìn)制數(shù)(long)l 判讀是否存在高優(yōu)先級(jí)運(yùn)算符,若存在首先計(jì)算其運(yùn)算結(jié)果并保存。l 同級(jí)運(yùn)算按先后順序進(jìn)行。四、創(chuàng)新要求實(shí)現(xiàn)程序功能后,可進(jìn)行創(chuàng)新設(shè)計(jì):1) 使用多文件,即主函數(shù)和各個(gè)函數(shù)分別存放在不同的.c文件中,在頭文件中進(jìn)行函數(shù)原型聲明;2) 在程序中增加自動(dòng)出題功能及自動(dòng)批卷功能3) 不限定運(yùn)算符
25、個(gè)數(shù)4) 允許括號(hào)運(yùn)算的存在。二、功能描述本程序的功能,就是實(shí)現(xiàn)數(shù)的加減乘除四則運(yùn)算,同時(shí)支持多重括號(hào),算是的長(zhǎng)度不超過(guò)20個(gè)運(yùn)算符(可以修改數(shù)量)。而且,程序中包含自動(dòng)出題及自動(dòng)閱卷功能,對(duì)答錯(cuò)的問(wèn)題會(huì)給出正確答案,最后會(huì)給出整體分?jǐn)?shù)。三、流程圖開(kāi)始Main函數(shù)(變量的定義、函數(shù)的調(diào)用)Scan函數(shù)(將字符型算式轉(zhuǎn)化為數(shù)字型)Cal函數(shù)(計(jì)算算式的值并輸出)ENDK=1?Ftext函數(shù)(出題模式)YN四、主要函數(shù)1.main函數(shù):功能:變量的定義,模式的選擇以及函數(shù)的調(diào)用。2.scan函數(shù)功能:給運(yùn)算符賦優(yōu)先級(jí),同時(shí)調(diào)用函數(shù)cal,向主函數(shù)返回最后計(jì)算值3.cal函數(shù)功能:計(jì)算算式的值并返回
26、。五、心得體會(huì)通過(guò)這次“四則運(yùn)算”算法編程的實(shí)習(xí),我學(xué)習(xí)并更加熟練地掌握了函數(shù)的調(diào)用、數(shù)組及循環(huán)體的使用,同時(shí)在編程過(guò)程中也遇到了很多問(wèn)題: 1 這次編程的主要問(wèn)題在于其邏輯問(wèn)題,語(yǔ)法上沒(méi)有出現(xiàn)過(guò)多問(wèn)題。邏輯上的主要問(wèn)題有:將字符型算式存儲(chǔ)為數(shù)字型算式的方法、算式中優(yōu)先級(jí)的判斷以及給每個(gè)運(yùn)算符賦優(yōu)先級(jí)的方法、對(duì)已知的有優(yōu)先級(jí)的算式的計(jì)算方法 后來(lái),經(jīng)過(guò)各種反復(fù)的嘗試,存儲(chǔ)算式我選擇了結(jié)構(gòu)體(既可以存儲(chǔ)double型的數(shù)字,又能存儲(chǔ)char型的運(yùn)算符,還能存儲(chǔ)int型的優(yōu)先級(jí));優(yōu)先級(jí)的判斷,我采用了先判斷是否在括號(hào)內(nèi),括號(hào)外的加減為1,乘除為0,括號(hào)內(nèi),算式的優(yōu)先級(jí)為:相應(yīng)的括號(hào)外的優(yōu)先級(jí)-2
27、*括號(hào)的層數(shù)(例如,兩層括號(hào)內(nèi)的減法,其優(yōu)先級(jí)為1-2*2=-3),運(yùn)算時(shí)從優(yōu)先級(jí)高的開(kāi)始算,并將運(yùn)算結(jié)果交給前后兩個(gè)運(yùn)算符。心得:在這次編程過(guò)程中,我明白了對(duì)于要實(shí)現(xiàn)的一個(gè)項(xiàng)目,首先應(yīng)該將它分成若干個(gè)簡(jiǎn)單的小功能,理清解決問(wèn)題的整體步驟,然后才能開(kāi)始便攜程序,不知道各個(gè)函數(shù)的具體功能、入口、出口參數(shù)就盲目開(kāi)始編寫(xiě)程序是很難實(shí)現(xiàn)隨后的功能的。附錄:第四題源程序/*第四題:四則運(yùn)算班級(jí):通信五班姓名:林大凱2010.7*/#include#include#include#include#define N 20struct yun/記錄算式結(jié)構(gòu)的結(jié)構(gòu)體參數(shù)char kind;/算式的算術(shù)類型dou
28、ble a;/算式的第一個(gè)參數(shù)double b;/算式的第二個(gè)參數(shù)int flag;/算式的優(yōu)先級(jí)yN;/*函數(shù):disg入口參數(shù):字符;出口參數(shù):0為非數(shù)字,1為數(shù)字功能:判斷該字符是否為數(shù)字*/int disg(char a) if(a=0&a=9) return(1); else return(0);/*函數(shù):cal入口參數(shù):算式結(jié)構(gòu)體數(shù)組;出口參數(shù):算式的運(yùn)算結(jié)果功能:計(jì)算算式的值*/double cal(yun y,int Minflag)int i=0,j=0;double temp;while(Minflag=1)/最高優(yōu)先級(jí)為括號(hào)外的+法運(yùn)算,其優(yōu)先級(jí)為1,故令Minflag=
29、1for(i=0;yi.b!=0;i+)/此循環(huán)用于計(jì)算一個(gè)符號(hào)的運(yùn)算結(jié)果,并相應(yīng)修改前后運(yùn)算符的參數(shù)if(yi.flag=Minflag)/按照優(yōu)先級(jí)順序計(jì)算switch(yi.kind)case +:temp=yi.a+yi.b;yi-1.b=yi+1.a=temp;break;case -:temp=yi.a-yi.b;yi-1.b=yi+1.a=temp;break;case *:temp=yi.a*yi.b;yi-1.b=yi+1.a=temp;break;case /:temp=yi.a/yi.b;yi-1.b=yi+1.a=temp;break;default:printf(ER
30、ROR!);for(j=i;yj.b!=0;j+)/一個(gè)運(yùn)算符計(jì)算完畢后,覆蓋其值yj=yj+1;i=-1;Minflag+;/一個(gè)優(yōu)先級(jí)計(jì)算完成后,計(jì)算下一優(yōu)先級(jí)return(temp);/最后僅剩的運(yùn)算符的計(jì)算值temp即為整個(gè)算式的值/*函數(shù):scan功能:給運(yùn)算符賦優(yōu)先級(jí),同時(shí)調(diào)用函數(shù)cal,向主函數(shù)返回最后計(jì)算值;入口參數(shù):算式(字符型);出口參數(shù):算式計(jì)算值;*/double scan(char a)int i=0,j=0,flag=0,Minflag=0,bN=0;double re;for(i=0;ai!=;i+)if(disg(ai)&disg(ai+1)/判斷是否為兩位的數(shù)
31、字bj=(ai-48)*10+(ai+1-48),i+,j+;/將兩位數(shù)字從字符狀態(tài)轉(zhuǎn)換為數(shù)字狀態(tài)并存入belseif(disg(ai)bj=ai-48,j+;/將單位數(shù)字從字符狀態(tài)轉(zhuǎn)換為數(shù)字狀態(tài)并存入belseswitch(ai)case (:flag-=2;Minflag=flag;continue;/遇到(則提高括號(hào)內(nèi)算式的優(yōu)先級(jí)(依然區(qū)分加減符號(hào)的優(yōu)先級(jí))case ):flag+=2;continue;/遇到)則降低括號(hào)內(nèi)算式的優(yōu)先級(jí)(依然區(qū)分加減符號(hào)的優(yōu)先級(jí))default:yj-1.kind=ai;/若ai既不是數(shù)字又不是括號(hào),則為運(yùn)算符switch(yj-1.kind)/以下7行
32、對(duì)括號(hào)外的運(yùn)算符賦優(yōu)先級(jí)case +:case -:yj-1.flag=1;break;case *:case /:yj-1.flag=0;break;default:printf(ERROR!);if(flag!=0)/以下6行對(duì)括號(hào)內(nèi)的運(yùn)算符賦優(yōu)先級(jí)yj-1.flag=flag;if(ai=+|ai=-)yj-1.flag+;yj-1.a=bj-1;if(j-1)!=0)yj-2.b=bj-1;yj-2.b=bj-1;re=cal(y,Minflag);/調(diào)用cal()函數(shù)計(jì)算算式的值return(re);/返回算式的最后計(jì)算結(jié)果/*函數(shù):ftext功能:程序的出題模式;入口參數(shù):void;出口參數(shù):void;*/void ftext()int
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建省考荒島求生題目及答案
- 學(xué)校學(xué)籍管理制度
- 煙草初面面試題目及答案
- 養(yǎng)老院入住退住規(guī)定制度
- 養(yǎng)老院老人入住審批制度
- 養(yǎng)老院老人健康飲食服務(wù)質(zhì)量管理制度
- 養(yǎng)老院老年人權(quán)益保障制度
- 中考自擬考試題目及答案
- 長(zhǎng)護(hù)險(xiǎn)護(hù)理人員整改制度
- 銀行的控制制度
- 2026年及未來(lái)5年中國(guó)飼料加工設(shè)備行業(yè)發(fā)展前景預(yù)測(cè)及投資戰(zhàn)略研究報(bào)告
- 2026年自動(dòng)駕駛政策法規(guī)報(bào)告
- 醫(yī)療數(shù)據(jù)倫理治理的國(guó)際經(jīng)驗(yàn)借鑒
- 浙江省《檢驗(yàn)檢測(cè)機(jī)構(gòu)技術(shù)負(fù)責(zé)人授權(quán)簽字人》考試題及答案
- 子午流注在護(hù)理中的應(yīng)用
- 新媒體評(píng)論管理制度規(guī)范(3篇)
- 劑量反應(yīng)曲線的統(tǒng)計(jì)分析方法-洞察及研究
- 2025年高職室內(nèi)藝術(shù)設(shè)計(jì)(室內(nèi)設(shè)計(jì))試題及答案
- 2025課堂懲罰 主題班會(huì):馬達(dá)加斯加企鵝課堂懲罰 課件
- 2025年初會(huì)職稱《經(jīng)濟(jì)法基礎(chǔ)》真題匯編
- Zippo2024美版年冊(cè)完整版
評(píng)論
0/150
提交評(píng)論