小菜版考试系统——“C”

news2024/10/2 18:18:48

各位CSDN的uu们你们好呀,今天,小雅兰的内容是小菜版考试系统,最近一直在忙C语言课程设计的事,那么,就请uu们看看我的学习成果吧。


课程设计任务

摘要

题目分析

流程图

关键程序代码

程序运行结果

结论与心得

参考文献

源代码


课程设计任务:

此考试系统的要求:

从屏幕上输出四个菜单项供用户选择,用户输入数字1、2、3选择,输出以下编号对应题目及其答案,输入4,退出系统。 

  1. 输出杨辉三角形(10行)。
  2. 鸡兔同笼,共有98个头,386只脚,求鸡兔各多少只?提示,设鸡为X,兔为Y,据题意有X+Y=98,2X+4Y=386。采用穷举法,X从1到97,Y取98-X,如果X,Y同时满足条件2X+4Y=386,则输出X,Y的值。
  3. 键盘任意输入一个年号,判断它是否是闰年。若是闰年输出“Yes”,否则输出“No”。已知符合下列条件之一者是闰年:①能被4整除,但不能被100整除,②能被400整除

摘要 

    C语言程序设计是本专业必备的技术知识。通过做C语言课程设计,有助于加深我们对C语言这门课程的理解,在课堂上学到的都是基础理论知识,对于如何用程序语言来描述所学的知识还是有一定难度。通过课程设计我们可以真正理解其内涵。而且,C语言课程设计有助于逻辑思维的锻炼,程序设计能直接有效地训练我们的创新思维、培养分析问题、解决问题的能力。

    本课题要设计的是小菜版考试系统。程序开始运行,首先,需要进行密码验证才能进入系统。如果输入错误密码,程序提示密码输入错误。当错误密码次数超过规定次数,系统自动退出。如果输入正确密码,进入考试系统以后,可以看到菜单,有三个题目,分别是杨辉三角、鸡兔同笼、判断闰年,利用switch语句和case语句以及do-while循环,选择序号1,调用了自定义的yanghui函数,结果就得到杨辉三角,可以继续选择序号2,调用自定义的jitu函数,得到鸡兔同笼,选择序号3,调用自定义函数leap_year,随意输入一个年份,会判断此年份是否为闰年,如果是闰年,输出YES,如果不是闰年,输出NO。这样,一个简单的考试系统就运行成功了。经过程序运行测试,输入密码错误超过3次,系统能够自动退出。

关键词:杨辉三角;鸡兔同笼;闰年


题目分析

1. 输出十行杨辉三角

    杨辉三角,是二项式系数在三角形中的一种几何排列。在欧洲,这个表叫做帕斯卡三角形。帕斯卡是在1654年发现这一规律的,比杨辉要迟393年,比贾宪迟600年。杨辉三角是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。

    规律也很简单,在最上面一行的中央写下1;第二行,写下两个1,和上一行形成三角形;随后的每一行,开头和最后的数字都是1,其他的每个数都是它左上方和右上方的数字之和,就是说除每行最左侧与最右侧的数字以外,每个数字等于它的左上方与右上方两个数字之和。

    首先,定义一个10行10列的二维整型数组,给二维数组的每一行的最后一个赋值为1,再将二维数组的每一行的开头赋值为1,然后,前两行都为1,于是从数组第三行开始直到第十行结束,列从第二列开始,最后一列为1,所以列比行少1。在循环中,除每行最左侧与最右侧的数字以外,每个数字等于它的左上方与右上方两个数字之和。再用一个嵌套的for循环,输出二维数组,宽度为6。

2.鸡兔同笼 

    鸡兔同笼是中国古代的数学名题之一大约在1500年前,《孙子算经》中就记载了这个有趣的问题。书中是这样叙述的:

    今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?

    这四句话的意思是:有若干只鸡兔同在一个笼子里,从上面数,有35个头,从下面数,有94只脚。问笼中各有多少只鸡和兔?

   本题是:共有98个头,386只脚,求鸡兔各多少只?提示,设鸡为X,兔为Y,据题意有X+Y=98,2X+4Y=386。采用穷举法,X从1到97,Y取98-X,如果X,Y同时满足条件2X+4Y=386,则输出X,Y的值。

   当然,本题还可以使用二元一次方程组法,联立这两个方程,解出X、Y的值的表达式。

