包小琪

导航

小学四则运算

一、作业信息

这个作业属于哪个课程 https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18
这个作业要求在哪里 https://edu.cnblogs.com/campus/ahgc/AHPU-se-JSJ18/homework/11377
这个作业的目标 能对需求进行分析并实现;编码格式规范;学习博客撰写
学号 3180701308

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

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

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

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

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

三、代码提交与运行截图
1、

#include <stdio.h>
#include <stdlib.h>
//函数原型int getChoice();void showMenu();void doExercise(int);int test(int);
/*	功能:用户选择功能	返回:用户的功能选择	1、加法		2、减法		3、乘法		4、除法		0、退出*/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的值强制赋值给num1*num2,防止不能整除
	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;}

2、运行截图
(1)、加法

(2)、减法

(3)、乘法

(4)、除法

四、个人小结
在这次的实验中,出现的问题很多,当一个程序写完以后,经常会有很多错误而没法解决。通过询问同学之后,修改了很多错误,有些是因为自己的粗心导致的,比较懊恼。在这一次的实验中,也看到了自己的很多不足,存在的很多问题,没有很好的思维逻辑,有种无法下手的感觉。

(psp表格)

psp2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min)
Planning 计划 250 150
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 100 50
Development 开发 150 200
Analysis 需求分析(包括学习新技术) 20 15
Design Spec 生成设计文档 20 20
Design Review 设计复审 15 10
Coding Standard 代码规范 10 10
Design 具体设计 180 200
Coding 具体编码 40 45
Code Review 代码复审 20 40
Test 测试(自我测试,修改代码,提交修改) 60 85
Reporting 报告 20 40
Test Report 测试报告 10 10
Size Measurement 计算工作量 20 20
Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 20 20

posted on 2020-11-07 23:13  包琪  阅读(111)  评论(0编辑  收藏  举报