• 四则运算



    博客班级 AHPU软件工程
    作业要求 四则运算
    作业目标
    学号 3180110234

    作业目标

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

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

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

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

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

    代码

    存储结构

    typedef struct {
    	int num;//分子 
    	int demo;//分母 
    }Factions; 
    
    //题目个数 
    int n=10;
    //整数题目  Integet[i][0]、Integet[i][1]、Integet[i][3] 分别存储第i题的两个运算数和运算结果 
    float Integet[M][3];
    //分数题目  Faction[i][0]、Faction[i][1]、Faction[i][3] 分别存储第i题的两个运算数和运算结果
    Factions Faction[M][3]; 
    //总分
    int score=0;
    
    

    产生随机数

    int produre(char ch)//生成题目 
    {
    	int i,j;
    	srand((unsigned)time(NULL));	
            for(i=0;i<=n/2;i++)	//前n/2题为整数题 
    	   {  
    	      Integet[i][1]=rand()%100+1; 
    		  Integet[i][0]=rand()%100+1+Integet[i][1]; 
    	   }
            int a=n-i;
    	for(j=0;j<a;j++)//后n/2题为分数题 
    	{
    		Faction[j][0].num =rand()%9+1;
    		Faction[j][0].demo=rand()%9+Faction[j][0].num+1;	
    		Faction[j][1].num =rand()%9+1; 
    	    Faction[j][1].demo =rand()%9+Faction[j][1].num+1;
    	}
    }
    

    四舍五入

    float sw(float b)
    {
    	b=b*100;//保留一位小数,乘10,两位乘100,以此类推; 
    	b=b+0.5;
    	b=(int)b;//向上取整 
    	b=b/100;//同 乘 ; 
    	return b;
    } 
    

    约分

    int yf(int demo,int num,int j) 
    { 
    	int a = abs(demo);
    	int b = abs(num);
    	int t;
    	while(b != 0){
    		t = a%b;
    		a = b;
    		b = t;
        }
    	Faction[j][2].demo=demo/a;
    	Faction[j][2].num=num/a;
    }
    

    加法

    int add()
    {
    	int i,j,a;
    	for(i=0;i<=n/2;i++)
    	  Integet[i][2]=Integet[i][0]+Integet[i][1];
    	a=n-i; 
    	for(j=0;j<a;j++)
    	  { Faction[j][2].demo=Faction[j][0].demo*Faction[j][1].demo;
    	    Faction[j][2].num=Faction[j][0].num*Faction[j][1].demo+Faction[j][1].num*Faction[j][0].demo;
    	    yf(Faction[j][2].demo,Faction[j][2].num,j);
    	  } 
    }
    

    减法

    int sub(){
    	int i,j,a;
    	for(i=0;i<=n/2;i++)
    	  Integet[i][2]=Integet[i][0]-Integet[i][1];
    	a=n-i; 
    	for(j=0;j<a;j++)
    	  { Faction[j][2].demo=Faction[j][0].demo*Faction[j][1].demo;
    	    Faction[j][2].num=Faction[j][0].num*Faction[j][1].demo-Faction[j][1].num*Faction[j][0].demo;
    	    yf(Faction[j][2].demo,Faction[j][2].num,j);
    	  } 
    }
    

    乘法

    int mul(){
    	int i,j,a;
    	for(i=0;i<=n/2;i++)
    	  Integet[i][2]=Integet[i][0]*Integet[i][1];
    	a=n-i; 
    	for(j=0;j<a;j++)
    	  { Faction[j][2].demo=Faction[j][0].demo*Faction[j][1].demo;
    	    Faction[j][2].num=Faction[j][0].num*Faction[j][1].num;
    	    yf(Faction[j][2].demo,Faction[j][2].num,j);
    	  } 
    	  
    } 
    

    除法

    int div(){
    	int i,j,a;
    	for(i=0;i<=n/2;i++)
    	  {
    	   Integet[i][2]=Integet[i][0]/Integet[i][1];
    	   Integet[i][2]=sw(Integet[i][2]);//四舍五入、保留小数 
    	  }
    	a=n-i; 
    	for(j=0;j<a;j++)
    	  { Faction[j][2].demo=Faction[j][0].demo*Faction[j][1].num;
    	    Faction[j][2].num=Faction[j][0].num*Faction[j][1].demo;
    	    yf(Faction[j][2].demo,Faction[j][2].num,j);
    	  } 
    }
    

    答题并判断正确

    int ask(char ch)
    {
    	printf("
    
    请答题:
    ");
        int i,j,a;
         
    	for(i=0;i<=n/2;i++)
    	  {
    	   printf("(%d),%.0f %c %.0f = ",i+1,Integet[i][0],ch,Integet[i][1]);
    	   float answer;
    	   scanf("%f",&answer);
    	   if(answer==Integet[i][2])
    	     {score+=1;//回答正确分值加1
    	      printf("正确
    
    ");
    	     }
    	   else
    	    {
    	    	printf("错误
    ");
    	    	printf("正确答案为%.2f
    
    ",Integet[i][2]); 
    		}
    	  }   
    	a=n-i; 
    	for(j=0;j<a;j++){ 
    		printf("(%d),%d/%d %c %d/%d = ",j+i+1,
    		Faction[j][0].num,Faction[j][0].demo,ch,
    		Faction[j][1].num,Faction[j][1].demo);
    		char a2[10],a1[10],answerz[100]; 
    	    itoa(Faction[j][2].demo,a2,10);
    	    itoa(Faction[j][2].num,a1,10);
    	    char a3[2]="/";
    	    strcat(a1,a3);
    		strcat(a1,a2);
    		char answer[20];
    	   scanf("%s",&answer);
    	   if(strcmp(answer,a1)==0)
    	     {score+=1;//回答正确分值加1
    		 printf("正确
    
    "); 
    		 }
    	   else
    	    {
    	    	printf("错误
    ");
    	    	printf("正确答案为%s
    
    ",a1); 
    		}
    	}
    	printf("
    
    得分:%d
    ",score);
    } 
    

    选择运算方式菜单

    int menu(){
    	start1: 
    	printf("
    
    	*****小学四则运算****
    
    "); 
    	printf("
    
    		1.加法
    ");
    	printf("
    
    		2.减法
    ");
    	printf("
    
    		3.乘法
    ");
    	printf("
    
    		4.除法
    "); 
    	printf("
    
    		0.退出
    "); 
    	printf("
    
    	请选择运算运算方式:");
    	char ch;
    	while(1){
    		fflush(stdin);
       		scanf("%d",&ch);
    		fflush(stdin);
    		switch(ch)
    		{
    		    case 1:	
    				system("cls");
    				produre('+');
    				add();
    				ask('+');
    				break;
    			case 2:
    				system("cls");
    				produre('-');
    				sub();
    				ask('-');
    				break;
    			case 3:
    				system("cls");
    				produre('*');
    				mul();
    				ask('*');
    				break;
    			case 4:
    				system("cls");
    				produre('/');
    				div();
    				ask('/');
    				break;
    			case 0:
    				system("cls");
    				exit(0);
    			default:
    				printf("				*********************输入错误!*******************
    ");
    				system("pause");
    				system("cls");
    				goto start1;
    		}
    		printf("
    
    按任意键返回上一级");
    		system("pause");
    		system("cls");
    		goto start1;
    		break; 
    	} 
    }
    

    运行界面




    作业小结

    psp表格

    psp2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min)
    Planning 计划 120 8
    Development 开发 100 150
    Analysis 需求分析(包括学习新技术) 10 10
    Design Spec 生成设计文档 30 40
    Design Review 设计复审 5 10
    Coding Standard 代码规范 3 2
    Design 具体设计 10 12
    Coding 具体编码 36 21
    Code Review 代码复审 5 7
    Test 测试(自我测试,修改代码,提交修改) 10 15
    Reporting 报告 9 6
    Test Report 测试报告 3 2
    Size Measurement 计算工作量 2 1
    Postmortem & Process Improvement Plan 事后总结,并提出过程改进计划 3 3
  • 相关阅读:
    实例下载
    js跳转
    navicat怎么导出和导入数据表
    navicate怎么用sql语句插入一条语句
    svn提交时出现很多乱文件怎么解决
    随机显示星星(点击可删除)
    html节点属性操作
    利用节点更改table内容
    TreeView添加treeView1_NodeMouseClick----多么痛的领悟。。。
    IP addresses in C#
  • 原文地址:https://www.cnblogs.com/Tlz621/p/13942625.html
Copyright © 2020-2023  润新知