四则运算题目生成程序

博客班级 https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/
作业要求 https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11377
作业目标 能对需求进行分析并实现;编码格式规范;学习博客撰写
学号 3180701341

题目要求

写一个能自动生成小学四则运算题目的程序,然后在此基础上扩展:

1)除了整数以外,还要支持真分数的四则运算,例如:1/6+1/8=7/24

2)程序要求能处理用户的输入,判断对错,累积分数

3)程序支持可以由用户自行选择加、减、乘、除运算

4)使用-n参数控制生成题目的个数,例如Myapp.exe -n 10,将生成10个题目

代码提交

include <stdio.h>

include <stdlib.h>

//函数原型
int getChoice();
void showMenu();
void doExercise(int);
int test(int);

选择界面
`int getChoice()
{
int choice;
scanf("%d",&choice);
return choice;
}

/*
功能:显示功能的菜单
*/

void showMenu()
{
printf("=\n");
printf("\n欢迎使用小学生四则运算练习软件\n");
printf("\t1、加法练习\t2、减法练习\n");
printf("\t3、乘法练习\t4、除法练习\n");
printf("\t5、综合练习\t0、退出系统\n");
printf("请输入你的选择(0--5):\n");
printf("\n
=\n");
}`

计分器
`void doExercise(int n)
{
int score=0; //练习得分,初始化为0
int i=0; //练习题数的计数器

for(i=1;i<=10;i++)
{
	score=score+test(n);		//间接递归调用test(n)
}
printf("本次练习十道题,你做对了%d道\n",score);

}`

进行一道题的测试过程
`int test(int n)
{
int ranswer=0; //正确答案
int uanswer=0; //用户输入的答案
int t=0; //临时变量
char operation; //运算类别
int num1=0; //操作数1
int num2=0; //操作数2

srand(time(NULL));		//初始化随机数种子
num1=rand()%10;			//取0—9之间的随机数
num2=rand()%10;

//进入程序功能,如果选择5就随机产生1-4所代表的每一种运算方式
if(n==5)
{
	n=rand()%4+1;
}

switch(n)
{
	case 1:
		operation='+';
		break;

	case 2:
		operation='-';
		break;

	case 3:
		operation='*';
		break;

	case 4:
		operation='/';
		break;
}

//加入一条防止“不够减”的语句,当选择减法且num1小于num2时不够减
//不够减的时候,用临时变量交换两个操作数
if((operation=='-') && (num1<num2))
{
t=num1;
num1=num2;
num2=t;
}

//防止“除数为0”的程序漏洞
//当num2被随机取值到0时,就将num2强制置为1
//做除法时,将num1的值强制赋值给num1num2,防止不能整除
if(operation'/')
{
if(num2
0)
{
num2=1;
}
num1=num1
num2; //防止num1不能被num2整除的语句
}

//输出测试题本身、提示用户输入
printf("%d%c%d= ",num1,operation,num2);
scanf("%d",&uanswer);

//程序计算正确结果
switch(operation)
{
case '+':
ranswer=num1+num2;
break;

	case '-':
	ranswer=num1-num2;
	break;

	case '*':
	ranswer=num1*num2;
	break;

	case '/':
	ranswer=num1/num2;
	break;
}

//评判,做对返回1,做错返回0
if(uanswer==ranswer)
{
printf("做对了!\n");
return 1;
}
else
{
printf("做错了!\n");
return 0;
}
}
主函数int main(void)
{
int choice=0; //接收用户的选择

//循环开始功能,本次用do……while循环
do
{
	showMenu();				//显示菜单
	choice=getChoice();		

	//控制choice的范围
	if(choice<0 || choice>5)
	{
		choice=1;			//强制做加法
	}
	if(choice==0)
	{
		break;					//用户选择0,退出循环(退出系统)
	}

	doExercise(choice);		//做什么练习,并启动评分
}while(choice!=0);

printf("欢迎使用本软件,再见!\n");
return 0;

}`

个人总结
熟悉了如何使用markdown来撰写博客,掌握了一些基本的使用方法,平时会在这方面多加练习。

填写PSP表格如下:

psp2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min)
Planning 计划 10 15
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 6 6
Development 开发 120 120
Analysis 需求分析(包括学习新技术) 10 10
Design Spec 生成设计文档 20 20
Design Review 设计复审 5 10
Coding Standard 代码规范 5 8
Design 具体设计 15 22
Coding 具体编码 40 35
Code Review 代码复审 5 4
Test 测试(自我测试,修改代码,提交修改) 20 15
Reporting 报告 10 10
Test Report 测试报告 2 3
Size Measurement 计算工作量 3 3
Postmortem & Process improvement Plan 事后总结,并提出过程改进计划 4 4
posted @ 2020-11-08 14:53  挽歌丶流年  阅读(122)  评论(0)    收藏  举报