zoukankan      html  css  js  c++  java
  • 有理数四则运算的实验报告小结

    一、实验报告内容:

    设计抽象数据类型有理数的描述 (有理数是其分子、分母均为整数且分母不为零的分数)。

     有理数主要数据运算有:

    1.       构造有理数T,元素e1,e2分别被赋以分子、分母值

    2.       销毁有理数T

    3.       用e返回有理数T的分子或分母,i=1返回分子, i=2返回分母。

    4.       改变有理数T的分子或分母为e,i=1改变分子, i=2改变分母

    5.       有理数T1,T2相加,结果存入有理数T3

    6.       有理数T1,T2相减,结果存入有理数T3

    7.       有理数T1,T2相乘,结果存入有理数T3

    8.       有理数T1,T2相除,结果存入有理数T3

    二、本次实验存在问题:

    1.有11个人查重》=80%,记为0分。我们的每次实验作业都会查重,希望大家实验报告尽量多写你们的实验思路、实验体会。代码有完成多少实验报告贴多少。不要把别人代码拷贝过来。

    2.每次实验报告一定要按照模板要求来写,本次作业发现不少同学值贴代码,思路、代码注释、运行结果截图全部没有。

    int main() 
    {
    	typedef int Status; 
    	typedef int ElemType;
    	typedef ElemType * Rational_Num;
    	Rtional_Num T1,T2,T3;
    	ElemType a1,a2,b1,b2;
    	printf("请输入第一个有理数,第一个为分子,第二个为分母:");
    	scanf("%d%d",&a1,&a2);
    	printf("请输入第二个有理数,第一个为分子,第二个为分母:");
    	scanf("%d%d",&b1,&b2);
    	if(a2==0||b2==0)
    	{
    		printf("Warm:分母不能为零!
    请重新输入!
    ");
    			printf("请输入第一个有理数,第一个为分子,第二个为分母:");
    			scanf("%d%d",&a1,&a2);
    			printf("请输入第二个有理数,第一个为分子,第二个为分母:");
    			scanf("%d%d",&b1,&b2);
    	}
    	else{
    		InitRational_Num(T1,a1,a2);
    		InitRational_Num(T2,b1,b2);
    		printf("您构造的两个有理数分别为:%d/%d,%d/%d
    ",a1,a2,b1,b2);
    		Add(T1,T2,T3);
    		printf("%d/%d+%d/%d=%d/%d
    ",T1[0],T1[1],T2[0],T2[1],T3[0],T3[1]);
    		Sub(T1,T2,T3);
    		printf("%d/%d-%d/%d=%d/%d
    ",T1[0],T1[1],T2[0],T2[1],T3[0],T3[1]);
    		Mul(T1,T2,T3);
    		printf("%d/%d*%d/%d=%d/%d
    ",T1[0],T1[1],T2[0],T2[1],T3[0],T3[1]);
    		Div(T1,T2,T3);
    		printf("(%d/%d)/(%d/%d)=%d/%d
    ",T1[0],T1[1],T2[0],T2[1],T3[0],T3[1]);
    		
    	}
    	DistroyRational_Num(T1);
    	DistroyRational_Num(T2);
    	DistroyRational_Num(T3);
    	
    }
    

      以上就是某个同学代码,没任何注释。

    3.大部分同学在做除法函数时候没考虑除0情况。如下面代码中如果第二个有理数分子的情况一定要判断。

    Status Div(Rational_Num T1,Rational_Num T2,Rational_Num &T3);
    {
    	T3[0]=T1[0]*T2[1];
    	T3[1]=T1[1]*T2[0];
    	int temp=Gcd(T3[0],T3[1]);
    	T3[0]=T3[0]/temp;
    	T3[1]=T3[1]/temp;
    	return Ok;
    }
    

    4. 没有考虑有理数负数情况,比如用户如果分母输入负数,这应该是不合理。负数我们的处理应该只允许分子为负数,分母正数。如下面代码中,考虑了分母不能为0,却没考虑分母为负数情况,如果分母为负数,应提示并重输。

    	printf("请输入第一个有理数,第一个为分子,第二个为分母:");
    	scanf("%d%d",&a1,&a2);
    	printf("请输入第二个有理数,第一个为分子,第二个为分母:");
    	scanf("%d%d",&b1,&b2);
    	if(a2==0||b2==0)
    	{
    		printf("Warm:分母不能为零!
    请重新输入!
    ");
    			printf("请输入第一个有理数,第一个为分子,第二个为分母:");
    			scanf("%d%d",&a1,&a2);
    			printf("请输入第二个有理数,第一个为分子,第二个为分母:");
    			scanf("%d%d",&b1,&b2);
    	}
    

     下面这个同学就有考虑负数情况,我们可以参考:

    Triplet L1,L2,L3;   
        int e1,e2,e3,e4;
        L3= (int *)malloc(2 * sizeof(int));
        printf("输入:
    ");
      	scanf("%d %d",&e1,&e2);
      	while(e2<=0)		//分母不能等于0或负数 
    	  {
    	  	printf("请重新输入:");
    		scanf("%d %d",&e1,&e2);
    	  } 
    	scanf("%d %d",&e3,&e4);
    	while(e4<=0)
    	  {
    	  	printf("请重新输入:");
    	  	scanf("%d %d",&e3,&e4);
    	  } 
    

    5.有几位同学函数、变量命名很不好识别,看下面代码:

     这样代码请问能看的下去?????????

    typedef struct
      {
      	int a1;
      	int a2;
      } iii;
       void  aaa(Rational T,int e1,int e2);
       void bbb(&T);
       int ccc(&T,e);
       int ddd(T,e);
       void eee(T1,T2,&T3);
       void fff(T1,T2,&T3);
       void ggg(T1,T2,&T3);
       void	hhh(T1,T2,&T3); 
    

    6.没有对有理数分子分母求最大公约数,即约分。

    7.还有一些同学没传代码,只有简单实验报告,这部分同学得分不及格。

    8。代码和实验报告都放在同一word文档,不要分开放,但还是有同学操作错误。如张晨曦

    三、本次作业小结。

    1.有一半同学编程实现了有理数。还有一半左右同学不理解结构体定义、结构体指针应用、malloc函数使用。我将在实验课讲解一份同学的实验同时复习结构体。

    2.有一半左右同学实验报告只负责贴代码,没有任何代码注释。代码运行结果截图上,只用一组测试数据截图,这是不合理,应该拿多个测试数据的截图。

    3.很多同学代码有错,但是未解决就交上来。所以如何找代码的错误需要课堂重新演示。

  • 相关阅读:
    ASP.Net Core -- Logging
    ASP.Net Core -- 文件上传
    ASP.Net Core -- 依赖注入
    ASP.Net Core -- 领域模型与数据库架构保持同步
    Entity Framework Core -- 种子数据
    ASP.Net Core -- Environment TagHelper
    ASP.Net Core -- 为什么要使用TagHelper?
    dotnet ef 无法执行,因为找不到指定的命令或文件
    ASP.Net Core 3.x -- 中间件流程与路由体系
    ASP.Net Core -- View Components
  • 原文地址:https://www.cnblogs.com/linli069/p/6536768.html
Copyright © 2011-2022 走看看