小學數(shù)學測試系統(tǒng)C課程設(shè)計報告及源程序代碼_第1頁
小學數(shù)學測試系統(tǒng)C課程設(shè)計報告及源程序代碼_第2頁
小學數(shù)學測試系統(tǒng)C課程設(shè)計報告及源程序代碼_第3頁
小學數(shù)學測試系統(tǒng)C課程設(shè)計報告及源程序代碼_第4頁
小學數(shù)學測試系統(tǒng)C課程設(shè)計報告及源程序代碼_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、課 程 設(shè) 計 報 告課程名稱 c語言課程設(shè)計 課題名稱 小學數(shù)學測試系統(tǒng) 專 業(yè) 紡織工程 班 級 1202 學 號 28 姓 名 金啟宜 指導教師 2014年 01 月 06 日湖南工程學院課 程 設(shè) 計 任 務 書課程名稱 c語言課程設(shè)計 課 題 小學數(shù)學測試系統(tǒng) 專業(yè)班級 紡織工程1202 學生姓名 金啟宜 學 號 28 指導老師 審 批 任務書下達日期 2013 年 12 月 26 日任務完成日期 2014年 01 月 06 日一、設(shè)計內(nèi)容與設(shè)計 課題九:小學數(shù)學測試系統(tǒng)。具體內(nèi)容見附錄。2設(shè)計要求:1)設(shè)計正確,方案合理。2)界面友好,使用方便。3)程序精煉,結(jié)構(gòu)清晰。4)上機演示

2、。3設(shè)計報告要求:課程設(shè)計報告格式如下:1)正文的格式:一級標題用3號黑體,二級標題用四號宋體加粗,正文用小四號宋體,行距為22。 2)正文的內(nèi)容:課題的主要功能、課題的功能模塊的劃分、主要功能的實現(xiàn)、程序調(diào)試、總結(jié)、附件(所有程序的源代碼,要求對程序?qū)懗霰匾淖⑨專?,課程設(shè)計報告需5000字左右(不含附件)。3)課程設(shè)計報告裝訂順序:封面、任務書、目錄、正文、評分、程序清單附件。二、進度安排星期日(17周)星期一(18周)星期四(18周)星期五(18周)星期日(18周)14:00-17:0018:00-21:0018:00-21:0018:00-21:00交報告上課時間另外安排。附錄:設(shè)計課

3、題九:小學數(shù)學測試系統(tǒng)一、問題描述:本系統(tǒng)可以用來進行簡單的數(shù)學測試,并累計成績,包括用戶注冊、用戶登錄、用戶刪除、題目測試、信息保存等功能。二、功能描述:1、本系統(tǒng)采用結(jié)構(gòu)體數(shù)組,每個數(shù)據(jù)的結(jié)構(gòu)應當包括:用戶名、用戶密碼、共測試題目數(shù)、答對題目數(shù)。2、系統(tǒng)功能:a. 用戶注冊:即添加新的用戶名、用戶密碼。b. 用戶登錄:在進行數(shù)學測試之前,需進行登錄,若沒有該用戶,需進行注冊。c. 題目測試:系統(tǒng)自動生成題目(注意題目的合理性,題目結(jié)果不能是負數(shù),除數(shù)不能是0等),用戶給出答案,系統(tǒng)可以自動測試其正確性,同時統(tǒng)計成績。d. 信息保存: 當注冊成功、題目測試完畢后將用戶信息及成績保存到文件。e

4、.退出系統(tǒng)。3、系統(tǒng)使用說明:執(zhí)行一個具體的功能之后,程序?qū)⒅匦嘛@示功能菜單。系統(tǒng)的功能并不限于上述,可以對其進行擴充完善,如題目的自動生成,可以只是簡單的加減乘除運算,也可以生成復雜的四則混合運算。同時,用戶界面友好也很重要,當輸入錯誤答案,需給出提示信息。三、測試數(shù)據(jù):用戶=3,題目數(shù)=5目 錄1 系統(tǒng)需求分析62 概要設(shè)計63 詳細設(shè)計104 系統(tǒng)測試155課程設(shè)計總結(jié)181 系統(tǒng)需求分析 小學生數(shù)學測試系統(tǒng)具有隨機出題,自動評分,查看答案,錯題重做等功能的系統(tǒng);其屬性有:1. 主界面設(shè)計,選擇各種功能。 2. 系統(tǒng)隨機出題,顯示算式,含加,減,乘,除四則運算。 3. 練習時,系統(tǒng)隨機出

