有理数四则运算的实验报告小结

一、实验报告内容:

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

有理数主要数据运算有:

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:分母不能为零!\n请重新输入!\n");
			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\n",a1,a2,b1,b2);
		Add(T1,T2,T3);
		printf("%d/%d+%d/%d=%d/%d\n",T1[0],T1[1],T2[0],T2[1],T3[0],T3[1]);
		Sub(T1,T2,T3);
		printf("%d/%d-%d/%d=%d/%d\n",T1[0],T1[1],T2[0],T2[1],T3[0],T3[1]);
		Mul(T1,T2,T3);
		printf("%d/%d*%d/%d=%d/%d\n",T1[0],T1[1],T2[0],T2[1],T3[0],T3[1]);
		Div(T1,T2,T3);
		printf("(%d/%d)/(%d/%d)=%d/%d\n",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:分母不能为零!\n请重新输入!\n");
			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("输入:\n");
  	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.很多同学代码有错,但是未解决就交上来。所以如何找代码的错误需要课堂重新演示。

时间: 2024-10-17 15:55:27

有理数四则运算的实验报告小结的相关文章

四则运算2作业实验报告

//2017.3.10 //20153278解昊兴 //信1505-2班 package jisuan; import java.util.Random; import java.text.DecimalFormat; import java.util.Scanner; import java.util.*; public class arithmetic { public static void main(String args[]) { int ch;//是否继续 int option,ra

C语言实验报告三

C语言程序设计实验报告 姓名:林顺显 实验地点:家 实验时间:2020.3.29 实验项目: 4.3.1:if语句的应用 4.3.2:switch-case的应用 4.3.3:switch-case嵌套if语句的应用 4.3.4:switch-case结构嵌套的应用 4.3.5:分析程序 项目实训:计算器的实现 一.实验目的与要求 1.掌握C语言逻辑值的表示方法(0代表"假”,1代表"真").2.学会正确地使用关系表达式和逻辑表达式.3.掌握各种形式的if语句语法和使用方法,

20145301《Java程序设计》实验报告一:Java开发环境的熟悉

20145301<Java程序设计>实验报告一:Java开发环境的熟悉 课程:Java程序设计 实验名称:Java开发环境的熟悉 实验目的与要求: 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程: 2.完成实验.撰写实验报告,实验报告模板见QQ群,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办法(空洞的方法如“查网络”.“问同学”.“看书”等一律得0分)以及分析(从中可以得到什

20145216史婧瑶《Java程序设计》第一次实验报告

实验一 Java开发环境的熟悉(Linux + Eclipse) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程: 2.完成实验.撰写实验报告,实验报告模板见QQ群,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办法(空洞的方法如“查网络”.“问同学”.“看书”等一

第一次java实验报告

Java实验报告 20135226黄坤 一.实验内容 (一).命令行下Java程序开发 (二).Eclipse下Java程序开发.调试 (三).通过命令行和eclipse两种方式实现四则运算并进行测试 二.实验过程 Eclipse下Java程序开发.调试 在Eclipse中单击File->New-> Java Project新建Java项目,输入项目名称Hellojy,并单击Finish按钮完成新建项目,在Eclipse中单击File->New->Class新建Java类 据Jav

20145321 实验一实验报告

20145321 实验一实验报告 实验名称 Java开发环境的熟悉 实验内容 实现四则运算,并进行测试 实验步骤 1.我做了个简单的四则运算,就是只有两个数的加减乘除. 2.建立Scanner实例可以输入两个数,DecimalFormat类使数字格式化保留小数点后两位. 3.代码: import java.util.Scanner; import java.text.DecimalFormat; public class siZe { public static void main(String

第三次实验报告+105032014065+方绎杰

1.对被测程序运用不同的测试技巧进行测试用例设计,并执行测试,撰写测试小结.要求写出测试用例表.执行情况和测试小结. 链接:http://www.cnblogs.com/Tichocan/p/6836915.html 2.对手机上任意一款音乐软件进行黑盒测试. 使用思维导图 根据场景法.状态图法 设计测试用例. 测试用例 测试小结: 1.最后一个测试样例,我仔细去研究了一下随即播放的模式:随即播放指的是随即生成播放列表,而切换歌曲(上一首/下一首)与模式无关,与播放列表有关.所以来回切换的结果相

20145307第二次JAVA学习实验报告

20145307<Java程序设计>实验报告二:Java面向对象程序设计 实验要求 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 实验内容 一.单元测试 1.三种代码 伪代码:以简洁的自然语言表明设计步骤 百分制转五分制: 如果成绩小于60,转成“不及格” 如果成绩在60与70之间,转成“及格” 如果成绩在70与80之间,转成“中等” 如果成绩在80与90之间,转成“良好” 如果成绩在90

Java实验报告-20135111李光豫

实验一 Java开发环境的熟悉 20135111 李光豫 一.实验内容 1. 使用JDK编译.运行简单的Java程序 2.使用Eclipse 编辑.编译.运行.调试Java程序 二.实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2.完成实验.撰写实验报告,实验报告模板见QQ群,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办法(空洞的方法如“查网络”.“问同学”.“看书”等一律得