首页 > 其他分享 >结对项目

结对项目

时间:2024-09-28 21:38:10浏览次数:1  
标签:fp 结对 num1 num2 项目 ans1 ans2 fb

这个作业属于哪个课程 班级链接
这个作业要求在哪里 作业要求链接
这个作业的目标 要求实现一个自动生成小学四则运算题目的命令行程序
学号 姓名 Github仓库地址
3122004404 王钦鹏 Github链接
  1. PSP表格
PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 40
Estimate 估计这个任务需要多少时间 500 700
Development 开发 400 450
Analysis 需求分析 (包括学习新技术) 200 300
Design Spec 生成设计文档 30 20
Design Review 设计复审 (和同事审核设计文档) 40 40
Coding Standard 代码规范 (为目前的开发制定合适的规范) 20 30
Design 具体设计 300 400
Coding 具体编码 200 300
Code Review 代码复审 20 40
Test 测试(自我测试,修改代码,提交修改) 40 50
Reporting 报告 30 40
Test Report 测试报告 20 25
Size Measurement 计算工作量 40 50
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 30 40
Total 合计 1900 2525
  1. 效能分析
    改进性能花了几十分钟,发现速度太慢生成不了10000个题目

3.设计实现过程

  • getSignal()来随机生成4种运算符
  • random()生成特定范围内随机数
  • gcd()辗转相除法来获得两个数的最大公约数
  • answer()通过计算得出结果写入文件中
  • 主类函数供用户使用
  1. 代码说明
    answer()
    通过区分不同的运算符分为多种不同情况来逐一分析并运算得出结果
点击查看代码
int answers(int y,int num,int num1,int num2,int num3,char signal1,char signal2,int r)//生成答案 
{
	int ans,a,t,c=0;
	FILE *fp;
	FILE *fb;
	fp=fopen("Answers.txt","a");
	fb=fopen("Exercises.txt","a");
	if(num==1)
	{
		int ans1,ans2;
		switch(signal1)
		{
			case '+':
				ans=num1+num2;
			    fprintf(fp,"答案%d:%d\n",y,ans);
			    fclose(fp);
			    fprintf(fb,"题目%d:%d + %d = \n",y,num1,num2);
			    fclose(fb);
				break;
			case '-':
				if(num1<num2)
				{
					t=num1;
					num1=num2;
					num2=t;
				}
				ans=num1-num2;
				 fprintf(fp,"答案%d:%d\n",y,ans);
			     fclose(fp);
			     fprintf(fb,"题目%d:%d - %d = \n",y,num1,num2);
			     fclose(fb);
				break;
			case 'x':
				ans=num1*num2;
			    fprintf(fp,"答案%d:%d\n",y,ans);
			    fclose(fp);
			    fprintf(fb,"题目%d:%d x %d = \n",y,num1,num2);
			    fclose(fb);
				break;
			case '/':
				a=gcd(num1,num2);
				ans1=num1/a;
				ans2=num2/a;
				c=0;
				while(ans1>ans2)
				{
					ans1=ans1-ans2;
					c++;
				}
				if(c>0)
				{
				fprintf(fp,"答案%d:%d'%d/%d\n",y,c,ans1,ans2);
				fprintf(fb,"题目%d:%d / %d = \n",y,num1,num2);
				}
				
				if(c==0)
				{
				fprintf(fp,"答案%d: %d/%d\n",y,ans1,ans2);
				fprintf(fb,"题目%d:%d / %d = \n",y,num1,num2);
				}
			     fclose(fb);
			     fclose(fp);
				 break;
		}
	}
	if(num==2)
	{
		if(signal2=='x'&&signal1!='/')
		{
			int ans1;
			ans1=num2*num3;
			switch(signal1)
		    {
		    	case '+':
		    		ans=num1+ans1;
		    	    fprintf(fp,"答案%d:%d\n",y,ans);
		    	    fclose(fp);
					fprintf(fb,"题目%d:%d + %d x %d = \n",y,num1,num2,num3);
					fclose(fb);
					break;
		    	case '-':
		    		do{
		    		num1=random(r);
                    num2=random(r);
                    num3=random(r);
					}while(num1-num2*num3<0);
					ans=num1-num2*num3;
					fprintf(fp,"答案%d:%d\n",y,ans);
		    	    fclose(fp);
		    	    fprintf(fb,"题目%d:%d - %d x %d = \n",y,num1,num2,num3);
		    	    fclose(fb);
		    		break;
		    	case 'x':
		    		ans=num1*ans1;
		    	    fprintf(fp,"答案%d:%d\n",y,ans);
		    	    fclose(fp);
		    	    fprintf(fb,"题目%d:%d x %d x %d = \n",y,num1,num2,num3);
		    	    fclose(fb);
					break;
		    }
		}
		else
		if(signal2=='/'&&signal1!='/')
		{
			int ans1,ans2;
			c=0;
			a=gcd(num2,num3);
			ans1=num2/a;
			ans2=num3/a;
			while(ans1>ans2)
			{
				ans1=ans1-ans2;
				c++;
			}
			switch(signal1)
		    {
		    	case '+':
		    		c=num1+c;
		    	    fprintf(fp,"答案%d:%d'%d/%d\n",y,c,ans1,ans2);
		    	    fprintf(fb,"题目%d:%d + %d / %d = \n",y,num1,num2,num3);
		    	    fclose(fb);
		    	    fclose(fp);
					break;
		    	case '-':
		    		do{
		    		num1=random(r);
                    num2=random(r);
                    num3=random(r);
					}while((num1-num2/num3)<0||num3==0);
		    	    	c=num1-c;
		    	    	fprintf(fp,"答案%d:%d'%d/%d\n",y,c,ans1,ans2);
		    	        fclose(fp);
		    	        fprintf(fb,"题目%d:%d - %d / %d = \n",y,num1,num2,num3);
		    	        fclose(fb);
		    	    break;
		    	case 'x':
		    		int ans1;
		    		c=0;
					ans1=num1*num2;
		    		a=gcd(ans1,num3);
		    		ans1=ans1/a;
		    		ans2=num3/a;
		    		while(ans1>ans2)
		    		{
		    			ans1=ans1-ans2;
		    			c++;
					}
		    	    fprintf(fp,"答案%d:%d'%d/%d\n",y,c,ans1,ans2);
		    	    fclose(fp);
					fprintf(fb,"题目%d:%d x %d / %d = \n",y,num1,num2,num3);
		    	    fclose(fb);
					break;
		    }
		}
	    if(signal1=='/')
	    {
	    	int ans1,ans2;
	    	c=0;
	    	switch(signal2)
	    	{
	    		case '+':
	    			a=gcd(num1,num2);
	    			ans1=num1/a;
	    			ans2=num2/a;
	    			c=0;
	    			while(ans1>ans2)
	    			{
	    				ans1=ans1-ans2;
	    				c++;
					}
					c=c+num3;
					fprintf(fp,"答案%d:%d'%d/%d\n",y,c,ans1,ans2);
					fclose(fp);
					fprintf(fb,"题目%d:%d %c %d %c %d = \n",y,num1,signal1,num2,signal2,num3);
		    	    fclose(fb);
					break;
				case '-':
					a=gcd(num1,num2);
	    			ans1=num1/a;
	    			ans2=num2/a;
	    			c=0;
	    			while(ans1>ans2)
	    			{
	    				ans1=ans1-ans2;
	    				c++;
					}
					do{
						num3=random(r);
					}while(c>=num3);
		              if(c==num3)
					{
						fprintf(fp,"答案%d:%d/%d\n",y,ans1,ans2);
						fclose(fp);
						fprintf(fb,"题目%d:%d %c %d %c %d = \n",y,num1,signal1,num2,signal2,num3);
		    	        fclose(fb);
					}
					else if(c>num3)
					{
						c=c-num3;
						fprintf(fp,"答案%d:%d'%d/%d\n",y,c,ans1,ans2);
						fclose(fp);
						fprintf(fb,"题目%d:%d %c %d %c %d = \n",y,num1,signal1,num2,signal2,num3);
		    	        fclose(fb);
					}break;
				case 'x':
					ans1=num1*num3;
					a=gcd(ans1,num2);
					ans1=ans1/a;
					ans2=num2/a;
					c=0;
					while(ans1>ans2)
	    			{
	    				ans1=ans1-ans2;
	    				c++;
					}
					fprintf(fp,"答案%d:%d'%d/%d\n",y,c,ans1,ans2);
					fclose(fp);
					fprintf(fb,"题目%d:%d %c %d %c %d = \n",y,num1,signal1,num2,signal2,num3);
		    	    fclose(fb);
					break;
				case '/':
					ans2=num2*num3;
					a=gcd(num1,ans2);
					ans1=num1/a;
					ans2=ans2/a;
					c=0;
					while(ans1>ans2)
	    			{
	    				ans1=ans1-ans2;
	    				c++;
					}
					fprintf(fp,"答案%d:%d'%d/%d\n",y,c,ans1,ans2);
					fclose(fp);
					fprintf(fb,"题目%d:%d %c %d %c %d = \n",y,num1,signal1,num2,signal2,num3);
		    	    fclose(fb);
					break;
			}
		}
		else
		if(signal1=='+')
	    {
	    	int ans1,ans2;
	    	c=0;
	    	switch(signal2)
    		{
	    		case '+':
	    			ans=num1+num2+num3;
	    		    fprintf(fp,"答案%d:%d\n",y,ans);
	    		    fclose(fp);
	    		    fprintf(fb,"题目%d:%d %c %d %c %d = \n",y,num1,signal1,num2,signal2,num3);
		    	    fclose(fb);
					break;
    			case '-':
    				do
    				{
    					num1=random(r);
    					num2=random(r);
    					num3=random(r);
					}while(num1+num2<num3);
    				ans=num1+num2-num3;
						fprintf(fp,"答案%d:%d\n",y,ans);
	    		        fclose(fp);
	    		        fprintf(fb,"题目%d:%d %c %d %c %d = \n",y,num1,signal1,num2,signal2,num3);
		    	        fclose(fb);
					break;
	    	}
	    }
	    else
	    if(signal1=='-')
	    {
	    	switch(signal2)
    		{
	    		case '+':
	    			if(num1<num2)
	    			{
	    				t=num1;
	    				num1=num2;
	    				num2=t;
					}
	    				ans=num1-num2+num3;
	    		        fprintf(fp,"答案%d:%d\n",y,ans);
	    		        fclose(fp);
	    		        fprintf(fb,"题目%d:%d %c %d %c %d = \n",y,num1,signal1,num2,signal2,num3);
		    	        fclose(fb);
					break;	
    			case '-':
    				do
    				{
    					num1=random(r);
    					num2=random(r);
    					num3=random(r);
					}while(num1<num2+num3);
    					ans=num1-num2-num3;
	    		        fprintf(fp,"答案%d:%d\n",y,ans);
	    		        fclose(fp);
	    		        fprintf(fb,"题目%d:%d - %d - %d = \n",y,num1,num2,num3);
		    	        fclose(fb);
					break;
	    	}
		}
		else
		if(signal1=='x')
		{
			switch(signal2)
    		{
	    		case '+':
	    			ans=num1*num2+num3;
	    		    fprintf(fp,"答案%d:%d\n",y,ans);
	    		    fclose(fp);
	    		    fprintf(fb,"题目%d:%d x %d + %d = \n",y,num1,num2,num3);
		    	    fclose(fb);
					break;
    			case '-':
    				do
    				{
    					num1=random(r);
    					num2=random(r);
    					num3=random(r);
					}while(num1*num2<num3);
    					ans=num1*num2-num3;
	    		        fprintf(fp,"答案%d:%d\n",y,ans);
	    		        fclose(fp);
	    		        fprintf(fb,"题目%d:%d x %d - %d = \n",y,num1,num2,num3);
		    	        fclose(fb);
					break;
	    	}
		}
	}
	return 0;
}
  1. 测试运行


