C語言 智能評分系統(tǒng)程序設(shè)計(jì)_第1頁
C語言 智能評分系統(tǒng)程序設(shè)計(jì)_第2頁
C語言 智能評分系統(tǒng)程序設(shè)計(jì)_第3頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

《建筑環(huán)境與設(shè)備工程專業(yè)》C程序設(shè)計(jì)課程設(shè)計(jì)姓 名:xxx學(xué) 號:00000專 業(yè):建筑環(huán)境與設(shè)備工程設(shè)計(jì)課題:智能化比賽評分系統(tǒng)時(shí) 間:2010.6.22—2010.6.26指導(dǎo)老師:xxx本組人員:xxxxx目錄一、設(shè)計(jì)目的和內(nèi)容 1設(shè)計(jì)背景與目的 1課程設(shè)計(jì)內(nèi)容 4課程設(shè)計(jì)有四個階段組成 5二、算法的基本思想 5主程序的流程 6各分程序模塊之間的調(diào)用關(guān)系 6三、測試數(shù)據(jù) 8四、源程序及系統(tǒng)文件使用說明 9五、實(shí)習(xí)體會...............................................參考文獻(xiàn)..............................................2智能化比賽評分系統(tǒng)一.設(shè)計(jì)目的與內(nèi)容(1)設(shè)計(jì)背景與目的:8100分(演講內(nèi)容5050122名的應(yīng)用程CC語言1、每個選手的2輸出每位選手的姓名和分?jǐn)?shù),最終評出一、二、三等獎。38位選手的比賽名次的實(shí)踐能力和設(shè)計(jì)操作要求學(xué)生熟練掌握C語言的基本知識和編程技能并基本掌握結(jié)構(gòu)化程序設(shè)計(jì)的基本思路和方法。3(2)課程設(shè)計(jì)內(nèi)容設(shè)計(jì)課題:智能化比賽評分系統(tǒng)1、評分系統(tǒng)基本要求:設(shè)計(jì)一個評分系統(tǒng),使之能提供以下功能:①評委給每個演講者評分——輸入。②輸入每位選手的姓名、成績并有相應(yīng)的提示語;(的平均分,為防止重分現(xiàn)象平均分取小數(shù)點(diǎn)后兩位;④對8位選手的成績進(jìn)行排序評名次,并且分出一、二、三等獎分別1、2、2個名額;⑤評分結(jié)果瀏覽功能(每位選手的姓名、成績、名次、一、二、三等獎及所有選手成績的排序)——輸出;⑥查詢或排序功能。2、創(chuàng)新之處:①智能化:輸入?yún)①愡x手的姓名和對應(yīng)的成績后,系統(tǒng)自動對參賽選手的成績進(jìn)行處理,對評委的分項(xiàng)分進(jìn)行求和運(yùn)算,去掉求和后各評委的最高分和最低分,求剩余評委的平均分,即是此位選手的最終得分,系統(tǒng)會自動評出選手的獎項(xiàng);②公平性:為防止出現(xiàn)重分的現(xiàn)象,我們對每位選手最終分?jǐn)?shù)取小數(shù)點(diǎn)后三位;③靈活性:程序的開頭我們定義的三個符號常量即:N(選手?jǐn)?shù)),M(評委數(shù)),P(評分項(xiàng)數(shù)),針對比賽的選手?jǐn)?shù)、評委數(shù)、評分項(xiàng)數(shù)的4變化,可以相應(yīng)的調(diào)整符號常量的值,達(dá)到了“一改全改”的效果。(3)課程設(shè)計(jì)有四個階段組成:1、分析設(shè)計(jì)數(shù)據(jù)的結(jié)構(gòu):學(xué)生首先選定題目、收集資料、用進(jìn)行功能模塊的分析,控制模塊分析正確,系統(tǒng)設(shè)計(jì)要實(shí)用,然后確定模塊,寫出函數(shù)原型。2、編程:根據(jù)函數(shù)原型及其功能,填充相應(yīng)的算法。編程簡練,可用性強(qiáng),功能全面。3、調(diào)試程序:上機(jī)調(diào)試程序,解決編譯的錯誤,直至運(yùn)行成功。4、撰寫報(bào)告:按格式寫出完整、規(guī)范的報(bào)告并打印。其中模塊圖.流程圖要清楚、規(guī)范,不能有錯別字。5、答辯:程序運(yùn)行通過,報(bào)告打印出來后,通知知道老師檢查,經(jīng)提問回答大部分提問,即可通過。二、算法的基本思想(一)主程序的流程(選手?jǐn)?shù),M(評委數(shù),P(評分選項(xiàng)數(shù)的值分別為8,6,2.這樣不僅簡單不易出錯,而且便于常量的更改,只需改變#include命令行就可以一改全改。與姓名對應(yīng)。進(jìn)入程序主體,要想將比賽結(jié)果完整的輸出,我們必須要讓程序在將評委得5分與選手姓名輸入時(shí)自動計(jì)算出選手最終得分以及實(shí)現(xiàn)名次排序與姓名的一一對應(yīng)。8位選手得分的正確錄入,先用for循環(huán)嵌套通過評委數(shù)量與選手scanf語句對應(yīng)二維數(shù)組a[]使評分與選手結(jié)合,k=Nsort將評分按大小排序,average函數(shù)去除一個最高分與最低分算出選手最終得分。最后將選手得分排序。公布獲獎結(jié)果時(shí)還必須出現(xiàn)選手的姓名。接著再用一個for循環(huán)通過k控制姓名數(shù)量,通過scanfk<N是跳出循環(huán),至此num[]name[][]將上面的評分與選手姓名一一對printffor循環(huán)將最后的比賽名次與獲獎選手姓名一一對應(yīng)的完整輸出,程序到此結(jié)束。(二)各分程序模塊之間的調(diào)用關(guān)系主程序由三個程序模塊構(gòu)成,分別為自編函數(shù)sort然后去掉一個最低分,去掉一個最高分,用averageaver作為選手得分。6arran函數(shù)。arrannum[]二維數(shù)組name[][]實(shí)現(xiàn)了選手得分以及選手姓名的一一對應(yīng)。函數(shù)調(diào)用至此結(jié)束。如:{inti,j,max;floattemp1;chartemp2[8];for(i=0;i<N;i++){max=i;for(j=i;j<N;j++){if(num[max]<num[j])max=j;}temp1=num[i];strcpy(temp2,name[i]);num[i]=num[max];strcpy(name[i],name[max]);num[max]=temp1;strcpy(name[max],temp2);}}首先我們先定義一個整型變量,i,jmax變量,temp1temp2[8]8元素。forfor語句,《max=i,再利用fori=j《N;j++(for語句循環(huán)變量賦予初值,,循環(huán)條件,循環(huán)變量增值語句)maxii=jj《N;j++if語句這個最大值評分jJtemp1=num[i]strcpy(它表示字符串復(fù)制函數(shù)21中去巴表示名字的定義變量temp2temp1ifor循環(huán)所得到的最高分利用字符串函數(shù)7strcpy(name[i],name[max])所示的為所獲最高分的那個讓你的名字賦予給第i個名字,也就是第i個名字所得分?jǐn)?shù)為演講比賽分?jǐn)?shù)最高。整個編程程序的循環(huán)。三.測試數(shù)據(jù)智能化比賽評分系統(tǒng)測試數(shù)據(jù)選手評委評委1評委2評委3評委4評委56李華454846484546444347454046張明414342453941404242424041王凱414547454648424743474646陳紅394238454042414345464342何翔423841394241404343414744黃菊424541434543414042434139沈峰484948474648484747494847趙玉454244434846444144464443注:本次比賽共有8位參賽選手,有650100分。每位選手8附:運(yùn)行程序使用說明:運(yùn)行程序時(shí),當(dāng)提示:請輸入第k+1位選手的成績時(shí),輸入12個小于等于50的數(shù),數(shù)與數(shù)之間用空格鍵隔開,每輸入12個數(shù)據(jù)后按下回車鍵,將進(jìn)行下一位選手成績的輸入,依次下去,當(dāng)輸完八位參賽選手的成績后,按下回車鍵,系統(tǒng)將提示輸入?yún)①愡x手的姓名,此時(shí)從鍵盤上輸入八位參賽選手的姓名(vc++支持輸漢字的功能回車鍵,將出現(xiàn)運(yùn)行結(jié)果。四.源程序及系統(tǒng)文件使用說明源程序如下:#include<stdio.h>#include<string.h>#defineN8#defineM6#defineP2main(){voidsort(floatarray[],intn);floataverage(floatarray[M]);voidarran(floatnum[],charname[N][8]);floatb[M];inti,j,k;floata[M][P];floatnum[N];charname[N][8];for(k=0;k<N;k++){for(i=0;i<M;i++)b[i]=0;printf("請輸入第%d位參賽選手的成績:",k+1);9for(i=0;i<M;i++){for(j=0;j<P;j++){scanf("%f",&a[i][j]);b[i]=b[i]+a[i][j];}}sort(b,M);num[k]=average(b);}printf("\n請輸入?yún)①愡x手的姓名:\n for(k=0;k<N;k++)scanf("%s",name[k]);arran(num,name);printf("\n\n\n參賽選手成績?nèi)缦拢篭n\n");for(i=0;i<N;i++)printf("%10s%.3f分\n\n",name[i],num[i]);printf("本次比賽選手獲獎結(jié)果如下:\n\n");printf("一等獎:\n %10s%.3f分\n\n二等獎for(k=1;k<3;k++)printf("%10s%.3f分",name[k],num[k]);printf("\n\n三等獎:\n ");for(k=3;k<5;k++)printf("%10s%.3f分",name[k],num[k]);printf("\n");}voidsort(floatarray[],intn){inti,j,k;floatt;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(array[j]<array[k])k=j;t=array[k];array[k]=array[i];array[i]=t;

",name[0],num[0]);}}voidarran(floatnum[],charname[N][8]){inti,j,max;floattemp1;chartemp2[8];for(i=0;i<N;i++){max=i;for(j=i;j<N;j++){if(num[max]<num[j])max=j;}temp1=num[i];strcpy(temp2,name[i]);10num[i]=num[max];strcpy(name[i],name[max]);num[max]=temp1;strcpy(name[max],temp2);}}floataverage(floatarray[M]){voidsort(floatarray[],intn);inti;floataver,sum;sort(array,M);sum=array[1];for(i=2;i<M-1;i++)sum=sum+array[i];aver=sum/(M-2);return(aver);}3sortaveragearran分別對他們進(jìn)行闡述:①函數(shù)sortvoidsort(floatarray[],intn){inti,j,k;floatt;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(array[j]<array[k])k=j;t=array[k];array[k]=array[i];array[i]=t;}}主要用于對每位參賽選手的成績進(jìn)行排序,從大到小排列,此函數(shù)用了兩個for語句for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(array[j]<array[k])k=j;t=array[k];array[k]=array[i];array[i]=t;},for語句主要用于外層循環(huán)即從第一位選手到第八位選手的循環(huán),第11forif語句和一個if換一下,依次進(jìn)行下去,從而對每位選手的成績進(jìn)行排序。②函數(shù)averagefloataverage(floatarray[M]){voidsort(floatarray[],intn);inti;floataver,sum;sort(array,M);sum=array[1];for(i=2;i<M-1;i++)sum=sum+array[i];aver=sum/(M-2);return(aver);}array、調(diào)用了sort函數(shù)、用了一個for循環(huán)語句,調(diào)用了函數(shù),每位選手產(chǎn)生的六組數(shù)據(jù),成績放在數(shù)組中,用for最終得分,用此函數(shù)實(shí)現(xiàn)了對分?jǐn)?shù)的處理。③函數(shù)arranvoidarran(floatnum[],charname[N][8]){inti,j,max;floattemp1;chartemp2[8];for(i=0;i<N;i++){max=i;for(j=i;j<N;j++){if(num[max]<num[j])max=j;}temp1=num[i];strcpy(temp2,name[i]);num[i]=num[max];strcpy(name[i],name[max]);num[max]=temp1;12strcpy(name[max],temp2);}}主要是用于對每位參賽選手的分?jǐn)?shù)進(jìn)行排序,其姓名也隨之調(diào)整。此函數(shù)用numnameforif語句和復(fù)制函數(shù)strcpy,兩個forstrcpyarray、b、numname、a。程序使用了三個符號常量#defineN8#defineM6#defineP2可,方便、簡單。n、i、j、k。forfor(i=0;i<M;i++)b[i]=0;printf("請輸入第%d位參賽選手的成績:",k+1);用于循環(huán)提示輸入低k+1位選手的成績。13for(i=0;i<n-1;i++){k=ifor(j=i+1;j<n;j++)if(array[j]<array[k])k=j;t=array[k];array[k]=array[i];array[i]=tfor(i=0;i<n-1;i++){k=ifor(j=i+1;j<n;j++)if(array[j]<array[k])k=j;t=array[k];array[k]=array[i];array[i]=t}#include<stdio.h>}#include<string.h>voidarran(floatnum[],charname[N][8])main(){inti,j,max;floattemp1;chartemp2[8];{voidsort(floatarray[],intn);for(i=0;i<N;i++)floataverage(floatarray[10]);{max=i;voidarran(floatnum[],charname[N][8])for(j=i;j<N;j++)floatb[10];inti,j,k;{if(num[max]<num[j])floata[10][5];max=jfloatnum[15];}for(k=0;k<15;k++)temp1=num[i];{b[10]={0};strcpy(temp2,name[i]);for(i=0;i<10;i++)num[i]=num[max];{for(j=0;j<5;j++)strcpy(name[i]=name[max]);{scanf("%f",&a[i][j]);num[max]=temp1;b[i]=b[i]+a[i][j];}strcpy(name[max],temp2);}}sort(b,10);num[k]=average(b[10]);Floataverage(floatarray[10])}{voidsort(floatarray[],intn);for(k=0;k<15;k++)inti;floataver,sum;scanf("%s",name[k]);sort(array[],10);arran(num[15],name[15][8]);sum=array[i];printf("獲獎結(jié)果如下:\n\n");printf("一等獎:%10s %f 分\n\n 二獎:\n",name[0],num[0]);for(k=1;k<4;k++)for(i=2;i<9;i++)sum=sum+array[i];aver=sum/8;return(aver)}printf("%10s%f分",name[k],num[k]);}printf("\n\n三等獎:\n\n");for(k=4;k<9;k++)printf("%10s%f分",name[k],name[k])voidsort(floatarray[],intn){inti,j,k,t;首次設(shè)計(jì)出來的程序初稿,出現(xiàn)了很多的問題,程序不能運(yùn)行,主要問題如下:數(shù)組的初始化不匹配、大括號加的對數(shù)不匹配、位置不對、部分語句不能正常循環(huán)、輸入程序時(shí)中西文標(biāo)點(diǎn)部分、大小寫誤輸?shù)戎T多問題50多處。經(jīng)過兩天堅(jiān)持不懈、永不放棄的修改、調(diào)試,程序欲行出來了,程序如下:#include<stdio.h> k=j;#include<string.h> main() }{voidsort(floatarray[],intn); }floataverage(floatarray[10]); voidarran(floatnum[],charname[][8])voidarran(floatnum[],charname[][8]); {inti,j,max,N;floattemp1;chartemp2[8];floatb[10]={0,0,0,0,0,0,0,0,0,0};inti,j,k; for(i=0;i<N;i++)floata[10][5]; {max=i;floatnum[15]; for(j=i;j<N;j++)charname[15][8]; {if(num[max]<num[j])for(k=0;k<15;k++) max=j;{ }for(i=0;i<10;i++) temp1=num[i];{for(j=0;j<5;j++) strcpy(temp2,name[i]);{scanf("%f",&a[i][j]); num[i]=num[max];b[i]=b[i]+a[i][j];} strcpy(name[i],name[max]);} num[max]=temp1;sort(b,10); strcpy(name[max],temp2);}num[k]=average(b); }}for(k=0;k<15;k++) floataverage(floatarray[10])scanf("%s",name[k]); {voidsort(floatarray[],intnarran(num,name); inti;floataver,sum;printf("獲獎結(jié)果如下:\n\n"); sort(array,10);printf(一等獎:%10s%f分\n\n二等:\n",nam],r;];for(k=1;k<4;k++) printf("%10s%f分",name[k],num[k]);printf("\n\n三等獎:\n\n");