3.判断闰年

    普通年能被4整除;且不能被100整除的为闰年。(如2004年就是闰年,1901年不是闰年);世纪年能被400整除的是闰年。(如2000年是闰年,1900年不是闰年)

   在判断闰年的代码中,运用到了分支语句和操作符的知识点。

    &&表示逻辑与,使用格式:“条件A && 条件B”,只有当条件A和条件B都成立时,结果才为1,也就是“真”;其余情况的结果都为0,也就是“假”。因此,条件A或条件B只要有一个不成立,结果都为0,也就是“假”。此运算符总是先判断条件A是否成立,如果条件A成立,接着再判断条件B是否成立:如果条件B成立,“条件A && 条件B”的结果就为1,即“真”,如果条件B不成立,结果就为0,即“假”;如果条件A不成立,就不会再去判断条件B是否成立:因为条件A已经不成立了,不管条件B如何,“条件A && 条件B”的结果肯定是0,也就是“假”。

    ||表示逻辑或,使用格式:“条件A || 条件B”,当条件A或条件B只要有一个成立时(也包括条件A和条件B都成立),结果就为1,也就是“真”;只有当条件A和条件B都不成立时,结果才为0,也就是“假”。此运算符总是先判断条件A是否成立,如果条件A成立,就不会再去判断条件B是否成立:因为条件A已经成立了,不管条件B如何,“条件A || 条件B”的结果肯定是1,也就是“真”;如果条件A不成立,接着再判断条件B是否成立:如果条件B成立,“条件A || 条件B”的结果就为1,即“真”,如果条件B不成立,结果就为0,即“假”。

    在C语言中,0表示假,非0表示真。


流程图

总流程图

 这里给出了系统的总流程图。

 程序开始运行,进行密码判定,密码错误,即重新输入密码,密码错误三次以上,退出程序,密码正确,执行欢迎函数,进入程序执行输入命令函数。输入1,输出杨辉三角的答案;输入2,输出鸡兔同笼的答案;输入3,再输入数字,输出该年份是否是闰年;输出4,退出程序。

分程序流程图

  这里给出了杨辉三角的程序流程图。

  程序开始运行,定义一个十行十列的二维数组,令i=0,数组下标从0开始,令a[i][i]等于0,即每一行的最后一个都为1,a[i][0]等于1,即每一行的第一列都为1。前两行都为1,于是从第三行(i=2)开始,除开头和结尾两个数以外,每个数等于它的左上方与右上方两个数字之和。列数要等于行数减1,如果不等于,返回上一步,程序循环,直到i=10,停止循环,输出十行杨辉三角,结束程序。

 这里给出了鸡兔同笼的程序流程图。

 程序开始运行,假设鸡和兔的总头数为n,鸡和兔的总脚数为m,利用二元一次方程组的知识,解出x(鸡)和y(兔),然后结束程序。 

 

 这里给出了判断闰年的流程图。

 程序开始运行,任意输入一个年份,如果此年份可以被4整除并且不可以被100整除,或者此年份可以被400整除,那么此年份就是闰年,否则,此年份就不是闰年,程序结束。


关键程序代码

 定义一个欢迎界面函数welcome(),完成欢迎界面的设计。具体函数程序见下代码。

void welcome()//定义一个欢迎界面函数
{
	printf("*****************************************\n");
	printf("********欢迎使用小菜版考试系统**********\n");
	printf("****************************************\n");
}

1.杨辉三角题求解

int i,j,a[10][10];
for(i=0;i<10;i++)
{
	a[i][i]=1;//给二维数组的每一行的最后一个都赋值为1
		a[i][0]=1;//每一行的开头都为1
}
for(i=2;i<10;i++)
	for(j=1;j<=i-1;j++)
		a[i][j]=a[i-1][j]+a[i-1][j-1];//除开头和结尾之外,每个数等于左上方和右上方两个数之和
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
	printf("%6d",a[i][j]);