5、題,鍵入答案,可顯示對錯。 4. 測試時,系統(tǒng)自動出題,每題得分,再統(tǒng)計得分。 5. 題的對錯信息,錯誤的給出答案。 2 概要設(shè)計系統(tǒng)功能模塊圖:小學數(shù)學測試系統(tǒng)學生成績管理模塊 測試模塊注冊登錄模塊查看結(jié)果模塊 錯題重做模塊2.1注冊登錄模塊提示用戶輸入姓名和學號,如果已經(jīng)有記錄則將本次登錄用戶信息追加儲存在文件中,如果沒有記錄,則創(chuàng)建一個新文件儲存:其模塊圖如下圖所示:注冊登錄模塊提示輸入姓名學號創(chuàng)建文件記錄學生信息判斷是否有記錄 2.2測試模塊進入開始測試菜單后,開始計時,選擇加減乘除四種運算類型,總體來說測試模塊可以分為:加法運算、減法運算、乘法運算、除法運算四部分四部分功能相似選擇類

6、型后,在選擇題數(shù)目為(5,10,20,50,100),然后再選擇難度,這時開始做題(題目利用隨機函數(shù)隨機出題),然后判斷正誤并給出正確率,錯誤的結(jié)果存入一個文件中以備錯題重做,將所有做題的結(jié)果存入另個文件中以便查看結(jié)果;測試模塊加法運算減法運算乘法運算除法運算2.3 學生成績管理模塊本模塊首先將每次測試同學姓名,學號,成績存入一個文件中,每次測試同學的信息不覆蓋之前同學的信息,然后將文件中的信息讀取到結(jié)構(gòu)體中進行排序,最后利用結(jié)構(gòu)體將排好序的成績顯示到屏幕上,其模塊如下所示圖:學生成績管理模塊存入測試學生成績信息查看排名榜創(chuàng)建學生成績信息文件排列順序2.4 查看結(jié)果模塊利用測試模塊存儲的結(jié)果信

7、息文件進行直接讀取,期間用到fgetc函數(shù)將文件的信息讀取出來,其圖如下圖所示:查看結(jié)果模塊打開存儲結(jié)果的文件讀取文件2.5 錯題重做模塊 測試模塊過程的已將錯題和錯題的答案分別出入到文件中,直接進行打開存儲錯題的文件逐個讀取錯題,這時利用scanf函數(shù)輸入答題者的答案,最后再打開儲存錯題答案的文件進行核對正確答案,其模塊如下圖所示:錯題重做模塊讀取錯題進行重做核對答案打開錯題存儲文件系統(tǒng)流程圖:開始輸入姓名輸入學號主菜單開始測試查看排名錯題重做查看結(jié)果結(jié)束測試加法減法乘法除法選擇題數(shù)選擇難度測試退出返回保存3 詳細設(shè)計3.1登錄功能得具體實現(xiàn):用到兩個函數(shù)savemessage()和judg

8、e()兩個函數(shù),其中 savemessage()函數(shù)用來,保存學生輸入信息,將輸入學生信息保存到studentmessage.txt和testresult.txt文件中,保存過程中,先輸入到結(jié)構(gòu)體中,再利用fwrite(&s0,sizeof(struct student),1,fp);語句向文件studentmessage.txt中寫入一條記錄,即剛剛輸入的學生姓名和學號;利用fprintf(fp1,姓名:%sn,);fprintf(fp1,學號:%sn,s0.num); 向文件testresult.txt中寫入剛剛輸入的學生信息登錄完后進入測試界面此時開始計時有語句printf

