• 个人作业——四则运算题目生成程序


    个人作业——四则运算题目生成程序

    一、作业信息

    作业课程 软件工程
    作业要求 作业要求
    作业目标 能对需求进行分析并实现;编码格式规范;学习博客撰写
    学号 3180205402

    二、作业要求

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

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

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

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

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

    三、代码提交

    1.代码结构

    ①加法整/分数运算函数

    void add_oper()
    {
    	 int a,b,c,q;
    	 q=rand()%2;//随机选择整数或分数进行运算
    	 if(q == 1)
    	 {
    		 a=rand()%100;
    		 b=rand()%100;
    		 printf("请回答:
    		 %d + %d = ",a,b);
    		 scanf("%d",&c);
    		 if(a+b==c)
    		 {
    		  	printf("回答正确!
    ");
    		  	r++;
    		 }
    		 else
    		 {
    		  	printf("回答错误!
    ");
    		  	w++;
    		 }
    	}
    	else
    	{
    		int nume_1, deno_1, nume_2, deno_2;
    		//↑第一个数的分子分母和第二个数的分子分母
    		int nume_s, deno_s;
    		//↑存储计算机计算出的答案分子分母
    		int i, len;//len存储输入字符长度 
    		int nume=0;
    		int deno=0;//存储用户输入的分子分母
    		char sum[DIGIT];//存储用户输入字符串
    		 
    		deno_1=rand()%100+1;
    		nume_1=rand()%deno_1;
    		deno_2=rand()%100+1;
    		nume_2=rand()%deno_2;
    		printf("%d/%d+%d/%d= 
    ",nume_1,deno_1,nume_2,deno_2);
    		//真分数分母要比分子大且分母不能为0;
    		
    		nume_s=(nume_1*deno_2)+(nume_2*deno_1);
    		deno_s=deno_1*deno_2;
    		//↑计算真分数相加的结果 
    		
    		scanf("%s", sum);
    		len = strlen(sum);
    //		for(i=0; i<len; i++)
    //		{
    //			printf("%c", sum[i]);
    //
    //		}
    		
    		int flag=0;
    		for(i=0; i<len; i++)//将输入的字符型答案转换成整形的分子分母 
    		{	
    			if(sum[i] != '/')
    			{
    				int i_sum = sum[i] - '0';//将char型转换为int型
    			//	printf("
    i_sum=%d",i_sum);
    				if(flag == 0){
    					nume *= 10;
    					nume += i_sum; 
    				}
    				if(flag == 1){
    					deno *= 10;
    					deno += i_sum;
    				}
    			}
    			
    			else if(sum[i] == '/')
    			{
    			//	printf("
    /");
    				flag = 1;
    			}
    		}
    		
    		if(nume == nume_s && deno == deno_s)
    		{
    		//	printf("转换后的结果 %d/%d", nume, deno); 
    			printf("答案正确!"); 
    			r++;
    		}
    		else
    		{
    		//	printf("转换后的结果 %d/%d", nume, deno); 
    			printf("答案错误!"); 
    			w++;
    		}
    
    	}
    	
    }
    

    ②减法整/分数运算函数

    void sub_oper()
    {
    	 int a,b,c,q;
    	 q=rand()%2;
    	 if(q == 0)
    	 {
    		 a=rand()%100;
    		 b=rand()%100;
    		 printf("请回答:
    		 %d - %d = ",a,b);
    		 scanf("%d",&c);
    		 if(a-b==c)
    		 {
    		 	 printf("回答正确!
    ");
    		 	 r++;
    		 }
    		 else
    		 {
    			 printf("回答错误!
    ");
    		 	 w++;
    		 }
    	 }
    	 else
    	 {
    	 	int nume_1, deno_1, nume_2, deno_2;
    		//↑第一个数的分子分母和第二个数的分子分母
    		int nume_s, deno_s;
    		//↑存储计算机计算出的答案分子分母
    		int i, len;//len存储输入字符长度 
    		int nume=0;
    		int deno=0;//存储用户输入的分子分母
    		char sum[DIGIT];//存储用户输入字符串
    		 
    		deno_1=rand()%100+1;
    		nume_1=rand()%deno_1;
    		deno_2=rand()%100+1;
    		nume_2=rand()%deno_2;
    		printf("%d/%d-%d/%d= 
    ",nume_1,deno_1,nume_2,deno_2);
    		//真分数分母要比分子大且分母不能为0;
    		nume_s=(nume_1*deno_2)-(nume_2*deno_1);
    		deno_s=deno_1*deno_2;
    		//↑计算真分数相减的结果 
    		scanf("%s", sum);
    		len = strlen(sum);
    		
    		int flag=0;//判断比值符 
    		int sign=0;//判断正负符号 
    		for(i=0; i<len; i++)//将输入的字符型答案转换成整形的分子分母 
    		{	
    			if(sum[i] != '/' && sum[i] != '-')
    			{
    				int i_sum = sum[i] - '0';//将char型转换为int型
    				if(flag == 0){
    					nume *= 10;
    					nume += i_sum; 
    				}
    				if(flag == 1){
    					deno *= 10;
    					deno += i_sum;
    				}
    			}
    			
    			else if(sum[i] == '/')
    			{
    				flag = 1;
    			}
    			else if(sum[i] == '-') 
    			{
    				sign = 1;//说明用户输入的结果是负数 
    			}
    		}
    		
    		if(nume_s > 0 && nume == nume_s && deno == deno_s)
    		{
    			printf("答案正确!");
    			r++; 
    		}
    		else if(nume_s < 0 && nume == -nume_s && deno == deno_s && sign == 1)
    		{
    			printf("答案正确!"); 
    			r++;
    		}
    		else
    		{
    			printf("答案错误!"); 
    			w++;
    		} 
    		 
    	
    	 }
    	 
    }
    

    ③乘法整/分数运算函数

    void mul_oper()
    {
    	 int a,b,c,q;
    	 q=rand()%2;
    	 if(q == 0)
    	 {
    		 a=rand()%100;
    		 b=rand()%100;
    		 printf("请回答:
    		 %d * %d = ",a,b);
    		 scanf("%d",&c);
    		 if(a*b==c)
    		 {
    		  	printf("回答正确!
    ");
    		  	r++;
    		 }
    		 else
    		 {
    		  	printf("回答错误!
    ");
    		  	w++;
    		 }
    	 }
    	 else
    	 {
    	 	int nume_1, deno_1, nume_2, deno_2;
    		//↑第一个数的分子分母和第二个数的分子分母
    		int nume_s, deno_s;
    		//↑存储计算机计算出的答案分子分母
    		int i, len;//len存储输入字符长度 
    		int nume=0;
    		int deno=0;//存储用户输入的分子分母
    		char sum[DIGIT];//存储用户输入字符串
    		
    		deno_1=rand()%100+1;
    		nume_1=rand()%deno_1;
    		deno_2=rand()%100+1;
    		nume_2=rand()%deno_2;
    		printf("%d/%d*%d/%d= 
    ",nume_1,deno_1,nume_2,deno_2);
    		//真分数分母要比分子大且分母不能为0;
    		nume_s=nume_1*nume_2;
    		deno_s=deno_1*deno_2;
    //		printf("%d * %d", nume_s, deno_s);
    		//↑计算真分数相乘的结果 
    		scanf("%s", sum);
    		len = strlen(sum);
    		
    		int flag=0;//判断比值符  
    		for(i=0; i<len; i++)//将输入的字符型答案转换成整形的分子分母 
    		{	
    			if(sum[i] != '/')
    			{
    				int i_sum = sum[i] - '0';//将char型转换为int型
    				if(flag == 0){
    					nume *= 10;
    					nume += i_sum; 
    				}
    				if(flag == 1){
    					deno *= 10;
    					deno += i_sum;
    				}
    			}
    			
    			else if(sum[i] == '/')
    			{
    				flag = 1;
    			}
    
    		}
    		
    		if(nume == nume_s && deno == deno_s && nume_s != 0)
    		{
    			printf("答案正确!");
    			r++; 
    		}
    		else if(nume == nume_s && nume_s == 0)
    		{
    			printf("答案正确!"); 
    			r++;
    		}
    		else
    		{ 
    //			printf("%d", nume);
    			printf("答案错误!"); 
    			w++;
    	 	}
    	 } 
    }
    

    ④除法整/分数运算函数

    void div_oper()
    {
    	 int a,b,c,q;
    	 q=rand()%2;
    	 if(q == 0)
    	 {	 
    		 a=rand()%100;
    		 b=rand()%100;
    		 printf("请回答:
    		 %d / %d = ",a,b);
    		 scanf("%d",&c);
    		 if(a/b==c)
    		 {
    		  	printf("回答正确!
    ");
    		 	r++;
    		 }
    		 else
    		 {
    		  	printf("回答错误!
    ");
    		  	w++;
    		 }
    	 }
    	 else
    	 {
    	 	int nume_1, deno_1, nume_2, deno_2;
    		//↑第一个数的分子分母和第二个数的分子分母
    		int nume_s, deno_s;
    		//↑存储计算机计算出的答案分子分母
    		int i, len;//len存储输入字符长度 
    		int nume=0;
    		int deno=0;//存储用户输入的分子分母
    		char sum[DIGIT];//存储用户输入字符串
    		
    		deno_1=rand()%100+1;
    		nume_1=rand()%deno_1;
    		deno_2=rand()%100+2;
    		nume_2=rand()%deno_2;//除数不能为零!!! 
    		printf("%d/%d ÷%d/%d= 
    ",nume_1,deno_1,nume_2,deno_2);
    		//真分数分母要比分子大且分母不能为0;
    		nume_s=nume_1*deno_2;
    		deno_s=deno_1*nume_2;
    //		printf("%d * %d", nume_s, deno_s);
    		//↑计算真分数相乘的结果 
    		scanf("%s", sum);
    		len = strlen(sum);
    		
    		int flag=0;//判断比值符 
    //		int sign=0;//判断正负符号 
    		for(i=0; i<len; i++)//将输入的字符型答案转换成整形的分子分母 
    		{	
    			if(sum[i] != '/')
    			{
    				int i_sum = sum[i] - '0';//将char型转换为int型
    				if(flag == 0){
    					nume *= 10;
    					nume += i_sum; 
    				}
    				if(flag == 1){
    					deno *= 10;
    					deno += i_sum;
    				}
    			}
    			
    			else if(sum[i] == '/')
    			{
    				flag = 1;
    			}
    
    		}
    		if(nume == nume_s && deno == deno_s && nume_s != 0)
    		{
    			printf("答案正确!");
    			r++; 
    		}
    		else if(nume == nume_s && nume_s == 0)
    		{
    			printf("答案正确!");
    			r++; 
    		}
    		else
    		{ 
    			printf("答案错误!"); 
    			w++;
    	 	}
    			 	
    	 }
    }
    

    ⑤头文件、宏定义、全局变量

    #include<stdio.h> 
    #include<math.h>
    #include<string.h>
    #include<windows.h>
    #define N 10 //出十道题 
    #define DIGIT 20 //用户输入答案数组的大小 
    int r = 0;//计数正确答题数 
    int w = 0;//计数错误答题数 
    void add_oper();//加法整/分数运算函数 
    void sub_oper();//减法整/分数运算函数 
    void mul_oper();//乘法整/分数运算函数 
    void div_oper();//除法整/分数运算函数 
    
    

    ⑥主函数

    int main()
    {
    	int sel_oper, flag=1;
    	int con = 0;
    	
    	printf("
    			欢迎进入简易四则运算
    
    ");
    
    	while(flag <= N)
    	{
    		printf("请选择:
    ");
    		printf("			  加法整/分数运算(请输入1)
    ");
    		printf("			  减法整/分数运算(请输入2)
    ");
    		printf("			  乘法整/分数运算(请输入3)
    ");
    		printf("			  除法整/分数运算(请输入4)
    ");
    		printf("			  退出整/分数运算(请输入5)
    ");
    //		sto = rand()%4;//随机生成四则运算选择数
    		if(con==0)
       		scanf("%d",&sel_oper);
    		switch(sel_oper)
    		{
    			case 1:
    				printf("第%d题:", flag);
    				add_oper();
    				flag++;
    				break;
    			case 2:
    				printf("第%d题:", flag);
    				sub_oper();
    				flag++;
    				break;
    			case 3:
    				printf("第%d题:", flag);
    				mul_oper();
    				flag++;
    				break;
    			case 4:
    				printf("第%d题:", flag);
    				div_oper();
    				flag++;
    				break;
    			case 5:
    				return;
    		}
    		printf("
    			继续运算?(请输入1)
    ");
    		printf("
    			重新选择?(请输入2)
    ");
    		printf("
    			退出运算?(请输入3)
    ");
    		scanf("%d",&con);
    		if(con==1)
    			con=1;
    		else if(con==2)
    		   con=0;
    		else if(con==3)
    		   break;
    		else
    		   printf("抱歉!,你输入的指令有误!请重新输入!
    ");
    	}
    	printf("您总共完成了 %d 道题
    正确 %d 道
    错误 %d 道
    ",r+w,r,w);
    	return 0;
    }
    
    
    

    2.运行截图

    整数加法

    分数加法

    整数减法

    分数减法

    整数乘法

    分数乘法

    整数除法

    分数除法

    四、个人小结

    psp2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min)
    Planning 计划 10 30
    Estimate 估计这个任务需要多少时间,并规划大致工作步骤 5 10
    Development 开发 120 360
    Analysis 需求分析(包括学习新技术 10 30
    Design Spec 生成设计文档 15 40
    Design Review 设计复审 5 5
    Coding Standard 代码规范 3 3
    Design 具体设计 10 50
    Coding 具体编码 100 300
    Code Review 代码复审 5 10
    Test 测试(自我测试,修改代码,提交修改) 10 10
    Reporting 报告 10 10
    Test Report 测试报告
    Size Measurement 计算工作量 3 3
    Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 3 3
  • 相关阅读:
    jsp自定义标签
    用javascript获取屏幕高度和宽度等信息
    解决document.location.href下载文件时中文乱码
    centos7下的ifconfig命令未安装
    vmstat命令
    FPM打包工具使用
    nmap的使用
    检测硬件RDMA卡是否存在
    RDMA卡的检测方法
    硬件RDMA的驱动配置和测试
  • 原文地址:https://www.cnblogs.com/ms841952238/p/13921718.html
Copyright © 2020-2023  润新知