printf("\n");

 2.鸡兔同笼题求解二元一次方程组,解出X和Y的值的表达式

int x=0;
int y=0;
//设鸡和兔共有n只,共m只脚
//x+y=n
//2x+4y=m
x = (4 * 98 - 386) / 2;
y = 98 - x;

  3.判断闰年题熟练掌握操作符的知识,并知道闰年的求解

if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
{
	printf("Yes\n");
}
else
{
	printf("No\n");
}

程序运行结果

界面运行结果截图

程序运行开始,首先要输入密码,结果如图所示。界面显示“请输入密码:>”

 如果三次都输入错误密码,系统会自动退出。

 如果正确输入密码,正确输入密码之后,会提示“密码正确,登录成功”,并看到欢迎使用小菜版考试系统,并看到了所要考试的题目。

 如果选择序号1,则会显示出十行十列的杨辉三角,还可以再选择下一个题目进行考试 

 接下来,可以选择序号2,这样就可以看到鸡兔同笼 

还可以选择序号3,这样可以看到闰年,随意输入一个年份,系统会自动判断,如果是闰年,就输出YES,如果不是闰年,就输出NO

 如果不想考试了,可以选择序号4,退出整个系统  


结论与心得

   通过这次C语言程序设计,学会了如何正确调用函数。本次共写了6个函数。

   小雅兰:通过这次课程设计,我懂得了很多,尤为深刻的是函数的调用和调试。如何写出一份优秀的代码呢?第一:代码运行要正常。如果你的代码连编译器都编译不过去,那么肯定不是一份优秀的代码。第二:bug很少。如果写出来的程序,一共没几行代码,bug倒是写出了不少,那么,肯定也不是一份易于调试的代码。第三:效率要高。如果写出来的程序效率极其低下,也可以称之为一份不合格的代码。第四:可读性高。如果写出来的程序只有你自己看得懂,甚至是自己都看不懂,别人又怎么可能看懂呢?这样的代码就是猪队友代码。第五:注释清晰。任何一份优秀的代码,都是需要写一定的注释,注释的作用是让别人能够更清晰看得懂你写的代码。第六:可维护性高。第七:文档齐全。对于函数调用,我是在switch语句中的case语句中进行的。函数调用分为传值调用和传值调用。传值调用是函数的形参和实参分别占有不同内存块,对形参的修改不会影响实参。传值调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操作函数外部的变量。调试在程序编程中具有很重要的地位,调试可以解决很多问题,而且,调试对于写好一个程序是非常有帮助的功能,通过调试可以发现一些细微的Bug,这样就可以及时地发现并且改正。调试还有很多有用的操作,比如监视局部变量、调用堆栈、寄存器,因此,深入学习调试是非常重要的。

  小玉锦:通过这次课程设计,我学到了很多。第一,更加清晰的懂得了函数调用,以及循环之间的关系。不同的函数要从不同的函数库中调用,以前总是对这些记忆很模糊。第二,对细节的把控更好,比如分号与花括号,使用更加得心应手。第三,在制作程序框图的过程中,对c语言的逻辑掌控有所增强,一个好的程序必定有一个好的内在逻辑。第四,懂得运用注释,注释可以让别人更好的看懂你的程序,也更利于自己查找错误。第五,对于C语言的软件应用更加熟练,在另一位小组成员的推荐下,下载了VS2022,发现2022更加方便。通过此次的课程设计,我得出了一个结论,想要学好C语言,必须多加实践和讨论,它是一门需要自主学习的科目,多和同学交流也能学到更多。


参考文献

[1]谭浩强.C语言程序设计[M].北京:清华大学出版社,2012

[2][美]Kenneth A.Reek.C和指针[M].北京:人民邮电出版社,2020

[3]陈正冲.C语言深度剖析[M].北京:北京航空航天大学出版社,2012

[4]郑莉莉.C语言程序设计[M].北京:清华大学出版社,2012