6.项目小结
通过这次作业,第一次知道控制时间复杂度的重要性,要生成这么多题目,如果时间复杂度过高,则效率很低。更应该多去应用效率高的算法。

标签:fp,结对,num1,num2,项目,ans1,ans2,fb
From: https://www.cnblogs.com/wang11201/p/18438441

相关文章

  • 结对项目
    这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/CSGrade22-34这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13230这个作业的目标<结对完成实现一个自动生成小学四则运算题目的命令行程序>项目成员李响3121002802......
  • 结对项目
    结对编程:小学四则运算这个作业属于哪个课程软件工程课程这个作业要求在哪里个人项目-作业-计科22级34班-班级博客-博客园(cnblogs.com)这个作业的目标成员一迪力拜尔3222004889成员二坤杜孜阿依3222004768github链接 https://github.com/......
  • 黑马PM-内容项目-产品生产发布
    产品生产发布流程项目管理产品需求评审......
  • 结对项目
    这个作业属于哪个课程22级计科2班这个作业要求在哪里作业要求这个作业目标实现一个自动生成小学四则运算题目的命令行程序(也可以用图像界面,具有相似功能)。Github地址:https://github.com/JiangJiazhe/PairWork/tree/main项目设计函数功能main模块:设置mai......
  • 结对项目——四则运算
    结对项目——四则运算这个作业属于哪个课程软工22级计科12班这个作业的要求在哪里作业要求这个作业的目标实现四则运算的结对编程项目成员姓名学号GitHub链接分工谭立业3122004365github项目功能的基本实现,博客的编写罗锴佳3122001905gith......
  • 结对项目
    成员姓名学号李心怡3222004336郑梦瀚3222004340作业这个作业属于哪个课程班级链接这个作业要求在哪里作业链接这个作业的目标二人合作实现一个自动生成小学四则运算题目的命令行程序Github链接:点击此处PSP表格PSP2.1PersonalSoftwar......
  • 结对项目
    这个作业属于哪个课程计科22级12班这个作业要求在哪里作业要求这个作业的目标实现一个自动生成小学四则运算题目的命令行程序姓名&学号:姓名学号董雯霖3122004780陈金星3122004774GitHub链接:https://github.com/1534063091/Arithmometer一......
  • 结对项目
    这个作业属于哪个课程计科2班这个作业要求在哪里作业要求这个作业的目标<要求实现一个自动生成小学四则运算题目的命令行程序>[作业地址](https://github.com/cr1017/3122004813)一、时间预估及实际花费时间PSP表格PSP2.1PersonalSoftwareProcessS......
  • 结对项目
    这个作业属于哪个课程课程这个作业的要求在哪里结对项目这个作业的目标实现一个自动生成小学四则运算题目的命令行程序一、合作成员项目成员学号github仓库地址黄锐3222004335github王伊若3222004382PSP2.1PersonalSoftwareProcess......
  • 结对项目
    这个作业属于哪个课程https://edu.cnblogs.com/campus/gdgy/CSGrade22-34这个作业要求在哪里https://edu.cnblogs.com/campus/gdgy/CSGrade22-34/homework/13230这个作业的目标组队编程实现四则运算的项目组队成员阿依古再丽(3222004721)、张汉洁(3222004598)这......