草庐IT

自制演讲比赛小项目

渴望力量的土狗 2023-10-27 原文

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

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

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#define player_num 5
#define judges_num 5


//构建选手结构体信息
struct player
{
	char name[20];//选手姓名
	char passage[20];//选手文章

	int score;//选手得分


};
//初始化结构体数组
struct player p[player_num] =
{
	{"刘二","《春之美》",0},
	{"张三","《春的祖国》",0},
	{"李四","《春天来了》",0},
	{"王五","《春天》",0},
	{"丁六","《春的味道》",0}
	
};


//排序函数
void bubblesore(struct player *p, int len) 
{
	for (int i = 0; i < len; i++)
	{
		for (int j = 0; j < len - i - 1; j++)
		{
			if (p[j].score < p[j + 1].score)
			{
				//名字交换
				char tem_name[20] = { 0 };

				strcpy(tem_name , p[j].name);
				
				strcpy(p[j].name, p[j + 1].name);

				strcpy(p[j+1].name, tem_name);
				//文章交换
				char tem_passage[20] = { 0 };

				strcpy(tem_passage, p[j ].passage);

				strcpy(p[j].passage, p[j + 1].passage);

				strcpy(p[j+1].passage, tem_passage);

				//分数交换
				int temp_score = p[j].score;

				p[j].score = p[j + 1].score;

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

int main()
{
	int arr[player_num] = { 0 };//用来存放5个选手的得分
	
	
	
	int pf = 0;//评委打分
	int sum = 0;//记录得分
	int i = 0;
	int j = 0;
	//主体部分,评委老师打分
	for (i = 1; i <= 5; i++)
	{
		sum = 0;

		printf("请%s选手入场演讲!\n", p[i-1].name);
		printf("%s选手演讲完毕!请各位评论老师打分!\n", p[i - 1].name);
		for (j = 0; j < 5; j++)
		{
			scanf("%d", &pf);
			sum += pf;
			
		}
		arr[i-1] = sum;
		printf("%s选手演讲的得分为:%d\n", p[i - 1].name, arr[i-1]);
		p[i-1].score = arr[i - 1];
		
	}
	//排序
	//排序利用排序函数
	bubblesore(p, 5);

	//打印出排名
	printf("名次            姓名           文章              分数\n");
	printf("_____________________________________________________\n");
	printfInfo(p, 5);

	printf("根据比赛规则,获奖名单如下:\n");
	printf("获得一等奖的是:%s\n", p[0].name);
	printf("获得二等奖的是:%s\n", p[1].name);
	printf("获得三等奖的是:%s\n", p[2].name);
	return 0;
}

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

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

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

#define player_num 5
#define judges_num 5


//构建选手结构体信息
struct player
{
	char name[20];//选手姓名
	char passage[20];//选手文章

	int score;//选手得分


};
//初始化结构体数组
struct player p[player_num] =
{
	{"刘二","《春之美》",0},
	{"张三","《春的祖国》",0},
	{"李四","《春天来了》",0},
	{"王五","《春天》",0},
	{"丁六","《春的味道》",0}
	
};


int main()
{
	int arr[player_num] = { 0 };//用来存放5个选手的得分
	
	
	
	int pf = 0;//评委打分
	int sum = 0;//记录得分
	int i = 0;
	int j = 0;
	//主体部分,评委老师打分
	for (i = 1; i <= 5; i++)
	{
		sum = 0;

		printf("请%s选手入场演讲!\n", p[i-1].name);
		printf("%s选手演讲完毕!请各位评论老师打分!\n", p[i - 1].name);
		for (j = 0; j < 5; j++)
		{
			scanf("%d", &pf);
			sum += pf;
			
		}
		arr[i-1] = sum;
		printf("%s选手演讲的得分为:%d\n", p[i - 1].name, arr[i-1]);
		p[i-1].score = arr[i - 1];
		
	}

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

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

对C语言函数的再认识_月亮嚼成星~的博客-CSDN博客目录1. 函数是什么2.C语言中函数的分类2.1 库函数2.2 自定义函数3.函数参数3.1 实际参数(实参):3.2 形式参数(形参):4.函数调用4.1 传值调用4.2 传址调用4.3 练习5.函数的嵌套调用和链式访问5.1 嵌套调用5.2 链式访问6. 函数的声明和定义6.1 函数声明6.2 函数定义:7.函数递归7.1 什么是递归?7.2 递归的两个必要条件7.2.1 练习1:7.2.2 练习2:7.3 递.https://blog.csdn.net/m0_67995737/article/details/124789657想到这些之后我们写出的程序就是这样的啦:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#define player_num 5
#define judges_num 5


//构建选手结构体信息
struct player
{
	char name[20];//选手姓名
	char passage[20];//选手文章

	int score;//选手得分


};
//初始化结构体数组
struct player p[player_num] =
{
	{"刘二","《春之美》",0},
	{"张三","《春的祖国》",0},
	{"李四","《春天来了》",0},
	{"王五","《春天》",0},
	{"丁六","《春的味道》",0}
	
};


//排序函数
void bubblesore(struct player *p, int len) 
{
	for (int i = 0; i < len; i++)
	{
		for (int j = 0; j < len - i - 1; j++)
		{
			if (p[j].score < p[j + 1].score)
			{
				//名字交换
				char tem_name[20] = { 0 };

				strcpy(tem_name , p[j].name);
				
				strcpy(p[j].name, p[j + 1].name);

				strcpy(p[j+1].name, tem_name);
				//文章交换
				char tem_passage[20] = { 0 };

				strcpy(tem_passage, p[j ].passage);

				strcpy(p[j].passage, p[j + 1].passage);

				strcpy(p[j+1].passage, tem_passage);

				//分数交换
				int temp_score = p[j].score;

				p[j].score = p[j + 1].score;

				p[j + 1].score = temp_score;
				
			}
		}
	}
}


int main()
{
	int arr[player_num] = { 0 };//用来存放5个选手的得分
	
	
	
	int pf = 0;//评委打分
	int sum = 0;//记录得分
	int i = 0;
	int j = 0;
	//主体部分,评委老师打分
	for (i = 1; i <= 5; i++)
	{
		sum = 0;

		printf("请%s选手入场演讲!\n", p[i-1].name);
		printf("%s选手演讲完毕!请各位评论老师打分!\n", p[i - 1].name);
		for (j = 0; j < 5; j++)
		{
			scanf("%d", &pf);
			sum += pf;
			
		}
		arr[i-1] = sum;
		printf("%s选手演讲的得分为:%d\n", p[i - 1].name, arr[i-1]);
		p[i-1].score = arr[i - 1];
		
	}
	//排序
	//排序利用排序函数
	bubblesore(p, 5);

	
	return 0;
}

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

if (p[j].score < p[j + 1].score)
			{
				//名字交换
				char tem_name[20] = { 0 };

				strcpy(tem_name , p[j].name);
				
				strcpy(p[j].name, p[j + 1].name);

				strcpy(p[j+1].name, tem_name);
				//文章交换
				char tem_passage[20] = { 0 };

				strcpy(tem_passage, p[j ].passage);

				strcpy(p[j].passage, p[j + 1].passage);

				strcpy(p[j+1].passage, tem_passage);

				//分数交换
				int temp_score = p[j].score;

				p[j].score = p[j + 1].score;

				p[j + 1].score = temp_score;
				
			}

此前写成了这样:

if (p[j].score < p[j + 1].score)
			{
				//名字交换
				
			
				strcpy(p[j].name, p[j + 1].name);

				//文章交换
				
				strcpy(p[j].passage, p[j + 1].passage);
				//分数交换
				int temp_score = p[j].score;

				p[j].score = p[j + 1].score;

				p[j + 1].score = temp_score;
				
			}

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

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

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

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

//打印出排名
	printf("名次            姓名           文章              分数\n");
	printf("_____________________________________________________\n");
	printfInfo(p, 5);

	printf("根据比赛规则,获奖名单如下:\n");
	printf("获得一等奖的是:%s\n", p[0].name);
	printf("获得二等奖的是:%s\n", p[1].name);
	printf("获得三等奖的是:%s\n", p[2].name);
	return 0;

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

放一下运行的结果吧!

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

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

加油!技术人!

有关自制演讲比赛小项目的更多相关文章

  1. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  2. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  3. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="

  4. Ruby 从大范围中获取第 n 个项目 - 2

    假设我有这个范围:("aaaaa".."zzzzz")如何在不事先/每次生成整个项目的情况下从范围中获取第N个项目? 最佳答案 一种快速简便的方法:("aaaaa".."zzzzz").first(42).last#==>"aaabp"如果出于某种原因你不得不一遍又一遍地这样做,或者如果你需要避免为前N个元素构建中间数组,你可以这样写:moduleEnumerabledefskip(n)returnto_enum:skip,nunlessblock_given?each_with_indexdo|item,index|yieldit

  5. ruby - 如何在 Ruby 字符串中插入项目符号字符? - 2

    我正在尝试创建一个带有项目符号字符的Ruby1.9.3字符串。str="•"+"helloworld"但是,当我输入它时,我收到有关非ASCII字符的语法错误。我该怎么做? 最佳答案 你可以把Unicode字符放在那里。str="\u2022"+"helloworld" 关于ruby-如何在Ruby字符串中插入项目符号字符?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1195

  6. ruby - 在 Rails 项目中测试本地版本的 gem - 2

    我的Rails站点使用了一个确实不是很好的gem。每次我需要做一些新的事情时,我最终不得不花费与向实际Rails项目添加代码一样多的时间来为gem添加功能。但我不介意,我将我的Gemfile设置为指向我的gem的GitHub分支(我尝试提交PR,但维护者似乎已经下台)。问题是我真的没有找到一种合理的方法来测试我添加到gem的新东西。在railsc中测试它会特别好,但我能想到的唯一方法是a)更改~/.rvm/gems/.../foo。rb,这看起来不对或者b)升级版本,推送到Github,然后运行​​bundleup,这除了耗时之外显然是一场灾难,因为我不确定我所做的promise是否正

  7. ruby - 合并 nanoc 中的项目 - 2

    我一直在尝试使用nanoc用于生成静态网站。我需要组织一个复杂的排列页面,我想让我的内容保持干燥。包含或合并的概念在nanoc系统中如何运作?我已阅读文档,但似乎找不到我想要的内容。例如:我如何获取两个部分内容项并将它们合并到一个新的内容项中。在staticmatic您可以在您的页面中执行以下操作。=partial('partials/shared/navigation')类似的约定在nanoc中如何运作? 最佳答案 这里是nanoc的作者。在nanoc中,部分是布局。因此,您可以拥有layouts/partials/shared/

  8. Ruby 和指南针路径与 yeoman 项目 - 2

    我安装了ruby​​、yeoman,当我运行我的项目时,出现了这个错误:Warning:Running"compass:dist"(compass)taskWarning:YouneedtohaveRubyandCompassinstalledthistasktowork.Moreinfo:https://github.com/gruUse--forcetocontinue.Use--forcetocontinue.我有进入可变session目标的路径,但它不起作用。谁能帮帮我? 最佳答案 我必须运行这个:geminstallcom

  9. node.js - 如何在 Travis CI 上的一个项目中运行 Node.js 和 Ruby 测试 - 2

    我有一个包含多个组件的存储库,其中大部分是用JavaScript(Node.js)编写的,一个是用Ruby(RubyonRails)编写的。我想要一个.travis.yml文件来触发一个运行每个组件的所有测试的构建。根据thisTravisCIGoogleGroupthread,目前还没有官方支持。我的目录结构是这样的:.├──构建服务器├──核心├──扩展├──网络应用├──流浪文件├──package.json├──.travis.yml└──生成文件我希望能够运行特定版本的Ruby(2.2.2)和Node.js(0.12.2)。我已经有了一个make目标,所以maketest在每

  10. 玩以太坊链上项目的必备技能(初识智能合约语言-Solidity之旅一) - 2

    前面一篇关于智能合约翻译文讲到了,是一种计算机程序,既然是程序,那就可以使用程序语言去编写智能合约了。而若想玩区块链上的项目,大部分区块链项目都是开源的,能看得懂智能合约代码,或找出其中的漏洞,那么,学习Solidity这门高级的智能合约语言是有必要的,当然,这都得在公链``````以太坊上,毕竟国内的联盟链有些是不兼容Solidity。Solidity是一种面向对象的高级语言,用于实现智能合约。智能合约是管理以太坊状态下的账户行为的程序。Solidity是运行在以太坊(Ethereum)虚拟机(EVM)上,其语法受到了c++、python、javascript影响。Solidity是静态类型

随机推荐