ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:1.97MB ,
资源ID:3677308      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3677308.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机基础大作业完整版.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

计算机基础大作业完整版.docx

1、计算机基础大作业完整版学 生 实 验 报 告(理工类)课程名称: 计算机系统基础I 专业班级: 学生学号: 学生姓名: 所属院部: 计算机工程学院 指导老师: 第 1 学期 金陵科技学院教务处制试验汇报书写要求试验汇报标准上要求学生手写, 要求书写工整。若因课程特点需打印, 要遵照以下字体、 字号、 间距等具体要求。纸张一律采取A4纸张。试验汇报书写说明试验汇报中一至四项内容为必填项, 包含试验目和要求; 试验仪器和设备; 试验内容与过程; 试验结果与分析。各院部可依据学科特点和试验具体要求增加项目。填写注意事项(1)细致观察, 立刻、 正确、 如实统计。(2)正确说明, 层次清楚。(3)尽可

2、能采取专用术语来说明事物。(4)外文、 符号、 公式要正确, 应使用统一要求名词和符号。(5)应独立完成试验汇报书写, 严禁剽窃、 复印, 一经发觉, 以零分论处。试验汇报批改说明试验汇报批改要立刻、 认真、 仔细, 一律用红色笔批改。试验汇报批改成绩采取百分制, 具体评分标准由各院部自行制订。试验汇报装订要求试验批改完成后, 任课老师将每门课程每个试验项目试验汇报以自然班为单位、 按学号升序排列, 装订成册, 并附上一份该门课程试验纲领。试验项目名称: 数据表示 试验课时: 2 同组学生姓名: 无 试验地点: 试验日期: 试验成绩: 批改老师: 批改时间: 一、 试验目和要求熟悉数值数据在计

3、算机内部表示方法, 掌握相关处理语句。二、 试验仪器和设备硬件环境: IA-32软件环境: Linux ubuntu14.04, C语言, gcc三、 试验内容与过程1、 试验内容1.“-2 2”和“-2 2u”结果一样吗?为何?请编写程序验证。2.运行下图中程序代码, 并对程序输出结果进行分析。3.运行下列代码, 并对输出结果进行分析。#include void main() union NUM int a; char b4; num; num.a = 0x12345678; printf(0x%Xn, num.b2);4.请说明下列赋值语句实施后, 各个变量对应机器数和真值各是多少?编写一

4、段程序代码并进行编译, 观察默认情况下, 编译器是否报warning。假如有warning信息话, 分析为何会出现这种warning信息。int a = ;int b = -;int c = ;unsigned short d = 65539; short e = -32790; 5.编译运行以下程序, 并最少反复运行3次。void main() double x=23.001, y=24.001, z=1.0;for (int i=0; i10; i+) if (y-x)=z) printf(equal.n);else printf(not equaln); x += z; y += z;

5、printf(%d, %f , %fn”, i, x, y); 要求: (1)给出每次运行结果截图。(2)每次运行过程中, 是否每一次循环中判等结果都一致?为何?(3)每次运行过程中, 每一次循环输出i、 x和y结果分别是什么?为何?2、 试验步骤1. 进入linux系统, 在shell终端提醒符后输入gedit, 编写C语言源程序。gedit输入试验内容1源程序并以SAMPLE.C为文件名将文件存盘。2. 用GCC 对源文件SAMPLE.C进行编译并产生目标文件SAMPLE.O, 汇编语言程序SAMPLE.S。gcc s o SAMPLE.S SAMPLE.C gcc g o SAMPLE.

6、O SAMPLE.C3. 用GDB跟踪实施SAMPLE。gdb SAMPLE4. 观察程序实施情况并统计运行结果。5. 依据上述四个步骤, 完成对其它试验内容操作。四、 试验结果与分析(1)#includevoid main()int a,c;a=(-22)? 1:0;c=(-22u)? 1:0;printf(%dn%dn,a,c);正数原码, 反码, 补码都一样。而负数在计算机里是按补码存放和运算。-2在内存中存放方法为1111, 1111, 1111, 1111, 11111, 11111, 1111, 1110B即fffffffeH, 最高位为符号位, 2在内存中存放方法为0000, 0