9、( 請計時輸入開始時間(點,分):); scanf(%d,%d,&houra,&mina);進行輸入計時。然后進入測試界面的菜單:3.2 測試功能得實現(xiàn)選測試類型:測試功能菜單分為5個,其中14為選擇類型,5返回主菜單;具體實現(xiàn)選擇功能有while(choose5) printf( 超出功能范圍,請重新選擇(1-5):);scanf(%d,&choose);輸入15之間的一個數(shù),再用switch(choose) 進行選擇對應的功能如上圖選擇1后進入選題數(shù)目:進行選擇題目的數(shù)目,輸入要測試的題目數(shù)被限制(5/10/20/50/100)五個數(shù)用句while(thnum5&thnum10&thnum

10、20&thnum50&thnum100) printf(超出功能范圍,請重新選擇(5/10/20/50/100):);scanf(%d,&thnum); 由此語句實現(xiàn)對題目數(shù)的限制,但超出范圍后則提示重新輸入。在begain()中調(diào)用addition(int number)控制循環(huán)語句for(int i=0;inumber;i+) if(m=1)num1=rand()%n; num2=rand()%n; /產(chǎn)生一位隨機數(shù),num1,num2if(m=2)num1=10+rand()%(n-10); /產(chǎn)生兩位隨機數(shù) num1,num2 num2=10+rand()%(n-10);if(m=3)

11、num1=100+rand()%(n-100); /產(chǎn)生三位隨機數(shù) num1,num2 num2=100+rand()%(n-100);printf(%d + %d = ,num1,num2); scanf(%d,&num4);通過控制循環(huán)的次數(shù)來控制產(chǎn)生題的數(shù)目.選難度的實現(xiàn):利用隨機函數(shù)rand()%n;中n的不同值產(chǎn)生不同的位數(shù)的隨機書實現(xiàn)難度的控制,n=10時用語句num1=rand()%n產(chǎn)生一位數(shù);n=100時用語句num1=10+rand()%(n-10)產(chǎn)生二位數(shù);n=1000時用num1=100+rand()%(n-100)產(chǎn)生三位數(shù);具體有語句printf(請選擇難度: )

12、; scanf(%d,&m);system(cls); /清屏if(m=1) n=10 ;if(m=2) n=100 ;else if(m=3) n=1000 ;for(int i=0;inumber;i+) if(m=1)num1=rand()%n; num2=rand()%n; if(m=2)num1=10+rand()%(n-10); num2=10+rand()%(n-10);if(m=3)num1=100+rand()%(n-100); num2=100+rand()%(n-100); 實現(xiàn)控制難度,并有rand()%n產(chǎn)生隨機數(shù)實現(xiàn)隨機出題功能。自動評分的實現(xiàn)和數(shù)據(jù)的儲存系統(tǒng)會將輸

13、入的答案與正確答案進行逐一比較,如果正確則將結(jié)果只記錄到testresult.txt中,以便查看結(jié)果;如果錯誤,則將錯誤題正確結(jié)果記錄到failedresult.txt中,以便錯題重做,將錯誤題正確結(jié)果記錄到rightresult.txt中,testresult.txt中,以便核對錯題答案,在此過程中系統(tǒng)會自動統(tǒng)計正確結(jié)果個數(shù)和錯誤個數(shù),從而利用average=float(count1)/float(number);自動得到分數(shù)。具體程序如下:if(num3=num4) fprintf(fp,%d + %d =%d%dn,num1,num2,num4,num3);count1+;else fp

14、rintf(fp,%d + %d =%d%dn,num1,num2,num4,num3);fprintf(fp2,%d + %d =n,num1,num2,num4,num3);/將錯誤題記錄到failedresult.txt中fprintf(fp3,%d + %d = %d n,num1,num2,num3); average=float(count1)/float(number);fprintf(fp,正確 %d 道,錯誤 %d 道,正確率為:%fnn,count1,count2,average);a=a+average*100;/總分nu+;/記錄做不同類型題的次數(shù)以便算平均分減乘除的過

