首页 > 代码库 > 个人作业1:小学四则运算——基于控制台

个人作业1:小学四则运算——基于控制台

源代码地址:http://git.oschina.net/junge212/25eubiqm170p3nzgj4yrh36.code.git

a.需求分析:

  自动生成小学四则运算题目的命令行 “软件”,满足以下需求:   

    1. 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
    2. 运算符为 +, ?, ×, ÷
    3. 并且要求能处理用户的输入,并判断对错,打分统计正确率。
    4. 要求能处理用户输入的真分数, 如 1/2, 5/12 等
    5. 使用 -n 参数控制生成题目的个数,例如执行下面命令将生成10个题目
      Myapp.exe -n 10

b.功能设计:

  能随机生成整数0~10的四则运算和真分数的四则运算,并统计正确率

c.设计实现:

  本程序分为主函数和三个分函数,主函数main()主要实现随机调用两个分函数zhengshu()和fenshu()并统计正确率,三个分函数分别为处理0~10的整数四则运算和处理真分数的分数四则运算函数;整数函数zhengshu()主要随机产生两个随机数和随机运算符并计算;分数函数fenshu()主要随机产生两个随机数和随机运算符并调用第三个分函数gcd()进行计算。

d.代码说明:

具体代码:

#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#include "string.h"
int score=0;
int gcd(int x,int y) //求最大公约数函数	
{
	int r;
	r=x%y;
   	while(r!=0)
   	{
   		x=y;
   		y=r;
   		r=x%y;
   	}
   	return y;
} 
int zhengshu(){//求整数的四则运算 
	int left,mid,right,result,int_number;
	srand((unsigned)time(NULL));
	left=rand()%10;
	mid=rand()%4;
	right=rand()%10;
	printf("%d",left);
	switch(mid)
	{
		case(0):result=left+right;
		printf(" + ");break;
		case(1):result=left-right;	
		printf(" - ");break;
		case(2):result=left*right;
		printf(" ×");break;
		case(3):result=left/right;
		printf(" ÷");break;
	}
	printf("%d =",right);
	scanf("%d",&int_number);
	if(int_number == result)
		{
			printf("回答正确!    下一题:\n");
			score=score+1;	
		}
	else{
			printf("回答错误!    下一题:\n");
		}
}

int fenshu(){//求分数的四则运算 
	int left_x,left_y,mid,right_x,right_y,x,y,GYS,int_number1,int_number2;
	srand((unsigned)time(NULL));
	do{
	left_x=rand()%10+1;
	left_y=rand()%10+1;
	mid=rand()%4;
	right_x=rand()%10+1;
	right_y=rand()%10+1;
	}while(!(left_x<left_y&&right_x<right_y));
	printf("%d/%d",left_x,left_y);
		switch(mid)
		{
			case(0):x=left_x*right_y+left_y*right_x;
					y=left_y*right_y;
			printf(" + ");break;
			case(1):x=left_x*right_y-left_y*right_x;
					y=left_y*right_y;	
			printf(" - ");break;
			case(2):x=left_x*right_x;
					y=left_y*right_y;
			printf(" ×");break;
			case(3):x=left_x*right_y;
					y=left_y*right_x;
			printf(" ÷");break;
		}
		printf("%d/%d =",right_x,right_y);
	GYS=gcd(x,y);
	x=x/GYS;
	y=y/GYS;
	scanf("%d/%d",&int_number1,&int_number2);
	if(int_number1==x&&int_number2==y)
	{
		printf("回答正确!    下一题:\n");
		score=score+1;	
	}
	else{
		printf("回答错误!    下一题:\n");
	}
}
int main(){//主函数——随机调用整数函数和分数函数 
	int h,count;
	printf("请输入题目数?");
	scanf("%d",&count);
	for(int i=0;i<count;i++)
	{
		h=rand()%2;
		if(h==0)
		{zhengshu();}
		else
		{fenshu();}
	}
	printf("正确率为:%lf",score*1.0/count);
}

实验截图:

技术分享

psp:

PSP2.1 Personal Software Process Stages Time (m) Senior Student Time (m)
Planning 计划 8 10
· Estimate 估计这个任务需要多少时间 8 10
Development 开发 82 100
· Analysis 需求分析 (包括学习新技术) 6 6
· Design Spec 生成设计文档 5 7
· Design Review 设计复审 4 6
· Coding Standard 代码规范 3 2
· Design 具体设计 10 20
· Coding 具体编码 36 20
· Code Review 代码复审 7 7
· Test 测试(自我测试,修改代码,提交修改) 13 30
Reporting 报告 9 5
· 测试报告 3 3
· 计算工作量 2 2
· 并提出过程改进计划 3 1

e.小结

这次实验真是历经千辛万苦:(不过也总算基本成功了,感谢编写代码时多位同学的耐心指导;该程序还是有缺陷,没能实现显示正确答案,程序存在异常错误,可能存在程序崩溃:)

 

个人作业1:小学四则运算——基于控制台