当前位置:   article > 正文

C语言实现数据结构之运动会分数统计_运动会分数统计系统c语言

运动会分数统计系统c语言
任务

参加运动会有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行放女子各项目成绩,一行放男子各项目总成绩、一行放女子各项目总成绩、一行放学校各项目总成绩、一列放学校按总分排序的名次。排序时采用直接插入排序。

存储结构设计
  1. typedef struct itemnode {
  2. int item[m0+w0+5][n0+1];
  3. //item[1][0]-item[m0+w0][0] 存放项目编号
  4. //item[0][1]-item[0][n] 存放学校编号
  5. //item[1][]-item[m0][] 存放男子各项目成绩
  6. //item[m0+1][]-item[m0+w0][]存放女子各项目成绩
  7. //item[m0+w0+1][]存放男子各项目总成绩
  8. //item[m0+w0+2][]存放女子各项目总成绩
  9. //item[m0+w0+3][]存放学校各项目总成绩
  10. //item[m0+w0+4][]存放学校按总分排序的名次
  11. } itemnode; /*存放信息*/
  12. struct itemnode a;
  13. int n,m,w;
源代码
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define n0 20 /*学校最大数目*/
  4. #define m0 20 /*男子项目最大数目*/
  5. #define w0 20 /*女子项目最大数目*/
  6. typedef struct itemnode {
  7. int item[m0+w0+5][n0+1];
  8. //item[1][0]-item[m0+w0][0] 存放项目编号
  9. //item[0][1]-item[0][n] 存放学校编号
  10. //item[1][]-item[m0][] 存放男子各项目成绩
  11. //item[m0+1][]-item[m0+w0][]存放女子各项目成绩
  12. //item[m0+w0+1][]存放男子各项目总成绩
  13. //item[m0+w0+2][]存放女子各项目总成绩
  14. //item[m0+w0+3][]存放学校各项目总成绩
  15. //item[m0+w0+4][]存放学校按总分排序的名次
  16. } itemnode; /*存放信息*/
  17. struct itemnode a;
  18. int n,m,w;
  19. void statistic(){
  20. printf("请输入运动会主要信息\n"); /*设计运动会主要数据个数*/
  21. printf("输入学校个数:");
  22. scanf("%d",&n);
  23. printf("输入男子项目个数:");
  24. scanf("%d",&m);
  25. printf("输入女子项目个数:");
  26. scanf("%d",&w);
  27. printf("\n");
  28. int c;
  29. int i,j;
  30. for(i=1; i<n+1; i++) {
  31. printf("请输入第%d个学校编号:",i);
  32. scanf("%d",&a.item[0][i]);
  33. }
  34. printf("\n");
  35. for(j=1; j<m+1; j++) {
  36. printf("请输入第%d个男子项目编号:",j);
  37. scanf("%d",&a.item[j][0]);
  38. }
  39. printf("\n");
  40. for(j=m+1; j<m+w+1; j++) {
  41. printf("请输入第%d个女子项目编号:",j-m);
  42. scanf("%d",&a.item[j][0]);
  43. }
  44. printf("\n");
  45. for(i=1; i<n+1; i++) {
  46. for(j=1; j<m+1; j++) {
  47. printf("请输入第%d个学校第%d个男子项目成绩:",i,j);
  48. scanf("%d",&a.item[j][i]);
  49. }
  50. printf("\n");
  51. for(j=m+1; j<m+w+1; j++) {
  52. printf("请输入第%d个学校第%d个女子项目成绩:",i,j-m);
  53. scanf("%d",&a.item[j][i]);
  54. }
  55. printf("\n");
  56. }
  57. for(i=1; i<n+1; i++) {
  58. a.item[m+w+1][i]=0;
  59. a.item[m+w+2][i]=0;
  60. a.item[m+w+3][i]=0;
  61. a.item[m+w+4][i]=0;
  62. }
  63. //下面计算各学校、各学校男子、女子项目总分
  64. for(i=1; i<n+1; i++) {
  65. for(j=1; j<m+w+1; j++) {
  66. a.item[m+w+3][i]+=a.item[j][i];//学校项目总分
  67. }
  68. }
  69. for(i=1; i<n+1; i++) {
  70. for(j=1; j<m+1; j++) {
  71. a.item[m+w+1][i]+=a.item[j][i];//男子项目总分
  72. }
  73. }
  74. for(i=1; i<n+1; i++) {
  75. for(j=m+1; j<m+w+1; j++) {
  76. a.item[m+w+2][i]+=a.item[j][i];//女子项目总分
  77. }
  78. }
  79. }
  80. void sort(){ //按学校总分排序
  81. int i,j;
  82. int temp,temp1;
  83. int xu;
  84. for(i=2; i<n+1; i++) {
  85. temp=a.item[m+w+3][i];
  86. for(j=i-1; j>=1&&temp>a.item[m+w+3][j]; j--) { //寻找插入位置
  87. a.item[m+w+3][j+1]=a.item[m+w+3][j];//交换总分列
  88. for(xu=0; xu<m+w+4; xu++) {
  89. if(xu!=m+w+3) { //除了总分那一列不交换 其他的都交换 因为总分的那一列在上面交换
  90. temp1=a.item[xu][j+1];
  91. a.item[xu][j+1]=a.item[xu][j];
  92. a.item[xu][j]=temp1;
  93. }
  94. }
  95. }
  96. a.item[m+w+3][j+1]=temp;//小于当前值的,插到当前值后面
  97. }
  98. //赋值名次
  99. for(i=1; i<n+1; i++) {
  100. a.item[m+w+4][i]=i;
  101. }
  102. //按列输出
  103. for(i=0; i<n+1; i++) {
  104. for(j=0; j<w+m+5; j++) {
  105. if(i==0) {
  106. if(j==0) {
  107. printf("\t");
  108. } else if(j>=1&&j<m+1) {
  109. printf("男子项目%d\t",a.item[j][i]);
  110. } else if(j>=m+1&&j<m+w+1) {
  111. printf("女子项目%d\t",a.item[j][i]);
  112. } else if(j==m+w+1) {
  113. printf("男子项目总成绩\t");
  114. } else if(j==m+w+2) {
  115. printf("女子项目总成绩\t");
  116. } else if(j==m+w+3) {
  117. printf("学校总成绩\t");
  118. } else if(j==m+w+4) {
  119. printf(" 名次\t");
  120. }
  121. } else if(j==0) {
  122. if(i!=0) {
  123. printf("学校%d\t",a.item[j][i]);
  124. }
  125. } else {
  126. printf(" %d\t\t",a.item[j][i]);
  127. }
  128. }
  129. printf("\n");
  130. }
  131. }
  132. void printTitle(){
  133. int i, j;
  134. for(i=0; i<n+1; i++) {
  135. for(j=0; j<w+m+5; j++) {
  136. if(i==0) {
  137. if(j==0) {
  138. printf("\t");
  139. } else if(j>=1&&j<m+1) {
  140. printf("男子项目%d\t",a.item[j][i]);
  141. } else if(j>=m+1&&j<m+w+1) {
  142. printf("女子项目%d\t",a.item[j][i]);
  143. } else if(j==m+w+1) {
  144. printf("男子项目总成绩\t");
  145. } else if(j==m+w+2) {
  146. printf("女子项目总成绩\t");
  147. } else if(j==m+w+3) {
  148. printf("学校总成绩\t");
  149. } else if(j==m+w+4) {
  150. printf(" 名次\t");
  151. }
  152. } else if(j==0) {
  153. if(i!=0) {
  154. printf("学校%d\t",a.item[j][i]);
  155. }
  156. } else {
  157. printf(" %d\t\t",a.item[j][i]);
  158. }
  159. }
  160. printf("\n");
  161. }
  162. }
  163. printf("------------------------------------------------\n");
  164. printf(" 运动会信息系统\n");
  165. printf("------------------------------------------------\n");
  166. printf(" 1.输入各个项目的前三名或前五名的成绩;\n");
  167. printf(" 2.统计各学校总分;\n");
  168. printf(" 3.按学校编号、学校总分、男女团体总分排序输出;\n");
  169. printf(" 4.按学校编号查询学校某个项目的情况\n");
  170. printf(" 5.按学校编号查询取得前三或者前五名的学校。\n");
  171. printf("------------------------------------------------\n");
  172. int i,j;
  173. int temp,temp1;
  174. int xu;
  175. statistic();
  176. printf("--------------------排序模块--------------------\n");
  177. sort();
  178. int s;
  179. printf("-------------------------\n");
  180. printf("| 1.按学校总分排序输出 |\n");
  181. printf("-------------------------\n");
  182. printf("| 2.按学校编号输出 |\n");
  183. printf("-------------------------\n");
  184. printf("| 3.按男团总分排序输出 |\n");
  185. printf("-------------------------\n");
  186. printf("| 4.按女团总分排序输出 |\n");
  187. printf("-------------------------\n");
  188. printf("\n\n");
  189. printf("请选择要实现输出功能的编号(1——4):");
  190. scanf("%d",&s);
  191. switch(s) {
  192. case 1: printTitle();
  193. break;
  194. case 2: {
  195. //学校编号排序
  196. for(i=2; i<n+1; i++) {
  197. temp=a.item[0][i];
  198. for(j=i-1; j>=1&&temp<a.item[0][j]; j--) { //寻找插入位置
  199. a.item[0][j+1]=a.item[0][j];//交换学校列
  200. for(xu=0; xu<m+w+5; xu++) {
  201. if(xu!=0) { //除了学校那一列不交换 其他的都交换 因为学校的那一列在上面交换
  202. temp1=a.item[xu][j+1];
  203. a.item[xu][j+1]=a.item[xu][j];
  204. a.item[xu][j]=temp1;
  205. }
  206. }
  207. }
  208. a.item[0][j+1]=temp;//小于当前值的,插到当前值后面
  209. }
  210. printTitle();
  211. };
  212. break;
  213. case 3: {
  214. for(i=2; i<n+1; i++) {
  215. temp=a.item[m+w+1][i];
  216. for(j=i-1; j>=1&&temp>a.item[m+w+1][j]; j--) { //寻找插入位置
  217. a.item[m+w+1][j+1]=a.item[m+w+1][j];//交换男子总分列
  218. for(xu=0; xu<m+w+5; xu++) {
  219. if(xu!=m+w+1) { //除了男子总分那一列不交换 其他的都交换 因为男子总分的那一列在上面交换
  220. temp1=a.item[xu][j+1];
  221. a.item[xu][j+1]=a.item[xu][j];
  222. a.item[xu][j]=temp1;
  223. }
  224. }
  225. }
  226. a.item[m+w+1][j+1]=temp;//小于当前值的,插到当前值后面
  227. }
  228. printTitle();
  229. }
  230. break;
  231. case 4: {
  232. for(i=2; i<n+1; i++) {
  233. temp=a.item[m+w+2][i];
  234. for(j=i-1; j>=1&&temp>a.item[m+w+2][j]; j--) { //寻找插入位置
  235. a.item[m+w+2][j+1]=a.item[m+w+2][j];//交换女子总分列
  236. for(xu=0; xu<m+w+5; xu++) {
  237. if(xu!=m+w+2) { //除了女子总分那一列不交换 其他的都交换 因为女子总分的那一列在上面交换
  238. temp1=a.item[xu][j+1];
  239. a.item[xu][j+1]=a.item[xu][j];
  240. a.item[xu][j]=temp1;
  241. }
  242. }
  243. }
  244. a.item[m+w+2][j+1]=temp;
  245. }
  246. printTitle();
  247. }
  248. break;
  249. }
  250. //下面为查询模块
  251. printf("----------------------查询模块----------------------\n");
  252. int bianhao;
  253. printf("请输入要查询的学校编号:");
  254. scanf("%d",&bianhao);
  255. printf("\n");
  256. for(i=1; i<n+1; i++) {
  257. if(a.item[0][i]==bianhao) {
  258. printf("该学校的各项成绩及各项总分和名次如下:\n");
  259. for(j=0; j<m+w+5; j++) {
  260. if(j==0) {
  261. printf("\t");
  262. } else if(j>=1&&j<m+1) {
  263. printf("男子项目%d\t",a.item[j][0]);
  264. } else if(j>=m+1&&j<m+w+1) {
  265. printf("女子项目%d\t",a.item[j][0]);
  266. } else if(j==m+w+1) {
  267. printf("男子项目总成绩\t");
  268. } else if(j==m+w+2) {
  269. printf("女子项目总成绩\t");
  270. } else if(j==m+w+3) {
  271. printf("学校总成绩\t");
  272. } else if(j==m+w+4) {
  273. printf(" 名次\t");
  274. }
  275. }
  276. printf("\n");
  277. for(j=0; j<w+m+5; j++) {
  278. if(j==0) {
  279. printf("学校%d\t",a.item[0][i]);
  280. } else {
  281. printf(" %d\t\t",a.item[j][i]);
  282. }
  283. }
  284. }
  285. }
  286. printf("\n");
  287. int bianhao1;
  288. printf("请输入要查询的项目编号:");
  289. scanf("%d",&bianhao1);
  290. printf("\n");
  291. for(i=2; i<n+1; i++) {
  292. temp=a.item[m+w+3][i];
  293. for(j=i-1; j>=1&&temp>a.item[m+w+3][j]; j--) { //寻找插入位置
  294. a.item[m+w+3][j+1]=a.item[m+w+3][j];//交换总分列
  295. for(xu=0; xu<m+w+5; xu++) {
  296. if(xu!=m+w+3) { //除了总分那一列不交换 其他的都交换 因为总分的那一列在上面交换
  297. temp1=a.item[xu][j+1];
  298. a.item[xu][j+1]=a.item[xu][j];
  299. a.item[xu][j]=temp1;
  300. }
  301. }
  302. }
  303. a.item[m+w+3][j+1]=temp;//小于当前值的,插到当前值后面
  304. } 鱼
  305. nt s2;
  306. printf("请输入要查询该项目名次的个数(3或5):");
  307. scanf("%d",&s2);
  308. switch(s2) {
  309. case 3: {
  310. }for(j=1; j<m+w+1; j++) {
  311. if(a.item[j][0]==bianhao1) {
  312. for(i=1; i<4; i++) {
  313. printf("学校%d\t",a.item[0][i]);
  314. printf("项目%d 成绩:%d\t",a.item[j][0],a.item[j][i]);
  315. printf("\n");
  316. }
  317. }
  318. }
  319. break;
  320. case 5 {
  321. for(j=1; j<m+w+1; j++) {
  322. if(a.item[j][0]==bianhao1) {
  323. for(i=1; i<6; i++) {
  324. printf("学校%d\t",a.item[0][i]);
  325. printf("项目%d 成绩:%d\t",a.item[j][0],a.item[j][i]);
  326. printf("\n");
  327. }
  328. }
  329. }
  330. }
  331. break;
  332. }
  333. return 0;
  334. }
运行结果

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/812876
推荐阅读
相关标签
  

闽ICP备14008679号