7、000, 0000, 0000, 0000, 0000, 0000, 0010B即2H, 最高位为符号位, 2u在内存中存放方法为0000, 0000, 0000, 0000, 0000, 0000, 0000, 0010B即2H, 最高位不再是符号位。所以-22是符号位比较, 即-22是正确。-22u是有符号数和无符号数之间比较, 此时编译器会把有符号数自动转无符号数, 所以-2=2。-22, 是有符号数比较, 即2+(-2)=f f f f f f f eH+f f f f f f f e H=1FFFFFFFCH=-4补, 最高位符号位溢出, 所以证实被减数符号是负号, 即-22是正确。

8、.有符号数和无符号数比较。系统会自动把有符号数转换成无符号数。fffffffeH=Dc, 所以输出unsigned short is 1#includeVoid main()Unsigned int a=1;Unsigned short b=1;Char c= -1;Int d;d=(ac)? 1:0;printf(“unsigned int is %dn”,d);d=(bc)? 1:0;printf(“unsigned int is %dn”,d);(3)因为在union共用体当中, int a 和char b4数据公用同一段内存地址, 而此时a和b同时占用四个字节, 所以当实施num.a

9、= 0x12345678;同时b也会被赋值, b内存示意图以下: b值87654321b地址b0b1b2b3由上图可知实施printf(0x%Xn, num.b2);会输出0x34。现在解释为何会出现表中情况对于数组来说, 下标越小地址越小, 下标越大地址越大, 而a=0x12345678这个值中, 1和2分别在最高位和次高位, 它就会存放在下标大b3中, 以这类推, 便能够得到表中数据。这也证实了我32位Ubuntu是小端存放(字数据高字节存放在高地址中, 而字数据低字节则存放在低地址中)。(4)#includevoid main() int a=;4个字节 int b=-; int c=-

10、; unsigned short d=65539;2个字节 short e=-32790;2个字节 printf(%dn,a); printf(%dn,b); printf(%dn,c); printf(%dn,d); printf(%dn,e);机器数就是数字在计算机中二进制表示形式, 其特点 一是符号数字化, 二是 其数大小受机器字长限制。将带符号位机器数对应真正数值称为机器数真值 int a = 机器数是 1000 0000 0000 0000 0000 0000 0000 0000B int b = - 机器数是 1000 0000 0000 0000 0000 0000 0000 0

11、000B int c = 机器数是 1000 0000 0000 0000 0000 0000 0000 0001B unsigned short d = 65539 机器数无法表示 short e = -32790 机器数无法表示 int 类型在 32 位计算机中占 4 个字节, 即 32 位。又因为正数补码是其本身, 所以 int 类型能表示全部正数为: 0,000 0000 0000 0000 0000 0000 0000 0000B 到 0,111 1111 1111 1111 1111 1111 1111 1111B即 0 到+ 。而负数补码是除符号位外各位取反最终加一而来。所以 i

12、nt 类型所能表示全部负数为: 0,000 0000 0000 0000 0000 0000 0000 0000B(-0D补码) 到 1,111 1111 1111 1111 1111 1111 1111 1111B即 0 到-D 。而 32 位二进制数能表示全部值为 2 32 次方个, 而从 -D 到+D 总共是 2 32 次 方减一个数, 而少这个数就是 1000 0000 0000 0000 0000 0000 0000 0000B (-0D 补码), 而任何数原码都不能在转换成补码时成为这个数, 我们人为把她要求为 - 所以 int 类型取值范围为 - 到+, 所以题目中 b 是正确,

13、 而且不会发 生 溢 出 。 而 题 目 中 a= 其 实 已 经 超 出 int 类 型 最 大 范 围 , 但 是 a=+1=0,111 1111 1111 1111 1111 1111 1111 1111B+1B=1000 0000 0000 0000 0000 0000 0000 0000B= - , 而- 又在 int 类型取值范围内, 所以也不会溢出 , 假如此时打印输出a十进制就是 - , 同理可 得 c = =+2= - , 也不会发生溢出现象。 对于题目中 d, 因为它是无符号短整型变量, 在 32 位机中占两个字节。所以 d 取值范围为: 0 到 65535, 而 6553