源代码

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
void welcome()
{
	printf("*********************************************************\n");
	printf("****************欢迎使用小菜版考试系统*******************\n");
	printf("*********************************************************\n");
}
void menu()
{
	printf("\n");
	printf("#########################################################\n");
	printf("#################1.杨辉三角(十行)######################\n");
	printf("\n");
	printf("#################2.鸡兔同笼        ######################\n");
	printf("共有98个头,385只脚,求鸡兔各多少只?提示:设鸡为X,兔为Y\n");
	printf("据题意有X+Y=98,2X+4Y=386.采用穷举法,X由1到97,Y取98-X##\n");
	printf("如果X、Y同时满足条件2X+4Y=386,则输出X、Y的值############\n");
	printf("\n");
	printf("#################3.键盘任意输入一个序号 #################\n");
	printf("判断它是否是闰年。若是闰年输出“Yes”, 否则输出“No”    \n");
	printf("已知符合下列条件之一者是闰年:<1>能被4整除,但不能被100整除\n");
	printf("<2>能被400整除 ##########################################\n");
	printf("\n");
	printf("#################4.退出系统        ######################\n");
	printf("\n");
}
void yanghui()
{
	int i, j, a[10][10];
	for (i = 0; i < 10; i++)
	{
		a[i][i] = 1;//给二维数组的每一行的最后一个都赋值为1
		a[i][0] = 1;//每一行的开头都为1
	}
	for (i = 2; i < 10; i++)
		for (j = 1; j <= i - 1; j++)
			a[i][j] = a[i - 1][j] + a[i - 1][j - 1];//除开头和结尾之外,每个数等于左上方和右上方两个数之和
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j <= i; j++)
			printf("%6d", a[i][j]);
		printf("\n");
	}
}
void jitu()
{
	int x = 0;//鸡
	int y = 0;//兔
	//设鸡和兔共有n只,共m只脚
	//x+y=n
	//2x+4y=m
	//解得x=(4n-m)/2   y=n-x
	//scanf("%d %d", &x, &y);//输入鸡和兔的数量
	//题目已知有98个头,386只腿
	x = (4 * 98 - 386) / 2;
	y = 98 - x;
	printf("%d %d\n", x, y);
}

void leap_year()
{
	int year = 0;
	printf("请输入年份:>");
	scanf("%d", &year);//年份
	if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
	{
		printf("Yes\n");
	}
	else
	{
		printf("No\n");
	}
}


int main()


{
	char password[100] = { 0 };
	int i = 0;
	//假设密码为123456
	//模拟用户登录,只能登录三次,只允许输入三次密码,如果密码正确则显示登录成功
	//如果三次均输入错误,则退出程序
	int j = 0;
	for (i = 0; i < 3; i++)
	{
		printf("请输入密码:>\n");
		for (j = 0; j < 6; j++)
		{
			password[j] = _getch();
			//getch 从控制台读取一个字符,但不显示在屏幕上
			if (password[j] == '\b')
			{
				//\b  退格(BS),将当前位置移到前一列
				j--;
				if (j >= 0)
				{
					j--;
					printf("\b \b");
				}
			}
			else if (j >= 0)
			{
				printf("*");
			}
		}
		password[j] = '\0';
		//	//\0是判断字符字符数组结束的标志,表示这串字符到结尾了
		//	//\0是占用位置的
		if (strcmp(password, "123456") == 0)
		{
			printf("密码正确,登录成功\n");
			break;
		}
		else
		{
			printf("密码输入错误\n");
		}
	}
	if (i == 3)
	{
		printf("三次密码均输入错误,退出程序\n");
		exit(0);
	}
	int input = 0;
	welcome();
	do
	{
		menu();
		printf("请选择序号:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("杨辉三角\n");
			yanghui();
			break;
		case 2:
			printf("鸡兔同笼\n");
			jitu();
			break;
		case 3:
			printf("闰年\n");
			leap_year();
			break;
		case 4:
			printf("退出系统\n");
			exit(0);
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}

	} while (input);
	return 0;
}

好啦,小雅兰的C语言课程设计就此结束啦,以后要更加努力,把C语言没有学会的知识补过来。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/352466.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVM08 StringTable

