Deadline: 2024.10.10 8:00AM
CSAPP 第一章配套实验。
本实验的目的是加深同学们对整数和浮点数二进制表示的认识。同学们需要解出若干程序谜题,编写代码并通过正确性测试,最后提交代码和报告。希望同学们多加思考,在解题过程中能学到的远不止二进制本身,还能加深对位运算的理解,以及学到一些算法知识。
本实验分为常规部和荣誉部分。荣誉部分的难度较高,是本课程比较有挑战性的部分。
荣誉部分虽然占分,但是占分并不高,大家可以自己决定要不要做荣誉部分。Use your discretion!
从 github classroom
拉取ICS2024_datalab
文件夹,其中的内容就是本次实验用到的的文件了,拉取指令如下:
git clone xxx # 将 xxx 替换为对应链接
cd ICS2024_datalab
在终端中检查是否安装了 gcc:
gcc -v
如果已安装,终端将会反馈版本信息,否则会反馈
command not found
。
如未安装,尝试执行以下命令进行安装:
sudo apt-get install gcc
检查是否安装 make,在终端输入:
make -v
同理,如未安装,尝试以此执行以下命令:
sudo apt-get update
sudo apt-get install make
sudo apt-get install libc6 libc6-dev libc6-dev-i386
在终端中进入 datalab/
文件夹目录。
键入 ls
查看内容,你应当看到如下文件:
Driverhdrs.pm Makefile bits.c btest.c decl.c driver.pl ishow.c
Driverlib.pm README bits.h btest.h dlc fshow.c tests.c
在终端中依次执行如下命令,以生成可执行文件并执行:
make clean
make all
./btest
如果过程顺利,最后会输出测试结果,最后一行为
Total points: 0/69
。
如果过程中出现如下报错:
/usr/bin/ld: cannot found -lgcc
那么尝试执行:
sudo apt install gcc-multilib
依然在 datalab/
目录下,
执行:
./dlc bits.c
如果遇到
./dlc: Permission denied
,说明没有当前文件的执行权限,执行:
chmod +x dlc
增加执行权限。
如果执行立即结束并且没有任何反馈,则没有问题。
推荐阅读顺序:本文档 > README
>
bits.c
的注释部分。
README
文档中对实验文件做了较为详细的介绍。
bits.c
是同学们唯一需要编辑的文件,其中包含了谜题规则介绍, 18
个谜题以及谜题内容、难度、分数等。
上面的两个文件请务必仔细阅读。
注意到,每一个谜题包含了如下信息:
if
)等。除了 bits.c
,你不应该编辑任何其余文件。
完成谜题后,需要检验自己的代码是否正确:
首先,执行下述指令,检查每个函数使用的运算符类型、数目是否符合要求:
./dlc -e bits.c
如没有任何报错,按顺序执行下述指令,测试每个函数的正确性:
make clean
make all
./btest
btest
执行时会给出每个谜题(函数)是否通过测试(未通过时会给出测试数据),并且会计算你的最终得分。
你可以利用上 ./ishow
和 ./fshow
来帮助你调试(用法见 README
)。
你需要提交至少两份文件,包含你的 bits.c
和一份实验报告。
实验报告应该包含以下内容:
实验标题,你的姓名,学号。
你在终端中执行 ./dlc -e bits.c
后的截图。
你在终端中执行 ./btest
后的截图。
描述你实现每个函数的思路。bits.c中不要求给自己的代码写注释(写了也无妨)
如果有,请务必在报告中列出引用的内容以及参考的资料。
对本实验的感受(可选)。
对助教们的建议(可选)。
可提交 .md
文件或者 .pdf
文件。不要提交
.doc
或 .docx
文件。
(如果提交 .md
文件,请确保助教能同时看到你报告中的截图!)
在终端运行以下指令:
git add -A
# 提交当前文件夹下的所有更改到暂存区
git commit -m "xxx(可以是你的提交注释)"
# 将暂存区的所有更改提交到本地仓库
git push
# 将本地仓库推送到远程
http://csapp.cs.cmu.edu/3e/labs.html (lab 来源,本实验相较原文件有改动)
本文档编写时参考了22, 23年的实验文档。
负责助教: