自制演讲比赛小项目

简介: 自制演讲比赛小项目

鉴于一个小粉求助,我决定帮助他写一下这一个小的项目,希望能够帮助到大家!在这个下午写的过程中,也出现过一点点小的差池,顺便在这里记录一下,方便以后的复习!

完整程序先放下面,有一定代码能力的小伙伴应该可以直接看的明白:

1. #define _CRT_SECURE_NO_WARNINGS
2. #include<stdio.h>
3. #include<string.h>
4. #define player_num 5
5. #define judges_num 5
6. 
7. 
8. //构建选手结构体信息
9. struct player
10. {
11.   char name[20];//选手姓名
12.   char passage[20];//选手文章
13. 
14.   int score;//选手得分
15. 
16. 
17. };
18. //初始化结构体数组
19. struct player p[player_num] =
20. {
21.   {"刘二","《春之美》",0},
22.   {"张三","《春的祖国》",0},
23.   {"李四","《春天来了》",0},
24.   {"王五","《春天》",0},
25.   {"丁六","《春的味道》",0}
26. 
27. };
28. 
29. 
30. //排序函数
31. void bubblesore(struct player *p, int len) 
32. {
33.   for (int i = 0; i < len; i++)
34.   {
35.     for (int j = 0; j < len - i - 1; j++)
36.     {
37.       if (p[j].score < p[j + 1].score)
38.       {
39.         //名字交换
40.         char tem_name[20] = { 0 };
41. 
42.         strcpy(tem_name , p[j].name);
43. 
44.         strcpy(p[j].name, p[j + 1].name);
45. 
46.         strcpy(p[j+1].name, tem_name);
47.         //文章交换
48.         char tem_passage[20] = { 0 };
49. 
50.         strcpy(tem_passage, p[j ].passage);
51. 
52.         strcpy(p[j].passage, p[j + 1].passage);
53. 
54.         strcpy(p[j+1].passage, tem_passage);
55. 
56.         //分数交换
57.         int temp_score = p[j].score;
58. 
59.         p[j].score = p[j + 1].score;
60. 
61.         p[j + 1].score = temp_score;
62. 
63.       }
64.     }
65.   }
66. }
67. //打印函数
68. void printfInfo(struct player * p, int len)//输出结构体信息
69. {
70.   for (int i = 0; i < len; i++)
71.   {
72. 
73.     printf("第%d名:      %s             %s           %d\n", (i+1),p[i].name,p[i].passage,p[i].score);
74. 
75.   }
76. }
77. 
78. int main()
79. {
80.   int arr[player_num] = { 0 };//用来存放5个选手的得分
81. 
82. 
83. 
84.   int pf = 0;//评委打分
85.   int sum = 0;//记录得分
86.   int i = 0;
87.   int j = 0;
88.   //主体部分,评委老师打分
89.   for (i = 1; i <= 5; i++)
90.   {
91.     sum = 0;
92. 
93.     printf("请%s选手入场演讲!\n", p[i-1].name);
94.     printf("%s选手演讲完毕!请各位评论老师打分!\n", p[i - 1].name);
95.     for (j = 0; j < 5; j++)
96.     {
97.       scanf("%d", &pf);
98.       sum += pf;
99. 
100.    }
101.    arr[i-1] = sum;
102.    printf("%s选手演讲的得分为:%d\n", p[i - 1].name, arr[i-1]);
103.    p[i-1].score = arr[i - 1];
104. 
105.  }
106.  //排序
107.  //排序利用排序函数
108.  bubblesore(p, 5);
109. 
110.  //打印出排名
111.  printf("名次            姓名           文章              分数\n");
112.  printf("_____________________________________________________\n");
113.  printfInfo(p, 5);
114. 
115.  printf("根据比赛规则,获奖名单如下:\n");
116.  printf("获得一等奖的是:%s\n", p[0].name);
117.  printf("获得二等奖的是:%s\n", p[1].name);
118.  printf("获得三等奖的是:%s\n", p[2].name);
119.  return 0;
120. }

然后我们来说一下具体的思路

首先我们想到:对于演讲的选手,有他的名字,题目,和分数等信息,所以我们会想到要使用结构体,另外,由于选手的数量问题,我们又考虑到了结构体数组,所以我们可以先写出这样的程序:

1. #define _CRT_SECURE_NO_WARNINGS
2. #include<stdio.h>
3. 
4. #define player_num 5
5. #define judges_num 5
6. 
7. 
8. //构建选手结构体信息
9. struct player
10. {
11.   char name[20];//选手姓名
12.   char passage[20];//选手文章
13. 
14.   int score;//选手得分
15. 
16. 
17. };
18. //初始化结构体数组
19. struct player p[player_num] =
20. {
21.   {"刘二","《春之美》",0},
22.   {"张三","《春的祖国》",0},
23.   {"李四","《春天来了》",0},
24.   {"王五","《春天》",0},
25.   {"丁六","《春的味道》",0}
26. 
27. };
28. 
29. 
30. int main()
31. {
32.   int arr[player_num] = { 0 };//用来存放5个选手的得分
33. 
34. 
35. 
36.   int pf = 0;//评委打分
37.   int sum = 0;//记录得分
38.   int i = 0;
39.   int j = 0;
40.   //主体部分,评委老师打分
41.   for (i = 1; i <= 5; i++)
42.   {
43.     sum = 0;
44. 
45.     printf("请%s选手入场演讲!\n", p[i-1].name);
46.     printf("%s选手演讲完毕!请各位评论老师打分!\n", p[i - 1].name);
47.     for (j = 0; j < 5; j++)
48.     {
49.       scanf("%d", &pf);
50.       sum += pf;
51. 
52.     }
53.     arr[i-1] = sum;
54.     printf("%s选手演讲的得分为:%d\n", p[i - 1].name, arr[i-1]);
55.     p[i-1].score = arr[i - 1];
56. 
57.   }

这个程序中要注意的是一些细节:

然后基本的结构体完善之后,我们要想到,有一个大小排序的问题,从大到小排序,我们想到再熟悉不过的冒泡排序。由于我们在排序过程中,每一个名字对应的文章和分数都是相对应的,所以,在排序交换的过程中,我们要把结构体中的数据一起交换掉,而对于字符串的交换,我们要用到一个函数strcpy,具体的用法在博主的一篇博客有相应的内容,链接放下面了

想到这些之后我们写出的程序就是这样的啦:

1. #define _CRT_SECURE_NO_WARNINGS
2. #include<stdio.h>
3. #include<string.h>
4. #define player_num 5
5. #define judges_num 5
6. 
7. 
8. //构建选手结构体信息
9. struct player
10. {
11.   char name[20];//选手姓名
12.   char passage[20];//选手文章
13. 
14.   int score;//选手得分
15. 
16. 
17. };
18. //初始化结构体数组
19. struct player p[player_num] =
20. {
21.   {"刘二","《春之美》",0},
22.   {"张三","《春的祖国》",0},
23.   {"李四","《春天来了》",0},
24.   {"王五","《春天》",0},
25.   {"丁六","《春的味道》",0}
26. 
27. };
28. 
29. 
30. //排序函数
31. void bubblesore(struct player *p, int len) 
32. {
33.   for (int i = 0; i < len; i++)
34.   {
35.     for (int j = 0; j < len - i - 1; j++)
36.     {
37.       if (p[j].score < p[j + 1].score)
38.       {
39.         //名字交换
40.         char tem_name[20] = { 0 };
41. 
42.         strcpy(tem_name , p[j].name);
43. 
44.         strcpy(p[j].name, p[j + 1].name);
45. 
46.         strcpy(p[j+1].name, tem_name);
47.         //文章交换
48.         char tem_passage[20] = { 0 };
49. 
50.         strcpy(tem_passage, p[j ].passage);
51. 
52.         strcpy(p[j].passage, p[j + 1].passage);
53. 
54.         strcpy(p[j+1].passage, tem_passage);
55. 
56.         //分数交换
57.         int temp_score = p[j].score;
58. 
59.         p[j].score = p[j + 1].score;
60. 
61.         p[j + 1].score = temp_score;
62. 
63.       }
64.     }
65.   }
66. }
67. 
68. 
69. int main()
70. {
71.   int arr[player_num] = { 0 };//用来存放5个选手的得分
72. 
73. 
74. 
75.   int pf = 0;//评委打分
76.   int sum = 0;//记录得分
77.   int i = 0;
78.   int j = 0;
79.   //主体部分,评委老师打分
80.   for (i = 1; i <= 5; i++)
81.   {
82.     sum = 0;
83. 
84.     printf("请%s选手入场演讲!\n", p[i-1].name);
85.     printf("%s选手演讲完毕!请各位评论老师打分!\n", p[i - 1].name);
86.     for (j = 0; j < 5; j++)
87.     {
88.       scanf("%d", &pf);
89.       sum += pf;
90. 
91.     }
92.     arr[i-1] = sum;
93.     printf("%s选手演讲的得分为:%d\n", p[i - 1].name, arr[i-1]);
94.     p[i-1].score = arr[i - 1];
95. 
96.   }
97.   //排序
98.   //排序利用排序函数
99.   bubblesore(p, 5);
100. 
101. 
102.  return 0;
103. }

当时博主在第一次写的时候把这下面的这一段写出来了bug

1. if (p[j].score < p[j + 1].score)
2.      {
3.        //名字交换
4.        char tem_name[20] = { 0 };
5. 
6.        strcpy(tem_name , p[j].name);
7. 
8.        strcpy(p[j].name, p[j + 1].name);
9. 
10.         strcpy(p[j+1].name, tem_name);
11.         //文章交换
12.         char tem_passage[20] = { 0 };
13. 
14.         strcpy(tem_passage, p[j ].passage);
15. 
16.         strcpy(p[j].passage, p[j + 1].passage);
17. 
18.         strcpy(p[j+1].passage, tem_passage);
19. 
20.         //分数交换
21.         int temp_score = p[j].score;
22. 
23.         p[j].score = p[j + 1].score;
24. 
25.         p[j + 1].score = temp_score;
26. 
27.       }

此前写成了这样:

1. if (p[j].score < p[j + 1].score)
2.      {
3.        //名字交换
4. 
5. 
6.        strcpy(p[j].name, p[j + 1].name);
7. 
8.        //文章交换
9. 
10.         strcpy(p[j].passage, p[j + 1].passage);
11.         //分数交换
12.         int temp_score = p[j].score;
13. 
14.         p[j].score = p[j + 1].score;
15. 
16.         p[j + 1].score = temp_score;
17. 
18.       }

这样就把p[j+1].name赋值给了p[j].name。但是p[j+1].name并没有改变,所以大家要避免犯这种小错误哈。

排序后,我们需要把它打印出来,这里考虑编写这样一个函数:

1. //打印函数
2. void printfInfo(struct player * p, int len)//输出结构体信息
3. {
4.  for (int i = 0; i < len; i++)
5.  {
6. 
7.    printf("第%d名:      %s             %s           %d\n", (i+1),p[i].name,p[i].passage,p[i].score);
8. 
9.  }
10. }

这样以后基本就算搞定了!!,在主函数中调用一下就打印出来了排名的情况。然后我们可以根据获奖的要求,(比如第一名一等奖,第二名二等奖,第三名三等奖等等),将他们的获奖情况也打印出来。

1. //打印出排名
2.  printf("名次            姓名           文章              分数\n");
3.  printf("_____________________________________________________\n");
4.  printfInfo(p, 5);
5. 
6.  printf("根据比赛规则,获奖名单如下:\n");
7.  printf("获得一等奖的是:%s\n", p[0].name);
8.  printf("获得二等奖的是:%s\n", p[1].name);
9.  printf("获得三等奖的是:%s\n", p[2].name);
10.   return 0;

这样以后完整的程序就同最初的一样了!!!

放一下运行的结果吧!

各位想要更改选手和评委的数量可以在程序开头的#define处进行修改,并添加自己喜欢的元素即可!!

相应代码的变动我就不多说了,希望对大家有帮助吧!我们一起进步!加油!!

加油!技术人!


相关文章
|
前端开发 安全 JavaScript
【实训项目】“我来拿”APP设计
【实训项目】“我来拿”APP设计
134 0
|
前端开发 Java 定位技术
【软件实战】5分钟拥有一款自己的软件(教程+成品展示)(下)
【软件实战】5分钟拥有一款自己的软件(教程+成品展示)
199 0
|
4月前
|
敏捷开发 搜索推荐 小程序
项目管理神器呀!YesDev这款客户端太爱了!轻松管理上百个项目
对抗项目延期的利器:YesDev - YesDev是一款强大的项目管理工具,适合敏捷开发/DevOps/软件项目管理,提供网页在线版、PC桌面版(Windows/Mac)及微信小程序,支持多部门及团队协作。 - 特别推荐YesDev桌面客户端,便于快速启动应用并保持与在线版数据同步。 特性亮点 - 任务工时管理: 高效填写、报告和计算工时。 - 项目集管理: 方便地管理多个项目及其子项目,并可设置权限。 - 单个项目管理: 灵活配置项目组件,如文档、需求、问题追踪等。 - 多项目甘特图: 即时合成多个项目的甘特图,进行宏观分析和资源调配。 - 个性化工作台: 根据角色定制工作台显示内容。
|
7月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的小码创客教育教学资源库的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的小码创客教育教学资源库的详细设计和实现(源码+lw+部署文档+讲解等)
|
7月前
|
小程序 JavaScript Java
基于微信小程序的竞赛管理平台设计与实现(开题报告+任务书+源码+lw+ppt +部署文档+讲解)
基于微信小程序的竞赛管理平台设计与实现(开题报告+任务书+源码+lw+ppt +部署文档+讲解)
175 1
|
前端开发 Python
自制主题 Lanstar 上线了
自从主题诞生之日就发了这篇文章,而如今我也觉得是时候给它写一篇介绍了。 在一年前我就想做个typecho主题,奈何时间不够充裕,就在前4天,在写python程序休息之余,最终下定决心于抽出时间来填坑,是的,一年前就创建了仓库(但我再重新提交-f push,清除以前憨憨的黑历史),正因此我的北极者称号里包含了这个,也因为这个提醒了我这个坑...
53 0
 自制主题 Lanstar 上线了
|
小程序
微信小程序项目实例——图片处理小工具(自制低配版美图秀秀)
微信小程序项目实例——图片处理小工具(自制低配版美图秀秀)
|
区块链 索引
【软件实战】5分钟拥有一款自己的软件(教程+成品展示)(上)
【软件实战】5分钟拥有一款自己的软件(教程+成品展示)
135 0
|
编解码
是时候展示给大家这5款压箱底的软件了
是时候把自己压箱底的软件都发出来了,软件都是小巧耐用,不带广告的,赶紧下载起来吧!就算暂时用不到的,也可以收藏起来等需要的时候再来下载!
143 6
是时候展示给大家这5款压箱底的软件了
电商网站项目:第一章:进度
电商网站项目:第一章:进度
电商网站项目:第一章:进度
下一篇
DataWorks