版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《建筑环境与设备工程专业》C程序设计课程设计姓 名:xxx学 号:00000专 业:建筑环境与设备工程设计课题:智能化比赛评分系统时 间:2010.6.22—2010.6.26指导老师:xxx本组人员:xxxxx目录一、设计目的和内容 1设计背景与目的 1课程设计内容 4课程设计有四个阶段组成 5二、算法的基本思想 5主程序的流程 6各分程序模块之间的调用关系 6三、测试数据 8四、源程序及系统文件使用说明 9五、实习体会...............................................参考文献..............................................2智能化比赛评分系统一.设计目的与内容(1)设计背景与目的:8100分(演讲内容5050122名的应用程CC语言1、每个选手的2输出每位选手的姓名和分数,最终评出一、二、三等奖。38位选手的比赛名次的实践能力和设计操作要求学生熟练掌握C语言的基本知识和编程技能并基本掌握结构化程序设计的基本思路和方法。3(2)课程设计内容设计课题:智能化比赛评分系统1、评分系统基本要求:设计一个评分系统,使之能提供以下功能:①评委给每个演讲者评分——输入。②输入每位选手的姓名、成绩并有相应的提示语;(的平均分,为防止重分现象平均分取小数点后两位;④对8位选手的成绩进行排序评名次,并且分出一、二、三等奖分别1、2、2个名额;⑤评分结果浏览功能(每位选手的姓名、成绩、名次、一、二、三等奖及所有选手成绩的排序)——输出;⑥查询或排序功能。2、创新之处:①智能化:输入参赛选手的姓名和对应的成绩后,系统自动对参赛选手的成绩进行处理,对评委的分项分进行求和运算,去掉求和后各评委的最高分和最低分,求剩余评委的平均分,即是此位选手的最终得分,系统会自动评出选手的奖项;②公平性:为防止出现重分的现象,我们对每位选手最终分数取小数点后三位;③灵活性:程序的开头我们定义的三个符号常量即:N(选手数),M(评委数),P(评分项数),针对比赛的选手数、评委数、评分项数的4变化,可以相应的调整符号常量的值,达到了“一改全改”的效果。(3)课程设计有四个阶段组成:1、分析设计数据的结构:学生首先选定题目、收集资料、用进行功能模块的分析,控制模块分析正确,系统设计要实用,然后确定模块,写出函数原型。2、编程:根据函数原型及其功能,填充相应的算法。编程简练,可用性强,功能全面。3、调试程序:上机调试程序,解决编译的错误,直至运行成功。4、撰写报告:按格式写出完整、规范的报告并打印。其中模块图.流程图要清楚、规范,不能有错别字。5、答辩:程序运行通过,报告打印出来后,通知知道老师检查,经提问回答大部分提问,即可通过。二、算法的基本思想(一)主程序的流程(选手数,M(评委数,P(评分选项数的值分别为8,6,2.这样不仅简单不易出错,而且便于常量的更改,只需改变#include命令行就可以一改全改。与姓名对应。进入程序主体,要想将比赛结果完整的输出,我们必须要让程序在将评委得5分与选手姓名输入时自动计算出选手最终得分以及实现名次排序与姓名的一一对应。8位选手得分的正确录入,先用for循环嵌套通过评委数量与选手scanf语句对应二维数组a[]使评分与选手结合,k=Nsort将评分按大小排序,average函数去除一个最高分与最低分算出选手最终得分。最后将选手得分排序。公布获奖结果时还必须出现选手的姓名。接着再用一个for循环通过k控制姓名数量,通过scanfk<N是跳出循环,至此num[]name[][]将上面的评分与选手姓名一一对printffor循环将最后的比赛名次与获奖选手姓名一一对应的完整输出,程序到此结束。(二)各分程序模块之间的调用关系主程序由三个程序模块构成,分别为自编函数sort然后去掉一个最低分,去掉一个最高分,用averageaver作为选手得分。6arran函数。arrannum[]二维数组name[][]实现了选手得分以及选手姓名的一一对应。函数调用至此结束。如:{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语句循环变量赋予初值,,循环条件,循环变量增值语句)maxii=jj《N;j++if语句这个最大值评分jJtemp1=num[i]strcpy(它表示字符串复制函数21中去巴表示名字的定义变量temp2temp1ifor循环所得到的最高分利用字符串函数7strcpy(name[i],name[max])所示的为所获最高分的那个让你的名字赋予给第i个名字,也就是第i个名字所得分数为演讲比赛分数最高。整个编程程序的循环。三.测试数据智能化比赛评分系统测试数据选手评委评委1评委2评委3评委4评委56李华454846484546444347454046张明414342453941404242424041王凯414547454648424743474646陈红394238454042414345464342何翔423841394241404343414744黄菊424541434543414042434139沈峰484948474648484747494847赵玉454244434846444144464443注:本次比赛共有8位参赛选手,有650100分。每位选手8附:运行程序使用说明:运行程序时,当提示:请输入第k+1位选手的成绩时,输入12个小于等于50的数,数与数之间用空格键隔开,每输入12个数据后按下回车键,将进行下一位选手成绩的输入,依次下去,当输完八位参赛选手的成绩后,按下回车键,系统将提示输入参赛选手的姓名,此时从键盘上输入八位参赛选手的姓名(vc++支持输汉字的功能回车键,将出现运行结果。四.源程序及系统文件使用说明源程序如下:#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请输入参赛选手的姓名:\n for(k=0;k<N;k++)scanf("%s",name[k]);arran(num,name);printf("\n\n\n参赛选手成绩如下:\n\n");for(i=0;i<N;i++)printf("%10s%.3f分\n\n",name[i],num[i]);printf("本次比赛选手获奖结果如下:\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分别对他们进行阐述:①函数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;}}主要用于对每位参赛选手的成绩进行排序,从大到小排列,此函数用了两个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语句主要用于外层循环即从第一位选手到第八位选手的循环,第11forif语句和一个if换一下,依次进行下去,从而对每位选手的成绩进行排序。②函数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、调用了sort函数、用了一个for循环语句,调用了函数,每位选手产生的六组数据,成绩放在数组中,用for最终得分,用此函数实现了对分数的处理。③函数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);}}主要是用于对每位参赛选手的分数进行排序,其姓名也随之调整。此函数用numnameforif语句和复制函数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);用于循环提示输入低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("获奖结果如下:\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;首次设计出来的程序初稿,出现了很多的问题,程序不能运行,主要问题如下:数组的初始化不匹配、大括号加的对数不匹配、位置不对、部分语句不能正常循环、输入程序时中西文标点部分、大小写误输等诸多问题50多处。经过两天坚持不懈、永不放弃的修改、调试,程序欲行出来了,程序如下:#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("获奖结果如下:\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理,使输出来的结果看起来很美观。最终程序如下:#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\n");for(i=0;i<N;i++)printf("%10s\n\n",name[i],num[i]);%f分printf("本次比赛选手获奖结果如下:\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输出结果如下:18开始8=>N开始8=>N6=>M2=>P0=>P0=>ib
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安置房爆破施工合同
- 建筑工程建设中的给排水管道防渗漏施工分析
- 石河子大学《园林绿地系统规划》2022-2023学年第一学期期末试卷
- 国庆假期防溺水教育活动总结7篇
- 学校运动场改造施工组织设计
- 石河子大学《篮球教学训练理论与实践》2022-2023学年第一学期期末试卷
- 石河子大学《工业药剂学》2023-2024学年第一学期期末试卷
- 石河子大学《健身指导与训练》2021-2022学年第一学期期末试卷
- 沈阳理工大学《数字图像处理技术》2022-2023学年期末试卷
- 沈阳理工大学《马克思主义与社会科学方法论》2021-2022学年第一学期期末试卷
- 民航概论(民航乘务专业)全套教学课件
- 部编版七年级上册语文基础知识训练及答案一
- 天文竞赛复习题库及答案
- 污泥( 废水)运输服务方案(技术方案)
- 公司章程范本杭州工商docx
- 职业院校面试题目及答案
- 全护筒跟进旋挖施工方案
- 海水淡化处理方案
- 初中数学基于大单元的作业设计
- 小学一年级下册数学期末考试质量分析及试卷分析
- 原材料情况说明范本
评论
0/150
提交评论