14、9 不在这个范围内, 所以会报溢出警告。 对于题目中 e, 因为它是有符号短整型变量, 在 32 位机中占两个字节。所以 e 取值 范围为: -32768 到 +32767, 此时 c=-32790=-32768-22=-32768+ (-22)= 1000 0000 0000 0000 0000 0000 0000 0000B + 1111 1111 1111 1111 1111 1111 1110 1001B =0001 0111 1111 1111 1111 1111 1111 1110 1001B=+D+32767D 所以 e 会报出溢出警告。5.Double双精度浮点数, 根据IEE

15、E-754标准, 双精度浮点数有效数字到小数点后15位, x=23.001, 可表示为23.01; y=24.001; 31.001会表示成31.001, 32.001会表示成32.005, 于是就不相等了。结尾那个1或5都是因为有限精度无法正确小数造成, (1)(2)每次运行过程中, 每一次循环输出i、 x和y结果分别是i=0,x=24.001,y=25.001;i=1,x=25.001,y=26.001i=2,x=26.001,y=27.001i=3,x=27.001,y=28.001i=4,x=28.001,y=29.001i=5,x=29.001,y=30.001i=6,x=30.00

16、1,y=31.001i=7,x=31.001,y=32.001i=8,x=32.001,y=33.001i=9,x=33.001,y=34.001五、 试验思索题和试验心得。1、 思索题1.完成书上第二章习题中第40题, 提交代码, 并在程序中以十六进制形式打印变量u机器数。float fpower2(int x) unsigned exp,frac,u; if(x -149) exp=0 ; frac=0 ; else if(x(-x-127); else if(x128 ) exp=x+127 ; frac= 0; else exp=255 ; frac= 0; u=exp23|frac;

17、 return u2f(u);2、 试验心得了解了linux基础操作。了解了编译实施, 反编译过程和操作步骤。了解了当计算机面对C语言时, 计算机是怎样表示和编译。我们能够查看编译过程来了解计算机思想。还需继续努力。试验项目名称: 排序程序编辑、 编译和调试试验课时: 2 同组学生姓名: 无 试验地点: 试验日期: 试验成绩: 批改老师: 批改时间: 一、 试验目和要求熟悉开发环境、 掌握开发和调试基础过程以及工具。二、 试验仪器和设备硬件环境: IA-32软件环境: Linux ubuntu14.04, C语言, gcc三、 试验过程1、 试验内容以下程序实现了排序和求和算法, 程序源码以下

18、图所表示。请依据提供图片输入源程序文件, 并保留为对应.c 和.h 文件, 然后进行编译、 链接, 调试。bubblesort.h:bubblesort.c:add.h:add.c:printresult.h:printresult.c:main.c:冒泡排序 求和 打印结果 退出请选择序号原始数组为数组求和结果为排序后数组为请选择正确序号! 请继续! 2、 试验步骤1. 进入linux系统, 在shell终端提醒符后输入gedit, 编写C语言源程序。2. 将源程序文件进行预处理、 编译、 汇编和链接, 以生成可实施文件。(1) 使用gcc 直接生成可实施文件gcc -o main main

19、.c bubblesort.c add.c printresult.c(2) 首先生成可重定位目标文件(.o 文件), 再链接成可实施文件。首先, 使用gcc c 命令将全部.c 文件编译成.o 文件(能够用-o 选项命名输出可重定位目标文件), 然后再用ld 命令进行链接, 以生成可实施目标文件。(用ld命令链接时要包含很多系统库, 能够用gcc v main.c来查看系统链接需要哪些库, 把collect2 换成ld, 生成/tmp/ccBCU0rh.o 即为mian.c 编译出来main.o 文件, 删掉该句替换成以下命令: -o main main.o bubblesort.o add

20、.o printresult.o -e main)ld -o main main.o bubblesort.o add.o printresult.o -e main -sysroot=/ -build-id -eh-frame-hdr -m elf_i386 -hash-style=gnu -as-needed -dynamic-linker /lib/ld-linux.so.2 z relro /usr/lib/gcc/i686-linux-gnu/4.8/./././i386-linux-gnu/crt1.o /usr/lib/gcc/i686-linux-gnu/4.8/./././i

21、386-linux-gnu/crti.o /usr/lib/gcc/i686-linux-gnu/4.8/crtbegin.o -L/usr/lib/gcc/i686-linux-gnu/4.8 -L/usr/lib/gcc/i686-linux-gnu/4.8/./././i386-linux-gnu -L/usr/lib/gcc/i686-linux-gnu/4.8/././././lib -L/lib/i386-linux-gnu -L/lib/./lib -L/usr/lib/i386-linux-gnu -L/usr/lib/./lib -L/usr/lib/gcc/i686-lin

22、ux-gnu/4.8/././. lgcc -as-needed -lgcc_s -no-as-needed -lc -lgcc -as-needed -lgcc_s -no-as-needed /usr/lib/gcc/i686-linux-gnu/4.8/crtend.o /usr/lib/gcc/i686-linux-gnu/4.8/./././i386-linux-gnu/crtn.o上述过程以下图所表示: 3.使用OBJDUMP命令进行反汇编(请自行查阅OBJDUMP命令使用方法)比如, 可使用“objdump S”命令进行反汇编objdump S main.o: 将main.o进行

23、反汇编4.使用GDB命令进行多种调试(GDB命令参见教材附录C, 也可自行查阅网上相关文档)调试之前首先用“gcc g”命令生成调试信息, 不然调试失败。gcc -g -o main main.c bubblesort.c add.c printresult.cgdb main要求用多种GDB命令对程序进行调试(比如用info registers 查看寄存器内容)。四、 试验结果与分析1.编写对应.c 和.h 文件 2.使用gcc 直接生成可实施文件3.运行main结果4.使用OBJDUMP命令进行反汇编5.使用GDB命令进行多种调试.调试之前首先用“gcc g”命令生成调试信息gcc -g

24、-o main main.c bubblesort.c add.c printresult.cgdb main(gdb)help: 查看命令帮助, 具体命令查询在gdb中输入help + 命令.(gdb)list: 查看原代码(list-n,从第n行开始查看代码。list+ 函数名: 查看具体函数)(gdb)step: 单步调试(逐语句: 跳入自定义函数内部实施)(gdb)run: 重新开始运行文件(gdb) break 3 设置断点(gdb) info b 查看断点处情况(gdb)info registers 查看寄存器内容 (gdb)continue: 继续运行 五、 试验思索题和试验心得

25、1、 试验思索题1.分析同一个源程序在不一样机器上生成可实施目标代码是否相同。提醒: 从多个方面(如ISA、 OS 和编译器)来分析。2.你能在可实施目标文件中找出函数printf ()对应机器代码段吗?能话, 请标示出来。(1)答: 不相同, 因为一: 总线条数有区分, 有16位, 32位, 64位总线结构, 造成并行一次传输数据不会一致, 二: 操作系统不一样, 有Linux系统, Windows系统, mcos系统之分, 造成程序才汇编和链接时ELF表不会完全相同, 三: 从编译器来说, 有gcc, vsC+之分, 而不一样编译器在数据对齐方面, 库函数源文件方面, 符号表创建和解析方面不会完全相同。所以造成在不一样机器上生成可实施代码不相同。(2)答: 不能, 因为printf()在动态库libc.so.中, 而这个库是动态链接库, 所以程序在链接时并不把这个库函数机器码链接可实施程序中, 而是在实施程序时候才加载进来。所以不能找到printf()函数。2、 试验心得此次试验了解到程序首先生成可重定位目标文件(.o 文件), 再链接成可实施文件。以及gdb相关操作。另外, GDB出现减轻了开发人员负担, 她们能够在程序运行时候单步跟踪自己代码, 或者经过断点临时中止程序实施。我们也能够随时察看变量和内存目前状态, 并监视关键数据结构是怎样影响代码运行。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1