赞
踩
参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(n<=20 , m<=20)
构造一个二维数组,一列用来存放项目编号、一行放学校编号、m0行放男子各项目成绩、w0行放女子各项目成绩,一行放男子各项目总成绩、一行放女子各项目总成绩、一行放学校各项目总成绩、一列放学校按总分排序的名次。排序时采用直接插入排序。
- typedef struct itemnode {
- int item[m0+w0+5][n0+1];
- //item[1][0]-item[m0+w0][0] 存放项目编号
- //item[0][1]-item[0][n] 存放学校编号
- //item[1][]-item[m0][] 存放男子各项目成绩
- //item[m0+1][]-item[m0+w0][]存放女子各项目成绩
- //item[m0+w0+1][]存放男子各项目总成绩
- //item[m0+w0+2][]存放女子各项目总成绩
- //item[m0+w0+3][]存放学校各项目总成绩
- //item[m0+w0+4][]存放学校按总分排序的名次
- } itemnode; /*存放信息*/
-
- struct itemnode a;
- int n,m,w;
- #include <stdio.h>
- #include <stdlib.h>
- #define n0 20 /*学校最大数目*/
- #define m0 20 /*男子项目最大数目*/
- #define w0 20 /*女子项目最大数目*/
- typedef struct itemnode {
- int item[m0+w0+5][n0+1];
- //item[1][0]-item[m0+w0][0] 存放项目编号
- //item[0][1]-item[0][n] 存放学校编号
- //item[1][]-item[m0][] 存放男子各项目成绩
- //item[m0+1][]-item[m0+w0][]存放女子各项目成绩
- //item[m0+w0+1][]存放男子各项目总成绩
- //item[m0+w0+2][]存放女子各项目总成绩
- //item[m0+w0+3][]存放学校各项目总成绩
- //item[m0+w0+4][]存放学校按总分排序的名次
- } itemnode; /*存放信息*/
-
- struct itemnode a;
- int n,m,w;
-
- void statistic(){
- printf("请输入运动会主要信息\n"); /*设计运动会主要数据个数*/
- printf("输入学校个数:");
- scanf("%d",&n);
- printf("输入男子项目个数:");
- scanf("%d",&m);
- printf("输入女子项目个数:");
- scanf("%d",&w);
- printf("\n");
- int c;
- int i,j;
-
- for(i=1; i<n+1; i++) {
- printf("请输入第%d个学校编号:",i);
- scanf("%d",&a.item[0][i]);
- }
- printf("\n");
- for(j=1; j<m+1; j++) {
- printf("请输入第%d个男子项目编号:",j);
- scanf("%d",&a.item[j][0]);
- }
- printf("\n");
- for(j=m+1; j<m+w+1; j++) {
- printf("请输入第%d个女子项目编号:",j-m);
- scanf("%d",&a.item[j][0]);
- }
- printf("\n");
- for(i=1; i<n+1; i++) {
- for(j=1; j<m+1; j++) {
- printf("请输入第%d个学校第%d个男子项目成绩:",i,j);
- scanf("%d",&a.item[j][i]);
- }
- printf("\n");
- for(j=m+1; j<m+w+1; j++) {
- printf("请输入第%d个学校第%d个女子项目成绩:",i,j-m);
- scanf("%d",&a.item[j][i]);
- }
- printf("\n");
- }
-
-
- for(i=1; i<n+1; i++) {
- a.item[m+w+1][i]=0;
- a.item[m+w+2][i]=0;
- a.item[m+w+3][i]=0;
- a.item[m+w+4][i]=0;
- }
- //下面计算各学校、各学校男子、女子项目总分
- for(i=1; i<n+1; i++) {
- for(j=1; j<m+w+1; j++) {
- a.item[m+w+3][i]+=a.item[j][i];//学校项目总分
- }
- }
- for(i=1; i<n+1; i++) {
- for(j=1; j<m+1; j++) {
- a.item[m+w+1][i]+=a.item[j][i];//男子项目总分
- }
- }
- for(i=1; i<n+1; i++) {
- for(j=m+1; j<m+w+1; j++) {
- a.item[m+w+2][i]+=a.item[j][i];//女子项目总分
- }
- }
- }
-
- void sort(){ //按学校总分排序
- int i,j;
- int temp,temp1;
- int xu;
- for(i=2; i<n+1; i++) {
- temp=a.item[m+w+3][i];
- for(j=i-1; j>=1&&temp>a.item[m+w+3][j]; j--) { //寻找插入位置
- a.item[m+w+3][j+1]=a.item[m+w+3][j];//交换总分列
- for(xu=0; xu<m+w+4; xu++) {
- if(xu!=m+w+3) { //除了总分那一列不交换 其他的都交换 因为总分的那一列在上面交换
- temp1=a.item[xu][j+1];
- a.item[xu][j+1]=a.item[xu][j];
- a.item[xu][j]=temp1;
- }
- }
- }
- a.item[m+w+3][j+1]=temp;//小于当前值的,插到当前值后面
- }
- //赋值名次
- for(i=1; i<n+1; i++) {
- a.item[m+w+4][i]=i;
- }
- //按列输出
- for(i=0; i<n+1; i++) {
- for(j=0; j<w+m+5; j++) {
- if(i==0) {
- if(j==0) {
- printf("\t");
- } else if(j>=1&&j<m+1) {
- printf("男子项目%d\t",a.item[j][i]);
- } else if(j>=m+1&&j<m+w+1) {
- printf("女子项目%d\t",a.item[j][i]);
- } else if(j==m+w+1) {
- printf("男子项目总成绩\t");
- } else if(j==m+w+2) {
- printf("女子项目总成绩\t");
- } else if(j==m+w+3) {
- printf("学校总成绩\t");
- } else if(j==m+w+4) {
- printf(" 名次\t");
- }
- } else if(j==0) {
- if(i!=0) {
- printf("学校%d\t",a.item[j][i]);
- }
- } else {
- printf(" %d\t\t",a.item[j][i]);
- }
-
-
- }
- printf("\n");
- }
- }
-
- void printTitle(){
- int i, j;
- for(i=0; i<n+1; i++) {
- for(j=0; j<w+m+5; j++) {
- if(i==0) {
- if(j==0) {
- printf("\t");
- } else if(j>=1&&j<m+1) {
- printf("男子项目%d\t",a.item[j][i]);
- } else if(j>=m+1&&j<m+w+1) {
- printf("女子项目%d\t",a.item[j][i]);
- } else if(j==m+w+1) {
- printf("男子项目总成绩\t");
- } else if(j==m+w+2) {
- printf("女子项目总成绩\t");
- } else if(j==m+w+3) {
- printf("学校总成绩\t");
- } else if(j==m+w+4) {
- printf(" 名次\t");
- }
- } else if(j==0) {
- if(i!=0) {
- printf("学校%d\t",a.item[j][i]);
- }
- } else {
- printf(" %d\t\t",a.item[j][i]);
- }
- }
- printf("\n");
- }
- }
-
- printf("------------------------------------------------\n");
- printf(" 运动会信息系统\n");
- printf("------------------------------------------------\n");
- printf(" 1.输入各个项目的前三名或前五名的成绩;\n");
- printf(" 2.统计各学校总分;\n");
- printf(" 3.按学校编号、学校总分、男女团体总分排序输出;\n");
- printf(" 4.按学校编号查询学校某个项目的情况\n");
- printf(" 5.按学校编号查询取得前三或者前五名的学校。\n");
- printf("------------------------------------------------\n");
-
- int i,j;
- int temp,temp1;
- int xu;
- statistic();
-
- printf("--------------------排序模块--------------------\n");
- sort();
-
- int s;
- printf("-------------------------\n");
- printf("| 1.按学校总分排序输出 |\n");
- printf("-------------------------\n");
- printf("| 2.按学校编号输出 |\n");
- printf("-------------------------\n");
- printf("| 3.按男团总分排序输出 |\n");
- printf("-------------------------\n");
- printf("| 4.按女团总分排序输出 |\n");
- printf("-------------------------\n");
- printf("\n\n");
- printf("请选择要实现输出功能的编号(1——4):");
- scanf("%d",&s);
- switch(s) {
- case 1: printTitle();
- break;
- case 2: {
- //学校编号排序
- for(i=2; i<n+1; i++) {
- temp=a.item[0][i];
- for(j=i-1; j>=1&&temp<a.item[0][j]; j--) { //寻找插入位置
- a.item[0][j+1]=a.item[0][j];//交换学校列
- for(xu=0; xu<m+w+5; xu++) {
- if(xu!=0) { //除了学校那一列不交换 其他的都交换 因为学校的那一列在上面交换
- temp1=a.item[xu][j+1];
- a.item[xu][j+1]=a.item[xu][j];
- a.item[xu][j]=temp1;
- }
- }
- }
- a.item[0][j+1]=temp;//小于当前值的,插到当前值后面
- }
- printTitle();
- };
- break;
- case 3: {
- for(i=2; i<n+1; i++) {
- temp=a.item[m+w+1][i];
- for(j=i-1; j>=1&&temp>a.item[m+w+1][j]; j--) { //寻找插入位置
- a.item[m+w+1][j+1]=a.item[m+w+1][j];//交换男子总分列
- for(xu=0; xu<m+w+5; xu++) {
- if(xu!=m+w+1) { //除了男子总分那一列不交换 其他的都交换 因为男子总分的那一列在上面交换
- temp1=a.item[xu][j+1];
- a.item[xu][j+1]=a.item[xu][j];
- a.item[xu][j]=temp1;
- }
- }
- }
- a.item[m+w+1][j+1]=temp;//小于当前值的,插到当前值后面
- }
- printTitle();
- }
- break;
- case 4: {
- for(i=2; i<n+1; i++) {
- temp=a.item[m+w+2][i];
- for(j=i-1; j>=1&&temp>a.item[m+w+2][j]; j--) { //寻找插入位置
- a.item[m+w+2][j+1]=a.item[m+w+2][j];//交换女子总分列
- for(xu=0; xu<m+w+5; xu++) {
- if(xu!=m+w+2) { //除了女子总分那一列不交换 其他的都交换 因为女子总分的那一列在上面交换
- temp1=a.item[xu][j+1];
- a.item[xu][j+1]=a.item[xu][j];
- a.item[xu][j]=temp1;
- }
- }
- }
- a.item[m+w+2][j+1]=temp;
- }
- printTitle();
- }
- break;
- }
- //下面为查询模块
- printf("----------------------查询模块----------------------\n");
- int bianhao;
- printf("请输入要查询的学校编号:");
- scanf("%d",&bianhao);
- printf("\n");
- for(i=1; i<n+1; i++) {
- if(a.item[0][i]==bianhao) {
- printf("该学校的各项成绩及各项总分和名次如下:\n");
- for(j=0; j<m+w+5; j++) {
- if(j==0) {
- printf("\t");
- } else if(j>=1&&j<m+1) {
- printf("男子项目%d\t",a.item[j][0]);
- } else if(j>=m+1&&j<m+w+1) {
- printf("女子项目%d\t",a.item[j][0]);
- } else if(j==m+w+1) {
- printf("男子项目总成绩\t");
- } else if(j==m+w+2) {
- printf("女子项目总成绩\t");
- } else if(j==m+w+3) {
- printf("学校总成绩\t");
- } else if(j==m+w+4) {
- printf(" 名次\t");
- }
- }
- printf("\n");
- for(j=0; j<w+m+5; j++) {
- if(j==0) {
- printf("学校%d\t",a.item[0][i]);
- } else {
- printf(" %d\t\t",a.item[j][i]);
- }
- }
- }
- }
- printf("\n");
- int bianhao1;
- printf("请输入要查询的项目编号:");
- scanf("%d",&bianhao1);
- printf("\n");
-
-
- for(i=2; i<n+1; i++) {
- temp=a.item[m+w+3][i];
- for(j=i-1; j>=1&&temp>a.item[m+w+3][j]; j--) { //寻找插入位置
- a.item[m+w+3][j+1]=a.item[m+w+3][j];//交换总分列
- for(xu=0; xu<m+w+5; xu++) {
- if(xu!=m+w+3) { //除了总分那一列不交换 其他的都交换 因为总分的那一列在上面交换
- temp1=a.item[xu][j+1];
- a.item[xu][j+1]=a.item[xu][j];
- a.item[xu][j]=temp1;
- }
- }
- }
- a.item[m+w+3][j+1]=temp;//小于当前值的,插到当前值后面
- } 鱼
- nt s2;
- printf("请输入要查询该项目名次的个数(3或5):");
- scanf("%d",&s2);
- switch(s2) {
- case 3: {
-
- }for(j=1; j<m+w+1; j++) {
- if(a.item[j][0]==bianhao1) {
- for(i=1; i<4; i++) {
- printf("学校%d\t",a.item[0][i]);
- printf("项目%d 成绩:%d\t",a.item[j][0],a.item[j][i]);
- printf("\n");
- }
- }
- }
- break;
- case 5 {
- for(j=1; j<m+w+1; j++) {
- if(a.item[j][0]==bianhao1) {
- for(i=1; i<6; i++) {
- printf("学校%d\t",a.item[0][i]);
- printf("项目%d 成绩:%d\t",a.item[j][0],a.item[j][i]);
- printf("\n");
- }
- }
- }
- }
- break;
- }
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。