数据表示编程作业

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

数据表示编程作业目录1简介2相关文件3结果提交4作业要求5问题描述o5.1位操作o5.2补码运算o5.3浮点数操作6检查你的代码o6.1使用dlc检查函数实现代码是否符合作业要求中的编码规则o6.2使用btest检查函数实现代码的功能正确性7建议与提示附录作业步骤简要介绍1简介本作业的目的是为更好地熟悉和掌握计算机中整数和浮点数的二进制编码表示。在作业中,你需要解开一系列编程“难题”——使用有限类型和数量的运算操作实现一组给定功能的函数,在此过程中你将加深对数据二进制编码表示的了解。本作业为课外作业,占总评成绩15%。2相关文件作业所需要的代码和相关文件已放到linux系统home目录下的src-stu文件中,其中包含下列文件:README——有关作业细节的说明文件,请在开始作业前仔细阅读bits.c——包含一组用于完成指定功能的函数的代码框架,需要你按要求补充完成其函数体代码并“作为作业结果提交”。函数的功能与实现要求详细说明在相应函数和文件首部的注释中(务必认真阅读和遵照说明完成作业)。bits.h——头文件btest.c——作业结果测试工具,用于检查作为作业结果的bits.c中函数实现是否满足作业的功能正确性要求。btest.h,decl.c,tests.c——生成btest程序的源文件dlc——作业结果检查工具,用于判断作为作业结果的bits.c中函数实现是否满足作业的语法规则要求。Makefile——生成btest、fshow、ishow等工具的Make文件。ishow.c——整型数据表示查看工具fshow.c——浮点数据表示查看工具3结果提交请将完成函数体代码后的bits.c作为作业结果提交。4作业要求作业前请认真阅读本文档和bits.c中的代码及注释,然后根据要求相应完成bits.c中的各函数代码。作业中实现的函数代码必须满足下述基本条件(更多具体要求见函数的注释):除关于浮点数的函数实现外,只能使用顺序程序结构(不得使用循环或条件分支控制程序结构,例如if,do,while,for,switch等)。仅能使用有限类型和数量的C语言算术和逻辑操作,例如如下的操作符,但注意每个题目可能有不同的可用操作符列表,详见具体函数说明。!~&^|+不得使用超过8位表示的常量(即其值必须位于[0,255]中)。不得使用任何形式的强制类型转换。不得使用除整型外的任何其它数据类型,如数组、结构、联合等。不得定义和使用宏。不得定义除已给定的框架函数外的其他函数,不得调用任何函数。特定于浮点数操作函数的额外限制条件:o可以使用循环和条件控制;o可以使用整型和无符号整型常量及变量(取值不受[0,255]限制);o不使用任何浮点数据类型、操作及常量。上述作业要求的主要目的是使得你必须从二进制位的角度考虑数据,进而更清楚地理解数据的二进制表示。5问题描述你需要完成bits.c中下列函数功能,具体分为三大类:位操作、补码运算和浮点数操作。5.1位操作下表列出了bits.c中一组操作和测试位组的函数。其中,“级别”栏指出各函数的难度等级(对应于该函数的作业分值),“功能”栏给出函数应实现的输出(即功能),“约束条件”栏指出你的函数实现必须满足的编码规则(具体请查看bits.c中相应函数注释),“最多操作符数量”指出你的函数实现中允许使用的操作符(如|和~)的最大数量。你也可参考tests.c中对应的测试函数来了解所需实现的功能,但是注意这些测试函数并不满足目标函数必须遵循的编码约束条件,只能用做关于目标函数正确行为的参考。题目列表级别函数名功能约束条件最多操作符数量1bitAnd(x,y)x&y仅能使用|和~81bitXor(x,y)x^y仅能使用&和~141thirdBits()返回一个32位整型字,使其自最低有效位LSB起每三个位组的最低位置1,其它位置0(即...001001001)仅能使用!,~,&,^,|,+,,82getByte(x,n)从32位字x中提取第n字节(字节从LSB开始到MSB依次编号为0-3)仅能使用!,~,&,^,|,+,,63logicalShift(x,n)使用逻辑移位操作将x右移n位(假设0=n=31)仅能使用~,&,^,|,+,,204bang(x)!x仅能使用~,&,^,|,+,,123conditional(x,y,z)x?y:z仅能使用!,~,&,^,|,+,,165.2补码运算下表列出了bits.c中一组使用整数的补码表示的函数。可参考bits.c中注释说明和tests.c中对应的测试函数了解其更多具体信息。题目列表级别函数名功能约束条件最多操作符数量2fitsBits(x,n)如果x可表示为一个n位补码整数则返回1,否则返回0仅能使用!,~,&,^,|,+,,152sign(x)返回1——x是正数,0——x为0,或者-1——x是负数仅能使用!,~,&,^,|,+,,103addOK(x,y)如果计算x+y不发生溢出则返回1,否则返回0仅能使用!,~,&,^,|,+,,204isPower2(x)如果x是2的指数返回1,否则返回0仅能使用!,~,&,^,|,+,,205.3浮点数操作下表列出了bits.c中一组浮点数二进制表示的操作函数。可参考bits.c中注释说明和tests.c中对应的测试函数了解其更多具体信息。注意float_neg和float_twice函数的输入参数和返回结果(以及float_i2f函数的返回结果)均为unsignedint类型,但应作为单精度浮点数解释其32bit二进制表示对应的值。题目列表级别函数名功能约束条件最多操作符数量2float_neg(f)返回浮点数'-f'的二进制表示。当输入参数是NaN时,返回NaN仅能使用任何整型/无符号整型操作,包括||,&&以及if,while控制结构104float_i2f(x)返回整型输入x的强制浮点类型转换“(float)x”结果的二进制表示仅能使用任何整型/无符号整型操作,包括||,&&以及if,while控制结构304float_twice(f)返回浮点数'2*f'的二进制表示。当输入参数是NaN时,返回NaN仅能使用任何整型/无符号整型操作,包括||,&&以及if,while控制结构306检查代码如前所述,作业数据包中包含两个工具程序可帮助检查你的代码的正确性。6.1使用dlc检查函数实现代码是否符合作业要求中的编码规则完成bits.c后,调用如下命令进行检查:$./dlcbits.cdlc将返回错误信息如果它发现了错误,例如不允许使用的操作符、过多数量的操作符或者非顺序的代码结构。如果程序代码满足规则要求,dlc将不输出任何提示。使用-e选项调用dlc$./dlc-ebits.c可使dlc打印出每个函数使用的操作符数量。输入“./dlc-help”可打印出dlc的可用命令行选项列表。6.2使用btest检查函数实现代码的功能正确性首先使用如下命令编译生成btest可执行程序:$make如下调用btest命令检查bits.c中所有函数的功能正确性:$./btest注意每次修改bits.c后都必须使用make命令重新编译生成btest程序。为方便依次检查测试每一函数的正确性,可如下在命令行使用“-f”选项跟上函数名,以要求btest只测试所指定的函数:$./btest-fbitXor进一步可如下使用“-1,-2,-3”等选项在函数名后输入特定的函数参数:$./btest-fbitXor-17-20xf(README文件中有关于btest程序的使用说明)7建议与提示(1)作业将采用自动评分系统进行评分,抄袭或小改动都能够自动鉴别。(2)如果你的代码不能完全满足相应函数的操作符使用限制,你可以获得部分得分,但是往往这样的次优解总能找到改进它的方法,从而获得正确解答。(3)在bits.c文件中不要包含stdio.h头文件,因为这样将给dlc程序造成困难并产生一些难以理解的错误信息。注意尽管未包含stdio.h头文件,你仍然可以在bits.c中调用printf函数进行调试,gcc将打印警告信息但你可以忽略它们。(4)注意dlc程序使用比gcc和C++更严格的C变量声明形式。在由“{}”包围的一个代码块中,所有变量声明必须出现在任何非声明语句之前。例如,针对下述代码,dlc将报错:intfoo(intx){inta=x;a*=3;/*Statementthatisnotadeclaration*/intb=a;/*ERROR:Declarationnotallowedhere*/}你必须类似如下代码将变量声明放在最前:intfoo(intx){inta=x;intb;a*=3;b=a;}附录作业步骤简要介绍(1)将ubuntu虚拟机文件(建议VMware-workstation-full-9.0.0-812388.exe,可从网上下载,也可从教师出拷贝)复制到计算机的某个位置。(2)从教师出拷贝ubuntu虚拟机文件(该文件是安装在VMware-workstation上的linux操作系统,可以直接由VMware-workstation打开,我已经配置好了,可以直接使用。也可以从网上下载ubuntu-14.04-desktop-i386.iso,但需要自己安装,而且要从教师这里拷贝作业所需的各个文件)到计算机的某个位置。(3)安装VMware-workstation-full-9.0.0-812388.exe,也可以安装别的版本,不过能不能用就要看运气了。该虚拟机的安装方法请问度娘。(4)双击桌面VMwareWorkstation图标,启动VMwareWorkstation。vmware虚拟机启动后,如图1所示。如果上一次ubuntu操作系统是不关闭的,则“Ubuntu”的下面显示的是“Poweronthisvirtualmachine”,由于我上次是将系统挂起,所以显示的是“Resumethisvirtualmachine”,意为继续运行虚拟机。出现下面界面后,点“Poweronthisvirtualmachine”或“Resumethisvirtualmachine”打开或继续运行ubuntu操作系统。(5)启动ubuntu操作系统,启动后如图1所示。图1ubuntu操作系统启动界面(6)输入密码:111111,按下回车键。弹出如图2所示界面。图2ubuntu操作系统启动后的界面(7)按CTRL+ALT+T,弹出操作终端界面,如图3所示。图3操作终端界面(8)在命令提示符‘$’后面输入:pwd,然后按回车键,可以输出当前路径。在命令提示符‘$’后面输入:ls,然后按回车键,列出当前目录的文件。如图4所示,当前路径为/home/zgj,zgj文件夹下有10个文件(夹)。其中,绿色位置为src-stu文件夹,该文件夹存放了本作业所需的各个文件。图4作业所需文件所在位置(9)在命令提示符‘$’后面输入:cdsrc-stu,然后按回车键,进入src-stu文件夹(前提是当前路径为/home/zgj,如果不知道怎样进入这个路径,上网查、问同学或者qq老师)。再用ls命令列出src-stu文件夹的内容,如图5所示。从图中可以看到本作业所需的文件。图5本作业所需文件(10)在命令提示符‘$’后面输入:geditbits.c,然后按回车键,打开bits.c文件,如图6所示。对该文件按前面的要求进行修改、保存。图6bits.c文件(9)根据“6检查代码”中的说明检查代码。

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功