StringTable String的基本特性 String&#xff1a;字符串&#xff0c;使用一对 ”” 引起来表示 String s1 “mogublog” ; // 字面量的定义方式String s2 new String(“moxi”); string声明为final的&#xff0c;不可被继承String实现了Serializable接口&#xff1a;表示字…

python 调用 dll 出现精度问题

问题&#xff1a;python 在调用dll 的时候出现了精度问题 总结&#xff1a;使用decimal库进行转换就可以正常传递。 ‘ 心急的朋友可以略过下文了。 心急的朋友可以略过下文了。 心急的朋友可以略过下文了。 心急的朋友可以略过下文了。 ’ 遇到的问题具体情况 dll 生成函数…

手机棋牌游戏开发的流程是怎样的?

最近几年&#xff0c;随着网络游戏的兴起&#xff0c;棋牌手游开发也越来越受欢迎&#xff0c;在国内&#xff0c;几乎随处可见从事手游和手游的公司。不过&#xff0c;虽然公司和产品很多&#xff0c;但效果也不一样&#xff0c;区别就在于&#xff0c;他们能不能掌握好这款游…

实现一个更快的终端彩色文本格式化工具库

终端中打印的五颜六色的彩色文本&#xff0c;你知道是怎么实现的吗&#xff0c;你都知道或用过哪些相关的工具库呢&#xff1f;来一起了解一下吧&#xff01; 在前端项目开发中&#xff0c;说到控制台终端彩色文本格式化&#xff0c;你可能会想到 chalk、picocolors、ansi-colo…

ElasticSearch入门安装与SpringBoot集成实战

介绍 Elasticsearch 是一个实时分布式搜索和分析引擎&#xff0c;一般用于全文搜索、结构化搜索&#xff0c;分析或者三者混用。 它的底层是基于Apache Lucene&#xff08;TM&#xff09;的开源搜索引擎&#xff0c;但是lucene只是一个库&#xff0c;需要java开发然后集成到应…

LeetCode刷题复盘笔记—一文搞懂贪心算法之452. 用最少数量的箭引爆气球(贪心算法系列第十一篇)

今日主要总结一下可以使用贪心算法解决的一道题目&#xff0c;452. 用最少数量的箭引爆气球 题目&#xff1a;452. 用最少数量的箭引爆气球 Leetcode题目地址 题目描述&#xff1a; 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points &#…

备战蓝桥杯【二维前缀和】

&#x1f339;作者:云小逸 &#x1f4dd;个人主页:云小逸的主页 &#x1f4dd;Github:云小逸的Github &#x1f91f;motto:要敢于一个人默默的面对自己&#xff0c;强大自己才是核心。不要等到什么都没有了&#xff0c;才下定决心去做。种一颗树&#xff0c;最好的时间是十年前…

【自学MYSQL】MySQL Windows安装

MySQL Windows安装 MySQL Windows下载 首先&#xff0c;我们打开 MySQL 的官网&#xff0c;网址如下&#xff1a; https://dev.mysql.com/downloads/mysql/在官网的主页&#xff0c;我们首先根据我们的操作系统&#xff0c;选择对应的系统&#xff0c;这里我们选择 Windows&…

神奇的nextTick一定能获取到最新的dom么?

前言 众所周知&#xff0c;vue的dom更新操作时异步的&#xff0c;为了获取更新后的dom官方提供了相应的apinextTick,文档中对该api的描述为&#xff1a;将回调延迟到下次 DOM 更新循环之后执行 , 所谓的下一次&#xff0c;到底是哪一次呢&#xff1f;dom更新是异步任务&#xf…

【数据结构与算法】链表1:移除链表 设计链表链表反转(双指针法、递归法)

文章目录今日任务1.链表理论基础&#xff08;1&#xff09;什么是链表&#xff1f;&#xff08;2&#xff09;链表的类型&#xff08;3&#xff09;链表的存储方式&#xff08;4&#xff09;链表的定义&#xff08;5&#xff09;链表的操作&#xff08;6&#xff09;性能分析2.…

【设计模式】综述