sum=sum+array[i];aver=sum/8;for(k=4;k<9;k++) return(aver);printf("%10s%f分",name[k],num[k]);} voidsort(floatarray[],intn){inti,j,k;floatt;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(array[j]<array[k])8615理,使輸出來的結(jié)果看起來很美觀。最終程序如下:#include<stdio.h>#include<string.h>#defineN8#include<stdio.h>#include<string.h>#defineN8main(){voidsort(floatarray[],intfloataverage(floatarray[6]);void arran(float name[N][8]);floatb[6];inti,j,k;floata[6][2];floatnum[N];charname[N][8];for(k=0;k<N;k++){for(i=0;i<6;i++)b[i]=0;printf(%d績:",k+1);for(i=0;i<6;i++){for(j=0;j<2;j++){scanf("%f",&a[i][j]);b[i]=b[i]+a[i][j];}}sort(b,6);num[k]=average(b);}printf("\n\n\n");for(k=0;k<N;k++)scanf("%s",name[k]);arran(num,name);printf("\n\n\n參賽選手成績?nèi)缦拢篭n\n");for(i=0;i<N;i++)printf("%10s\n\n",name[i],num[i]);%f分printf("本次比賽選手獲獎結(jié)果如下:\n\n");printf("一等獎:%10s%f分\n\n二等獎:\n",name[0],num[0]);for(k=1;k<3;k++)printf("%10s%f分",name[k],num[k]);printf("\n:\n\n");for(k=3;k<5;k++)printf("%10s",name[k],num[k]);}%f分voidsort(floatarray[],intn){inti,j,k;floatt;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(array[j]<array[k])k=j;t=array[k];array[k]=array[i];array[i]=t;}}voidname[N][8])arran(floatnum[],char{inttemp2[8];i,j,max;floattemp1;charfor(i=0;i<N;i++){max=i;for(j=i;j<N;j++){if(num[max]<num[j])max=j;}temp1=num[i];strcpy(temp2,name[i]);num[i]=num[max];strcpy(name[i],name[max]);16num[max]=temp1;strcpy(name[max],temp2);}num[max]=temp1;strcpy(name[max],temp2);}}floataverage(floatarray[6]){voidsort(floatarray[],intn);inti;floataver,sum;sort(array,6);sum=array[1];for(i=2;i<5;i++)sum=sum+array[i];aver=sum/4;return(aver);}17輸出結(jié)果如下:18開始8=>N開始8=>N6=>M2=>P0=>P0=>ib

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論