15、程和原理和加法一樣其工作界面分別為減法;乘法;除法;除法其它功能得實現(xiàn)與加法一樣只有分母不為零,用num2=n/10+rand()%(n-n/10)語句進行實現(xiàn),其中rand()%(n-n/10)產(chǎn)生0到n-n/10-1的數(shù);n/10+rand()%(n-n/10)產(chǎn)生n/10到n-1的數(shù);例如n=100時產(chǎn)生10到99的兩位數(shù);從而實現(xiàn)了分母不為零,同時也實現(xiàn)了難度的控制。3.3查看結(jié)果的實現(xiàn):測試過程中已經(jīng)將結(jié)果記錄存到testresult.txt中,只需打開文件讀取出記錄即可void showresult()/顯示測試結(jié)果函數(shù)file *fp;if(fp=fopen(testresult

16、.txt,r)=null); exit(0);char ch; ch=fgetc(fp); /文件開頭字符while(ch!=eof) /當文件沒有到尾時,一直循環(huán) putchar(ch); /輸出字符 ch=fgetc(fp); fclose(fp); 有此函數(shù)就可直接讀取查看結(jié)果。3.4 排名的實現(xiàn)此過程中將將每次做題情況及學生信息記錄到文件nrecord.txt中,然后再將nrecord.txt中的一條條記錄讀取到結(jié)構(gòu)體中,用冒泡法進行排序,最后直接從結(jié)構(gòu)體中讀取排好序的成績;其具體程序:void sort() /實現(xiàn)排序file *fp5;int i,j,m; s0.avscore=a

17、/nu; fp5=fopen(nrecord.txt,a+); fprintf(fp5,%s%s%fn,,s0.num,s0.avscore);/將剛剛做過的測試記錄到文件nrecord.txt中 fclose(fp5); fp5=fopen(nrecord.txt,rb);for(i=0;!feof(fp5);i+) fscanf(fp5,%s%s%fn,,si.num,&si.avscore); fclose(fp5); m=i;struct student temp;for(i=0;im;i+) for(j=0;jm-1;j+)if(sj.avscoresj+

18、1.avscore)strcpy(,); strcpy(temp.num,sj.num); temp.avscore=sj.avscore; strcpy(,sj+1.name); strcpy(sj.num,sj+1.num);sj.avscore=sj+1.avscore; strcpy(sj+1.name,); strcpy(sj+1.num,temp.num);sj+1.avscore=temp.avscore;/輸出排名結(jié)果printf*n);printf( -查看你的排名(排序結(jié)果由高到低):-n);printf( -

19、姓名學號分數(shù)-n);for(i=0;im;i+)printf(%s%s%4.2fn,,si.num,si.avscore);3.5錯題重做測試過程中的已將錯題和錯題的答案分別存入到failedresult.txt 和rightresult.txt文件中,直接進行打開存儲錯題的文件逐個讀取錯題,這時利用scanf函數(shù)輸入答題者的答案,最后再打開儲存錯題答案的文件進行核對正確答案具體程序為:void rework() / 錯題重做int a; char ch; file *fp2,*fp3;if(fp2=fopen(failedresult.txt,a+)=null)printf(打

20、開文件失敗n); exit(0);if(fp3=fopen(rightresult.txt,a+)=null)printf(打開文件失敗n); exit(0);printf(*錯題重做*n);while(!feof(fp2) ch=fgetc(fp2);printf(%c,ch);/讀取failedresult.txt中的錯題if(ch=) scanf(%d,&a); /輸入答案fp2=fopen(failedresult.txt,w);/清空之前數(shù)據(jù)fclose(fp2);printf(=小朋友請查看正確答案=n);while(!feof(fp3) ch=fgetc(fp3);printf(

21、%c,ch);/讀取rightresult.txt中的錯題的答案fclose(fp3);fp3=fopen(rightresult.txt,w);/清空fclose(fp3);3.6結(jié)束測試當選擇主菜單的結(jié)束功能時,系統(tǒng)則提示輸入結(jié)束時間,輸入后,系統(tǒng)將自動生成所用時間,然后系統(tǒng)將把學生的所有信息記錄到以學生,學號命名的文件中.具體實現(xiàn)過程如下;void filecopy()/文件復制函數(shù),用來保存測試結(jié)果,當然文件名不能重復,file *in,*out; strcat(s0.num,.txt);/將字符串.txt連接到字符串student0.num后,即以學號為文件名,后綴為.txt的文件中

22、,保存在工程目錄下if(in=fopen(testresult.txt,r)=null) in=fopen(testresult.txt,w+); printf(無文件記錄,已新建.n);if(out=fopen(s0.num,w)=null)/打開文件學號.txt 文件(如030.txt),w方式為只寫方式 printf(打開文件失敗n); exit(0);while(!feof(in)/當文件testresult.txt沒有結(jié)束時循環(huán) fputc(fgetc(in),out);/逐個字符寫入 fclose(in); fclose(out);void testover()/程序測試完畢函數(shù)p

23、rintf(nn-測試完畢你的測試結(jié)果保存在 %s 中-nn,s0.num); /輸出測試結(jié)果記錄提示4 系統(tǒng)測試 4.1注冊登錄模塊 4.2測試模塊選測試類型選題數(shù)目選難度的實現(xiàn)4.3 查看學生成績模塊4.4 錯題重做模塊4.5 測試時出現(xiàn)的錯誤與分析總結(jié)程序設(shè)計為結(jié)構(gòu)化和模塊化,用函數(shù)間的相互調(diào)用來實現(xiàn)系統(tǒng)的功能,為調(diào)試帶來了一定的方便 。在調(diào)試過程中,出現(xiàn)了很多問題,其中文件和結(jié)構(gòu)體之間的轉(zhuǎn)換最為困難,在一段時間內(nèi),影響到了錯題重做,排名等功能的實現(xiàn);問題一:程序中多次用到了文件的讀寫,用文件記錄信息,多次出現(xiàn)讀不出來,記錄不到文件中,還出現(xiàn)亂碼。 解決方法:認真學習和反復研究了,文件的

24、讀寫函數(shù)fprintf,fscanf,fread,fwrite,fgetc,在反復的調(diào)試中終于解決了此問題。問題二:由于學生的信息均記錄在文件中,而文件不能直接排序需轉(zhuǎn)換到結(jié)構(gòu)體中進行排序,給整個排序過程帶來了相當大的困難,出現(xiàn)了轉(zhuǎn)換不到結(jié)構(gòu)體中,和亂碼現(xiàn)象。解決方法:首先檢查了為文件是否將信息記錄了下來,確認有數(shù)據(jù)后,用fscanf, fread,進行了反復的更換,此過程中反復運行查看結(jié)構(gòu)體是否有輸出。最終實現(xiàn)了文件與結(jié)構(gòu)體之間數(shù)據(jù)的傳遞,實現(xiàn)了排序功能.問題三:錯題重做有一定的困難,怎樣將錯題一個個及記錄下來,并且能讀出來重新做,產(chǎn)生了一定的困難。解決方法:采用了文件記錄錯題和錯題的答案,

25、用fgetc函數(shù)實現(xiàn)了讀出記錄的錯題,從而實現(xiàn)了錯題重做功能。此外在調(diào)試過程中也遇到了相當多的其他問題,從整體結(jié)構(gòu)的設(shè)計,到各個功能的實現(xiàn).5 課程設(shè)計總結(jié) 這次的課程設(shè)計實驗是對我們進入大學以來學習c語言結(jié)果的是一次大考驗。自己動手,發(fā)現(xiàn)問題和解決問題。并發(fā)現(xiàn)了許多自己的不足,平時沒掌握的知識在實踐中暴漏,經(jīng)過不斷的思考,查閱書籍和上網(wǎng)查資料及上機運行,解決了大部分問題,還稍微有些小問題。但是,我相信在今的學習中,一定能把它解決好。當今計算機應用在生活中可以說得是無處不在。因此作為二十一世紀的大學來說掌握程序開發(fā)技術(shù)是十分重要的,而c語言又是最常見,功能最強大的一種高級語言,因此做好c語言課

26、程設(shè)計是十分必要的。 我不僅鞏固c語言程序設(shè)計課程學習的內(nèi)容,掌握設(shè)計的基本方法,強化上機動手能力。 本次課程設(shè)計編寫的小學數(shù)學測試系統(tǒng),它具有隨機出題、自動評分、自動排名,查看正確答案、錯題重做等功能,本系統(tǒng)功能強大,程序大,編寫難度相當大,在編程中,很多知識,幾乎是一片空白。不過后來通過書本和網(wǎng)絡慢慢知道了一點。 通過這次課程設(shè)計,使我更加深刻地體會到c語言程序編寫過程的嚴謹與細致,還有無論做任何事都要有耐心。也懂得了理論與實際相結(jié)合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力在

27、課程設(shè)計過程中,收獲知識,提高能力的同時,我也學到了很多人生的哲理,懂得怎么樣去制定計劃,怎么樣去實現(xiàn)這個計劃,并掌握了在執(zhí)行過程中怎么樣去克服心理上的不良情緒。因此在以后的生活和學習的過程中,我一定會把課程設(shè)計的精神帶到生活中,是生活也更加好。謝謝田老師這幾天時間對我們指導計算機科學與技術(shù)系課程設(shè)計評分表課程名稱: c語言程序設(shè)計 項 目評 價設(shè)計方案的合理性與創(chuàng)造性設(shè)計與調(diào)試結(jié)果設(shè)計說明書的質(zhì)量答辯陳述與回答問題情況課程設(shè)計周表現(xiàn)情況綜合成績 教師簽名: 日 期: 2014.01.10 附錄:源程序#include /c語言標準輸入輸出頭文件#include /字符串操作需要用到的頭文件#

28、include /文件操作需要用到的頭文件#include /產(chǎn)生隨機數(shù)需要用到的頭文件float a=0;int nu=0;int houra,hourb,mina,minb;struct student char name21; /姓名 char num10; /學號 float avscore;s50; /結(jié)構(gòu)體數(shù)組,存儲學生的信息,在此初定為50,可改/*-*/void savemessage() /保存學生輸入信息的函數(shù) file *fp,*fp1;/定義文件指針,/以下判斷文件打開與否 ,a方式打開則可向文件尾寫數(shù)據(jù)if(fp=fopen(studentmessage.txt,wb

29、+)=null)/打開文件studentmessage.txt printf(打開文件失敗n); exit(0);if(fp1=fopen(testresult.txt,a)=null)/打開文件testresult.txt printf(打開文件失敗n); exit(0);printf(輸入姓名:); /以下為要學生輸入個人信息scanf(%s,);printf(輸入學號:);scanf(%s,&s0.num);fwrite(&s0,sizeof(struct student),1,fp);/向文件studentmessage.txt中寫入一條記錄,即剛剛輸入的學生信息fpri

30、ntf(fp1,姓名:%sn,);/以下為向文件testresult.txt中寫入剛剛輸入的學生信息fprintf(fp1,學號:%sn,s0.num);fclose(fp);/關(guān)閉文件studentmessage.txtfclose(fp1);system(cls); /清屏void judge()/判斷函數(shù)int i=0;file *fp;/文件指針/以下判斷文件打開與否 ,r為只讀打開方式printf(nnn); printf( *小學數(shù)學測試系統(tǒng)*n); printf( *-*n); printf( *-*n); printf( *n); printf( *-注 冊-*n

31、); printf( *-*n); printf( *-輸入姓名-*n); printf( *-*n); printf( *-輸入學號-*n); printf( *-*nnn);if(fp=fopen(studentmessage.txt,r)=null)/以下判斷文件打開與否 a方式打開則可向文件尾寫數(shù)據(jù)/打開文件studentmessage.txt fp=fopen(studentmessage.txt,w+);/如果沒有studentmessage.txt文件,則新建此文件,w+打開方式為新建一個文件printf(無文件記錄,已新建.n);while(!feof(fp)/判斷是否到了文件

32、尾fread(&si,sizeof(struct student),1,fp);/一行一行從文件中讀出學生信息,保存在結(jié)構(gòu)體數(shù)組student中fscanf(fp,n); /讀取換行符 i+; /i變量保存學生記錄個數(shù)if(i=50) /當人數(shù)滿時即50個人滿時,因為數(shù)組下標從0開始,所以當i為29時printf(人數(shù)已滿,你已無法測試.n);fclose(fp);exit(0);/*-*/void addition(int number) /加法運算函數(shù),number為題目數(shù)形參file *fp,*fp2,*fp3;if(fp=fopen(testresult.txt,a)=null) pr

33、intf(打開文件失敗n); exit(0);if(fp2=fopen(failedresult.txt,a)=null)printf(打開文件失敗n); exit(0);if(fp3=fopen(rightresult.txt,a)=null)printf(打開文件失敗n);exit(0);int num1,num2,num3,num4,m,n,count1=0,count2=0;float average=0.0; /正確率變量,注意是float類型srand(time(0); /初始化隨機數(shù),如果沒有此語句,則每次運行程序時的隨機數(shù)是一樣的fprintf(fp,加法測試:n); /向文件

34、寫入fprintf(fp,被加數(shù) + 加數(shù) = 你的結(jié)果 正確結(jié)果 是否正確n);/向文件寫入 printf( *n);/*選擇難度*/ printf( *- 請選擇難度:-*n); printf( *- 1.簡 單 -*n); printf( *- 2.一 般 -*n); printf( *- 3.困 難 -*n); printf( *-*nnn);printf(請選擇難度: ); scanf(%d,&m);system(cls); /清屏if(m=1) n=10 ;/*將m的值轉(zhuǎn)化為對應的n值,從而使隨機函數(shù)出現(xiàn)一位,2位,3位,*/if(m=2) n=100 ;else if(m=3)

35、n=1000 ;printf( n *nn);for(int i=0;inumber;i+)/*小于測試題目數(shù)時,循環(huán)*/if(m=1)num1=rand()%n; num2=rand()%n; /產(chǎn)生一位隨機數(shù),num1,num2if(m=2)num1=10+rand()%(n-10); /產(chǎn)生兩位隨機數(shù) num1,num2 num2=10+rand()%(n-10);if(m=3)num1=100+rand()%(n-100); /產(chǎn)生三位隨機數(shù) num1,num2 num2=100+rand()%(n-100); num3=num1+num2; /num3保存正確結(jié)果 printf(%d

36、 + %d = ,num1,num2);/在終端屏幕上輸出題目 scanf(%d,&num4);/你要輸入的計算結(jié)果if(num3=num4)/正確結(jié)果與你計算的結(jié)果比較,正確的話fprintf(fp,%d + %d =%d%dn,num1,num2,num4,num3);/將結(jié)果記錄到testresult.txt中count1+;/變量count1記錄正確題目的個數(shù)else/錯誤的話,即num1!=num2時fprintf(fp,%d + %d =%d%dn,num1,num2,num4,num3);/將結(jié)果記錄到testresult.txt中fprintf(fp2,%d + %d =n,n

37、um1,num2,num4,num3);/將錯誤題記錄到failedresult.txt中fprintf(fp3,%d + %d = %d n,num1,num2,num3);/將錯誤題正確結(jié)果記錄到failedresult.txt中average=float(count1)/float(number);/計算正確率,注意int整型要轉(zhuǎn)換為float類型fprintf(fp,正確 %d 道,錯誤 %d 道,正確率為:%fnn,count1,count2,average);a=a+average*100;nu+;fclose(fp);fclose(fp3);fclose(fp2);/*-*/vo

38、id subtracter(int number) /減法運算函數(shù),注釋與加法一樣file *fp,*fp2,*fp3;if(fp=fopen(testresult.txt,a)=null)printf(打開文件失敗n);exit(0);if(fp2=fopen(failedresult.txt,a)=null)printf(打開文件失敗n);exit(0);if(fp3=fopen(rightresult.txt,a)=null)printf(打開文件失敗n);exit(0);int num1,num2,num3,num4,count1=0,n,m,count2=0;float averag

39、e=0.0;srand(time(0);fprintf(fp,減法測試:n);fprintf(fp,被減數(shù) - 減數(shù) = 你的結(jié)果 正確結(jié)果 是否正確n); printf( *n);/*選擇難度*/ printf( *- 請選擇難度:-*n); printf( *- 1.簡 單 -*n); printf( *- 2.一 般 -*n); printf( *- 3.困 難 -*n); printf( *-*nnn);printf(請選擇: ); scanf(%d,&m);system(cls); /清屏if(m=1) n=10 ;if(m=2) n=100 ;else if(m=3) n=1000

40、 ;printf( n *nn);for(int i=0;inumber;i+)if(m=1)num1=rand()%n; num2=rand()%n; /產(chǎn)生一位隨機數(shù),num1,num2if(m=2)num1=10+rand()%(n-10); /產(chǎn)生兩位隨機數(shù) num1,num2 num2=10+rand()%(n-10);if(m=3)num1=100+rand()%(n-100); /產(chǎn)生三位隨機數(shù) num1,num2 num2=100+rand()%(n-100);num3=num1-num2;printf(%d - %d = ,num1,num2);scanf(%d,&num4);if(num3=num4)fprintf(fp,%d - %d =%d%d n,num1,num2,num4,num3);count1+;elsefprintf(fp,%d - %d =%d%dn,num1,num2,num4,num3);count2+;fprintf(fp2,%d - %d =n,num1,num2,num4,num3);fprintf(

溫馨提示

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

評論

0/150

提交評論