欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

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

    • 资源ID:28527620       资源大小:44KB        全文页数:11页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    精品文档,仅供学习与交流,如有侵权请联系网站删除学 生 实 验 报 告(理工类)课程名称:计算机系统基础I 专业班级: 学生学号: 学生姓名: 所属院部: 计算机工程学院 指导教师: 20192020学年 第 1 学期 金陵科技学院教务处制实验报告书写要求实验报告原则上要求学生手写,要求书写工整。若因课程特点需打印的,要遵照以下字体、字号、间距等的具体要求。纸张一律采用A4的纸张。实验报告书写说明实验报告中一至四项内容为必填项,包括实验目的和要求;实验仪器和设备;实验内容与过程;实验结果与分析。各院部可根据学科特点和实验具体要求增加项目。填写注意事项(1)细致观察,及时、准确、如实记录。(2)准确说明,层次清晰。(3)尽量采用专用术语来说明事物。(4)外文、符号、公式要准确,应使用统一规定的名词和符号。(5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。实验报告批改说明实验报告的批改要及时、认真、仔细,一律用红色笔批改。实验报告的批改成绩采用百分制,具体评分标准由各院部自行制定。实验报告装订要求实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。【精品文档】第 9 页实验项目名称: 数据的表示 实验学时: 2 同组学生姓名: 无 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间: 一、实验目的和要求熟悉数值数据在计算机内部的表示方式,掌握相关的处理语句。二、实验仪器和设备硬件环境:IA-32软件环境:Linux ubuntu14.04,C语言,gcc三、实验内容与过程1、实验内容1. “-2 < 2”和“-2 < 2u”的结果一样吗?为什么?请编写程序验证。2. 运行下图中的程序代码,并对程序输出结果进行分析。3. 运行下列代码,并对输出结果进行分析。#include <stdio.h>void main()union NUMint a;char b4; num;num.a = 0x12345678;printf("0x%Xn", num.b2);4. 请说明下列赋值语句执行后,各个变量对应的机器数和真值各是多少?编写一段程序代码并进行编译,观察默认情况下,编译器是否报warning。如果有warning信息的话,分析为何会出现这种warning信息。int a = 2147483648;int b = -2147483648;int c = 2147483649;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; i<10; i+) if (y-x)=z) printf("equal.n");else printf("not equaln"); x += z; y += z; 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.O SAMPLE.C3. 用GDB跟踪执行SAMPLE。gdb SAMPLE4. 观察程序执行情况并记录运行结果。5. 依照上述四个步骤,完成对其余实验内容的操作。四、实验结果与分析(1)#include<stdio.h>void main()int a,c;a=(-2<2)?1:0;c=(-2<2u)?1:0;printf("%dn%dn",a,c);正数的原码,反码,补码都一样。而负数在计算机里是按补码存放和运算的。-2在内存中的存储方式为1111,1111,1111,1111,11111,11111,1111,1110B即fffffffeH,最高位为符号位,2在内存中的存储方式为0000,0000,0000,0000,0000,0000,0000,0010B即2H,最高位为符号位,2u在内存中存储的方式为0000,0000,0000,0000,0000,0000,0000,0010B即2H,最高位不再是符号位。所以-2<2是符号位的比较,即-2<2是正确的。-2<2u是有符号数和无符号数之间的比较,此时编译器会把有符号数自动转无符号数,所以-2=2。-2<2,是有符号数的比较,即2+(-2)=f f f f f f f eH+f f f f f f f e H=1FFFFFFFCH=-4补,最高位符号位溢出,所以证明被减数的符号是负号,即-2<2是正确的。.有符号数和无符号数的比较。系统会自动把有符号数转换成无符号数。fffffffeH=4294967294D<2D(是错误的)=2H(2)因为所有比int型小的数据类型(包括char,signed char,unsigned char,short,signed short,unsigned short)转换为int型。如果转换后的数据会超出int型所能表示的范围的话,则转换为unsigned int型;所以题中的c在和a比较时应该先转换成int型,再转换成unsigned int型,所以此时的c为1111 1111 1111 1111 1111 1111 1111 1111B(有符号数按最高位符号位进行扩位)即FFFFFFFFH,此时的a为1H,显然c大于a,所以第一次输出的是unsigned int is 0;同理当b和c比较时,c应该转换成int型,所以此时的c为1111 1111 1111 1111 1111 1111 1111 1111B即FFFFH=-2147483647D,b也应该转换成int型,所以此时的b为0000 0000 0000 0000 0000 0000 0000 0001B=1D,显然b>c,所以输出unsigned short is 1#include<stdio.h>Void main()Unsigned int a=1;Unsigned short b=1;Char c= -1;Int d;d=(a>c)?1:0;printf(“unsigned int is %dn”,d);d=(b>c)?1:0;printf(“unsigned int is %dn”,d);(3)由于在union共用体当中,int a 和char b4数据公用同一段内存地址,而此时a和b同时占用四个字节,所以当执行num.a = 0x12345678;同时b也会被赋值,b的内存示意图如下:b的值87654321b的地址b0b1b2b3由上图可知执行printf("0x%Xn", num.b2);会输出0x34。现在解释为什么会出现表中的情况对于数组来说,下标越小地址越小,下标越大地址越大,而a=0x12345678这个值中,1和2分别在最高位和次高位,它就会存储在下标大的b3中,以此类推,便可以得到表中的数据。这也证明了我的32位Ubuntu是小端存储(字数据的高字节存储在高地址中,而字数据的低字节则存储在低地址中)。(4)#include<stdio.h>void main() int a=2147483648;4个字节 int b=-2147483648; int c=-2147483649; 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 = 2147483648 的机器数是 1000 0000 0000 0000 0000 0000 0000 0000B int b = -2147483648 的机器数是 1000 0000 0000 0000 0000 0000 0000 0000B int c = 2147483649 的机器数是 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 到+2147483647 。而负数的补码是除符号位外各位取反最后加一而来。所以 int 类型所能表示的所有负数为: 0,000 0000 0000 0000 0000 0000 0000 0000B(-0D的补码) 到 1,111 1111 1111 1111 1111 1111 1111 1111B即 0 到-2147483647D 。而 32 位二进制数能表示的所有值为 2 的 32 次方个, 而从 -2147483647D 到+2147483647D 总共是 2 的 32 次 方减一个数,而少的这个数就是 1000 0000 0000 0000 0000 0000 0000 0000B (-0D 的补码),而任何数的原码都不能在转换成补码时成为这个数,我们人为的把他规定为 -2147483648 所以 int 类型的取值范围为 -2147483648 到+2147483647,所以题目中的 b 是正确的, 并且不会发 生 溢 出 。 而 题 目 中 的 a=2147483648 其 实 已 经 超 出 int 类 型 的 最 大 范 围 , 但 是 a=2147483648=2147483647+1=0,111 1111 1111 1111 1111 1111 1111 1111B+1B=1000 0000 0000 0000 0000 0000 0000 0000B= -2147483648 ,而-2147483648 又在 int 类型的取值范围内,所以也不会溢出 ,如果此时打印输出a的十进制就是 -2147483648 ,同理可 得 c = 2147483649=2147483647+2= -2147483647 ,也不会发生溢出现象。 对于题目中的 d,由于它是无符号短整型的变量,在 32 位机中占两个字节。所以 d 的取值范围为: 0 到 65535,而 65539 不在这个范围内,所以会报溢出警告。 对于题目中的 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=+6442450921D>>+32767D 所以 e 会报出溢出警告。5.Double双精度浮点数,按照IEEE-754标准,双精度浮点数有效数字到小数点后15位,x=23.001,可表示为23.00100000000001;y=24.001000000000001;31.001会表示成31.001000000000001,32.001会表示成32.001000000000005,于是就不相等了。结尾的那个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.001,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<-126 )exp= 0;frac= 0x400000>>(-x-127);else if(x<128 )exp=x+127 ;frac= 0;elseexp=255 ;frac= 0;u=exp<<23|frac;return u2f(u);2、实验心得了解了linux的基本操作。理解了编译执行,反编译的过程和操作步骤。理解了当计算机面对C语言时,计算机是如何表示和编译的。我们可以查看编译过程来了解计算机的思想。还需继续努力。实验项目名称:排序程序的编辑、编译和调试实验学时: 2 同组学生姓名: 无 实验地点: 实验日期: 实验成绩: 批改教师: 批改时间: 一、实验目的和要求熟悉开发环境、掌握开发和调试的基本过程以及工具。二、实验仪器和设备硬件环境:IA-32软件环境:Linux ubuntu14.04,C语言,gcc三、实验过程1、实验内容以下程序实现了排序和求和算法,程序源码如下图所示。请根据提供的图片输入源程序文件,并保存为相应的.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.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.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/./././i386-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-linux-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进行反汇编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 -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:继续运行五、实验思考题和实验心得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的出现减轻了开发人员的负担,他们可以在程序运行的时候单步跟踪自己的代码,或者通过断点暂时中止程序的执行。我们也能够随时察看变量和内存的当前状态,并监视关键的数据结构是如何影响代码运行。

    注意事项

    本文(计算机基础大作业完整版.doc)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开