设计模式概述 文章目录一、设计模式1. 基本简介2. 面向对象设计原则二、基本类别1. 创建型模式会更新每种模式的详细博客超链接&#xff0c;敬请期待呀参考博客&#x1f60a;点此到文末惊喜↩︎ 一、设计模式 1. 基本简介 定义&#xff1a;设计模式是一个针对重复发生的问题的…

使用HTTP隧道代理,请求超过频率要怎么办?

在网上&#xff0c;经常会看到有人说使用隧道代理经常遇到429错误&#xff08;请求超过频率&#xff09;&#xff0c;我们要如何解决这一问题呢&#xff1f;通常情况&#xff0c;优质的HTTP代理厂商隧道代理服务器采用的是高性能主机构建的动态IP代理服务器&#xff0c;是可以支…

IO流

标题IO流的体系结构FileReader和FileWriterFileReader读入数据的基本操作FileReader中使用read(char [] cbuf)读入数据FileWriter写出数据字节流使用FileInputStream和FileOutputStream读写文本文件使用FileInputStream和FileOutputStream读写非文本文件缓冲流缓冲流&#xff0…

智慧校园平台源码:实现互联互通的校园管理一体化

智慧校园管理平台主要以校园安全、智慧校园数据管理云平台为核心&#xff0c;实现数据统一管理&#xff0c;以智慧电子班牌为学生智慧之窗&#xff0c;以移动管理平台、家校沟通为辅。实现教师—家长一学校—学生循环的无纸化管理模式及教学服务&#xff0c;实现多领域的信息互…

【JavaSE】Lambda、Stream(659~686)

659.每天一考 1.写出获取Class实例的三种常见方式 Class clazz1 String.class; Class clazz2 person.getClass(); //sout(person); //xxx.yyy.zzz.Person... Class clazz3 Class.forName(String classPath);//体现反射的动态性2.谈谈你对Class类的理解 Class实例对应着加载…

小小bat-day1-自动文件上传

前言&#xff1a;日常服务器备份文件或者生产设备等数据文件都统一保存至文件服务器&#xff0c;进行日志分析或者将生产文件CSV、图片等转存至数仓进行数据分析&#xff0c;尤其生产的部分数据是保存在个人电脑的PC端&#xff0c;数据杂&#xff0c;获取困难&#xff0c;手动整…

day45【代码随想录】动态规划之完全平方数、单词拆分、打家劫舍、打家劫舍 II

文章目录前言一、完全平方数&#xff08;力扣279&#xff09;二、单词拆分&#xff08;力扣139&#xff09;三、打家劫舍&#xff08;力扣198&#xff09;四、打家劫舍 II前言 1、完全平方数 2、单词拆分 3、打家劫舍 4、打家劫舍 II 一、完全平方数&#xff08;力扣279&#…

2023软考报名(上半年)报名什么时候开始?-弘博创新

2023软考报名&#xff08;上半年&#xff09;报名预计在3月底-4月初开始&#xff0c;现在可以先进入备考了&#xff0c;参加学习可以到弘博创新&#xff0c;专业考前辅导多年&#xff0c;专业靠谱&#xff01; 系统集成项目管理工程师是全国计算机技术与软件专业技术资格&#…

Windows安装VMware虚拟机+配置Ubuntu的详细步骤以及解决配置过程中报错的问题(完整版)

目录 引言: 过程&#xff1a; 安装VMware虚拟机&#xff1a; 在VMware虚拟机中配置Ubuntu&#xff1a; 在VMware虚拟机中安装Ubuntu&#xff1a; VMware中启动虚拟机时报错问题的解决&#xff1a; 正式开始安装Ubuntu&#xff1a; 参考资料&#xff1a; 引言: 在学习计…

线程池源码解析项目中如何配置线程池

目录 基础回顾 线程池执行任务流程 简单使用 构造函数 execute方法 execute中出现的ctl属性 execute中出现的addWorker方法 addWorker中出现的addWorkerFailed方法 addWorker中出现的Worker类 Worker类中run方法出现的runWorker方法 runWorker中出现的getTask runWo…