logo资料库

运动会分数统计C++(实验报告+源程序).doc

第1页 / 共7页
第2页 / 共7页
第3页 / 共7页
第4页 / 共7页
第5页 / 共7页
第6页 / 共7页
第7页 / 共7页
资料共7页,全文预览结束
实验名称:数据结构与软件设计实习 题 专业:生物信息学 班级:01 姓名: 学号:实验日期:2010.07.22 目:运动会分数统计 实验报告 1 一、 实验目的: 掌握基本的输入输出方法,理解程序的分支结构,实现条件判断和循环程序的 设计; 掌握结构体的应用; 二、 实验要求: 生各学院的成绩单,包括各学院所取得的项目号、名次(成绩)、学生姓名(或学号)和得分;产生 团体总分报表,包括学院号、男子团体总分、女子团体总分和团体总分。 二、 实验内容: 参加运动会的的学院编号为 1~n,比赛分成 m 个男子项目和 w 个女子项目,编号分别为 1~m 和 m+1~m+w,所有项目都取前五名,得分顺序为 7,5,3,2,1。写一个统计程序产生各种成绩单和得分 报表。 通过编程解决一些实际问题,并对程序进行测试,可设 n=4,m=3,w=2 进行测试,一般考虑 n≤ 20,m≤30,w≤20,姓名长度不超过 20 个字符,按名次顺序输入运动员姓名、学院名和成绩。 四、实验编程结果或过程: 1. 数据定义 (1)描述运动员的线性表 typedef struct { int item[MAXSIZE]; //参赛项目号 char thletename[MAXSIZE][20];//姓名 char sex[MAXSIZE];//性别 int schoolnum[MAXSIZE];// 所 在 学 校 编 号 int num[MAXSIZE];//名次 int point[MAXSIZE];//得分 int last; }student; (2)描述学院的线性表 typedef struct { int schoolnum[MAXSIZE];//学校编号 int Tgirl[MAXSIZE];//女生团体总分 int Tboy[MAXSIZE];//男生团体总分 int Tall[MAXSIZE];//学校总成绩 int last; }college; 2. 函数如下,代码详见文件“运动会.cpp” 开始 InitSCH(&S2,n) 初始化函数 input(&S1,n,m,w) 控制输入的函数 mark(&S1,&S2,n,m,w) output(S1,S2) 结束 算分的函数 控制输出成绩的函数
3. 运行测试结果,运行结果无误,如下图 错误调试,能够正确处理错误,如下图 调试分析
1. 用线性链表时应注意细节,指针的使用过程中很容易出错,从而达不到采用其起到的 效果。 2. 线性表School的各属性在用之前需要初始化。 3. 进行健壮性判断时遇到很多问题: a. 判断性别是否正确时S1->sex[i]!='g'和S1->sex[i]!='b'必须是并且关系 b. 当检测到错误,需要重新输入时,要在输入函数里再调输入函数,用递归调用的方法 实现重新输入。 4. 输入函数里传参时必须用指针(引用)类型,因为需要带回数据 五、实验总结: (1)实验中的存在问题和提高 存在问题:程序有待简化。 提高:错误处理比较全面,而且能及时应对处理。 (2)收获与体会 基本的输入输出方法,理解程序的分支结构,实现条件判断和循环程序的设计;结构体的应用; 附录 源程序 #include #include #include using namespace std; #define MAXSIZE 100 #define ERROR 0 #define RIGHT 1 #include #include str_int(char *str)//字符串转换为数字 int { int num, i; num = *str - '0'; i = 1; while (str[i] && isdigit(str[i])) num = num * 10 + str[i++] - '0'; return num; } typedef struct { int item[MAXSIZE]; //参赛项目 string studentname[MAXSIZE];//姓名 char sex[MAXSIZE];//性别 int collegenum[MAXSIZE];//所在学院编号
int num[MAXSIZE];//名次 int point[MAXSIZE];//得分 int last; }student; typedef struct { int collegenum[MAXSIZE];//学院编号 int Tgirl[MAXSIZE];//女生团体总分 int Tboy[MAXSIZE];//男生团体总分 int Tall[MAXSIZE];//学院总成绩 int last; }college; void InitSCH(college *S,int n) { int i; S->last=n-1; for(i=0;ilast+1;i++) { S->collegenum[i]=i+1; S->Tgirl[i]=0; S->Tboy[i]=0; S->Tall[i]=0; } } int input(student *S1,int n,int m,int w) { string a1,a2,a3,a4,a5,a6; int i=0,j=1,k=0; if(S1->last==MAXSIZE-1) { cout<<"运动员人数已满,无法继续输入!"<>a6; if(a6=="#") goto b; a1=a6; cin>>a2>>a3>>a4>>a5; S1->item[i]=str_int(&a1[0]); S1->studentname[i]=a2; S1->sex[i]=a3[0]; S1->collegenum[i]=str_int(&a4[0]); S1->num[i]=str_int(&a5[0]); while(1) {
if(!(a1[0]>=48&&a1[0]<=57)) { } cout<<"您的输入有误,输入项目号不能为 非 数字,请重新输入该项目!"<item[i]==0) { } cout<<"您的输入有误,输入项目号!=0,请重新输入该项目!"<=48&&a4[0]<=57)) { } cout<<"您的输入有误,输入学院号不能为 非 数字,请重新输入该项目!"<collegenum[i]>n) { cout<<"您的输入 有误,输入学 院号不能超过"<sex[i]!='g'&&S1->sex[i]!='b') { cout<<"您的输入有误,输入运动员性别只能用'g'(女)或'b'(男)表示,请重 新输入该项目!"<item[i]>=0&&S1->item[i]<=m&&S1->sex[i]!='b') { cout<<"您的输入有误,项目号与性别不匹配,请重新输入该项目!"<item[i]>=m+1&&S1->item[i]<=m+w&&S1->sex[i]!='g') { cout<<"您的输入有误,项目号与性别不匹配,请重新输入该项目!"<=48&&a5[0]<=57)) { cout<<"您的输入有误,输入名次不能为 非 数字,请重新输入该项目!"<num[i]>0&&S1->num[i]<=n)) { } cout<<"您的输入有误,输入名次>0 且<="<
i++;S1->last=i; if(i==100-1) { cout<<"运动员人数已满,无法继续输入!"<last=i; return RIGHT; } void mark(student *L1,college *L2,int n,int m,int w) { int i,j; for(i=0;ilast+1;i++) { if(L1->num[i]==1) L1->point[i]=7; if(L1->num[i]==2) L1->point[i]=5; if(L1->num[i]==3) L1->point[i]=3; if(L1->num[i]==4) L1->point[i]=2; if(L1->num[i]==5) L1->point[i]=1; if(L1->num[i]>5) L1->point[i]=0; } for(i=0;ilast+1;i++) { for(j=0;jlast+1;j++) { if(L2->collegenum[i]==L1->collegenum[j]) { if(L1->sex[j]=='b') { L2->Tboy[i]=L2->Tboy[i]+L1->point[j]; //累加各学院的男团 } if(L1->sex[j]=='g') { L2->Tgirl[i]=L2->Tgirl[i]+L1->point[j]; //累加各学院的女团 } 总分 总分
} } L2->Tall[i]=L2->Tgirl[i]+L2->Tboy[i]; //计算个学院的集体总分 } } void output(student L1,college L2) { int i,j; for(i=0;i>x; n=str_int(&x[0]); cin>>x;m=str_int(&x[0]); cin>>x;w=str_int(&x[0]); int n,m,w;string x; student S1; S1.last=-1; college S2; cout<<" cout<
分享到:
收藏